diff -Nrc3pad gcc-3.3.3/gcc/objc/config-lang.in gcc-3.4.0/gcc/objc/config-lang.in *** gcc-3.3.3/gcc/objc/config-lang.in 2002-07-14 01:59:15.000000000 +0000 --- gcc-3.4.0/gcc/objc/config-lang.in 2003-08-20 10:50:20.000000000 +0000 *************** *** 1,20 **** # Top level configure fragment for GNU Objective-C ! # Copyright (C) 1997, 1998, 2000, 2001 Free Software Foundation, Inc. ! #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, 59 Temple Place - Suite 330, #Boston, MA 02111-1307, USA. --- 1,21 ---- # Top level configure fragment for GNU Objective-C ! # Copyright (C) 1997, 1998, 2000, 2001, 2002, 2003 ! # 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, 59 Temple Place - Suite 330, #Boston, MA 02111-1307, USA. *************** language="objc" *** 29,36 **** compilers="cc1obj\$(exeext)" ! stagestuff="" target_libs=target-libobjc ! gtfiles="\$(srcdir)/objc/objc-act.h \$(srcdir)/c-parse.in \$(srcdir)/c-tree.h \$(srcdir)/c-decl.c \$(srcdir)/c-objc-common.c \$(srcdir)/c-common.c \$(srcdir)/c-common.h \$(srcdir)/c-pragma.c \$(srcdir)/c-parse.in" --- 30,37 ---- compilers="cc1obj\$(exeext)" ! stagestuff="cc1obj\$(exeext)" target_libs=target-libobjc ! gtfiles="\$(srcdir)/objc/objc-act.h \$(srcdir)/c-parse.in \$(srcdir)/c-tree.h \$(srcdir)/c-decl.c \$(srcdir)/c-objc-common.c \$(srcdir)/c-common.c \$(srcdir)/c-common.h \$(srcdir)/c-pragma.c \$(srcdir)/objc/objc-act.c" diff -Nrc3pad gcc-3.3.3/gcc/objc/.cvsignore gcc-3.4.0/gcc/objc/.cvsignore *** gcc-3.3.3/gcc/objc/.cvsignore 2000-07-14 05:41:33.000000000 +0000 --- gcc-3.4.0/gcc/objc/.cvsignore 1970-01-01 00:00:00.000000000 +0000 *************** *** 1,2 **** - objc-parse.y - objc-parse.c --- 0 ---- diff -Nrc3pad gcc-3.3.3/gcc/objc/lang-options.h gcc-3.4.0/gcc/objc/lang-options.h *** gcc-3.3.3/gcc/objc/lang-options.h 2001-05-26 05:28:26.000000000 +0000 --- gcc-3.4.0/gcc/objc/lang-options.h 1970-01-01 00:00:00.000000000 +0000 *************** *** 1,43 **** - /* Switch definitions for the GNU compiler for the Objective-C language. - Copyright (C) 2000 Free Software Foundation, Inc. - - 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, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - - /* This is the contribution to the `documented_lang_options' array in - toplev.c for Objective-C. */ - - DEFINE_LANG_NAME ("Objective C") - - { "-gen-decls", - N_("Dump decls to a .decl file") }, - { "-fgnu-runtime", - N_("Generate code for GNU runtime environment") }, - { "-fno-gnu-runtime", "" }, - { "-fnext-runtime", - N_("Generate code for NeXT runtime environment") }, - { "-fno-next-runtime", "" }, - { "-Wselector", - N_("Warn if a selector has multiple methods") }, - { "-Wno-selector", "" }, - { "-Wprotocol", "" }, - { "-Wno-protocol", - N_("Do not warn if inherited methods are unimplemented") }, - { "-print-objc-runtime-info", - N_("Generate C header of platform specific features") }, - { "-fconstant-string-class", - N_("Specify the name of the class for constant strings") }, --- 0 ---- diff -Nrc3pad gcc-3.3.3/gcc/objc/lang-specs.h gcc-3.4.0/gcc/objc/lang-specs.h *** gcc-3.3.3/gcc/objc/lang-specs.h 2003-03-02 10:17:15.000000000 +0000 --- gcc-3.4.0/gcc/objc/lang-specs.h 2003-10-23 21:20:54.000000000 +0000 *************** *** 1,20 **** /* Definitions for specs for Objective-C. ! Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,21 ---- /* Definitions for specs for Objective-C. ! Copyright (C) 1998, 1999, 2002, 2002, 2003 ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ *************** Boston, MA 02111-1307, USA. */ *** 23,41 **** {".m", "@objective-c", 0}, {"@objective-c", - /* cc1obj has an integrated ISO C preprocessor. We should invoke the - external preprocessor if -save-temps or -traditional is given. */ "%{E|M|MM:%(trad_capable_cpp)\ -lang-objc %(cpp_options) %(cpp_debug_options)}\ %{!E:%{!M:%{!MM:\ %{traditional|ftraditional|traditional-cpp:\ %eGNU Objective C no longer supports traditional compilation}\ ! %{save-temps|no-integrated-cpp:cc1obj -E %(cpp_options) %{save-temps:%b.mi} %{!save-temps:%g.mi} \n\ ! cc1obj -fpreprocessed %{save-temps:%b.mi} %{!save-temps:%g.mi} %(cc1_options) %{gen-decls}}\ %{!save-temps:%{!no-integrated-cpp:\ ! cc1obj %(cpp_unique_options) %(cc1_options) %{gen-decls}}}\ %{!fsyntax-only:%(invoke_as)}}}}", 0}, {".mi", "@objc-cpp-output", 0}, {"@objc-cpp-output", ! "%{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %{gen-decls}\ %{!fsyntax-only:%(invoke_as)}}}}", 0}, --- 24,54 ---- {".m", "@objective-c", 0}, {"@objective-c", "%{E|M|MM:%(trad_capable_cpp)\ -lang-objc %(cpp_options) %(cpp_debug_options)}\ %{!E:%{!M:%{!MM:\ %{traditional|ftraditional|traditional-cpp:\ %eGNU Objective C no longer supports traditional compilation}\ ! %{save-temps|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps:%b.mi} %{!save-temps:%g.mi} \n\ ! cc1obj -fpreprocessed %{save-temps:%b.mi} %{!save-temps:%g.mi} %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}\ %{!save-temps:%{!no-integrated-cpp:\ ! cc1obj %(cpp_unique_options) %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}}\ %{!fsyntax-only:%(invoke_as)}}}}", 0}, {".mi", "@objc-cpp-output", 0}, {"@objc-cpp-output", ! "%{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\ %{!fsyntax-only:%(invoke_as)}}}}", 0}, + {"@objective-c-header", + "%{E|M|MM:cc1obj -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp}\ + %(cpp_options) %(cpp_debug_options)}\ + %{!E:%{!M:%{!MM:\ + %{traditional|ftraditional|traditional-cpp:\ + %eGNU Objective C no longer supports traditional compilation}\ + %{save-temps|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps:%b.mi} %{!save-temps:%g.mi} \n\ + cc1obj -fpreprocessed %b.mi %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\ + -o %g.s %{!o*:--output-pch=%i.gch}\ + %W{o*:--output-pch=%*}%V}\ + %{!save-temps:%{!no-integrated-cpp:\ + cc1obj %(cpp_unique_options) %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\ + -o %g.s %{!o*:--output-pch=%i.gch}\ + %W{o*:--output-pch=%*}%V}}}}}", 0}, diff -Nrc3pad gcc-3.3.3/gcc/objc/Make-lang.in gcc-3.4.0/gcc/objc/Make-lang.in *** gcc-3.3.3/gcc/objc/Make-lang.in 2002-08-08 09:10:39.000000000 +0000 --- gcc-3.4.0/gcc/objc/Make-lang.in 2004-02-06 00:55:53.000000000 +0000 *************** *** 1,20 **** # Top level -*- makefile -*- fragment for GNU Objective-C ! # Copyright (C) 1997, 1998, 2000, 2001 Free Software Foundation, Inc. ! #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, 59 Temple Place - Suite 330, #Boston, MA 02111-1307, USA. --- 1,21 ---- # Top level -*- makefile -*- fragment for GNU Objective-C ! # Copyright (C) 1997, 1998, 2000, 2001, 2002, 2003 ! # 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, 59 Temple Place - Suite 330, #Boston, MA 02111-1307, USA. *************** *** 22,31 **** # Each language makefile fragment must provide the following targets: # # foo.all.build, foo.all.cross, foo.start.encap, foo.rest.encap, ! # foo.info, foo.dvi, ! # foo.install-normal, foo.install-common, foo.install-info, foo.install-man, # foo.uninstall, ! # foo.mostlyclean, foo.clean, foo.distclean, foo.extraclean, # foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4 # # where `foo' is the name of the language. --- 23,31 ---- # Each language makefile fragment must provide the following targets: # # foo.all.build, foo.all.cross, foo.start.encap, foo.rest.encap, ! # foo.install-normal, foo.install-common, foo.install-man, # foo.uninstall, ! # foo.mostlyclean, foo.clean, foo.distclean, # foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4 # # where `foo' is the name of the language. *************** OBJECTIVE-C objective-c: cc1obj$(exeext) *** 46,103 **** # Use maximal warnings for this front end. objc-warn = $(STRICT_WARN) # Language-specific object files for Objective C. ! OBJC_OBJS = objc-lang.o objc-parse.o objc-act.o $(C_AND_OBJC_OBJS) ! cc1obj$(exeext): $(OBJC_OBJS) $(BACKEND) $(LIBDEPS) ! $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(OBJC_OBJS) $(BACKEND) $(LIBS) # Objective C language specific files. ! objc-lang.o : $(srcdir)/objc/objc-lang.c \ ! $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(srcdir)/c-tree.h \ ! $(srcdir)/c-common.h $(srcdir)/toplev.h $(srcdir)/objc/objc-act.h \ ! $(srcdir)/langhooks.h $(srcdir)/langhooks-def.h ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -I$(srcdir)/objc \ ! -c $(srcdir)/objc/objc-lang.c $(OUTPUT_OPTION) ! objc-parse.o : $(srcdir)/objc/objc-parse.c \ ! $(CONFIG_H) $(TREE_H) $(C_COMMON_H) $(srcdir)/toplev.h $(srcdir)/ggc.h \ ! $(srcdir)/c-pragma.h $(srcdir)/c-tree.h \ ! $(srcdir)/input.h $(srcdir)/flags.h $(srcdir)/output.h \ ! $(srcdir)/objc/objc-act.h $(SYSTEM_H) ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -I$(srcdir)/objc \ ! -c $(srcdir)/objc/objc-parse.c $(OUTPUT_OPTION) ! po-generated: $(srcdir)/objc/objc-parse.c ! $(srcdir)/objc/objc-parse.c : $(srcdir)/objc/objc-parse.y ! cd $(srcdir)/objc; \ ! if $(BISON) $(BISONFLAGS) -o op$$$$.c objc-parse.y ; then \ ! test -f op$$$$.output && mv -f op$$$$.output objc-parse.output ; \ ! mv -f op$$$$.c objc-parse.c ; \ ! else \ ! rm -f op$$$$.* ; \ ! false ; \ ! fi ! $(srcdir)/objc/objc-parse.y: $(srcdir)/c-parse.in ! echo '/*WARNING: This file is automatically generated!*/' >tmp-objc-prs.y ! sed -e "/^ifc$$/,/^end ifc$$/d" \ ! -e "/^ifobjc$$/d" -e "/^end ifobjc$$/d" \ ! $(srcdir)/c-parse.in >>tmp-objc-prs.y ! $(SHELL) $(srcdir)/move-if-change tmp-objc-prs.y $(srcdir)/objc/objc-parse.y ! objc-act.o : $(srcdir)/objc/objc-act.c \ ! $(CONFIG_H) $(TREE_H) $(RTL_H) $(SYSTEM_H) $(EXPR_H) $(TARGET_H) \ ! $(C_COMMON_H) $(srcdir)/c-tree.h $(srcdir)/diagnostic.h \ ! $(srcdir)/toplev.h $(srcdir)/flags.h $(srcdir)/objc/objc-act.h \ ! $(srcdir)/input.h $(srcdir)/function.h $(srcdir)/output.h $(srcdir)/debug.h \ ! $(srcdir)/langhooks.h $(LANGHOOKS_DEF_H) gtype-objc.h ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -I$(srcdir)/objc \ ! -c $(srcdir)/objc/objc-act.c gtype-objc.h : s-gtype ; @true # # Build hooks: --- 46,91 ---- # Use maximal warnings for this front end. objc-warn = $(STRICT_WARN) + # Bison-1.75 output yields (harmless) -Wtraditional warnings + objc/objc-parse.o-warn = -Wno-error # Language-specific object files for Objective C. ! OBJC_OBJS = objc/objc-lang.o objc/objc-parse.o objc/objc-act.o ! cc1obj$(exeext): $(OBJC_OBJS) $(C_AND_OBJC_OBJS) $(BACKEND) $(LIBDEPS) ! $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \ ! $(OBJC_OBJS) $(C_AND_OBJC_OBJS) $(BACKEND) $(LIBS) # Objective C language specific files. ! objc/objc-lang.o : objc/objc-lang.c \ ! $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) c-tree.h \ ! c-common.h toplev.h objc/objc-act.h langhooks.h $(LANGHOOKS_DEF_H) ! objc/objc-parse.o : objc/objc-parse.c \ ! $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(C_TREE_H) \ ! toplev.h $(GGC_H) c-pragma.h input.h flags.h output.h objc/objc-act.h ! objc/objc-act.o : objc/objc-act.c \ ! $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) $(TM_P_H) \ ! $(EXPR_H) $(TARGET_H) $(C_TREE_H) diagnostic.h toplev.h flags.h \ ! objc/objc-act.h input.h function.h output.h debug.h langhooks.h \ ! $(LANGHOOKS_DEF_H) gt-objc-objc-act.h gtype-objc.h ! objc.srcextra: objc/objc-parse.c objc/objc-parse.y ! -cp -p $^ $(srcdir)/objc ! ! objc/objc-parse.c : objc/objc-parse.y ! -$(BISON) $(BISONFLAGS) -o $@ $< ! objc/objc-parse.y: c-parse.in ! echo '/*WARNING: This file is automatically generated!*/' >tmp-objc-prs.y ! sed -e "/^@@ifc.*/,/^@@end_ifc.*/d" \ ! -e "/^@@ifobjc.*/d" -e "/^@@end_ifobjc.*/d" < $< >>tmp-objc-prs.y ! $(SHELL) $(srcdir)/move-if-change tmp-objc-prs.y $@ gtype-objc.h : s-gtype ; @true + gt-objc-objc-act.h : s-gtype ; @true # # Build hooks: *************** objc.all.build: *** 106,115 **** objc.all.cross: objc.start.encap: objc.rest.encap: - objc.info: ! objc.dvi: ! objc.generated-manpages: # # Install hooks: --- 94,109 ---- objc.all.cross: objc.start.encap: objc.rest.encap: objc.info: ! objc.man: ! objc.srcinfo: ! objc.srcman: ! ! objc.tags: force ! cd $(srcdir)/objc; etags -o TAGS.sub *.y *.c *.h; \ ! etags --include TAGS.sub --include ../TAGS.sub ! ! lang_checks += check-objc # # Install hooks: *************** objc.install-normal: *** 119,126 **** objc.install-common: - objc.install-info: - objc.install-man: objc.uninstall: --- 113,118 ---- *************** objc.uninstall: *** 131,136 **** --- 123,129 ---- objc.mostlyclean: -rm -f tmp-objc-prs.y -rm -f objc/*$(objext) objc/xforward objc/fflags + -rm -f objc/objc-parse.y objc/objc-parse.c objc/objc-parse.output -rm -f objc/*$(coverageexts) objc.clean: objc.mostlyclean -rm -rf objc-headers *************** objc.distclean: *** 138,160 **** -rm -f objc/Makefile objc/Make-host objc/Make-target -rm -f objc/config.status objc/config.cache -rm -f objc-parse.output - objc.extraclean: objc.maintainer-clean: ! -rm -f $(srcdir)/objc/objc-parse.y ! -rm -f $(srcdir)/objc/objc-parse.c $(srcdir)/objc/objc-parse.output # # Stage hooks: objc.stage1: stage1-start -mv objc/*$(objext) stage1/objc - -mv cc1obj$(exeext) stage1 objc.stage2: stage2-start -mv objc/*$(objext) stage2/objc - -mv cc1obj$(exeext) stage2 objc.stage3: stage3-start -mv objc/*$(objext) stage3/objc - -mv cc1obj$(exeext) stage3 objc.stage4: stage4-start -mv objc/*$(objext) stage4/objc ! -mv cc1obj$(exeext) stage4 --- 131,151 ---- -rm -f objc/Makefile objc/Make-host objc/Make-target -rm -f objc/config.status objc/config.cache -rm -f objc-parse.output objc.maintainer-clean: ! -rm -f $(srcdir)/objc/objc-parse.y $(srcdir)/objc/objc-parse.c # # Stage hooks: objc.stage1: stage1-start -mv objc/*$(objext) stage1/objc objc.stage2: stage2-start -mv objc/*$(objext) stage2/objc objc.stage3: stage3-start -mv objc/*$(objext) stage3/objc objc.stage4: stage4-start -mv objc/*$(objext) stage4/objc ! objc.stageprofile: stageprofile-start ! -mv objc/*$(objext) stageprofile/objc ! objc.stagefeedback: stagefeedback-start ! -mv objc/*$(objext) stagefeedback/objc diff -Nrc3pad gcc-3.3.3/gcc/objc/objc-act.c gcc-3.4.0/gcc/objc/objc-act.c *** gcc-3.3.3/gcc/objc/objc-act.c 2004-01-24 14:21:15.000000000 +0000 --- gcc-3.4.0/gcc/objc/objc-act.c 2004-01-18 01:16:40.000000000 +0000 *************** *** 1,22 **** /* Implement classes and message passing for Objective C. ! Copyright (C) 1992, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002 ! Free Software Foundation, Inc. Contributed by Steve Naroff. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,22 ---- /* Implement classes and message passing for Objective C. ! Copyright (C) 1992, 1993, 1994, 1995, 1997, 1998, 1999, 2000, ! 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Steve Naroff. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ *************** Boston, MA 02111-1307, USA. */ *** 41,48 **** --- 41,51 ---- #include "config.h" #include "system.h" + #include "coretypes.h" + #include "tm.h" #include "tree.h" #include "rtl.h" + #include "tm_p.h" #include "expr.h" #include "c-tree.h" #include "c-common.h" *************** Boston, MA 02111-1307, USA. */ *** 54,62 **** --- 57,69 ---- #include "output.h" #include "toplev.h" #include "ggc.h" + #include "varray.h" #include "debug.h" #include "target.h" #include "diagnostic.h" + #include "cgraph.h" + + #define OBJC_VOID_AT_END build_tree_list (NULL_TREE, void_type_node) /* This is the default way of generating a method name. */ /* I am not sure it is really correct. *************** Boston, MA 02111-1307, USA. */ *** 85,103 **** #define OBJC_FORWARDING_MIN_OFFSET 0 #endif - /* Set up for use of obstacks. */ #include "obstack.h" /* This obstack is used to accumulate the encoding of a data type. */ static struct obstack util_obstack; - /* This points to the beginning of obstack contents, - so we can free the whole contents. */ - char *util_firstobj; ! /* for encode_method_def */ ! #include "rtl.h" /* The version identifies which language generation and runtime the module (file) was compiled for, and is recorded in the --- 92,107 ---- #define OBJC_FORWARDING_MIN_OFFSET 0 #endif /* Set up for use of obstacks. */ #include "obstack.h" /* This obstack is used to accumulate the encoding of a data type. */ static struct obstack util_obstack; ! /* This points to the beginning of obstack contents, so we can free ! the whole contents. */ ! char *util_firstobj; /* The version identifies which language generation and runtime the module (file) was compiled for, and is recorded in the *************** char *util_firstobj; *** 114,182 **** /* Used by compile_file. */ ! static void init_objc PARAMS ((void)); ! static void finish_objc PARAMS ((void)); /* Code generation. */ ! static void synth_module_prologue PARAMS ((void)); ! static tree build_constructor PARAMS ((tree, tree)); ! static rtx build_module_descriptor PARAMS ((void)); ! static tree init_module_descriptor PARAMS ((tree)); ! static tree build_objc_method_call PARAMS ((int, tree, tree, ! tree, tree, tree)); ! static void generate_strings PARAMS ((void)); ! static tree get_proto_encoding PARAMS ((tree)); ! static void build_selector_translation_table PARAMS ((void)); ! static tree objc_add_static_instance PARAMS ((tree, tree)); ! static tree build_ivar_template PARAMS ((void)); ! static tree build_method_template PARAMS ((void)); ! static tree build_private_template PARAMS ((tree)); ! static void build_class_template PARAMS ((void)); ! static void build_selector_template PARAMS ((void)); ! static void build_category_template PARAMS ((void)); ! static tree build_super_template PARAMS ((void)); ! static tree build_category_initializer PARAMS ((tree, tree, tree, ! tree, tree, tree)); ! static tree build_protocol_initializer PARAMS ((tree, tree, tree, ! tree, tree)); ! static void synth_forward_declarations PARAMS ((void)); ! static void generate_ivar_lists PARAMS ((void)); ! static void generate_dispatch_tables PARAMS ((void)); ! static void generate_shared_structures PARAMS ((void)); ! static tree generate_protocol_list PARAMS ((tree)); ! static void generate_forward_declaration_to_string_table PARAMS ((void)); ! static void build_protocol_reference PARAMS ((tree)); ! static tree build_keyword_selector PARAMS ((tree)); ! static tree synth_id_with_class_suffix PARAMS ((const char *, tree)); ! static void generate_static_references PARAMS ((void)); ! static int check_methods_accessible PARAMS ((tree, tree, ! int)); ! static void encode_aggregate_within PARAMS ((tree, int, int, ! int, int)); ! static const char *objc_demangle PARAMS ((const char *)); ! static void objc_expand_function_end PARAMS ((void)); /* Hash tables to manage the global pool of method prototypes. */ hash *nst_method_hash_list = 0; hash *cls_method_hash_list = 0; ! static size_t hash_func PARAMS ((tree)); ! static void hash_init PARAMS ((void)); ! static void hash_enter PARAMS ((hash *, tree)); ! static hash hash_lookup PARAMS ((hash *, tree)); ! static void hash_add_attr PARAMS ((hash, tree)); ! static tree lookup_method PARAMS ((tree, tree)); ! static tree lookup_instance_method_static PARAMS ((tree, tree)); ! static tree lookup_class_method_static PARAMS ((tree, tree)); ! static tree add_class PARAMS ((tree)); ! static void add_category PARAMS ((tree, tree)); enum string_section { --- 118,193 ---- /* Used by compile_file. */ ! static void init_objc (void); ! static void finish_objc (void); /* Code generation. */ ! static void synth_module_prologue (void); ! static tree objc_build_constructor (tree, tree); ! static rtx build_module_descriptor (void); ! static tree init_module_descriptor (tree); ! static tree build_objc_method_call (int, tree, tree, tree, tree); ! static void generate_strings (void); ! static tree get_proto_encoding (tree); ! static void build_selector_translation_table (void); ! static tree objc_add_static_instance (tree, tree); ! static void build_objc_exception_stuff (void); ! static tree objc_declare_variable (enum rid, tree, tree, tree); ! static tree objc_enter_block (void); ! static tree objc_exit_block (void); ! static void objc_build_try_enter_fragment (void); ! static void objc_build_try_exit_fragment (void); ! static void objc_build_extract_fragment (void); ! static tree objc_build_extract_expr (void); ! static tree build_ivar_template (void); ! static tree build_method_template (void); ! static tree build_private_template (tree); ! static void build_class_template (void); ! static void build_selector_template (void); ! static void build_category_template (void); ! static tree lookup_method_in_hash_lists (tree, int); ! static void build_super_template (void); ! static tree build_category_initializer (tree, tree, tree, tree, tree, tree); ! static tree build_protocol_initializer (tree, tree, tree, tree, tree); ! static void synth_forward_declarations (void); ! static int ivar_list_length (tree); ! static tree get_class_ivars (tree, int); ! static void generate_ivar_lists (void); ! static void generate_dispatch_tables (void); ! static void generate_shared_structures (void); ! static tree generate_protocol_list (tree); ! static void generate_forward_declaration_to_string_table (void); ! static void build_protocol_reference (tree); ! static tree build_keyword_selector (tree); ! static tree synth_id_with_class_suffix (const char *, tree); ! static void generate_static_references (void); ! static int check_methods_accessible (tree, tree, int); ! static void encode_aggregate_within (tree, int, int, int, int); ! static const char *objc_demangle (const char *); ! static void objc_expand_function_end (void); /* Hash tables to manage the global pool of method prototypes. */ hash *nst_method_hash_list = 0; hash *cls_method_hash_list = 0; ! static size_t hash_func (tree); ! static void hash_init (void); ! static void hash_enter (hash *, tree); ! static hash hash_lookup (hash *, tree); ! static void hash_add_attr (hash, tree); ! static tree lookup_method (tree, tree); ! static tree lookup_method_static (tree, tree, int); ! static void add_method_to_hash_list (hash *, tree); ! static tree add_class (tree); ! static void add_category (tree, tree); ! static inline tree lookup_category (tree, tree); enum string_section { *************** enum string_section *** 185,296 **** meth_var_types /* method and variable type descriptors */ }; ! static tree add_objc_string PARAMS ((tree, ! enum string_section)); ! static tree get_objc_string_decl PARAMS ((tree, ! enum string_section)); ! static tree build_objc_string_decl PARAMS ((enum string_section)); ! static tree build_selector_reference_decl PARAMS ((void)); /* Protocol additions. */ ! static tree add_protocol PARAMS ((tree)); ! static tree lookup_protocol PARAMS ((tree)); ! static void check_protocol_recursively PARAMS ((tree, tree)); ! static tree lookup_and_install_protocols PARAMS ((tree)); /* Type encoding. */ ! static void encode_type_qualifiers PARAMS ((tree)); ! static void encode_pointer PARAMS ((tree, int, int)); ! static void encode_array PARAMS ((tree, int, int)); ! static void encode_aggregate PARAMS ((tree, int, int)); ! static void encode_bitfield PARAMS ((int)); ! static void encode_type PARAMS ((tree, int, int)); ! static void encode_field_decl PARAMS ((tree, int, int)); ! static void really_start_method PARAMS ((tree, tree)); ! static int comp_method_with_proto PARAMS ((tree, tree)); ! static int comp_proto_with_proto PARAMS ((tree, tree)); ! static tree get_arg_type_list PARAMS ((tree, int, int)); ! static tree expr_last PARAMS ((tree)); /* Utilities for debugging and error diagnostics. */ ! static void warn_with_method PARAMS ((const char *, int, tree)); ! static void error_with_ivar PARAMS ((const char *, tree, tree)); ! static char *gen_method_decl PARAMS ((tree, char *)); ! static char *gen_declaration PARAMS ((tree, char *)); ! static void gen_declaration_1 PARAMS ((tree, char *)); ! static char *gen_declarator PARAMS ((tree, char *, ! const char *)); ! static int is_complex_decl PARAMS ((tree)); ! static void adorn_decl PARAMS ((tree, char *)); ! static void dump_interface PARAMS ((FILE *, tree)); /* Everything else. */ ! static tree define_decl PARAMS ((tree, tree)); ! static tree lookup_method_in_protocol_list PARAMS ((tree, tree, int)); ! static tree lookup_protocol_in_reflist PARAMS ((tree, tree)); ! static tree create_builtin_decl PARAMS ((enum tree_code, ! tree, const char *)); ! static void setup_string_decl PARAMS ((void)); ! static void build_string_class_template PARAMS ((void)); ! static tree my_build_string PARAMS ((int, const char *)); ! static void build_objc_symtab_template PARAMS ((void)); ! static tree init_def_list PARAMS ((tree)); ! static tree init_objc_symtab PARAMS ((tree)); ! static void forward_declare_categories PARAMS ((void)); ! static void generate_objc_symtab_decl PARAMS ((void)); ! static tree build_selector PARAMS ((tree)); ! static tree build_typed_selector_reference PARAMS ((tree, tree)); ! static tree build_selector_reference PARAMS ((tree)); ! static tree build_class_reference_decl PARAMS ((void)); ! static void add_class_reference PARAMS ((tree)); ! static tree build_protocol_template PARAMS ((void)); ! static tree build_descriptor_table_initializer PARAMS ((tree, tree)); ! static tree build_method_prototype_list_template PARAMS ((tree, int)); ! static tree build_method_prototype_template PARAMS ((void)); ! static int forwarding_offset PARAMS ((tree)); ! static tree encode_method_prototype PARAMS ((tree, tree)); ! static tree generate_descriptor_table PARAMS ((tree, const char *, ! int, tree, tree)); ! static void generate_method_descriptors PARAMS ((tree)); ! static tree build_tmp_function_decl PARAMS ((void)); ! static void hack_method_prototype PARAMS ((tree, tree)); ! static void generate_protocol_references PARAMS ((tree)); ! static void generate_protocols PARAMS ((void)); ! static void check_ivars PARAMS ((tree, tree)); ! static tree build_ivar_list_template PARAMS ((tree, int)); ! static tree build_method_list_template PARAMS ((tree, int)); ! static tree build_ivar_list_initializer PARAMS ((tree, tree)); ! static tree generate_ivars_list PARAMS ((tree, const char *, ! int, tree)); ! static tree build_dispatch_table_initializer PARAMS ((tree, tree)); ! static tree generate_dispatch_table PARAMS ((tree, const char *, ! int, tree)); ! static tree build_shared_structure_initializer PARAMS ((tree, tree, tree, tree, ! tree, int, tree, tree, ! tree)); ! static void generate_category PARAMS ((tree)); ! static int is_objc_type_qualifier PARAMS ((tree)); ! static tree adjust_type_for_id_default PARAMS ((tree)); ! static tree check_duplicates PARAMS ((hash)); ! static tree receiver_is_class_object PARAMS ((tree)); ! static int check_methods PARAMS ((tree, tree, int)); ! static int conforms_to_protocol PARAMS ((tree, tree)); ! static void check_protocol PARAMS ((tree, const char *, ! const char *)); ! static void check_protocols PARAMS ((tree, const char *, ! const char *)); ! static tree encode_method_def PARAMS ((tree)); ! static void gen_declspecs PARAMS ((tree, char *, int)); ! static void generate_classref_translation_entry PARAMS ((tree)); ! static void handle_class_ref PARAMS ((tree)); ! static void generate_struct_by_value_array PARAMS ((void)) ATTRIBUTE_NORETURN; ! static void encode_complete_bitfield PARAMS ((int, tree, int)); /*** Private Interface (data) ***/ --- 196,300 ---- meth_var_types /* method and variable type descriptors */ }; ! static tree add_objc_string (tree, enum string_section); ! static tree get_objc_string_decl (tree, enum string_section); ! static tree build_objc_string_decl (enum string_section); ! static tree build_selector_reference_decl (void); /* Protocol additions. */ ! static tree add_protocol (tree); ! static tree lookup_protocol (tree); ! static void check_protocol_recursively (tree, tree); ! static tree lookup_and_install_protocols (tree); /* Type encoding. */ ! static void encode_type_qualifiers (tree); ! static void encode_pointer (tree, int, int); ! static void encode_array (tree, int, int); ! static void encode_aggregate (tree, int, int); ! static void encode_next_bitfield (int); ! static void encode_gnu_bitfield (int, tree, int); ! static void encode_type (tree, int, int); ! static void encode_field_decl (tree, int, int); ! static void really_start_method (tree, tree); ! static int comp_method_with_proto (tree, tree); ! static int objc_types_are_equivalent (tree, tree); ! static int comp_proto_with_proto (tree, tree); ! static tree get_arg_type_list (tree, int, int); ! static tree objc_expr_last (tree); ! static void synth_self_and_ucmd_args (void); /* Utilities for debugging and error diagnostics. */ ! static void warn_with_method (const char *, int, tree); ! static void error_with_ivar (const char *, tree, tree); ! static char *gen_method_decl (tree, char *); ! static char *gen_declaration (tree, char *); ! static void gen_declaration_1 (tree, char *); ! static char *gen_declarator (tree, char *, const char *); ! static int is_complex_decl (tree); ! static void adorn_decl (tree, char *); ! static void dump_interface (FILE *, tree); /* Everything else. */ ! static tree define_decl (tree, tree); ! static tree lookup_method_in_protocol_list (tree, tree, int); ! static tree lookup_protocol_in_reflist (tree, tree); ! static tree create_builtin_decl (enum tree_code, tree, const char *); ! static void setup_string_decl (void); ! static int check_string_class_template (void); ! static tree my_build_string (int, const char *); ! static void build_objc_symtab_template (void); ! static tree init_def_list (tree); ! static tree init_objc_symtab (tree); ! static tree build_metadata_decl (const char *, tree); ! static void forward_declare_categories (void); ! static void generate_objc_symtab_decl (void); ! static tree build_selector (tree); ! static tree build_typed_selector_reference (tree, tree); ! static tree build_selector_reference (tree); ! static tree build_class_reference_decl (void); ! static void add_class_reference (tree); ! static tree build_protocol_template (void); ! static tree build_descriptor_table_initializer (tree, tree); ! static tree build_method_prototype_list_template (tree, int); ! static tree build_method_prototype_template (void); ! static tree objc_method_parm_type (tree); ! static int objc_encoded_type_size (tree); ! static tree encode_method_prototype (tree); ! static tree generate_descriptor_table (tree, const char *, int, tree, tree); ! static void generate_method_descriptors (tree); ! static void generate_protocol_references (tree); ! static void generate_protocols (void); ! static void check_ivars (tree, tree); ! static tree build_ivar_list_template (tree, int); ! static tree build_method_list_template (tree, int); ! static tree build_ivar_list_initializer (tree, tree); ! static tree generate_ivars_list (tree, const char *, int, tree); ! static tree build_dispatch_table_initializer (tree, tree); ! static tree generate_dispatch_table (tree, const char *, int, tree); ! static tree build_shared_structure_initializer (tree, tree, tree, tree, ! tree, int, tree, tree, tree); ! static void generate_category (tree); ! static int is_objc_type_qualifier (tree); ! static tree adjust_type_for_id_default (tree); ! static tree check_duplicates (hash, int, int); ! static tree receiver_is_class_object (tree, int, int); ! static int check_methods (tree, tree, int); ! static int conforms_to_protocol (tree, tree); ! static void check_protocol (tree, const char *, const char *); ! static void check_protocols (tree, const char *, const char *); ! static void gen_declspecs (tree, char *, int); ! static void generate_classref_translation_entry (tree); ! static void handle_class_ref (tree); ! static void generate_struct_by_value_array (void) ATTRIBUTE_NORETURN; ! static void mark_referenced_methods (void); ! static void generate_objc_image_info (void); /*** Private Interface (data) ***/ *************** static void encode_complete_bitfield PA *** 319,325 **** /* Note that the string object global name is only needed for the NeXT runtime. */ ! #define STRING_OBJECT_GLOBAL_NAME "_NSConstantStringClassReference" #define PROTOCOL_OBJECT_CLASS_NAME "Protocol" --- 323,329 ---- /* Note that the string object global name is only needed for the NeXT runtime. */ ! #define STRING_OBJECT_GLOBAL_FORMAT "_%sClassReference" #define PROTOCOL_OBJECT_CLASS_NAME "Protocol" *************** static const char *TAG_GETCLASS; *** 327,345 **** static const char *TAG_GETMETACLASS; static const char *TAG_MSGSEND; static const char *TAG_MSGSENDSUPER; static const char *TAG_EXECCLASS; static const char *default_constant_string_class_name; /* The OCTI_... enumeration itself is in objc/objc-act.h. */ tree objc_global_trees[OCTI_MAX]; ! static void handle_impent PARAMS ((struct imp_entry *)); struct imp_entry *imp_list = 0; int imp_count = 0; /* `@implementation' */ int cat_count = 0; /* `@category' */ ! static int method_slot = 0; /* Used by start_method_def, */ #define BUFSIZE 1024 --- 331,401 ---- static const char *TAG_GETMETACLASS; static const char *TAG_MSGSEND; static const char *TAG_MSGSENDSUPER; + /* The NeXT Objective-C messenger may have two extra entry points, for use + when returning a structure. */ + static const char *TAG_MSGSEND_STRET; + static const char *TAG_MSGSENDSUPER_STRET; static const char *TAG_EXECCLASS; static const char *default_constant_string_class_name; + /* Runtime metadata flags. */ + #define CLS_FACTORY 0x0001L + #define CLS_META 0x0002L + + #define OBJC_MODIFIER_STATIC 0x00000001 + #define OBJC_MODIFIER_FINAL 0x00000002 + #define OBJC_MODIFIER_PUBLIC 0x00000004 + #define OBJC_MODIFIER_PRIVATE 0x00000008 + #define OBJC_MODIFIER_PROTECTED 0x00000010 + #define OBJC_MODIFIER_NATIVE 0x00000020 + #define OBJC_MODIFIER_SYNCHRONIZED 0x00000040 + #define OBJC_MODIFIER_ABSTRACT 0x00000080 + #define OBJC_MODIFIER_VOLATILE 0x00000100 + #define OBJC_MODIFIER_TRANSIENT 0x00000200 + #define OBJC_MODIFIER_NONE_SPECIFIED 0x80000000 + + #define TAG_MSGSEND_NONNIL "objc_msgSendNonNil" + #define TAG_MSGSEND_NONNIL_STRET "objc_msgSendNonNil_stret" + #define TAG_EXCEPTIONEXTRACT "objc_exception_extract" + #define TAG_EXCEPTIONTRYENTER "objc_exception_try_enter" + #define TAG_EXCEPTIONTRYEXIT "objc_exception_try_exit" + #define TAG_EXCEPTIONMATCH "objc_exception_match" + #define TAG_EXCEPTIONTHROW "objc_exception_throw" + #define TAG_SYNCENTER "objc_sync_enter" + #define TAG_SYNCEXIT "objc_sync_exit" + #define TAG_SETJMP "_setjmp" + #define TAG_RETURN_STRUCT "objc_return_struct" + + #define UTAG_EXCDATA "_objc_exception_data" + #define UTAG_EXCDATA_VAR "_stackExceptionData" + #define UTAG_CAUGHTEXC_VAR "_caughtException" + #define UTAG_RETHROWEXC_VAR "_rethrowException" + #define UTAG_EVALONCE_VAR "_eval_once" + + struct val_stack { + long val; + struct val_stack *next; + }; + static struct val_stack *catch_count_stack, *exc_binding_stack; + + /* useful for debugging */ + static int if_nesting_count; + static int blk_nesting_count; + + static void val_stack_push (struct val_stack **, long); + static void val_stack_pop (struct val_stack **); + /* The OCTI_... enumeration itself is in objc/objc-act.h. */ tree objc_global_trees[OCTI_MAX]; ! static void handle_impent (struct imp_entry *); struct imp_entry *imp_list = 0; int imp_count = 0; /* `@implementation' */ int cat_count = 0; /* `@category' */ ! /* Use to generate method labels. */ ! static int method_slot = 0; #define BUFSIZE 1024 *************** static int generating_instance_variables *** 369,375 **** the transition point between the two possibilities. */ static void ! generate_struct_by_value_array () { tree type; tree field_decl, field_decl_chain; --- 425,431 ---- the transition point between the two possibilities. */ static void ! generate_struct_by_value_array (void) { tree type; tree field_decl, field_decl_chain; *************** generate_struct_by_value_array () *** 400,411 **** chainon (field_decl_chain, field_decl); } finish_struct (type, field_decl_chain, NULL_TREE); ! ! aggregate_in_mem[i] = aggregate_value_p (type); if (!aggregate_in_mem[i]) found = 1; } ! /* We found some structures that are returned in registers instead of memory so output the necessary data. */ if (found) --- 456,467 ---- chainon (field_decl_chain, field_decl); } finish_struct (type, field_decl_chain, NULL_TREE); ! ! aggregate_in_mem[i] = aggregate_value_p (type, 0); if (!aggregate_in_mem[i]) found = 1; } ! /* We found some structures that are returned in registers instead of memory so output the necessary data. */ if (found) *************** generate_struct_by_value_array () *** 414,444 **** if (!aggregate_in_mem[i]) break; printf ("#define OBJC_MAX_STRUCT_BY_VALUE %d\n\n", i); ! /* The first member of the structure is always 0 because we don't handle structures with 0 members */ printf ("static int struct_forward_array[] = {\n 0"); ! for (j = 1; j <= i; j++) printf (", %d", aggregate_in_mem[j]); printf ("\n};\n"); } ! exit (0); } ! const char * ! objc_init (filename) ! const char *filename; { ! filename = c_objc_common_init (filename); ! if (filename == NULL) ! return filename; /* Force the line number back to 0; check_newline will have raised it to 1, which will make the builtin functions appear not to be built in. */ ! lineno = 0; /* If gen_declaration desired, open the output file. */ if (flag_gen_declaration) --- 470,498 ---- if (!aggregate_in_mem[i]) break; printf ("#define OBJC_MAX_STRUCT_BY_VALUE %d\n\n", i); ! /* The first member of the structure is always 0 because we don't handle structures with 0 members */ printf ("static int struct_forward_array[] = {\n 0"); ! for (j = 1; j <= i; j++) printf (", %d", aggregate_in_mem[j]); printf ("\n};\n"); } ! exit (0); } ! bool ! objc_init (void) { ! if (c_objc_common_init () == false) ! return false; /* Force the line number back to 0; check_newline will have raised it to 1, which will make the builtin functions appear not to be built in. */ ! input_line = 0; /* If gen_declaration desired, open the output file. */ if (flag_gen_declaration) *************** objc_init (filename) *** 446,452 **** register char * const dumpname = concat (dump_base_name, ".decl", NULL); gen_declaration_file = fopen (dumpname, "w"); if (gen_declaration_file == 0) ! fatal_io_error ("can't open %s", dumpname); free (dumpname); } --- 500,506 ---- register char * const dumpname = concat (dump_base_name, ".decl", NULL); gen_declaration_file = fopen (dumpname, "w"); if (gen_declaration_file == 0) ! fatal_error ("can't open %s: %m", dumpname); free (dumpname); } *************** objc_init (filename) *** 456,461 **** --- 510,517 ---- TAG_GETMETACLASS = "objc_getMetaClass"; TAG_MSGSEND = "objc_msgSend"; TAG_MSGSENDSUPER = "objc_msgSendSuper"; + TAG_MSGSEND_STRET = "objc_msgSend_stret"; + TAG_MSGSENDSUPER_STRET = "objc_msgSendSuper_stret"; TAG_EXECCLASS = "__objc_execClass"; default_constant_string_class_name = "NSConstantString"; } *************** objc_init (filename) *** 465,470 **** --- 521,528 ---- TAG_GETMETACLASS = "objc_get_meta_class"; TAG_MSGSEND = "objc_msg_lookup"; TAG_MSGSENDSUPER = "objc_msg_lookup_super"; + /* GNU runtime does not provide special functions to support + structure-returning methods. */ TAG_EXECCLASS = "__objc_exec_class"; default_constant_string_class_name = "NXConstantString"; flag_typed_selectors = 1; *************** objc_init (filename) *** 477,488 **** if (print_struct_values) generate_struct_by_value_array (); ! return filename; } void ! finish_file () { c_objc_common_finish_file (); /* Finalize Objective-C runtime data. No need to generate tables --- 535,547 ---- if (print_struct_values) generate_struct_by_value_array (); ! return true; } void ! finish_file (void) { + mark_referenced_methods (); c_objc_common_finish_file (); /* Finalize Objective-C runtime data. No need to generate tables *************** finish_file () *** 495,526 **** } static tree ! define_decl (declarator, declspecs) ! tree declarator; ! tree declspecs; { tree decl = start_decl (declarator, declspecs, 0, NULL_TREE); finish_decl (decl, NULL_TREE, NULL_TREE); return decl; } - /* Return 1 if LHS and RHS are compatible types for assignment or - various other operations. Return 0 if they are incompatible, and - return -1 if we choose to not decide. When the operation is - REFLEXIVE, check for compatibility in either direction. - - For statically typed objects, an assignment of the form `a' = `b' - is permitted if: - - `a' is of type "id", - `a' and `b' are the same class type, or - `a' and `b' are of class types A and B such that B is a descendant of A. */ - static tree ! lookup_method_in_protocol_list (rproto_list, sel_name, class_meth) ! tree rproto_list; ! tree sel_name; ! int class_meth; { tree rproto, p; tree fnd = 0; --- 554,569 ---- } static tree ! define_decl (tree declarator, tree declspecs) { tree decl = start_decl (declarator, declspecs, 0, NULL_TREE); finish_decl (decl, NULL_TREE, NULL_TREE); return decl; } static tree ! lookup_method_in_protocol_list (tree rproto_list, tree sel_name, ! int class_meth) { tree rproto, p; tree fnd = 0; *************** lookup_method_in_protocol_list (rproto_l *** 552,560 **** } static tree ! lookup_protocol_in_reflist (rproto_list, lproto) ! tree rproto_list; ! tree lproto; { tree rproto, p; --- 595,601 ---- } static tree ! lookup_protocol_in_reflist (tree rproto_list, tree lproto) { tree rproto, p; *************** lookup_protocol_in_reflist (rproto_list, *** 607,616 **** */ int ! objc_comptypes (lhs, rhs, reflexive) ! tree lhs; ! tree rhs; ! int reflexive; { /* New clause for protocols. */ --- 648,654 ---- */ int ! objc_comptypes (tree lhs, tree rhs, int reflexive) { /* New clause for protocols. */ *************** objc_comptypes (lhs, rhs, reflexive) *** 634,653 **** if (rhs_is_proto) { rproto_list = TYPE_PROTOCOL_LIST (rhs); ! if (!reflexive) { /* An assignment between objects of type 'id '; make sure the protocol on the lhs is supported by the object on the rhs. */ ! for (lproto = lproto_list; lproto; lproto = TREE_CHAIN (lproto)) { p = TREE_VALUE (lproto); rproto = lookup_protocol_in_reflist (rproto_list, p); if (!rproto) ! warning ("object does not conform to the `%s' protocol", IDENTIFIER_POINTER (PROTOCOL_NAME (p))); } --- 672,691 ---- if (rhs_is_proto) { rproto_list = TYPE_PROTOCOL_LIST (rhs); ! if (!reflexive) { /* An assignment between objects of type 'id '; make sure the protocol on the lhs is supported by the object on the rhs. */ ! for (lproto = lproto_list; lproto; lproto = TREE_CHAIN (lproto)) { p = TREE_VALUE (lproto); rproto = lookup_protocol_in_reflist (rproto_list, p); if (!rproto) ! warning ("object does not conform to the `%s' protocol", IDENTIFIER_POINTER (PROTOCOL_NAME (p))); } *************** objc_comptypes (lhs, rhs, reflexive) *** 659,678 **** of type 'id '. Check that either the protocol on the lhs is supported by the object on the rhs, or viceversa. */ ! /* Check if the protocol on the lhs is supported by the object on the rhs. */ ! for (lproto = lproto_list; lproto; lproto = TREE_CHAIN (lproto)) { p = TREE_VALUE (lproto); rproto = lookup_protocol_in_reflist (rproto_list, p); ! if (!rproto) { /* Check failed - check if the protocol on the rhs is supported by the object on the lhs. */ ! for (rproto = rproto_list; rproto; rproto = TREE_CHAIN (rproto)) { p = TREE_VALUE (rproto); --- 697,716 ---- of type 'id '. Check that either the protocol on the lhs is supported by the object on the rhs, or viceversa. */ ! /* Check if the protocol on the lhs is supported by the object on the rhs. */ ! for (lproto = lproto_list; lproto; lproto = TREE_CHAIN (lproto)) { p = TREE_VALUE (lproto); rproto = lookup_protocol_in_reflist (rproto_list, p); ! if (!rproto) { /* Check failed - check if the protocol on the rhs is supported by the object on the lhs. */ ! for (rproto = rproto_list; rproto; rproto = TREE_CHAIN (rproto)) { p = TREE_VALUE (rproto); *************** objc_comptypes (lhs, rhs, reflexive) *** 694,700 **** /* = * */ else if (TYPED_OBJECT (TREE_TYPE (rhs))) { ! tree rname = TYPE_NAME (TREE_TYPE (rhs)); tree rinter; /* Make sure the protocol is supported by the object on --- 732,738 ---- /* = * */ else if (TYPED_OBJECT (TREE_TYPE (rhs))) { ! tree rname = OBJC_TYPE_NAME (TREE_TYPE (rhs)); tree rinter; /* Make sure the protocol is supported by the object on *************** objc_comptypes (lhs, rhs, reflexive) *** 735,752 **** if (!rproto) warning ("class `%s' does not implement the `%s' protocol", ! IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (rhs))), IDENTIFIER_POINTER (PROTOCOL_NAME (p))); } return 1; } /* = id */ ! else if (TYPE_NAME (TREE_TYPE (rhs)) == objc_object_id) { return 1; } /* = Class */ ! else if (TYPE_NAME (TREE_TYPE (rhs)) == objc_class_id) { return 0; } --- 773,790 ---- if (!rproto) warning ("class `%s' does not implement the `%s' protocol", ! IDENTIFIER_POINTER (OBJC_TYPE_NAME (TREE_TYPE (rhs))), IDENTIFIER_POINTER (PROTOCOL_NAME (p))); } return 1; } /* = id */ ! else if (OBJC_TYPE_NAME (TREE_TYPE (rhs)) == objc_object_id) { return 1; } /* = Class */ ! else if (OBJC_TYPE_NAME (TREE_TYPE (rhs)) == objc_class_id) { return 0; } *************** objc_comptypes (lhs, rhs, reflexive) *** 760,772 **** { if (reflexive) { ! tree rname = TYPE_NAME (TREE_TYPE (lhs)); tree rinter; tree rproto, rproto_list = TYPE_PROTOCOL_LIST (rhs); ! /* Make sure the protocol is supported by the object on the lhs. */ ! for (rproto = rproto_list; rproto; rproto = TREE_CHAIN (rproto)) { tree p = TREE_VALUE (rproto); --- 798,810 ---- { if (reflexive) { ! tree rname = OBJC_TYPE_NAME (TREE_TYPE (lhs)); tree rinter; tree rproto, rproto_list = TYPE_PROTOCOL_LIST (rhs); ! /* Make sure the protocol is supported by the object on the lhs. */ ! for (rproto = rproto_list; rproto; rproto = TREE_CHAIN (rproto)) { tree p = TREE_VALUE (rproto); *************** objc_comptypes (lhs, rhs, reflexive) *** 786,794 **** lhs. */ if (!lproto) { ! lproto_list = TYPE_PROTOCOL_LIST (TREE_TYPE (lhs)); ! lproto = lookup_protocol_in_reflist (lproto_list, p); } --- 824,832 ---- lhs. */ if (!lproto) { ! lproto_list = TYPE_PROTOCOL_LIST (TREE_TYPE (lhs)); ! lproto = lookup_protocol_in_reflist (lproto_list, p); } *************** objc_comptypes (lhs, rhs, reflexive) *** 801,814 **** p); cat = CLASS_CATEGORY_LIST (cat); } ! ! rinter = lookup_interface (CLASS_SUPER_NAME (rinter)); } ! if (!lproto) warning ("class `%s' does not implement the `%s' protocol", ! IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (lhs))), IDENTIFIER_POINTER (PROTOCOL_NAME (p))); } --- 839,852 ---- p); cat = CLASS_CATEGORY_LIST (cat); } ! ! rinter = lookup_interface (CLASS_SUPER_NAME (rinter)); } ! if (!lproto) warning ("class `%s' does not implement the `%s' protocol", ! IDENTIFIER_POINTER (OBJC_TYPE_NAME (TREE_TYPE (lhs))), IDENTIFIER_POINTER (PROTOCOL_NAME (p))); } *************** objc_comptypes (lhs, rhs, reflexive) *** 818,829 **** return 0; } /* id = */ ! else if (TYPE_NAME (TREE_TYPE (lhs)) == objc_object_id) { return 1; } /* Class = */ ! else if (TYPE_NAME (TREE_TYPE (lhs)) == objc_class_id) { return 0; } --- 856,867 ---- return 0; } /* id = */ ! else if (OBJC_TYPE_NAME (TREE_TYPE (lhs)) == objc_object_id) { return 1; } /* Class = */ ! else if (OBJC_TYPE_NAME (TREE_TYPE (lhs)) == objc_class_id) { return 0; } *************** objc_comptypes (lhs, rhs, reflexive) *** 852,879 **** } /* `id' = ` *' ` *' = `id': always allow it. ! Please note that 'Object *o = [[Object alloc] init]; falls in the case * = `id'. */ ! if ((TYPE_NAME (lhs) == objc_object_id && TYPED_OBJECT (rhs)) ! || (TYPE_NAME (rhs) == objc_object_id && TYPED_OBJECT (lhs))) return 1; /* `id' = `Class', `Class' = `id' */ ! else if ((TYPE_NAME (lhs) == objc_object_id ! && TYPE_NAME (rhs) == objc_class_id) ! || (TYPE_NAME (lhs) == objc_class_id ! && TYPE_NAME (rhs) == objc_object_id)) return 1; /* ` *' = ` *' */ else if (TYPED_OBJECT (lhs) && TYPED_OBJECT (rhs)) { ! tree lname = TYPE_NAME (lhs); ! tree rname = TYPE_NAME (rhs); tree inter; if (lname == rname) --- 890,917 ---- } /* `id' = ` *' ` *' = `id': always allow it. ! Please note that 'Object *o = [[Object alloc] init]; falls in the case * = `id'. */ ! if ((OBJC_TYPE_NAME (lhs) == objc_object_id && TYPED_OBJECT (rhs)) ! || (OBJC_TYPE_NAME (rhs) == objc_object_id && TYPED_OBJECT (lhs))) return 1; /* `id' = `Class', `Class' = `id' */ ! else if ((OBJC_TYPE_NAME (lhs) == objc_object_id ! && OBJC_TYPE_NAME (rhs) == objc_class_id) ! || (OBJC_TYPE_NAME (lhs) == objc_class_id ! && OBJC_TYPE_NAME (rhs) == objc_object_id)) return 1; /* ` *' = ` *' */ else if (TYPED_OBJECT (lhs) && TYPED_OBJECT (rhs)) { ! tree lname = OBJC_TYPE_NAME (lhs); ! tree rname = OBJC_TYPE_NAME (rhs); tree inter; if (lname == rname) *************** objc_comptypes (lhs, rhs, reflexive) *** 900,925 **** return -1; } ! /* Called from c-decl.c before all calls to rest_of_decl_compilation. */ void ! objc_check_decl (decl) ! tree decl; { tree type = TREE_TYPE (decl); ! if (TREE_CODE (type) == RECORD_TYPE ! && TREE_STATIC_TEMPLATE (type) ! && type != constant_string_type) ! error_with_decl (decl, "`%s' cannot be statically allocated"); } /* Implement static typing. At this point, we know we have an interface. */ tree ! get_static_reference (interface, protocols) ! tree interface; ! tree protocols; { tree type = xref_tag (RECORD_TYPE, interface); --- 938,961 ---- return -1; } ! /* Called from finish_decl. */ void ! objc_check_decl (tree decl) { tree type = TREE_TYPE (decl); ! if (TREE_CODE (type) != RECORD_TYPE) ! return; ! if (TYPE_NAME (type) && (type = is_class_name (TYPE_NAME (type)))) ! error ("statically allocated instance of Objective-C class `%s'", ! IDENTIFIER_POINTER (type)); } /* Implement static typing. At this point, we know we have an interface. */ tree ! get_static_reference (tree interface, tree protocols) { tree type = xref_tag (RECORD_TYPE, interface); *************** get_static_reference (interface, protoco *** 935,941 **** /* Look up protocols and install in lang specific list. Note that the protocol list can have a different lifetime than T! */ ! TYPE_PROTOCOL_LIST (t) = lookup_and_install_protocols (protocols); /* This forces a new pointer type to be created later (in build_pointer_type)...so that the new template --- 971,977 ---- /* Look up protocols and install in lang specific list. Note that the protocol list can have a different lifetime than T! */ ! SET_TYPE_PROTOCOL_LIST (t, lookup_and_install_protocols (protocols)); /* This forces a new pointer type to be created later (in build_pointer_type)...so that the new template *************** get_static_reference (interface, protoco *** 950,957 **** } tree ! get_object_reference (protocols) ! tree protocols; { tree type_decl = lookup_name (objc_id_id); tree type; --- 986,992 ---- } tree ! get_object_reference (tree protocols) { tree type_decl = lookup_name (objc_id_id); tree type; *************** get_object_reference (protocols) *** 984,990 **** TYPE_NEXT_VARIANT (m) = t; /* Look up protocols...and install in lang specific list */ ! TYPE_PROTOCOL_LIST (t) = lookup_and_install_protocols (protocols); /* This forces a new pointer type to be created later (in build_pointer_type)...so that the new template --- 1019,1025 ---- TYPE_NEXT_VARIANT (m) = t; /* Look up protocols...and install in lang specific list */ ! SET_TYPE_PROTOCOL_LIST (t, lookup_and_install_protocols (protocols)); /* This forces a new pointer type to be created later (in build_pointer_type)...so that the new template *************** get_object_reference (protocols) *** 1001,1010 **** PROTO, the protocol to check, and LIST, a list of protocol it conforms to. */ ! static void ! check_protocol_recursively (proto, list) ! tree proto; ! tree list; { tree p; --- 1036,1043 ---- PROTO, the protocol to check, and LIST, a list of protocol it conforms to. */ ! static void ! check_protocol_recursively (tree proto, tree list) { tree p; *************** check_protocol_recursively (proto, list) *** 1017,1035 **** if (pp == proto) fatal_error ("protocol `%s' has circular dependency", ! IDENTIFIER_POINTER (PROTOCOL_NAME (pp))); if (pp) check_protocol_recursively (proto, PROTOCOL_LIST (pp)); } } static tree ! lookup_and_install_protocols (protocols) ! tree protocols; { tree proto; ! tree prev = NULL; ! tree return_value = protocols; for (proto = protocols; proto; proto = TREE_CHAIN (proto)) { --- 1050,1069 ---- if (pp == proto) fatal_error ("protocol `%s' has circular dependency", ! IDENTIFIER_POINTER (PROTOCOL_NAME (pp))); if (pp) check_protocol_recursively (proto, PROTOCOL_LIST (pp)); } } + /* Look up PROTOCOLS, and return a list of those that are found. + If none are found, return NULL. */ + static tree ! lookup_and_install_protocols (tree protocols) { tree proto; ! tree return_value = NULL_TREE; for (proto = protocols; proto; proto = TREE_CHAIN (proto)) { *************** lookup_and_install_protocols (protocols) *** 1037,1056 **** tree p = lookup_protocol (ident); if (!p) ! { ! error ("cannot find protocol declaration for `%s'", ! IDENTIFIER_POINTER (ident)); ! if (prev) ! TREE_CHAIN (prev) = TREE_CHAIN (proto); ! else ! return_value = TREE_CHAIN (proto); ! } else ! { ! /* Replace identifier with actual protocol node. */ ! TREE_VALUE (proto) = p; ! prev = proto; ! } } return return_value; --- 1071,1081 ---- tree p = lookup_protocol (ident); if (!p) ! error ("cannot find protocol declaration for `%s'", ! IDENTIFIER_POINTER (ident)); else ! return_value = chainon (return_value, ! build_tree_list (NULL_TREE, p)); } return return_value; *************** lookup_and_install_protocols (protocols) *** 1061,1070 **** TYPE is its data type. */ static tree ! create_builtin_decl (code, type, name) ! enum tree_code code; ! tree type; ! const char *name; { tree decl = build_decl (code, get_identifier (name), type); --- 1086,1092 ---- TYPE is its data type. */ static tree ! create_builtin_decl (enum tree_code code, tree type, const char *name) { tree decl = build_decl (code, get_identifier (name), type); *************** create_builtin_decl (code, type, name) *** 1073,1093 **** TREE_STATIC (decl) = 1; make_decl_rtl (decl, 0); pushdecl (decl); } - DECL_ARTIFICIAL (decl) = 1; return decl; } /* Find the decl for the constant string class. */ static void ! setup_string_decl () { if (!string_class_decl) { if (!constant_string_global_id) ! constant_string_global_id = get_identifier (STRING_OBJECT_GLOBAL_NAME); string_class_decl = lookup_name (constant_string_global_id); } } --- 1095,1125 ---- TREE_STATIC (decl) = 1; make_decl_rtl (decl, 0); pushdecl (decl); + DECL_ARTIFICIAL (decl) = 1; } return decl; } /* Find the decl for the constant string class. */ static void ! setup_string_decl (void) { if (!string_class_decl) { if (!constant_string_global_id) ! { ! char *name; ! size_t length; ! /* %s in format will provide room for terminating null */ ! length = strlen (STRING_OBJECT_GLOBAL_FORMAT) ! + strlen (constant_string_class_name); ! name = xmalloc (length); ! sprintf (name, STRING_OBJECT_GLOBAL_FORMAT, ! constant_string_class_name); ! constant_string_global_id = get_identifier (name); ! } string_class_decl = lookup_name (constant_string_global_id); } } *************** setup_string_decl () *** 1097,1113 **** Model: ! type_spec--------->sc_spec ! (tree_list) (tree_list) ! | | ! | | ! identifier_node identifier_node */ static void ! synth_module_prologue () { tree temp_type; - tree super_p; /* Defined in `objc.h' */ objc_object_id = get_identifier (TAG_OBJECT); --- 1129,1144 ---- Model: ! type_spec--------->sc_spec ! (tree_list) (tree_list) ! | | ! | | ! identifier_node identifier_node */ static void ! synth_module_prologue (void) { tree temp_type; /* Defined in `objc.h' */ objc_object_id = get_identifier (TAG_OBJECT); *************** synth_module_prologue () *** 1120,1127 **** objc_class_id = get_identifier (TAG_CLASS); objc_class_type = build_pointer_type (xref_tag (RECORD_TYPE, objc_class_id)); protocol_type = build_pointer_type (xref_tag (RECORD_TYPE, ! get_identifier (PROTOCOL_OBJECT_CLASS_NAME))); /* Declare type of selector-objects that represent an operation name. */ --- 1151,1160 ---- objc_class_id = get_identifier (TAG_CLASS); objc_class_type = build_pointer_type (xref_tag (RECORD_TYPE, objc_class_id)); + temp_type = get_identifier (PROTOCOL_OBJECT_CLASS_NAME); + objc_declare_class (tree_cons (NULL_TREE, temp_type, NULL_TREE)); protocol_type = build_pointer_type (xref_tag (RECORD_TYPE, ! temp_type)); /* Declare type of selector-objects that represent an operation name. */ *************** synth_module_prologue () *** 1133,1139 **** /* Forward declare type, or else the prototype for msgSendSuper will complain. */ ! super_p = build_pointer_type (xref_tag (RECORD_TYPE, get_identifier (TAG_SUPER))); --- 1166,1173 ---- /* Forward declare type, or else the prototype for msgSendSuper will complain. */ ! /* `struct objc_super *' */ ! super_type = build_pointer_type (xref_tag (RECORD_TYPE, get_identifier (TAG_SUPER))); *************** synth_module_prologue () *** 1158,1171 **** pushdecl (umsg_decl); } else ! umsg_decl = builtin_function (TAG_MSGSEND, temp_type, 0, NOT_BUILT_IN, ! NULL, NULL_TREE); /* id objc_msgSendSuper (struct objc_super *, SEL, ...); */ temp_type = build_function_type (id_type, ! tree_cons (NULL_TREE, super_p, tree_cons (NULL_TREE, selector_type, NULL_TREE))); --- 1192,1212 ---- pushdecl (umsg_decl); } else ! { ! umsg_decl = builtin_function (TAG_MSGSEND, ! temp_type, 0, NOT_BUILT_IN, ! NULL, NULL_TREE); ! /* id objc_msgSendNonNil (id, SEL, ...); */ ! umsg_nonnil_decl = builtin_function (TAG_MSGSEND_NONNIL, ! temp_type, 0, NOT_BUILT_IN, ! NULL, NULL_TREE); ! } /* id objc_msgSendSuper (struct objc_super *, SEL, ...); */ temp_type = build_function_type (id_type, ! tree_cons (NULL_TREE, super_type, tree_cons (NULL_TREE, selector_type, NULL_TREE))); *************** synth_module_prologue () *** 1173,1185 **** temp_type, 0, NOT_BUILT_IN, NULL, NULL_TREE); /* id objc_getClass (const char *); */ temp_type = build_function_type (id_type, ! tree_cons (NULL_TREE, ! const_string_type_node, ! tree_cons (NULL_TREE, void_type_node, ! NULL_TREE))); objc_get_class_decl = builtin_function (TAG_GETCLASS, temp_type, 0, NOT_BUILT_IN, --- 1214,1281 ---- temp_type, 0, NOT_BUILT_IN, NULL, NULL_TREE); + /* The NeXT runtime defines the following additional entry points, + used for dispatching calls to methods returning structs: + + #if defined(__cplusplus) + id objc_msgSend_stret(id self, SEL op, ...); + id objc_msgSendSuper_stret(struct objc_super *super, SEL op, ...); + #else + void objc_msgSend_stret(void * stretAddr, id self, SEL op, ...); + void objc_msgSendSuper_stret(void * stretAddr, struct objc_super *super, + SEL op, ...); + #endif + + struct objc_return_struct objc_msgSendNonNil_stret(id self, SEL op, ...); + + These prototypes appear in ; however, they + CANNOT BE USED DIRECTLY. In order to call one of the ..._stret + functions, the function must first be cast to a signature that + corresponds to the actual ObjC method being invoked. This is + what is done by the build_objc_method_call() routine below. */ + + if (flag_next_runtime) + { + tree objc_return_struct_type + = xref_tag (RECORD_TYPE, + get_identifier (TAG_RETURN_STRUCT)); + + tree stret_temp_type + = build_function_type (id_type, + tree_cons (NULL_TREE, id_type, + tree_cons (NULL_TREE, selector_type, + NULL_TREE))); + + umsg_stret_decl = builtin_function (TAG_MSGSEND_STRET, + stret_temp_type, 0, NOT_BUILT_IN, + NULL, NULL_TREE); + stret_temp_type + = build_function_type (objc_return_struct_type, + tree_cons (NULL_TREE, id_type, + tree_cons (NULL_TREE, selector_type, + NULL_TREE))); + + umsg_nonnil_stret_decl = builtin_function (TAG_MSGSEND_NONNIL_STRET, + stret_temp_type, 0, NOT_BUILT_IN, + NULL, NULL_TREE); + + stret_temp_type + = build_function_type (id_type, + tree_cons (NULL_TREE, super_type, + tree_cons (NULL_TREE, selector_type, + NULL_TREE))); + + umsg_super_stret_decl = builtin_function (TAG_MSGSENDSUPER_STRET, + stret_temp_type, 0, NOT_BUILT_IN, 0, + NULL_TREE); + } + /* id objc_getClass (const char *); */ temp_type = build_function_type (id_type, ! tree_cons (NULL_TREE, ! const_string_type_node, ! OBJC_VOID_AT_END)); objc_get_class_decl = builtin_function (TAG_GETCLASS, temp_type, 0, NOT_BUILT_IN, *************** synth_module_prologue () *** 1188,1195 **** /* id objc_getMetaClass (const char *); */ objc_get_meta_class_decl ! = builtin_function (TAG_GETMETACLASS, temp_type, 0, NOT_BUILT_IN, ! NULL, NULL_TREE); /* static SEL _OBJC_SELECTOR_TABLE[]; */ --- 1284,1294 ---- /* id objc_getMetaClass (const char *); */ objc_get_meta_class_decl ! = builtin_function (TAG_GETMETACLASS, temp_type, 0, NOT_BUILT_IN, NULL, NULL_TREE); ! ! build_super_template (); ! if (flag_next_runtime) ! build_objc_exception_stuff (); /* static SEL _OBJC_SELECTOR_TABLE[]; */ *************** synth_module_prologue () *** 1229,1320 **** constant_string_class_name = default_constant_string_class_name; constant_string_id = get_identifier (constant_string_class_name); ! constant_string_type = xref_tag (RECORD_TYPE, constant_string_id); } ! /* Predefine the following data type: ! struct STRING_OBJECT_CLASS_NAME { Object isa; char *cString; unsigned int length; }; */ ! static void ! build_string_class_template () { ! tree field_decl, field_decl_chain; ! field_decl = create_builtin_decl (FIELD_DECL, id_type, "isa"); ! field_decl_chain = field_decl; ! field_decl = create_builtin_decl (FIELD_DECL, ! build_pointer_type (char_type_node), ! "cString"); ! chainon (field_decl_chain, field_decl); ! field_decl = create_builtin_decl (FIELD_DECL, unsigned_type_node, "length"); ! chainon (field_decl_chain, field_decl); ! finish_struct (constant_string_type, field_decl_chain, NULL_TREE); } /* Custom build_string which sets TREE_TYPE! */ static tree ! my_build_string (len, str) ! int len; ! const char *str; { return fix_string_type (build_string (len, str)); } /* Given a chain of STRING_CST's, build a static instance of ! NXConstantString which points at the concatenation of those strings. ! We place the string object in the __string_objects section of the ! __OBJC segment. The Objective-C runtime will initialize the isa ! pointers of the string objects to point at the NXConstantString ! class object. */ tree ! build_objc_string_object (strings) ! tree strings; { ! tree string, initlist, constructor; int length; ! if (lookup_interface (constant_string_id) == NULL_TREE) { error ("cannot find interface declaration for `%s'", IDENTIFIER_POINTER (constant_string_id)); return error_mark_node; } ! add_class_reference (constant_string_id); ! ! if (TREE_CHAIN (strings)) ! { ! varray_type vstrings; ! VARRAY_TREE_INIT (vstrings, 32, "strings"); ! ! for (; strings ; strings = TREE_CHAIN (strings)) ! VARRAY_PUSH_TREE (vstrings, strings); ! ! string = combine_strings (vstrings); ! } ! else ! string = strings; ! ! string = fix_string_type (string); ! TREE_SET_CODE (string, STRING_CST); length = TREE_STRING_LENGTH (string) - 1; ! /* We could not properly create NXConstantString in synth_module_prologue, ! because that's called before debugging is initialized. Do it now. */ ! if (TYPE_FIELDS (constant_string_type) == NULL_TREE) ! build_string_class_template (); /* & ((NXConstantString) { NULL, string, length }) */ --- 1328,1431 ---- constant_string_class_name = default_constant_string_class_name; constant_string_id = get_identifier (constant_string_class_name); ! objc_declare_class (tree_cons (NULL_TREE, constant_string_id, NULL_TREE)); ! ! /* Pre-build the following entities - for speed/convenience. */ ! self_id = get_identifier ("self"); ! ucmd_id = get_identifier ("_cmd"); ! #ifndef OBJCPLUS ! /* The C++ front-end does not appear to grok __attribute__((__unused__)). */ ! unused_list = build_tree_list (get_identifier ("__unused__"), NULL_TREE); ! #endif } ! /* Ensure that the ivar list for NSConstantString/NXConstantString ! (or whatever was specified via `-fconstant-string-class') ! contains fields at least as large as the following three, so that ! the runtime can stomp on them with confidence: ! struct STRING_OBJECT_CLASS_NAME { Object isa; char *cString; unsigned int length; }; */ ! static int ! check_string_class_template (void) { ! tree field_decl = TYPE_FIELDS (constant_string_type); ! #define AT_LEAST_AS_LARGE_AS(F, T) \ ! (F && TREE_CODE (F) == FIELD_DECL \ ! && (TREE_INT_CST_LOW (DECL_SIZE (F)) \ ! >= TREE_INT_CST_LOW (TYPE_SIZE (T)))) ! if (!AT_LEAST_AS_LARGE_AS (field_decl, ptr_type_node)) ! return 0; ! field_decl = TREE_CHAIN (field_decl); ! if (!AT_LEAST_AS_LARGE_AS (field_decl, ptr_type_node)) ! return 0; ! field_decl = TREE_CHAIN (field_decl); ! return AT_LEAST_AS_LARGE_AS (field_decl, unsigned_type_node); ! ! #undef AT_LEAST_AS_LARGE_AS } + /* Avoid calling `check_string_class_template ()' more than once. */ + static GTY(()) int string_layout_checked; + /* Custom build_string which sets TREE_TYPE! */ static tree ! my_build_string (int len, const char *str) { return fix_string_type (build_string (len, str)); } /* Given a chain of STRING_CST's, build a static instance of ! NXConstantString which points at the concatenation of those ! strings. We place the string object in the __string_objects ! section of the __OBJC segment. The Objective-C runtime will ! initialize the isa pointers of the string objects to point at the ! NXConstantString class object. */ tree ! build_objc_string_object (tree string) { ! tree initlist, constructor, constant_string_class; int length; ! string = fix_string_type (string); ! ! constant_string_class = lookup_interface (constant_string_id); ! if (!constant_string_class ! || !(constant_string_type ! = CLASS_STATIC_TEMPLATE (constant_string_class))) { error ("cannot find interface declaration for `%s'", IDENTIFIER_POINTER (constant_string_id)); return error_mark_node; } ! /* Call to 'combine_strings' has been moved above. */ TREE_SET_CODE (string, STRING_CST); length = TREE_STRING_LENGTH (string) - 1; ! if (!string_layout_checked) ! { ! /* The NSConstantString/NXConstantString ivar layout is now ! known. */ ! if (!check_string_class_template ()) ! { ! error ("interface `%s' does not have valid constant string layout", ! IDENTIFIER_POINTER (constant_string_id)); ! return error_mark_node; ! } ! add_class_reference (constant_string_id); ! } /* & ((NXConstantString) { NULL, string, length }) */ *************** build_objc_string_object (strings) *** 1342,1348 **** = tree_cons (NULL_TREE, copy_node (build_unary_op (ADDR_EXPR, string, 1)), initlist); initlist = tree_cons (NULL_TREE, build_int_2 (length, 0), initlist); ! constructor = build_constructor (constant_string_type, nreverse (initlist)); if (!flag_next_runtime) { --- 1453,1460 ---- = tree_cons (NULL_TREE, copy_node (build_unary_op (ADDR_EXPR, string, 1)), initlist); initlist = tree_cons (NULL_TREE, build_int_2 (length, 0), initlist); ! constructor = objc_build_constructor (constant_string_type, ! nreverse (initlist)); if (!flag_next_runtime) { *************** build_objc_string_object (strings) *** 1355,1365 **** /* Declare a static instance of CLASS_DECL initialized by CONSTRUCTOR. */ static tree ! objc_add_static_instance (constructor, class_decl) ! tree constructor, class_decl; { - static int num_static_inst; tree *chain, decl; char buf[256]; --- 1467,1477 ---- /* Declare a static instance of CLASS_DECL initialized by CONSTRUCTOR. */ + static GTY(()) int num_static_inst; + static tree ! objc_add_static_instance (tree constructor, tree class_decl) { tree *chain, decl; char buf[256]; *************** objc_add_static_instance (constructor, c *** 1371,1377 **** if (!*chain) { *chain = tree_cons (NULL_TREE, class_decl, NULL_TREE); ! add_objc_string (TYPE_NAME (class_decl), class_names); } sprintf (buf, "_OBJC_INSTANCE_%d", num_static_inst++); --- 1483,1489 ---- if (!*chain) { *chain = tree_cons (NULL_TREE, class_decl, NULL_TREE); ! add_objc_string (OBJC_TYPE_NAME (class_decl), class_names); } sprintf (buf, "_OBJC_INSTANCE_%d", num_static_inst++); *************** objc_add_static_instance (constructor, c *** 1397,1404 **** with type TYPE and elements ELTS. */ static tree ! build_constructor (type, elts) ! tree type, elts; { tree constructor, f, e; --- 1509,1515 ---- with type TYPE and elements ELTS. */ static tree ! objc_build_constructor (tree type, tree elts) { tree constructor, f, e; *************** build_constructor (type, elts) *** 1420,1430 **** TREE_VALUE (e) = convert (TREE_TYPE (f), TREE_VALUE (e)); } ! constructor = build (CONSTRUCTOR, type, NULL_TREE, elts); TREE_CONSTANT (constructor) = 1; TREE_STATIC (constructor) = 1; TREE_READONLY (constructor) = 1; return constructor; } --- 1531,1546 ---- TREE_VALUE (e) = convert (TREE_TYPE (f), TREE_VALUE (e)); } ! constructor = build_constructor (type, elts); TREE_CONSTANT (constructor) = 1; TREE_STATIC (constructor) = 1; TREE_READONLY (constructor) = 1; + #ifdef OBJCPLUS + /* zlaski 2001-Apr-02: mark this as a call to a constructor, as required by + build_unary_op (wasn't true in 2.7.2.1 days) */ + TREE_HAS_CONSTRUCTOR (constructor) = 1; + #endif return constructor; } *************** build_constructor (type, elts) *** 1442,1450 **** }; */ static void ! build_objc_symtab_template () { ! tree field_decl, field_decl_chain, index; objc_symtab_template = start_struct (RECORD_TYPE, get_identifier (UTAG_SYMTAB)); --- 1558,1566 ---- }; */ static void ! build_objc_symtab_template (void) { ! tree field_decl, field_decl_chain; objc_symtab_template = start_struct (RECORD_TYPE, get_identifier (UTAG_SYMTAB)); *************** build_objc_symtab_template () *** 1477,1494 **** "cat_def_cnt"); chainon (field_decl_chain, field_decl); ! /* void *defs[cls_def_cnt + cat_def_cnt]; */ ! ! if (!flag_next_runtime) ! index = build_index_type (build_int_2 (imp_count + cat_count, 0)); ! else ! index = build_index_type (build_int_2 (imp_count + cat_count - 1, ! imp_count == 0 && cat_count == 0 ! ? -1 : 0)); ! field_decl = create_builtin_decl (FIELD_DECL, ! build_array_type (ptr_type_node, index), ! "defs"); ! chainon (field_decl_chain, field_decl); finish_struct (objc_symtab_template, field_decl_chain, NULL_TREE); } --- 1593,1612 ---- "cat_def_cnt"); chainon (field_decl_chain, field_decl); ! if (imp_count || cat_count || !flag_next_runtime) ! { ! /* void *defs[imp_count + cat_count (+ 1)]; */ ! /* NB: The index is one less than the size of the array. */ ! int index = imp_count + cat_count ! + (flag_next_runtime? -1: 0); ! field_decl = create_builtin_decl ! (FIELD_DECL, ! build_array_type ! (ptr_type_node, ! build_index_type (build_int_2 (index, 0))), ! "defs"); ! chainon (field_decl_chain, field_decl); ! } finish_struct (objc_symtab_template, field_decl_chain, NULL_TREE); } *************** build_objc_symtab_template () *** 1497,1504 **** This is a CONSTRUCTOR. */ static tree ! init_def_list (type) ! tree type; { tree expr, initlist = NULL_TREE; struct imp_entry *impent; --- 1615,1621 ---- This is a CONSTRUCTOR. */ static tree ! init_def_list (tree type) { tree expr, initlist = NULL_TREE; struct imp_entry *impent; *************** init_def_list (type) *** 1536,1549 **** initlist = tree_cons (NULL_TREE, expr, initlist); } ! return build_constructor (type, nreverse (initlist)); } /* Construct the initial value for all of _objc_symtab. */ static tree ! init_objc_symtab (type) ! tree type; { tree initlist; --- 1653,1665 ---- initlist = tree_cons (NULL_TREE, expr, initlist); } ! return objc_build_constructor (type, nreverse (initlist)); } /* Construct the initial value for all of _objc_symtab. */ static tree ! init_objc_symtab (tree type) { tree initlist; *************** init_objc_symtab (type) *** 1571,1577 **** /* cls_def = { ..., { &Foo, &Bar, ...}, ... } */ ! if (imp_count || cat_count || static_instances_decl) { tree field = TYPE_FIELDS (type); --- 1687,1693 ---- /* cls_def = { ..., { &Foo, &Bar, ...}, ... } */ ! if (imp_count || cat_count || !flag_next_runtime) { tree field = TYPE_FIELDS (type); *************** init_objc_symtab (type) *** 1581,1594 **** initlist); } ! return build_constructor (type, nreverse (initlist)); } /* Push forward-declarations of all the categories so that init_def_list can use them in a CONSTRUCTOR. */ static void ! forward_declare_categories () { struct imp_entry *impent; tree sav = objc_implementation_context; --- 1697,1730 ---- initlist); } ! return objc_build_constructor (type, nreverse (initlist)); ! } ! ! /* Generate forward declarations for metadata such as ! 'OBJC_CLASS_...'. */ ! ! static tree ! build_metadata_decl (const char *name, tree type) ! { ! tree decl, decl_specs; ! /* extern struct TYPE NAME_; */ ! decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_EXTERN]); ! decl_specs = tree_cons (NULL_TREE, type, decl_specs); ! decl = define_decl (synth_id_with_class_suffix ! (name, ! objc_implementation_context), ! decl_specs); ! TREE_USED (decl) = 1; ! DECL_ARTIFICIAL (decl) = 1; ! TREE_PUBLIC (decl) = 0; ! return decl; } /* Push forward-declarations of all the categories so that init_def_list can use them in a CONSTRUCTOR. */ static void ! forward_declare_categories (void) { struct imp_entry *impent; tree sav = objc_implementation_context; *************** forward_declare_categories () *** 1599,1617 **** { /* Set an invisible arg to synth_id_with_class_suffix. */ objc_implementation_context = impent->imp_context; ! impent->class_decl ! = create_builtin_decl (VAR_DECL, objc_category_template, ! IDENTIFIER_POINTER (synth_id_with_class_suffix ("_OBJC_CATEGORY", objc_implementation_context))); } } objc_implementation_context = sav; } ! /* Create the declaration of _OBJC_SYMBOLS, with type `strict _objc_symtab' and initialized appropriately. */ static void ! generate_objc_symtab_decl () { tree sc_spec; --- 1735,1753 ---- { /* Set an invisible arg to synth_id_with_class_suffix. */ objc_implementation_context = impent->imp_context; ! /* extern struct objc_category _OBJC_CATEGORY_; */ ! impent->class_decl = build_metadata_decl ("_OBJC_CATEGORY", ! objc_category_template); } } objc_implementation_context = sav; } ! /* Create the declaration of _OBJC_SYMBOLS, with type `struct _objc_symtab' and initialized appropriately. */ static void ! generate_objc_symtab_decl (void) { tree sc_spec; *************** generate_objc_symtab_decl () *** 1642,1649 **** } static tree ! init_module_descriptor (type) ! tree type; { tree initlist, expr; --- 1778,1784 ---- } static tree ! init_module_descriptor (tree type) { tree initlist, expr; *************** init_module_descriptor (type) *** 1670,1676 **** expr = build_int_2 (0, 0); initlist = tree_cons (NULL_TREE, expr, initlist); ! return build_constructor (type, nreverse (initlist)); } /* Write out the data structures to describe Objective C classes defined. --- 1805,1811 ---- expr = build_int_2 (0, 0); initlist = tree_cons (NULL_TREE, expr, initlist); ! return objc_build_constructor (type, nreverse (initlist)); } /* Write out the data structures to describe Objective C classes defined. *************** init_module_descriptor (type) *** 1681,1687 **** struct objc_module { ... } _OBJC_MODULE = { ... }; */ static rtx ! build_module_descriptor () { tree decl_specs, field_decl, field_decl_chain; --- 1816,1822 ---- struct objc_module { ... } _OBJC_MODULE = { ... }; */ static rtx ! build_module_descriptor (void) { tree decl_specs, field_decl, field_decl_chain; *************** build_module_descriptor () *** 1692,1715 **** decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_LONG]); field_decl = get_identifier ("version"); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); field_decl_chain = field_decl; /* long size; */ decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_LONG]); field_decl = get_identifier ("size"); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* char *name; */ decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_CHAR]); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("name")); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_symtab *symtab; */ --- 1827,1847 ---- decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_LONG]); field_decl = get_identifier ("version"); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); field_decl_chain = field_decl; /* long size; */ decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_LONG]); field_decl = get_identifier ("size"); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* char *name; */ decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_CHAR]); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("name")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_symtab *symtab; */ *************** build_module_descriptor () *** 1717,1724 **** decl_specs = get_identifier (UTAG_SYMTAB); decl_specs = build_tree_list (NULL_TREE, xref_tag (RECORD_TYPE, decl_specs)); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("symtab")); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); finish_struct (objc_module_template, field_decl_chain, NULL_TREE); --- 1849,1855 ---- decl_specs = get_identifier (UTAG_SYMTAB); decl_specs = build_tree_list (NULL_TREE, xref_tag (RECORD_TYPE, decl_specs)); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("symtab")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); finish_struct (objc_module_template, field_decl_chain, NULL_TREE); *************** build_module_descriptor () *** 1762,1768 **** get_identifier (TAG_EXECCLASS), build_function_type (void_type_node, tree_cons (NULL_TREE, ptr_type_node, ! void_list_node_1))); DECL_EXTERNAL (execclass_decl) = 1; DECL_ARTIFICIAL (execclass_decl) = 1; TREE_PUBLIC (execclass_decl) = 1; --- 1893,1900 ---- get_identifier (TAG_EXECCLASS), build_function_type (void_type_node, tree_cons (NULL_TREE, ptr_type_node, ! OBJC_VOID_AT_END))); ! DECL_EXTERNAL (execclass_decl) = 1; DECL_ARTIFICIAL (execclass_decl) = 1; TREE_PUBLIC (execclass_decl) = 1; *************** build_module_descriptor () *** 1776,1782 **** start_function (void_list_node_1, build_nt (CALL_EXPR, init_function_name, tree_cons (NULL_TREE, NULL_TREE, ! void_list_node_1), NULL_TREE), NULL_TREE); store_parm_decls (); --- 1908,1914 ---- start_function (void_list_node_1, build_nt (CALL_EXPR, init_function_name, tree_cons (NULL_TREE, NULL_TREE, ! OBJC_VOID_AT_END), NULL_TREE), NULL_TREE); store_parm_decls (); *************** build_module_descriptor () *** 1797,1803 **** c_expand_expr_stmt (decelerator); ! finish_function (0, 0); return XEXP (DECL_RTL (init_function_decl), 0); } --- 1929,1935 ---- c_expand_expr_stmt (decelerator); ! finish_function (); return XEXP (DECL_RTL (init_function_decl), 0); } *************** build_module_descriptor () *** 1806,1812 **** /* extern const char _OBJC_STRINGS[]; */ static void ! generate_forward_declaration_to_string_table () { tree sc_spec, decl_specs, expr_decl; --- 1938,1944 ---- /* extern const char _OBJC_STRINGS[]; */ static void ! generate_forward_declaration_to_string_table (void) { tree sc_spec, decl_specs, expr_decl; *************** generate_forward_declaration_to_string_t *** 1822,1830 **** /* Return the DECL of the string IDENT in the SECTION. */ static tree ! get_objc_string_decl (ident, section) ! tree ident; ! enum string_section section; { tree chain; --- 1954,1960 ---- /* Return the DECL of the string IDENT in the SECTION. */ static tree ! get_objc_string_decl (tree ident, enum string_section section) { tree chain; *************** get_objc_string_decl (ident, section) *** 1849,1855 **** for the array built. */ static void ! generate_static_references () { tree decls = NULL_TREE, ident, decl_spec, expr_decl, expr = NULL_TREE; tree class_name, class, decl, initlist; --- 1979,1985 ---- for the array built. */ static void ! generate_static_references (void) { tree decls = NULL_TREE, ident, decl_spec, expr_decl, expr = NULL_TREE; tree class_name, class, decl, initlist; *************** generate_static_references () *** 1879,1885 **** /* Output {class_name, ...}. */ class = TREE_VALUE (cl_chain); ! class_name = get_objc_string_decl (TYPE_NAME (class), class_names); initlist = build_tree_list (NULL_TREE, build_unary_op (ADDR_EXPR, class_name, 1)); --- 2009,2015 ---- /* Output {class_name, ...}. */ class = TREE_VALUE (cl_chain); ! class_name = get_objc_string_decl (OBJC_TYPE_NAME (class), class_names); initlist = build_tree_list (NULL_TREE, build_unary_op (ADDR_EXPR, class_name, 1)); *************** generate_static_references () *** 1894,1900 **** /* Output {..., NULL}. */ initlist = tree_cons (NULL_TREE, build_int_2 (0, 0), initlist); ! expr = build_constructor (TREE_TYPE (decl), nreverse (initlist)); finish_decl (decl, expr, NULL_TREE); TREE_USED (decl) = 1; --- 2024,2030 ---- /* Output {..., NULL}. */ initlist = tree_cons (NULL_TREE, build_int_2 (0, 0), initlist); ! expr = objc_build_constructor (TREE_TYPE (decl), nreverse (initlist)); finish_decl (decl, expr, NULL_TREE); TREE_USED (decl) = 1; *************** generate_static_references () *** 1917,1923 **** TREE_USED (static_instances_decl) = 1; DECL_CONTEXT (static_instances_decl) = 0; DECL_ARTIFICIAL (static_instances_decl) = 1; ! expr = build_constructor (TREE_TYPE (static_instances_decl), nreverse (decls)); finish_decl (static_instances_decl, expr, NULL_TREE); } --- 2047,2053 ---- TREE_USED (static_instances_decl) = 1; DECL_CONTEXT (static_instances_decl) = 0; DECL_ARTIFICIAL (static_instances_decl) = 1; ! expr = objc_build_constructor (TREE_TYPE (static_instances_decl), nreverse (decls)); finish_decl (static_instances_decl, expr, NULL_TREE); } *************** generate_static_references () *** 1925,1931 **** /* Output all strings. */ static void ! generate_strings () { tree sc_spec, decl_specs, expr_decl; tree chain, string_expr; --- 2055,2061 ---- /* Output all strings. */ static void ! generate_strings (void) { tree sc_spec, decl_specs, expr_decl; tree chain, string_expr; *************** generate_strings () *** 1977,1998 **** } } static tree ! build_selector_reference_decl () { tree decl, ident; char buf[256]; - static int idx = 0; ! sprintf (buf, "_OBJC_SELECTOR_REFERENCES_%d", idx++); ident = get_identifier (buf); decl = build_decl (VAR_DECL, ident, selector_type); DECL_EXTERNAL (decl) = 1; ! TREE_PUBLIC (decl) = 1; TREE_USED (decl) = 1; - TREE_READONLY (decl) = 1; DECL_ARTIFICIAL (decl) = 1; DECL_CONTEXT (decl) = 0; --- 2107,2128 ---- } } + static GTY(()) int selector_reference_idx; + static tree ! build_selector_reference_decl (void) { tree decl, ident; char buf[256]; ! sprintf (buf, "_OBJC_SELECTOR_REFERENCES_%d", selector_reference_idx++); ident = get_identifier (buf); decl = build_decl (VAR_DECL, ident, selector_type); DECL_EXTERNAL (decl) = 1; ! TREE_PUBLIC (decl) = 0; TREE_USED (decl) = 1; DECL_ARTIFICIAL (decl) = 1; DECL_CONTEXT (decl) = 0; *************** build_selector_reference_decl () *** 2005,2012 **** /* Just a handy wrapper for add_objc_string. */ static tree ! build_selector (ident) ! tree ident; { tree expr = add_objc_string (ident, meth_var_names); if (flag_typed_selectors) --- 2135,2141 ---- /* Just a handy wrapper for add_objc_string. */ static tree ! build_selector (tree ident) { tree expr = add_objc_string (ident, meth_var_names); if (flag_typed_selectors) *************** build_selector (ident) *** 2016,2022 **** } static void ! build_selector_translation_table () { tree sc_spec, decl_specs; tree chain, initlist = NULL_TREE; --- 2145,2151 ---- } static void ! build_selector_translation_table (void) { tree sc_spec, decl_specs; tree chain, initlist = NULL_TREE; *************** build_selector_translation_table () *** 2044,2055 **** if (!found) { /* Adjust line number for warning message. */ ! int save_lineno = lineno; if (flag_next_runtime && TREE_PURPOSE (chain)) ! lineno = DECL_SOURCE_LINE (TREE_PURPOSE (chain)); warning ("creating selector for non existant method %s", IDENTIFIER_POINTER (TREE_VALUE (chain))); ! lineno = save_lineno; } } --- 2173,2184 ---- if (!found) { /* Adjust line number for warning message. */ ! int save_lineno = input_line; if (flag_next_runtime && TREE_PURPOSE (chain)) ! input_line = DECL_SOURCE_LINE (TREE_PURPOSE (chain)); warning ("creating selector for non existant method %s", IDENTIFIER_POINTER (TREE_VALUE (chain))); ! input_line = save_lineno; } } *************** build_selector_translation_table () *** 2076,2082 **** if (flag_next_runtime) finish_decl (decl, expr, NULL_TREE); ! else { if (flag_typed_selectors) { --- 2205,2211 ---- if (flag_next_runtime) finish_decl (decl, expr, NULL_TREE); ! else { if (flag_typed_selectors) { *************** build_selector_translation_table () *** 2084,2094 **** tree encoding = get_proto_encoding (TREE_PURPOSE (chain)); eltlist = tree_cons (NULL_TREE, expr, NULL_TREE); eltlist = tree_cons (NULL_TREE, encoding, eltlist); ! expr = build_constructor (objc_selector_template, ! nreverse (eltlist)); } initlist = tree_cons (NULL_TREE, expr, initlist); ! } } --- 2213,2223 ---- tree encoding = get_proto_encoding (TREE_PURPOSE (chain)); eltlist = tree_cons (NULL_TREE, expr, NULL_TREE); eltlist = tree_cons (NULL_TREE, encoding, eltlist); ! expr = objc_build_constructor (objc_selector_template, ! nreverse (eltlist)); } initlist = tree_cons (NULL_TREE, expr, initlist); ! } } *************** build_selector_translation_table () *** 2100,2128 **** /* NULL terminate the list and fix the decl for output. */ initlist = tree_cons (NULL_TREE, build_int_2 (0, 0), initlist); DECL_INITIAL (UOBJC_SELECTOR_TABLE_decl) = objc_ellipsis_node; ! initlist = build_constructor (TREE_TYPE (UOBJC_SELECTOR_TABLE_decl), ! nreverse (initlist)); finish_decl (UOBJC_SELECTOR_TABLE_decl, initlist, NULL_TREE); current_function_decl = NULL_TREE; } } static tree ! get_proto_encoding (proto) ! tree proto; { tree encoding; if (proto) { - tree tmp_decl; - if (! METHOD_ENCODING (proto)) { ! tmp_decl = build_tmp_function_decl (); ! hack_method_prototype (proto, tmp_decl); ! encoding = encode_method_prototype (proto, tmp_decl); ! METHOD_ENCODING (proto) = encoding; ! } else encoding = METHOD_ENCODING (proto); --- 2229,2252 ---- /* NULL terminate the list and fix the decl for output. */ initlist = tree_cons (NULL_TREE, build_int_2 (0, 0), initlist); DECL_INITIAL (UOBJC_SELECTOR_TABLE_decl) = objc_ellipsis_node; ! initlist = objc_build_constructor (TREE_TYPE (UOBJC_SELECTOR_TABLE_decl), ! nreverse (initlist)); finish_decl (UOBJC_SELECTOR_TABLE_decl, initlist, NULL_TREE); current_function_decl = NULL_TREE; } } static tree ! get_proto_encoding (tree proto) { tree encoding; if (proto) { if (! METHOD_ENCODING (proto)) { ! encoding = encode_method_prototype (proto); ! METHOD_ENCODING (proto) = encoding; ! } else encoding = METHOD_ENCODING (proto); *************** get_proto_encoding (proto) *** 2136,2143 **** identifier_node that represent the selector. */ static tree ! build_typed_selector_reference (ident, prototype) ! tree ident, prototype; { tree *chain = &sel_ref_chain; tree expr; --- 2260,2266 ---- identifier_node that represent the selector. */ static tree ! build_typed_selector_reference (tree ident, tree prototype) { tree *chain = &sel_ref_chain; tree expr; *************** build_typed_selector_reference (ident, p *** 2163,2170 **** } static tree ! build_selector_reference (ident) ! tree ident; { tree *chain = &sel_ref_chain; tree expr; --- 2286,2292 ---- } static tree ! build_selector_reference (tree ident) { tree *chain = &sel_ref_chain; tree expr; *************** build_selector_reference (ident) *** 2192,2213 **** build_int_2 (index, 0))); } static tree ! build_class_reference_decl () { tree decl, ident; char buf[256]; - static int idx = 0; ! sprintf (buf, "_OBJC_CLASS_REFERENCES_%d", idx++); ident = get_identifier (buf); decl = build_decl (VAR_DECL, ident, objc_class_type); DECL_EXTERNAL (decl) = 1; ! TREE_PUBLIC (decl) = 1; TREE_USED (decl) = 1; - TREE_READONLY (decl) = 1; DECL_CONTEXT (decl) = 0; DECL_ARTIFICIAL (decl) = 1; --- 2314,2335 ---- build_int_2 (index, 0))); } + static GTY(()) int class_reference_idx; + static tree ! build_class_reference_decl (void) { tree decl, ident; char buf[256]; ! sprintf (buf, "_OBJC_CLASS_REFERENCES_%d", class_reference_idx++); ident = get_identifier (buf); decl = build_decl (VAR_DECL, ident, objc_class_type); DECL_EXTERNAL (decl) = 1; ! TREE_PUBLIC (decl) = 0; TREE_USED (decl) = 1; DECL_CONTEXT (decl) = 0; DECL_ARTIFICIAL (decl) = 1; *************** build_class_reference_decl () *** 2221,2228 **** it. */ static void ! add_class_reference (ident) ! tree ident; { tree chain; --- 2343,2349 ---- it. */ static void ! add_class_reference (tree ident) { tree chain; *************** add_class_reference (ident) *** 2250,2259 **** reference variable. */ tree ! get_class_reference (ident) ! tree ident; { ! if (flag_next_runtime) { tree *chain; tree decl; --- 2371,2397 ---- reference variable. */ tree ! get_class_reference (tree ident) { ! tree orig_ident; ! ! #ifdef OBJCPLUS ! if (processing_template_decl) ! /* Must wait until template instantiation time. */ ! return build_min_nt (CLASS_REFERENCE_EXPR, ident); ! if (TREE_CODE (ident) == TYPE_DECL) ! ident = DECL_NAME (ident); ! #endif ! orig_ident = ident; ! ! if (!(ident = is_class_name (ident))) ! { ! error ("`%s' is not an Objective-C class name or alias", ! IDENTIFIER_POINTER (orig_ident)); ! return error_mark_node; ! } ! ! if (flag_next_runtime && !flag_zero_link) { tree *chain; tree decl; *************** get_class_reference (ident) *** 2290,2298 **** to decls for the strings. */ static tree ! add_objc_string (ident, section) ! tree ident; ! enum string_section section; { tree *chain, decl; --- 2428,2434 ---- to decls for the strings. */ static tree ! add_objc_string (tree ident, enum string_section section) { tree *chain, decl; *************** add_objc_string (ident, section) *** 2320,2334 **** return build_unary_op (ADDR_EXPR, decl, 1); } static tree ! build_objc_string_decl (section) ! enum string_section section; { tree decl, ident; char buf[256]; - static int class_names_idx = 0; - static int meth_var_names_idx = 0; - static int meth_var_types_idx = 0; if (section == class_names) sprintf (buf, "_OBJC_CLASS_NAME_%d", class_names_idx++); --- 2456,2470 ---- return build_unary_op (ADDR_EXPR, decl, 1); } + static GTY(()) int class_names_idx; + static GTY(()) int meth_var_names_idx; + static GTY(()) int meth_var_types_idx; + static tree ! build_objc_string_decl (enum string_section section) { tree decl, ident; char buf[256]; if (section == class_names) sprintf (buf, "_OBJC_CLASS_NAME_%d", class_names_idx++); *************** build_objc_string_decl (section) *** 2341,2353 **** decl = build_decl (VAR_DECL, ident, build_array_type (char_type_node, 0)); DECL_EXTERNAL (decl) = 1; ! TREE_PUBLIC (decl) = 1; TREE_USED (decl) = 1; - TREE_READONLY (decl) = 1; TREE_CONSTANT (decl) = 1; DECL_CONTEXT (decl) = 0; DECL_ARTIFICIAL (decl) = 1; ! make_decl_rtl (decl, 0); pushdecl_top_level (decl); --- 2477,2488 ---- decl = build_decl (VAR_DECL, ident, build_array_type (char_type_node, 0)); DECL_EXTERNAL (decl) = 1; ! TREE_PUBLIC (decl) = 0; TREE_USED (decl) = 1; TREE_CONSTANT (decl) = 1; DECL_CONTEXT (decl) = 0; DECL_ARTIFICIAL (decl) = 1; ! make_decl_rtl (decl, 0); pushdecl_top_level (decl); *************** build_objc_string_decl (section) *** 2356,2394 **** void ! objc_declare_alias (alias_ident, class_ident) ! tree alias_ident; ! tree class_ident; { ! if (is_class_name (class_ident) != class_ident) warning ("cannot find class `%s'", IDENTIFIER_POINTER (class_ident)); else if (is_class_name (alias_ident)) warning ("class `%s' already exists", IDENTIFIER_POINTER (alias_ident)); else ! alias_chain = tree_cons (class_ident, alias_ident, alias_chain); } void ! objc_declare_class (ident_list) ! tree ident_list; { tree list; for (list = ident_list; list; list = TREE_CHAIN (list)) { tree ident = TREE_VALUE (list); - tree decl; ! if ((decl = lookup_name (ident))) { ! error ("`%s' redeclared as different kind of symbol", ! IDENTIFIER_POINTER (ident)); ! error_with_decl (decl, "previous declaration of `%s'"); ! } ! if (! is_class_name (ident)) ! { ! tree record = xref_tag (RECORD_TYPE, ident); TREE_STATIC_TEMPLATE (record) = 1; class_chain = tree_cons (NULL_TREE, ident, class_chain); } --- 2491,2541 ---- void ! objc_declare_alias (tree alias_ident, tree class_ident) { ! tree underlying_class; ! ! #ifdef OBJCPLUS ! if (current_namespace != global_namespace) { ! error ("Objective-C declarations may only appear in global scope"); ! } ! #endif /* OBJCPLUS */ ! ! if (!(underlying_class = is_class_name (class_ident))) warning ("cannot find class `%s'", IDENTIFIER_POINTER (class_ident)); else if (is_class_name (alias_ident)) warning ("class `%s' already exists", IDENTIFIER_POINTER (alias_ident)); else ! alias_chain = tree_cons (underlying_class, alias_ident, alias_chain); } void ! objc_declare_class (tree ident_list) { tree list; + #ifdef OBJCPLUS + if (current_namespace != global_namespace) { + error ("Objective-C declarations may only appear in global scope"); + } + #endif /* OBJCPLUS */ for (list = ident_list; list; list = TREE_CHAIN (list)) { tree ident = TREE_VALUE (list); ! if (! is_class_name (ident)) { ! tree record = lookup_name (ident); ! ! if (record && ! TREE_STATIC_TEMPLATE (record)) ! { ! error ("`%s' redeclared as different kind of symbol", ! IDENTIFIER_POINTER (ident)); ! error ("%Jprevious declaration of '%D'", ! record, record); ! } ! record = xref_tag (RECORD_TYPE, ident); TREE_STATIC_TEMPLATE (record) = 1; class_chain = tree_cons (NULL_TREE, ident, class_chain); } *************** objc_declare_class (ident_list) *** 2396,2406 **** } tree ! is_class_name (ident) ! tree ident; { tree chain; if (lookup_interface (ident)) return ident; --- 2543,2567 ---- } tree ! is_class_name (tree ident) { tree chain; + if (ident && TREE_CODE (ident) == IDENTIFIER_NODE + && identifier_global_value (ident)) + ident = identifier_global_value (ident); + while (ident && TREE_CODE (ident) == TYPE_DECL && DECL_ORIGINAL_TYPE (ident)) + ident = TYPE_NAME (DECL_ORIGINAL_TYPE (ident)); + + #ifdef OBJCPLUS + if (ident && TREE_CODE (ident) == RECORD_TYPE) + ident = TYPE_NAME (ident); + if (ident && TREE_CODE (ident) == TYPE_DECL) + ident = DECL_NAME (ident); + #endif + if (!ident || TREE_CODE (ident) != IDENTIFIER_NODE) + return NULL_TREE; + if (lookup_interface (ident)) return ident; *************** is_class_name (ident) *** 2419,2466 **** return 0; } tree ! objc_is_id (ident) ! tree ident; { ! /* NB: This function may be called before the ObjC front-end ! has been initialized, in which case ID_TYPE will be NULL. */ ! return (id_type && ident && TYPE_P (ident) && IS_ID (ident)) ! ? id_type ! : NULL_TREE; } tree ! lookup_interface (ident) ! tree ident; { tree chain; for (chain = interface_chain; chain; chain = TREE_CHAIN (chain)) { if (ident == CLASS_NAME (chain)) ! return chain; } return NULL_TREE; } /* Used by: build_private_template, continue_class, and for @defs constructs. */ ! tree ! get_class_ivars (interface) ! tree interface; { tree my_name, super_name, ivar_chain; my_name = CLASS_NAME (interface); super_name = CLASS_SUPER_NAME (interface); ! ivar_chain = CLASS_IVARS (interface); ! ! /* Save off a pristine copy of the leaf ivars (i.e, those not ! inherited from a super class). */ ! if (!CLASS_OWN_IVARS (interface)) ! CLASS_OWN_IVARS (interface) = copy_list (ivar_chain); while (super_name) { --- 2580,2673 ---- return 0; } + /* Check whether TYPE is either 'id', 'Class', or a pointer to an ObjC + class instance. This is needed by other parts of the compiler to + handle ObjC types gracefully. */ + tree ! objc_is_object_ptr (tree type) { ! type = TYPE_MAIN_VARIANT (type); ! if (!type || TREE_CODE (type) != POINTER_TYPE) ! return 0; ! /* NB: This function may be called before the ObjC front-end has ! been initialized, in which case ID_TYPE will be NULL. */ ! if (id_type && type && TYPE_P (type) ! && (IS_ID (type) ! || TREE_TYPE (type) == TREE_TYPE (objc_class_type))) ! return type; ! return is_class_name (OBJC_TYPE_NAME (TREE_TYPE (type))); } tree ! lookup_interface (tree ident) { tree chain; + #ifdef OBJCPLUS + if (ident && TREE_CODE (ident) == TYPE_DECL) + ident = DECL_NAME (ident); + #endif for (chain = interface_chain; chain; chain = TREE_CHAIN (chain)) { if (ident == CLASS_NAME (chain)) ! return chain; } return NULL_TREE; } + /* Implement @defs () within struct bodies. */ + + tree + get_class_ivars_from_name (tree class_name) + { + tree interface = lookup_interface (class_name); + tree field, fields = NULL_TREE; + + if (interface) + { + tree raw_ivar = get_class_ivars (interface, 1); + + /* Regenerate the FIELD_DECLs for the enclosing struct. */ + for (; raw_ivar; raw_ivar = TREE_CHAIN (raw_ivar)) + { + field = grokfield (TREE_PURPOSE (TREE_VALUE (raw_ivar)), + TREE_PURPOSE (raw_ivar), + TREE_VALUE (TREE_VALUE (raw_ivar))); + #ifdef OBJCPLUS + finish_member_declaration (field); + #else + fields = chainon (fields, field); + #endif + } + } + else + error ("cannot find interface declaration for `%s'", + IDENTIFIER_POINTER (class_name)); + + return fields; + } + /* Used by: build_private_template, continue_class, and for @defs constructs. */ ! static tree ! get_class_ivars (tree interface, int raw) { tree my_name, super_name, ivar_chain; my_name = CLASS_NAME (interface); super_name = CLASS_SUPER_NAME (interface); ! if (raw) ! ivar_chain = CLASS_RAW_IVARS (interface); ! else ! { ! ivar_chain = CLASS_IVARS (interface); ! /* Save off a pristine copy of the leaf ivars (i.e, those not ! inherited from a super class). */ ! if (!CLASS_OWN_IVARS (interface)) ! CLASS_OWN_IVARS (interface) = copy_list (ivar_chain); ! } while (super_name) { *************** get_class_ivars (interface) *** 2484,2490 **** my_name = CLASS_NAME (interface); super_name = CLASS_SUPER_NAME (interface); ! op1 = CLASS_OWN_IVARS (interface); if (op1) { tree head = copy_list (op1); --- 2691,2697 ---- my_name = CLASS_NAME (interface); super_name = CLASS_SUPER_NAME (interface); ! op1 = (raw ? CLASS_RAW_IVARS (interface) : CLASS_OWN_IVARS (interface)); if (op1) { tree head = copy_list (op1); *************** get_class_ivars (interface) *** 2495,2511 **** ivar_chain = head; } } return ivar_chain; } /* struct { struct objc_class *isa; ... }; */ static tree ! build_private_template (class) ! tree class; { tree ivar_context; --- 2702,3399 ---- ivar_chain = head; } } + return ivar_chain; } + static tree + objc_enter_block (void) + { + tree block; + + #ifdef OBJCPLUS + block = begin_compound_stmt (0); + #else + block = c_begin_compound_stmt (); + pushlevel (0); + clear_last_expr (); + add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0); + #endif + + objc_exception_block_stack = tree_cons (NULL_TREE, block, + objc_exception_block_stack); + + blk_nesting_count++; + return block; + } + + static tree + objc_exit_block (void) + { + tree block = TREE_VALUE (objc_exception_block_stack); + #ifndef OBJCPLUS + tree scope_stmt, inner; + #endif + + objc_clear_super_receiver (); + #ifdef OBJCPLUS + finish_compound_stmt (0, block); + #else + scope_stmt = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); + inner = poplevel (KEEP_MAYBE, 1, 0); + + SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmt)) + = SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmt)) + = inner; + RECHAIN_STMTS (block, COMPOUND_BODY (block)); + #endif + last_expr_type = NULL_TREE; + objc_exception_block_stack = TREE_CHAIN (objc_exception_block_stack); + + blk_nesting_count--; + return block; + } + + static tree + objc_declare_variable (enum rid scspec, tree name, tree type, tree init) + { + tree decl; + + type = tree_cons (NULL_TREE, type, + tree_cons (NULL_TREE, ridpointers[(int) scspec], + NULL_TREE)); + TREE_STATIC (type) = 1; + decl = start_decl (name, type, (init != NULL_TREE), NULL_TREE); + finish_decl (decl, init, NULL_TREE); + /* This prevents `unused variable' warnings when compiling with -Wall. */ + TREE_USED (decl) = 1; + DECL_ARTIFICIAL (decl) = 1; + return decl; + } + + tree + objc_build_throw_stmt (tree throw_expr) + { + tree func_params; + + if (!flag_objc_exceptions) + fatal_error ("Use `-fobjc-exceptions' to enable Objective-C exception syntax"); + + if (!throw_expr && objc_caught_exception) + throw_expr = TREE_VALUE (objc_caught_exception); + + if (!throw_expr) + { + error ("`@throw;' (rethrow) used outside of a `@catch' block"); + return error_mark_node; + } + + func_params = tree_cons (NULL_TREE, throw_expr, NULL_TREE); + + assemble_external (objc_exception_throw_decl); + return c_expand_expr_stmt (build_function_call (objc_exception_throw_decl, + func_params)); + } + + static void + val_stack_push (struct val_stack **nc, long val) + { + struct val_stack *new_elem = xmalloc (sizeof (struct val_stack)); + new_elem->val = val; + new_elem->next = *nc; + *nc = new_elem; + } + + static void + val_stack_pop (struct val_stack **nc) + { + struct val_stack *old_elem = *nc; + *nc = old_elem->next; + free (old_elem); + } + + static void + objc_build_try_enter_fragment (void) + { + /* objc_exception_try_enter(&_stackExceptionData); + if (!_setjmp(&_stackExceptionData.buf)) { */ + + tree func_params, if_stmt, cond; + + func_params + = tree_cons (NULL_TREE, + build_unary_op (ADDR_EXPR, + TREE_VALUE (objc_stack_exception_data), + 0), + NULL_TREE); + + assemble_external (objc_exception_try_enter_decl); + c_expand_expr_stmt (build_function_call + (objc_exception_try_enter_decl, func_params)); + + if_stmt = c_begin_if_stmt (); + if_nesting_count++; + /* If has been included, the _setjmp prototype has + acquired a real, breathing type for its parameter. Cast our + argument to that type. */ + func_params + = tree_cons (NULL_TREE, + build_c_cast (TYPE_ARG_TYPES (TREE_TYPE (objc_setjmp_decl)) + ? TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (objc_setjmp_decl))) + : ptr_type_node, + build_unary_op + (ADDR_EXPR, + build_component_ref (TREE_VALUE (objc_stack_exception_data), + get_identifier ("buf")), 0)), + NULL_TREE); + assemble_external (objc_setjmp_decl); + cond = build_unary_op (TRUTH_NOT_EXPR, + build_function_call (objc_setjmp_decl, func_params), + 0); + c_expand_start_cond (c_common_truthvalue_conversion (cond), + 0, if_stmt); + objc_enter_block (); + } + + static tree + objc_build_extract_expr (void) + { + /* ... = objc_exception_extract(&_stackExceptionData); */ + + tree func_params + = tree_cons (NULL_TREE, + build_unary_op (ADDR_EXPR, + TREE_VALUE (objc_stack_exception_data), 0), + NULL_TREE); + + assemble_external (objc_exception_extract_decl); + return build_function_call (objc_exception_extract_decl, func_params); + } + + static void + objc_build_try_exit_fragment (void) + { + /* objc_exception_try_exit(&_stackExceptionData); */ + + tree func_params + = tree_cons (NULL_TREE, + build_unary_op (ADDR_EXPR, + TREE_VALUE (objc_stack_exception_data), 0), + NULL_TREE); + + assemble_external (objc_exception_try_exit_decl); + c_expand_expr_stmt (build_function_call (objc_exception_try_exit_decl, + func_params)); + } + + static void + objc_build_extract_fragment (void) + { + /* } else { + _rethrowException = objc_exception_extract(&_stackExceptionData); + } */ + + objc_exit_block (); + c_finish_then (); + + c_expand_start_else (); + objc_enter_block (); + c_expand_expr_stmt (build_modify_expr + (TREE_VALUE (objc_rethrow_exception), + NOP_EXPR, + objc_build_extract_expr ())); + objc_exit_block (); + c_finish_else (); + c_expand_end_cond (); + if_nesting_count--; + } + + tree + objc_build_try_prologue (void) + { + /* { // new scope + struct _objc_exception_data _stackExceptionData; + volatile id _rethrowException = nil; + { // begin TRY-CATCH scope + objc_exception_try_enter(&_stackExceptionData); + if (!_setjmp(&_stackExceptionData.buf)) { */ + + tree try_catch_block; + + if (!flag_objc_exceptions) + fatal_error ("Use `-fobjc-exceptions' to enable Objective-C exception syntax"); + + objc_mark_locals_volatile ((void *)(exc_binding_stack + ? exc_binding_stack->val + : 0)); + objc_enter_block (); + objc_stack_exception_data + = tree_cons (NULL_TREE, + objc_declare_variable (RID_AUTO, + get_identifier (UTAG_EXCDATA_VAR), + xref_tag (RECORD_TYPE, + get_identifier (UTAG_EXCDATA)), + NULL_TREE), + objc_stack_exception_data); + objc_rethrow_exception = tree_cons (NULL_TREE, + objc_declare_variable (RID_VOLATILE, + get_identifier (UTAG_RETHROWEXC_VAR), + id_type, + build_int_2 (0, 0)), + objc_rethrow_exception); + + try_catch_block = objc_enter_block (); + val_stack_push (&exc_binding_stack, (long) get_current_scope ()); + objc_build_try_enter_fragment (); + + return try_catch_block; + } + + void + objc_build_try_epilogue (int also_catch_prologue) + { + if (also_catch_prologue) + { + /* } else { + register id _caughtException = objc_exception_extract( &_stackExceptionData); + objc_exception_try_enter(&_stackExceptionData); + if(!_setjmp(&_stackExceptionData.buf)) { + if (0) { */ + + tree if_stmt; + + objc_exit_block (); + c_finish_then (); + + c_expand_start_else (); + objc_enter_block (); + objc_caught_exception + = tree_cons (NULL_TREE, + objc_declare_variable (RID_REGISTER, + get_identifier (UTAG_CAUGHTEXC_VAR), + id_type, + objc_build_extract_expr ()), + objc_caught_exception); + objc_build_try_enter_fragment (); + val_stack_push (&catch_count_stack, 1); + if_stmt = c_begin_if_stmt (); + if_nesting_count++; + c_expand_start_cond (c_common_truthvalue_conversion (boolean_false_node), + 0, if_stmt); + objc_enter_block (); + + /* Start a new chain of @catch statements for this @try. */ + objc_catch_type = tree_cons (objc_catch_type, NULL_TREE, NULL_TREE); + } + else + { /* !also_catch_prologue */ + + /* } else { + _rethrowException = objc_exception_extract( &_stackExceptionData); + } + } */ + objc_build_extract_fragment (); + objc_exit_block (); + } + } + + void + objc_build_catch_stmt (tree catch_expr) + { + /* } else if (objc_exception_match(objc_get_class("SomeClass"), _caughtException)) { + register SomeClass *e = _caughtException; */ + + tree if_stmt, cond, func_params, prev_catch, var_name, var_type; + int catch_id; + + #ifndef OBJCPLUS + /* Yet another C/C++ impedance mismatch. */ + catch_expr = TREE_PURPOSE (catch_expr); + #endif + + var_name = TREE_VALUE (catch_expr); + var_type = TREE_VALUE (TREE_PURPOSE (catch_expr)); + if (TREE_CODE (var_name) == INDIRECT_REF) + var_name = TREE_OPERAND (var_name, 0); + if (TREE_CODE (var_type) == TYPE_DECL + || TREE_CODE (var_type) == POINTER_TYPE) + var_type = TREE_TYPE (var_type); + catch_id = (var_type == TREE_TYPE (id_type)); + + if (!flag_objc_exceptions) + fatal_error ("Use `-fobjc-exceptions' to enable Objective-C exception syntax"); + + if (!(catch_id || TYPED_OBJECT (var_type))) + fatal_error ("`@catch' parameter is not a known Objective-C class type"); + + /* Examine previous @catch clauses for the current @try block for + superclasses of the 'var_type' class. */ + for (prev_catch = objc_catch_type; TREE_VALUE (prev_catch); + prev_catch = TREE_CHAIN (prev_catch)) + { + if (TREE_VALUE (prev_catch) == TREE_TYPE (id_type)) + { + warning ("Exception already handled by preceding `@catch(id)'"); + break; + } + else if (!catch_id + && objc_comptypes (TREE_VALUE (prev_catch), var_type, 0) == 1) + warning ("Exception of type `%s *' already handled by `@catch (%s *)'", + IDENTIFIER_POINTER (OBJC_TYPE_NAME (var_type)), + IDENTIFIER_POINTER (OBJC_TYPE_NAME (TREE_VALUE (prev_catch)))); + } + + objc_catch_type = tree_cons (NULL_TREE, var_type, objc_catch_type); + + objc_exit_block (); + c_finish_then (); + + c_expand_start_else (); + catch_count_stack->val++; + if_stmt = c_begin_if_stmt (); + if_nesting_count++; + + if (catch_id) + cond = integer_one_node; + else + { + cond = get_class_reference (OBJC_TYPE_NAME (var_type)); + + func_params + = tree_cons (NULL_TREE, cond, + tree_cons (NULL_TREE, + TREE_VALUE (objc_caught_exception), + NULL_TREE)); + assemble_external (objc_exception_match_decl); + cond = build_function_call (objc_exception_match_decl, func_params); + } + + c_expand_start_cond (c_common_truthvalue_conversion (cond), + 0, if_stmt); + objc_enter_block (); + objc_declare_variable (RID_REGISTER, var_name, + build_pointer_type (var_type), + TREE_VALUE (objc_caught_exception)); + } + + void + objc_build_catch_epilogue (void) + { + /* } else { + _rethrowException = _caughtException; + objc_exception_try_exit(&_stackExceptionData); + } + } else { + _rethrowException = objc_exception_extract(&_stackExceptionData); + } + } + } // end TRY-CATCH scope + */ + + objc_exit_block (); + c_finish_then (); + + c_expand_start_else (); + objc_enter_block (); + c_expand_expr_stmt + (build_modify_expr + (TREE_VALUE (objc_rethrow_exception), + NOP_EXPR, + TREE_VALUE (objc_caught_exception))); + objc_build_try_exit_fragment (); + objc_exit_block (); + while (catch_count_stack->val--) + { + c_finish_else (); /* close off all the nested ifs ! */ + c_expand_end_cond (); + if_nesting_count--; + } + val_stack_pop (&catch_count_stack); + objc_caught_exception = TREE_CHAIN (objc_caught_exception); + + objc_build_extract_fragment (); + + objc_exit_block (); + c_finish_else (); + c_expand_end_cond (); + if_nesting_count--; + objc_exit_block (); + + /* Return to enclosing chain of @catch statements (if any). */ + while (TREE_VALUE (objc_catch_type)) + objc_catch_type = TREE_CHAIN (objc_catch_type); + objc_catch_type = TREE_PURPOSE (objc_catch_type); + } + + tree + objc_build_finally_prologue (void) + { + /* { // begin FINALLY scope + if (!_rethrowException) { + objc_exception_try_exit(&_stackExceptionData); + } */ + + tree blk = objc_enter_block (); + + tree if_stmt = c_begin_if_stmt (); + if_nesting_count++; + + c_expand_start_cond (c_common_truthvalue_conversion + (build_unary_op + (TRUTH_NOT_EXPR, + TREE_VALUE (objc_rethrow_exception), 0)), + 0, if_stmt); + objc_enter_block (); + objc_build_try_exit_fragment (); + objc_exit_block (); + c_finish_then (); + c_expand_end_cond (); + if_nesting_count--; + + return blk; + } + + tree + objc_build_finally_epilogue (void) + { + /* if (_rethrowException) { + objc_exception_throw(_rethrowException); + } + } // end FINALLY scope + } */ + + tree if_stmt = c_begin_if_stmt (); + if_nesting_count++; + + c_expand_start_cond + (c_common_truthvalue_conversion (TREE_VALUE (objc_rethrow_exception)), + 0, if_stmt); + objc_enter_block (); + objc_build_throw_stmt (TREE_VALUE (objc_rethrow_exception)); + objc_exit_block (); + c_finish_then (); + c_expand_end_cond (); + if_nesting_count--; + + objc_exit_block (); + objc_rethrow_exception = TREE_CHAIN (objc_rethrow_exception); + objc_stack_exception_data = TREE_CHAIN (objc_stack_exception_data); + + val_stack_pop (&exc_binding_stack); + return objc_exit_block (); + } + + tree + objc_build_try_catch_finally_stmt (int has_catch, int has_finally) + { + /* NB: The operative assumption here is that TRY_FINALLY_EXPR will + deal with all exits from 'try_catch_blk' and route them through + 'finally_blk'. */ + tree outer_blk = objc_build_finally_epilogue (); + tree prec_stmt = TREE_CHAIN (TREE_CHAIN (COMPOUND_BODY (outer_blk))); + tree try_catch_blk = TREE_CHAIN (prec_stmt), try_catch_expr; + tree finally_blk = TREE_CHAIN (try_catch_blk), finally_expr; + tree succ_stmt = TREE_CHAIN (finally_blk); + tree try_finally_stmt, try_finally_expr; + + if (!flag_objc_exceptions) + fatal_error ("Use `-fobjc-exceptions' to enable Objective-C exception syntax"); + + /* It is an error to have a @try block without a @catch and/or @finally + (even though sensible code can be generated nonetheless). */ + + if (!has_catch && !has_finally) + error ("`@try' without `@catch' or `@finally'"); + + /* We shall now do something truly disgusting. We shall remove the + 'try_catch_blk' and 'finally_blk' from the 'outer_blk' statement + chain, and replace them with a TRY_FINALLY_EXPR statement! If + this doesn't work, we will have to learn (from Per/gcj) how to + construct the 'outer_blk' lazily. */ + + TREE_CHAIN (try_catch_blk) = TREE_CHAIN (finally_blk) = NULL_TREE; + try_catch_expr = build1 (STMT_EXPR, void_type_node, try_catch_blk); + TREE_SIDE_EFFECTS (try_catch_expr) = 1; + finally_expr = build1 (STMT_EXPR, void_type_node, finally_blk); + TREE_SIDE_EFFECTS (finally_expr) = 1; + try_finally_expr = build (TRY_FINALLY_EXPR, void_type_node, try_catch_expr, + finally_expr); + TREE_SIDE_EFFECTS (try_finally_expr) = 1; + try_finally_stmt = build_stmt (EXPR_STMT, try_finally_expr); + TREE_CHAIN (prec_stmt) = try_finally_stmt; + TREE_CHAIN (try_finally_stmt) = succ_stmt; + + return outer_blk; /* the whole enchilada */ + } + + void + objc_build_synchronized_prologue (tree sync_expr) + { + /* { + id _eval_once = ; + @try { + objc_sync_enter( _eval_once ); */ + + tree func_params; + + if (!flag_objc_exceptions) + fatal_error ("Use `-fobjc-exceptions' to enable Objective-C exception syntax"); + + objc_enter_block (); + objc_eval_once + = tree_cons (NULL_TREE, + objc_declare_variable (RID_AUTO, + get_identifier (UTAG_EVALONCE_VAR), + id_type, + sync_expr), + objc_eval_once); + objc_build_try_prologue (); + objc_enter_block (); + func_params = tree_cons (NULL_TREE, + TREE_VALUE (objc_eval_once), + NULL_TREE); + + assemble_external (objc_sync_enter_decl); + c_expand_expr_stmt (build_function_call + (objc_sync_enter_decl, func_params)); + } + + tree + objc_build_synchronized_epilogue (void) + { + /* } + @finally { + objc_sync_exit( _eval_once ); + } + } */ + + tree func_params; + + objc_exit_block (); + objc_build_try_epilogue (0); + objc_build_finally_prologue (); + func_params = tree_cons (NULL_TREE, TREE_VALUE (objc_eval_once), + NULL_TREE); + + assemble_external (objc_sync_exit_decl); + c_expand_expr_stmt (build_function_call (objc_sync_exit_decl, + func_params)); + objc_build_try_catch_finally_stmt (0, 1); + + return objc_exit_block (); + } + + /* Predefine the following data type: + + struct _objc_exception_data + { + int buf[_JBLEN]; + void *pointers[4]; + }; */ + + /* The following yuckiness should prevent users from having to #include + in their code... */ + + #ifdef TARGET_POWERPC + /* snarfed from /usr/include/ppc/setjmp.h */ + #define _JBLEN (26 + 36 + 129 + 1) + #else + /* snarfed from /usr/include/i386/{setjmp,signal}.h */ + #define _JBLEN 18 + #endif + + static void + build_objc_exception_stuff (void) + { + tree field_decl, field_decl_chain, index, temp_type; + + /* Suppress outputting debug symbols, because + dbxout_init hasn't been called yet. */ + enum debug_info_type save_write_symbols = write_symbols; + const struct gcc_debug_hooks *save_hooks = debug_hooks; + + write_symbols = NO_DEBUG; + debug_hooks = &do_nothing_debug_hooks; + objc_exception_data_template + = start_struct (RECORD_TYPE, get_identifier (UTAG_EXCDATA)); + + /* int buf[_JBLEN]; */ + + index = build_index_type (build_int_2 (_JBLEN - 1, 0)); + field_decl = create_builtin_decl (FIELD_DECL, + build_array_type (integer_type_node, index), + "buf"); + field_decl_chain = field_decl; + + /* void *pointers[4]; */ + + index = build_index_type (build_int_2 (4 - 1, 0)); + field_decl = create_builtin_decl (FIELD_DECL, + build_array_type (ptr_type_node, index), + "pointers"); + chainon (field_decl_chain, field_decl); + + finish_struct (objc_exception_data_template, field_decl_chain, NULL_TREE); + + /* int _setjmp(...); */ + /* If the user includes , this shall be superceded by + 'int _setjmp(jmp_buf);' */ + temp_type = build_function_type (integer_type_node, NULL_TREE); + objc_setjmp_decl + = builtin_function (TAG_SETJMP, temp_type, 0, NOT_BUILT_IN, NULL, NULL_TREE); + + /* id objc_exception_extract(struct _objc_exception_data *); */ + temp_type + = build_function_type (id_type, + tree_cons (NULL_TREE, + build_pointer_type (objc_exception_data_template), + OBJC_VOID_AT_END)); + objc_exception_extract_decl + = builtin_function (TAG_EXCEPTIONEXTRACT, temp_type, 0, NOT_BUILT_IN, NULL, NULL_TREE); + /* void objc_exception_try_enter(struct _objc_exception_data *); */ + /* void objc_exception_try_exit(struct _objc_exception_data *); */ + temp_type + = build_function_type (void_type_node, + tree_cons (NULL_TREE, + build_pointer_type (objc_exception_data_template), + OBJC_VOID_AT_END)); + objc_exception_try_enter_decl + = builtin_function (TAG_EXCEPTIONTRYENTER, temp_type, 0, NOT_BUILT_IN, NULL, NULL_TREE); + objc_exception_try_exit_decl + = builtin_function (TAG_EXCEPTIONTRYEXIT, temp_type, 0, NOT_BUILT_IN, NULL, NULL_TREE); + /* void objc_exception_throw(id) __attribute__((noreturn)); */ + /* void objc_sync_enter(id); */ + /* void objc_sync_exit(id); */ + temp_type = build_function_type (void_type_node, + tree_cons (NULL_TREE, id_type, + OBJC_VOID_AT_END)); + objc_exception_throw_decl + = builtin_function (TAG_EXCEPTIONTHROW, temp_type, 0, NOT_BUILT_IN, NULL, NULL_TREE); + DECL_ATTRIBUTES (objc_exception_throw_decl) + = tree_cons (get_identifier ("noreturn"), NULL_TREE, NULL_TREE); + objc_sync_enter_decl + = builtin_function (TAG_SYNCENTER, temp_type, 0, NOT_BUILT_IN, NULL, NULL_TREE); + objc_sync_exit_decl + = builtin_function (TAG_SYNCEXIT, temp_type, 0, NOT_BUILT_IN, NULL, NULL_TREE); + /* int objc_exception_match(id, id); */ + temp_type = build_function_type (integer_type_node, + tree_cons (NULL_TREE, id_type, + tree_cons (NULL_TREE, id_type, + OBJC_VOID_AT_END))); + objc_exception_match_decl + = builtin_function (TAG_EXCEPTIONMATCH, temp_type, 0, NOT_BUILT_IN, NULL, NULL_TREE); + + write_symbols = save_write_symbols; + debug_hooks = save_hooks; + } + /* struct { struct objc_class *isa; ... }; */ static tree ! build_private_template (tree class) { tree ivar_context; *************** build_private_template (class) *** 2517,2524 **** else { uprivate_record = start_struct (RECORD_TYPE, CLASS_NAME (class)); ! ! ivar_context = get_class_ivars (class); finish_struct (uprivate_record, ivar_context, NULL_TREE); --- 3405,3411 ---- else { uprivate_record = start_struct (RECORD_TYPE, CLASS_NAME (class)); ! ivar_context = get_class_ivars (class, 0); finish_struct (uprivate_record, ivar_context, NULL_TREE); *************** build_private_template (class) *** 2547,2553 **** }; */ static tree ! build_protocol_template () { tree decl_specs, field_decl, field_decl_chain; tree template; --- 3434,3440 ---- }; */ static tree ! build_protocol_template (void) { tree decl_specs, field_decl, field_decl_chain; tree template; *************** build_protocol_template () *** 2559,2566 **** decl_specs = build_tree_list (NULL_TREE, xref_tag (RECORD_TYPE, get_identifier (UTAG_CLASS))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("isa")); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); field_decl_chain = field_decl; /* char *protocol_name; */ --- 3446,3452 ---- decl_specs = build_tree_list (NULL_TREE, xref_tag (RECORD_TYPE, get_identifier (UTAG_CLASS))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("isa")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); field_decl_chain = field_decl; /* char *protocol_name; */ *************** build_protocol_template () *** 2568,2575 **** decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_CHAR]); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("protocol_name")); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_protocol **protocol_list; */ --- 3454,3460 ---- decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_CHAR]); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("protocol_name")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_protocol **protocol_list; */ *************** build_protocol_template () *** 2578,2585 **** field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("protocol_list")); field_decl = build1 (INDIRECT_REF, NULL_TREE, field_decl); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_method_list *instance_methods; */ --- 3463,3469 ---- field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("protocol_list")); field_decl = build1 (INDIRECT_REF, NULL_TREE, field_decl); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_method_list *instance_methods; */ *************** build_protocol_template () *** 2590,2597 **** get_identifier (UTAG_METHOD_PROTOTYPE_LIST))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("instance_methods")); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_method_list *class_methods; */ --- 3474,3480 ---- get_identifier (UTAG_METHOD_PROTOTYPE_LIST))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("instance_methods")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_method_list *class_methods; */ *************** build_protocol_template () *** 2602,2618 **** get_identifier (UTAG_METHOD_PROTOTYPE_LIST))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("class_methods")); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); return finish_struct (template, field_decl_chain, NULL_TREE); } static tree ! build_descriptor_table_initializer (type, entries) ! tree type; ! tree entries; { tree initlist = NULL_TREE; --- 3485,3498 ---- get_identifier (UTAG_METHOD_PROTOTYPE_LIST))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("class_methods")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); return finish_struct (template, field_decl_chain, NULL_TREE); } static tree ! build_descriptor_table_initializer (tree type, tree entries) { tree initlist = NULL_TREE; *************** build_descriptor_table_initializer (type *** 2631,2657 **** initlist = tree_cons (NULL_TREE, ! build_constructor (type, nreverse (eltlist)), initlist); entries = TREE_CHAIN (entries); } while (entries); ! return build_constructor (build_array_type (type, 0), nreverse (initlist)); } /* struct objc_method_prototype_list { int count; struct objc_method_prototype { ! SEL name; ! char *types; } list[1]; }; */ static tree ! build_method_prototype_list_template (list_type, size) ! tree list_type; ! int size; { tree objc_ivar_list_record; tree decl_specs, field_decl, field_decl_chain; --- 3511,3537 ---- initlist = tree_cons (NULL_TREE, ! objc_build_constructor (type, nreverse (eltlist)), ! initlist); entries = TREE_CHAIN (entries); } while (entries); ! return objc_build_constructor (build_array_type (type, 0), ! nreverse (initlist)); } /* struct objc_method_prototype_list { int count; struct objc_method_prototype { ! SEL name; ! char *types; } list[1]; }; */ static tree ! build_method_prototype_list_template (tree list_type, int size) { tree objc_ivar_list_record; tree decl_specs, field_decl, field_decl_chain; *************** build_method_prototype_list_template (li *** 2664,2672 **** decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_INT]); field_decl = get_identifier ("method_count"); ! ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); field_decl_chain = field_decl; /* struct objc_method method_list[]; */ --- 3544,3550 ---- decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_INT]); field_decl = get_identifier ("method_count"); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); field_decl_chain = field_decl; /* struct objc_method method_list[]; */ *************** build_method_prototype_list_template (li *** 2674,2682 **** decl_specs = build_tree_list (NULL_TREE, list_type); field_decl = build_nt (ARRAY_REF, get_identifier ("method_list"), build_int_2 (size, 0)); ! ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); finish_struct (objc_ivar_list_record, field_decl_chain, NULL_TREE); --- 3552,3558 ---- decl_specs = build_tree_list (NULL_TREE, list_type); field_decl = build_nt (ARRAY_REF, get_identifier ("method_list"), build_int_2 (size, 0)); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); finish_struct (objc_ivar_list_record, field_decl_chain, NULL_TREE); *************** build_method_prototype_list_template (li *** 2685,2691 **** } static tree ! build_method_prototype_template () { tree proto_record; tree decl_specs, field_decl, field_decl_chain; --- 3561,3567 ---- } static tree ! build_method_prototype_template (void) { tree proto_record; tree decl_specs, field_decl, field_decl_chain; *************** build_method_prototype_template () *** 2697,2712 **** decl_specs = tree_cons (NULL_TREE, xref_tag (RECORD_TYPE, get_identifier (TAG_SELECTOR)), NULL_TREE); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("_cmd")); ! ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); field_decl_chain = field_decl; decl_specs = tree_cons (NULL_TREE, ridpointers[(int) RID_CHAR], NULL_TREE); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("method_types")); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); finish_struct (proto_record, field_decl_chain, NULL_TREE); --- 3573,3585 ---- decl_specs = tree_cons (NULL_TREE, xref_tag (RECORD_TYPE, get_identifier (TAG_SELECTOR)), NULL_TREE); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("_cmd")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); field_decl_chain = field_decl; decl_specs = tree_cons (NULL_TREE, ridpointers[(int) RID_CHAR], NULL_TREE); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("method_types")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); finish_struct (proto_record, field_decl_chain, NULL_TREE); *************** build_method_prototype_template () *** 2714,2831 **** return proto_record; } ! /* True if last call to forwarding_offset yielded a register offset. */ ! static int offset_is_register; static int ! forwarding_offset (parm) ! tree parm; { ! int offset_in_bytes; ! ! if (GET_CODE (DECL_INCOMING_RTL (parm)) == MEM) ! { ! rtx addr = XEXP (DECL_INCOMING_RTL (parm), 0); ! ! /* ??? Here we assume that the parm address is indexed ! off the frame pointer or arg pointer. ! If that is not true, we produce meaningless results, ! but do not crash. */ ! if (GET_CODE (addr) == PLUS ! && GET_CODE (XEXP (addr, 1)) == CONST_INT) ! offset_in_bytes = INTVAL (XEXP (addr, 1)); ! else ! offset_in_bytes = 0; ! ! offset_in_bytes += OBJC_FORWARDING_STACK_OFFSET; ! offset_is_register = 0; ! } ! else if (GET_CODE (DECL_INCOMING_RTL (parm)) == REG) ! { ! int regno = REGNO (DECL_INCOMING_RTL (parm)); ! offset_in_bytes = apply_args_register_offset (regno); ! offset_is_register = 1; ! } ! else ! return 0; ! ! /* This is the case where the parm is passed as an int or double ! and it is converted to a char, short or float and stored back ! in the parmlist. In this case, describe the parm ! with the variable's declared type, and adjust the address ! if the least significant bytes (which we are using) are not ! the first ones. */ ! if (BYTES_BIG_ENDIAN && TREE_TYPE (parm) != DECL_ARG_TYPE (parm)) ! offset_in_bytes += (GET_MODE_SIZE (TYPE_MODE (DECL_ARG_TYPE (parm))) ! - GET_MODE_SIZE (GET_MODE (DECL_RTL (parm)))); ! return offset_in_bytes; } static tree ! encode_method_prototype (method_decl, func_decl) ! tree method_decl; ! tree func_decl; { tree parms; ! int stack_size, i; ! tree user_args; ! HOST_WIDE_INT max_parm_end = 0; char buf[40]; tree result; /* ONEWAY and BYCOPY, for remote object are the only method qualifiers. */ encode_type_qualifiers (TREE_PURPOSE (TREE_TYPE (method_decl))); ! /* C type. */ ! encode_type (TREE_TYPE (TREE_TYPE (func_decl)), obstack_object_size (&util_obstack), OBJC_ENCODE_INLINE_DEFS); /* Stack size. */ ! for (parms = DECL_ARGUMENTS (func_decl); parms; parms = TREE_CHAIN (parms)) { ! HOST_WIDE_INT parm_end = (forwarding_offset (parms) ! + int_size_in_bytes (TREE_TYPE (parms))); ! if (!offset_is_register && max_parm_end < parm_end) ! max_parm_end = parm_end; } ! stack_size = max_parm_end - OBJC_FORWARDING_MIN_OFFSET; ! ! sprintf (buf, "%d", stack_size); obstack_grow (&util_obstack, buf, strlen (buf)); - user_args = METHOD_SEL_ARGS (method_decl); - /* Argument types. */ ! for (parms = DECL_ARGUMENTS (func_decl), i = 0; parms; ! parms = TREE_CHAIN (parms), i++) { /* Process argument qualifiers for user supplied arguments. */ ! if (i > 1) ! { ! encode_type_qualifiers (TREE_PURPOSE (TREE_TYPE (user_args))); ! user_args = TREE_CHAIN (user_args); ! } /* Type. */ ! encode_type (TREE_TYPE (parms), ! obstack_object_size (&util_obstack), OBJC_ENCODE_INLINE_DEFS); /* Compute offset. */ ! sprintf (buf, "%d", forwarding_offset (parms)); - /* Indicate register. */ - if (offset_is_register) - obstack_1grow (&util_obstack, '+'); - obstack_grow (&util_obstack, buf, strlen (buf)); } obstack_1grow (&util_obstack, '\0'); result = get_identifier (obstack_finish (&util_obstack)); obstack_free (&util_obstack, util_firstobj); --- 3587,3683 ---- return proto_record; } ! static tree ! objc_method_parm_type (tree type) ! { ! type = groktypename (TREE_TYPE (type)); ! if (TREE_CODE (type) == TYPE_DECL) ! type = TREE_TYPE (type); ! return TYPE_MAIN_VARIANT (type); ! } static int ! objc_encoded_type_size (tree type) { ! int sz = int_size_in_bytes (type); ! /* Make all integer and enum types at least as large ! as an int. */ ! if (sz > 0 && (TREE_CODE (type) == INTEGER_TYPE ! || TREE_CODE (type) == BOOLEAN_TYPE ! || TREE_CODE (type) == ENUMERAL_TYPE)) ! sz = MAX (sz, int_size_in_bytes (integer_type_node)); ! /* Treat arrays as pointers, since that's how they're ! passed in. */ ! else if (TREE_CODE (type) == ARRAY_TYPE) ! sz = int_size_in_bytes (ptr_type_node); ! return sz; } static tree ! encode_method_prototype (tree method_decl) { tree parms; ! int parm_offset, i; char buf[40]; tree result; /* ONEWAY and BYCOPY, for remote object are the only method qualifiers. */ encode_type_qualifiers (TREE_PURPOSE (TREE_TYPE (method_decl))); ! /* Encode return type. */ ! encode_type (objc_method_parm_type (method_decl), obstack_object_size (&util_obstack), OBJC_ENCODE_INLINE_DEFS); /* Stack size. */ ! /* The first two arguments (self and _cmd) are pointers; account for ! their size. */ ! i = int_size_in_bytes (ptr_type_node); ! parm_offset = 2 * i; ! for (parms = METHOD_SEL_ARGS (method_decl); parms; parms = TREE_CHAIN (parms)) { ! tree type = objc_method_parm_type (parms); ! int sz = objc_encoded_type_size (type); ! /* If a type size is not known, bail out. */ ! if (sz < 0) ! { ! error ("%Jtype '%D' does not have a known size", ! type, type); ! /* Pretend that the encoding succeeded; the compilation will ! fail nevertheless. */ ! goto finish_encoding; ! } ! parm_offset += sz; } ! sprintf (buf, "%d@0:%d", parm_offset, i); obstack_grow (&util_obstack, buf, strlen (buf)); /* Argument types. */ ! parm_offset = 2 * i; ! for (parms = METHOD_SEL_ARGS (method_decl); parms; ! parms = TREE_CHAIN (parms)) { + tree type = objc_method_parm_type (parms); + /* Process argument qualifiers for user supplied arguments. */ ! encode_type_qualifiers (TREE_PURPOSE (TREE_TYPE (parms))); /* Type. */ ! encode_type (type, obstack_object_size (&util_obstack), OBJC_ENCODE_INLINE_DEFS); /* Compute offset. */ ! sprintf (buf, "%d", parm_offset); ! parm_offset += objc_encoded_type_size (type); obstack_grow (&util_obstack, buf, strlen (buf)); } + finish_encoding: obstack_1grow (&util_obstack, '\0'); result = get_identifier (obstack_finish (&util_obstack)); obstack_free (&util_obstack, util_firstobj); *************** encode_method_prototype (method_decl, fu *** 2833,2844 **** } static tree ! generate_descriptor_table (type, name, size, list, proto) ! tree type; ! const char *name; ! int size; ! tree list; ! tree proto; { tree sc_spec, decl_specs, decl, initlist; --- 3685,3692 ---- } static tree ! generate_descriptor_table (tree type, const char *name, int size, tree list, ! tree proto) { tree sc_spec, decl_specs, decl, initlist; *************** generate_descriptor_table (type, name, s *** 2852,2866 **** initlist = build_tree_list (NULL_TREE, build_int_2 (size, 0)); initlist = tree_cons (NULL_TREE, list, initlist); ! finish_decl (decl, build_constructor (type, nreverse (initlist)), NULL_TREE); return decl; } static void ! generate_method_descriptors (protocol) ! tree protocol; { tree initlist, chain, method_list_template; tree cast, variable_length_type; --- 3700,3713 ---- initlist = build_tree_list (NULL_TREE, build_int_2 (size, 0)); initlist = tree_cons (NULL_TREE, list, initlist); ! finish_decl (decl, objc_build_constructor (type, nreverse (initlist)), NULL_TREE); return decl; } static void ! generate_method_descriptors (tree protocol) { tree initlist, chain, method_list_template; tree cast, variable_length_type; *************** generate_method_descriptors (protocol) *** 2883,2889 **** = build_method_prototype_list_template (objc_method_prototype_template, size); ! initlist = build_descriptor_table_initializer (objc_method_prototype_template, chain); --- 3730,3736 ---- = build_method_prototype_list_template (objc_method_prototype_template, size); ! initlist = build_descriptor_table_initializer (objc_method_prototype_template, chain); *************** generate_method_descriptors (protocol) *** 2918,3021 **** UOBJC_INSTANCE_METHODS_decl = 0; } - /* Generate a temporary FUNCTION_DECL node to be used in - hack_method_prototype below. */ - - static tree - build_tmp_function_decl () - { - tree decl_specs, expr_decl, parms; - static int xxx = 0; - char buffer[80]; - - /* struct objc_object *objc_xxx (id, SEL, ...); */ - pushlevel (0); - decl_specs = build_tree_list (NULL_TREE, objc_object_reference); - push_parm_decl (build_tree_list - (build_tree_list (decl_specs, - build1 (INDIRECT_REF, NULL_TREE, - NULL_TREE)), - NULL_TREE)); - - decl_specs = build_tree_list (NULL_TREE, xref_tag (RECORD_TYPE, - get_identifier (TAG_SELECTOR))); - expr_decl = build1 (INDIRECT_REF, NULL_TREE, NULL_TREE); - - push_parm_decl (build_tree_list (build_tree_list (decl_specs, expr_decl), - NULL_TREE)); - parms = get_parm_info (0); - poplevel (0, 0, 0); - - decl_specs = build_tree_list (NULL_TREE, objc_object_reference); - sprintf (buffer, "__objc_tmp_%x", xxx++); - expr_decl = build_nt (CALL_EXPR, get_identifier (buffer), parms, NULL_TREE); - expr_decl = build1 (INDIRECT_REF, NULL_TREE, expr_decl); - - return define_decl (expr_decl, decl_specs); - } - - /* Generate the prototypes for protocol methods. This is used to - generate method encodings for these. - - NST_METHODS is the method to generate a _DECL node for TMP_DECL is - a decl node to be used. This is also where the return value is - given. */ - - static void - hack_method_prototype (nst_methods, tmp_decl) - tree nst_methods; - tree tmp_decl; - { - tree parms; - tree parm; - - /* Hack to avoid problem with static typing of self arg. */ - TREE_SET_CODE (nst_methods, CLASS_METHOD_DECL); - start_method_def (nst_methods); - TREE_SET_CODE (nst_methods, INSTANCE_METHOD_DECL); - - if (METHOD_ADD_ARGS (nst_methods) == objc_ellipsis_node) - parms = get_parm_info (0); /* we have a `, ...' */ - else - parms = get_parm_info (1); /* place a `void_at_end' */ - - poplevel (0, 0, 0); /* Must be called BEFORE start_function. */ - - /* Usually called from store_parm_decls -> init_function_start. */ - - DECL_ARGUMENTS (tmp_decl) = TREE_PURPOSE (parms); - - if (current_function_decl) - abort (); - current_function_decl = tmp_decl; - - { - /* Code taken from start_function. */ - tree restype = TREE_TYPE (TREE_TYPE (tmp_decl)); - /* Promote the value to int before returning it. */ - if (TREE_CODE (restype) == INTEGER_TYPE - && TYPE_PRECISION (restype) < TYPE_PRECISION (integer_type_node)) - restype = integer_type_node; - DECL_RESULT (tmp_decl) = build_decl (RESULT_DECL, 0, restype); - } - - for (parm = DECL_ARGUMENTS (tmp_decl); parm; parm = TREE_CHAIN (parm)) - DECL_CONTEXT (parm) = tmp_decl; - - init_function_start (tmp_decl, "objc-act", 0); - - /* Typically called from expand_function_start for function definitions. */ - assign_parms (tmp_decl); - - /* install return type */ - TREE_TYPE (TREE_TYPE (tmp_decl)) = groktypename (TREE_TYPE (nst_methods)); - - current_function_decl = NULL; - } - static void ! generate_protocol_references (plist) ! tree plist; { tree lproto; --- 3765,3772 ---- UOBJC_INSTANCE_METHODS_decl = 0; } static void ! generate_protocol_references (tree plist) { tree lproto; *************** generate_protocol_references (plist) *** 3047,3056 **** @protocol() or from a class/category implementation). These statically allocated objects can be referred to via the static (that is, private to this module) symbols _OBJC_PROTOCOL_n. ! The statically allocated Protocol objects that we generate here need to be fixed up at runtime in order to be used: the 'isa' ! pointer of the objects need to be set up to point to the 'Protocol' class, as known at runtime. The NeXT runtime fixes up all protocols at program startup time, --- 3798,3807 ---- @protocol() or from a class/category implementation). These statically allocated objects can be referred to via the static (that is, private to this module) symbols _OBJC_PROTOCOL_n. ! The statically allocated Protocol objects that we generate here need to be fixed up at runtime in order to be used: the 'isa' ! pointer of the objects need to be set up to point to the 'Protocol' class, as known at runtime. The NeXT runtime fixes up all protocols at program startup time, *************** generate_protocol_references (plist) *** 3073,3088 **** being referenced multiple times when compiled with the GNU runtime, and end up being fixed up multiple times at runtime inizialization. But that doesn't hurt, it's just a little inefficient. */ static void ! generate_protocols () { ! tree p, tmp_decl, encoding; tree sc_spec, decl_specs, decl; tree initlist, protocol_name_expr, refs_decl, refs_expr; tree cast_type2; - tmp_decl = build_tmp_function_decl (); - if (! objc_protocol_template) objc_protocol_template = build_protocol_template (); --- 3824,3838 ---- being referenced multiple times when compiled with the GNU runtime, and end up being fixed up multiple times at runtime inizialization. But that doesn't hurt, it's just a little inefficient. */ + static void ! generate_protocols (void) { ! tree p, encoding; tree sc_spec, decl_specs, decl; tree initlist, protocol_name_expr, refs_decl, refs_expr; tree cast_type2; if (! objc_protocol_template) objc_protocol_template = build_protocol_template (); *************** generate_protocols () *** 3107,3114 **** { if (! METHOD_ENCODING (nst_methods)) { ! hack_method_prototype (nst_methods, tmp_decl); ! encoding = encode_method_prototype (nst_methods, tmp_decl); METHOD_ENCODING (nst_methods) = encoding; } nst_methods = TREE_CHAIN (nst_methods); --- 3857,3863 ---- { if (! METHOD_ENCODING (nst_methods)) { ! encoding = encode_method_prototype (nst_methods); METHOD_ENCODING (nst_methods) = encoding; } nst_methods = TREE_CHAIN (nst_methods); *************** generate_protocols () *** 3118,3125 **** { if (! METHOD_ENCODING (cls_methods)) { ! hack_method_prototype (cls_methods, tmp_decl); ! encoding = encode_method_prototype (cls_methods, tmp_decl); METHOD_ENCODING (cls_methods) = encoding; } --- 3867,3873 ---- { if (! METHOD_ENCODING (cls_methods)) { ! encoding = encode_method_prototype (cls_methods); METHOD_ENCODING (cls_methods) = encoding; } *************** generate_protocols () *** 3175,3187 **** } static tree ! build_protocol_initializer (type, protocol_name, protocol_list, ! instance_methods, class_methods) ! tree type; ! tree protocol_name; ! tree protocol_list; ! tree instance_methods; ! tree class_methods; { tree initlist = NULL_TREE, expr; tree cast_type; --- 3923,3931 ---- } static tree ! build_protocol_initializer (tree type, tree protocol_name, ! tree protocol_list, tree instance_methods, ! tree class_methods) { tree initlist = NULL_TREE, expr; tree cast_type; *************** build_protocol_initializer (type, protoc *** 3218,3224 **** initlist = tree_cons (NULL_TREE, expr, initlist); } ! return build_constructor (type, nreverse (initlist)); } /* struct objc_category { --- 3962,3968 ---- initlist = tree_cons (NULL_TREE, expr, initlist); } ! return objc_build_constructor (type, nreverse (initlist)); } /* struct objc_category { *************** build_protocol_initializer (type, protoc *** 3230,3236 **** }; */ static void ! build_category_template () { tree decl_specs, field_decl, field_decl_chain; --- 3974,3980 ---- }; */ static void ! build_category_template (void) { tree decl_specs, field_decl, field_decl_chain; *************** build_category_template () *** 3241,3256 **** decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_CHAR]); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("category_name")); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); field_decl_chain = field_decl; /* char *class_name; */ decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_CHAR]); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("class_name")); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_method_list *instance_methods; */ --- 3985,3998 ---- decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_CHAR]); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("category_name")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); field_decl_chain = field_decl; /* char *class_name; */ decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_CHAR]); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("class_name")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_method_list *instance_methods; */ *************** build_category_template () *** 3260,3267 **** get_identifier (UTAG_METHOD_LIST))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("instance_methods")); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_method_list *class_methods; */ --- 4002,4008 ---- get_identifier (UTAG_METHOD_LIST))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("instance_methods")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_method_list *class_methods; */ *************** build_category_template () *** 3271,3278 **** get_identifier (UTAG_METHOD_LIST))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("class_methods")); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_protocol **protocol_list; */ --- 4012,4018 ---- get_identifier (UTAG_METHOD_LIST))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("class_methods")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_protocol **protocol_list; */ *************** build_category_template () *** 3283,3290 **** field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("protocol_list")); field_decl = build1 (INDIRECT_REF, NULL_TREE, field_decl); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); finish_struct (objc_category_template, field_decl_chain, NULL_TREE); --- 4023,4029 ---- field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("protocol_list")); field_decl = build1 (INDIRECT_REF, NULL_TREE, field_decl); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); finish_struct (objc_category_template, field_decl_chain, NULL_TREE); *************** build_category_template () *** 3296,3323 **** }; */ static void ! build_selector_template () { tree decl_specs, field_decl, field_decl_chain; ! objc_selector_template = start_struct (RECORD_TYPE, get_identifier (UTAG_SELECTOR)); /* void *sel_id; */ decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_VOID]); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("sel_id")); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); field_decl_chain = field_decl; /* char *sel_type; */ decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_CHAR]); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("sel_type")); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); finish_struct (objc_selector_template, field_decl_chain, NULL_TREE); --- 4035,4060 ---- }; */ static void ! build_selector_template (void) { tree decl_specs, field_decl, field_decl_chain; ! objc_selector_template = start_struct (RECORD_TYPE, get_identifier (UTAG_SELECTOR)); /* void *sel_id; */ decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_VOID]); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("sel_id")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); field_decl_chain = field_decl; /* char *sel_type; */ decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_CHAR]); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("sel_type")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); finish_struct (objc_selector_template, field_decl_chain, NULL_TREE); *************** build_selector_template () *** 3340,3350 **** struct objc_class *sibling_class; } struct objc_protocol_list *protocols; void *gc_object_type; }; */ static void ! build_class_template () { tree decl_specs, field_decl, field_decl_chain; --- 4077,4094 ---- struct objc_class *sibling_class; } struct objc_protocol_list *protocols; + if (flag_next_runtime) + void *sel_id; void *gc_object_type; }; */ + /* NB: The 'sel_id' and 'gc_object_type' fields are not being used by + the NeXT/Apple runtime; still, the compiler must generate them to + maintain backward binary compatibility (and to allow for future + expansion). */ + static void ! build_class_template (void) { tree decl_specs, field_decl, field_decl_chain; *************** build_class_template () *** 3355,3362 **** decl_specs = build_tree_list (NULL_TREE, objc_class_template); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("isa")); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); field_decl_chain = field_decl; /* struct objc_class *super_class; */ --- 4099,4105 ---- decl_specs = build_tree_list (NULL_TREE, objc_class_template); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("isa")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); field_decl_chain = field_decl; /* struct objc_class *super_class; */ *************** build_class_template () *** 3364,3403 **** decl_specs = build_tree_list (NULL_TREE, objc_class_template); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("super_class")); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* char *name; */ decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_CHAR]); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("name")); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* long version; */ decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_LONG]); field_decl = get_identifier ("version"); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* long info; */ decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_LONG]); field_decl = get_identifier ("info"); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* long instance_size; */ decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_LONG]); field_decl = get_identifier ("instance_size"); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_ivar_list *ivars; */ --- 4107,4141 ---- decl_specs = build_tree_list (NULL_TREE, objc_class_template); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("super_class")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* char *name; */ decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_CHAR]); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("name")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* long version; */ decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_LONG]); field_decl = get_identifier ("version"); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* long info; */ decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_LONG]); field_decl = get_identifier ("info"); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* long instance_size; */ decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_LONG]); field_decl = get_identifier ("instance_size"); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_ivar_list *ivars; */ *************** build_class_template () *** 3406,3413 **** xref_tag (RECORD_TYPE, get_identifier (UTAG_IVAR_LIST))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("ivars")); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_method_list *methods; */ --- 4144,4150 ---- xref_tag (RECORD_TYPE, get_identifier (UTAG_IVAR_LIST))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("ivars")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_method_list *methods; */ *************** build_class_template () *** 3416,3423 **** xref_tag (RECORD_TYPE, get_identifier (UTAG_METHOD_LIST))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("methods")); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); if (flag_next_runtime) --- 4153,4159 ---- xref_tag (RECORD_TYPE, get_identifier (UTAG_METHOD_LIST))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("methods")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); if (flag_next_runtime) *************** build_class_template () *** 3428,3435 **** xref_tag (RECORD_TYPE, get_identifier ("objc_cache"))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("cache")); ! field_decl = grokfield (input_filename, lineno, field_decl, ! decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); } else --- 4164,4170 ---- xref_tag (RECORD_TYPE, get_identifier ("objc_cache"))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("cache")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); } else *************** build_class_template () *** 3440,3447 **** xref_tag (RECORD_TYPE, get_identifier ("sarray"))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("dtable")); ! field_decl = grokfield (input_filename, lineno, field_decl, ! decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_class *subclass_list; */ --- 4175,4181 ---- xref_tag (RECORD_TYPE, get_identifier ("sarray"))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("dtable")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_class *subclass_list; */ *************** build_class_template () *** 3449,3456 **** decl_specs = build_tree_list (NULL_TREE, objc_class_template); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("subclass_list")); ! field_decl = grokfield (input_filename, lineno, field_decl, ! decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_class *sibling_class; */ --- 4183,4189 ---- decl_specs = build_tree_list (NULL_TREE, objc_class_template); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("subclass_list")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_class *sibling_class; */ *************** build_class_template () *** 3458,3495 **** decl_specs = build_tree_list (NULL_TREE, objc_class_template); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("sibling_class")); ! field_decl = grokfield (input_filename, lineno, field_decl, ! decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); } /* struct objc_protocol **protocol_list; */ ! decl_specs = build_tree_list (NULL_TREE, xref_tag (RECORD_TYPE, get_identifier (UTAG_PROTOCOL))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("protocol_list")); field_decl = build1 (INDIRECT_REF, NULL_TREE, field_decl); ! field_decl = grokfield (input_filename, lineno, field_decl, ! decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); ! /* void *sel_id; */ ! decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_VOID]); ! field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("sel_id")); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); ! chainon (field_decl_chain, field_decl); /* void *gc_object_type; */ decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_VOID]); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("gc_object_type")); ! field_decl ! = grokfield (input_filename, lineno, field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); finish_struct (objc_class_template, field_decl_chain, NULL_TREE); --- 4191,4228 ---- decl_specs = build_tree_list (NULL_TREE, objc_class_template); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("sibling_class")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); } /* struct objc_protocol **protocol_list; */ ! decl_specs = build_tree_list (NULL_TREE, xref_tag (RECORD_TYPE, get_identifier (UTAG_PROTOCOL))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("protocol_list")); field_decl = build1 (INDIRECT_REF, NULL_TREE, field_decl); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); ! if (flag_next_runtime) ! { ! /* void *sel_id; */ ! decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_VOID]); ! field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("sel_id")); ! field_decl ! = grokfield (field_decl, decl_specs, NULL_TREE); ! chainon (field_decl_chain, field_decl); ! } /* void *gc_object_type; */ decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_VOID]); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("gc_object_type")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); finish_struct (objc_class_template, field_decl_chain, NULL_TREE); *************** build_class_template () *** 3498,3525 **** /* Generate appropriate forward declarations for an implementation. */ static void ! synth_forward_declarations () { ! tree sc_spec, decl_specs, an_id; ! ! /* extern struct objc_class _OBJC_CLASS_; */ ! ! an_id = synth_id_with_class_suffix ("_OBJC_CLASS", objc_implementation_context); ! ! sc_spec = build_tree_list (NULL_TREE, ridpointers[(int) RID_EXTERN]); ! decl_specs = tree_cons (NULL_TREE, objc_class_template, sc_spec); ! UOBJC_CLASS_decl = define_decl (an_id, decl_specs); ! TREE_USED (UOBJC_CLASS_decl) = 1; ! DECL_ARTIFICIAL (UOBJC_CLASS_decl) = 1; ! ! /* extern struct objc_class _OBJC_METACLASS_; */ ! an_id = synth_id_with_class_suffix ("_OBJC_METACLASS", ! objc_implementation_context); ! UOBJC_METACLASS_decl = define_decl (an_id, decl_specs); ! TREE_USED (UOBJC_METACLASS_decl) = 1; ! DECL_ARTIFICIAL(UOBJC_METACLASS_decl) = 1; /* Pre-build the following entities - for speed/convenience. */ --- 4231,4247 ---- /* Generate appropriate forward declarations for an implementation. */ static void ! synth_forward_declarations (void) { ! tree an_id; ! /* static struct objc_class _OBJC_CLASS_; */ ! UOBJC_CLASS_decl = build_metadata_decl ("_OBJC_CLASS", ! objc_class_template); ! /* static struct objc_class _OBJC_METACLASS_; */ ! UOBJC_METACLASS_decl = build_metadata_decl ("_OBJC_METACLASS", ! objc_class_template); /* Pre-build the following entities - for speed/convenience. */ *************** synth_forward_declarations () *** 3529,3554 **** } static void ! error_with_ivar (message, decl, rawdecl) ! const char *message; ! tree decl; ! tree rawdecl; { ! diagnostic_count_diagnostic (global_dc, DK_ERROR); ! ! diagnostic_report_current_function (global_dc); ! ! error_with_file_and_line (DECL_SOURCE_FILE (decl), ! DECL_SOURCE_LINE (decl), ! "%s `%s'", ! message, gen_declaration (rawdecl, errbuf)); } static void ! check_ivars (inter, imp) ! tree inter; ! tree imp; { tree intdecls = CLASS_IVARS (inter); tree impdecls = CLASS_IVARS (imp); --- 4251,4265 ---- } static void ! error_with_ivar (const char *message, tree decl, tree rawdecl) { ! error ("%J%s `%s'", decl, ! message, gen_declaration (rawdecl, errbuf)); } static void ! check_ivars (tree inter, tree imp) { tree intdecls = CLASS_IVARS (inter); tree impdecls = CLASS_IVARS (imp); *************** check_ivars (inter, imp) *** 3559,3564 **** --- 4270,4279 ---- { tree t1, t2; + #ifdef OBJCPLUS + if (intdecls && TREE_CODE (intdecls) == TYPE_DECL) + intdecls = TREE_CHAIN (intdecls); + #endif if (intdecls == 0 && impdecls == 0) break; if (intdecls == 0 || impdecls == 0) *************** check_ivars (inter, imp) *** 3569,3575 **** t1 = TREE_TYPE (intdecls); t2 = TREE_TYPE (impdecls); ! if (!comptypes (t1, t2)) { if (DECL_NAME (intdecls) == DECL_NAME (impdecls)) { --- 4284,4292 ---- t1 = TREE_TYPE (intdecls); t2 = TREE_TYPE (impdecls); ! if (!comptypes (t1, t2, false) ! || !tree_int_cst_equal (TREE_VALUE (TREE_VALUE (rawintdecls)), ! TREE_VALUE (TREE_VALUE (rawimpdecls)))) { if (DECL_NAME (intdecls) == DECL_NAME (impdecls)) { *************** check_ivars (inter, imp) *** 3600,3623 **** } } ! /* Set super_type to the data type node for struct objc_super *, ! first defining struct objc_super itself. This needs to be done just once per compilation. */ ! static tree ! build_super_template () { ! tree record, decl_specs, field_decl, field_decl_chain; ! record = start_struct (RECORD_TYPE, get_identifier (UTAG_SUPER)); /* struct objc_object *self; */ decl_specs = build_tree_list (NULL_TREE, objc_object_reference); field_decl = get_identifier ("self"); field_decl = build1 (INDIRECT_REF, NULL_TREE, field_decl); ! field_decl = grokfield (input_filename, lineno, ! field_decl, decl_specs, NULL_TREE); field_decl_chain = field_decl; /* struct objc_class *class; */ --- 4317,4346 ---- } } ! /* Set 'objc_super_template' to the data type node for 'struct _objc_super'. This needs to be done just once per compilation. */ ! static void ! build_super_template (void) { ! tree decl_specs, field_decl, field_decl_chain; ! /* Suppress outputting debug symbols, because ! dbxout_init hasn't been called yet. */ ! enum debug_info_type save_write_symbols = write_symbols; ! const struct gcc_debug_hooks *save_hooks = debug_hooks; ! ! write_symbols = NO_DEBUG; ! debug_hooks = &do_nothing_debug_hooks; ! ! objc_super_template = start_struct (RECORD_TYPE, get_identifier (UTAG_SUPER)); /* struct objc_object *self; */ decl_specs = build_tree_list (NULL_TREE, objc_object_reference); field_decl = get_identifier ("self"); field_decl = build1 (INDIRECT_REF, NULL_TREE, field_decl); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); field_decl_chain = field_decl; /* struct objc_class *class; */ *************** build_super_template () *** 3626,3643 **** decl_specs = build_tree_list (NULL_TREE, xref_tag (RECORD_TYPE, decl_specs)); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("class")); ! field_decl = grokfield (input_filename, lineno, ! field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); ! finish_struct (record, field_decl_chain, NULL_TREE); ! /* `struct objc_super *' */ ! super_type = groktypename (build_tree_list (build_tree_list (NULL_TREE, ! record), ! build1 (INDIRECT_REF, ! NULL_TREE, NULL_TREE))); ! return record; } /* struct objc_ivar { --- 4349,4361 ---- decl_specs = build_tree_list (NULL_TREE, xref_tag (RECORD_TYPE, decl_specs)); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("class")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); ! finish_struct (objc_super_template, field_decl_chain, NULL_TREE); ! write_symbols = save_write_symbols; ! debug_hooks = save_hooks; } /* struct objc_ivar { *************** build_super_template () *** 3647,3653 **** }; */ static tree ! build_ivar_template () { tree objc_ivar_id, objc_ivar_record; tree decl_specs, field_decl, field_decl_chain; --- 4365,4371 ---- }; */ static tree ! build_ivar_template (void) { tree objc_ivar_id, objc_ivar_record; tree decl_specs, field_decl, field_decl_chain; *************** build_ivar_template () *** 3660,3667 **** decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_CHAR]); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("ivar_name")); ! field_decl = grokfield (input_filename, lineno, field_decl, ! decl_specs, NULL_TREE); field_decl_chain = field_decl; /* char *ivar_type; */ --- 4378,4384 ---- decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_CHAR]); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("ivar_name")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); field_decl_chain = field_decl; /* char *ivar_type; */ *************** build_ivar_template () *** 3669,3676 **** decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_CHAR]); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("ivar_type")); ! field_decl = grokfield (input_filename, lineno, field_decl, ! decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* int ivar_offset; */ --- 4386,4392 ---- decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_CHAR]); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("ivar_type")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* int ivar_offset; */ *************** build_ivar_template () *** 3678,3685 **** decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_INT]); field_decl = get_identifier ("ivar_offset"); ! field_decl = grokfield (input_filename, lineno, field_decl, ! decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); finish_struct (objc_ivar_record, field_decl_chain, NULL_TREE); --- 4394,4400 ---- decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_INT]); field_decl = get_identifier ("ivar_offset"); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); finish_struct (objc_ivar_record, field_decl_chain, NULL_TREE); *************** build_ivar_template () *** 3693,3701 **** }; */ static tree ! build_ivar_list_template (list_type, size) ! tree list_type; ! int size; { tree objc_ivar_list_record; tree decl_specs, field_decl, field_decl_chain; --- 4408,4414 ---- }; */ static tree ! build_ivar_list_template (tree list_type, int size) { tree objc_ivar_list_record; tree decl_specs, field_decl, field_decl_chain; *************** build_ivar_list_template (list_type, siz *** 3707,3714 **** decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_INT]); field_decl = get_identifier ("ivar_count"); ! field_decl = grokfield (input_filename, lineno, field_decl, ! decl_specs, NULL_TREE); field_decl_chain = field_decl; /* struct objc_ivar ivar_list[]; */ --- 4420,4426 ---- decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_INT]); field_decl = get_identifier ("ivar_count"); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); field_decl_chain = field_decl; /* struct objc_ivar ivar_list[]; */ *************** build_ivar_list_template (list_type, siz *** 3717,3724 **** field_decl = build_nt (ARRAY_REF, get_identifier ("ivar_list"), build_int_2 (size, 0)); ! field_decl = grokfield (input_filename, lineno, ! field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); finish_struct (objc_ivar_list_record, field_decl_chain, NULL_TREE); --- 4429,4435 ---- field_decl = build_nt (ARRAY_REF, get_identifier ("ivar_list"), build_int_2 (size, 0)); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); finish_struct (objc_ivar_list_record, field_decl_chain, NULL_TREE); *************** build_ivar_list_template (list_type, siz *** 3733,3741 **** }; */ static tree ! build_method_list_template (list_type, size) ! tree list_type; ! int size; { tree objc_ivar_list_record; tree decl_specs, field_decl, field_decl_chain; --- 4444,4450 ---- }; */ static tree ! build_method_list_template (tree list_type, int size) { tree objc_ivar_list_record; tree decl_specs, field_decl, field_decl_chain; *************** build_method_list_template (list_type, s *** 3746,3758 **** decl_specs = build_tree_list ! (NULL_TREE, xref_tag (RECORD_TYPE, get_identifier (UTAG_METHOD_PROTOTYPE_LIST))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("method_next")); ! field_decl = grokfield (input_filename, lineno, field_decl, ! decl_specs, NULL_TREE); field_decl_chain = field_decl; /* int method_count; */ --- 4455,4466 ---- decl_specs = build_tree_list ! (NULL_TREE, xref_tag (RECORD_TYPE, get_identifier (UTAG_METHOD_PROTOTYPE_LIST))); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("method_next")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); field_decl_chain = field_decl; /* int method_count; */ *************** build_method_list_template (list_type, s *** 3760,3767 **** decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_INT]); field_decl = get_identifier ("method_count"); ! field_decl = grokfield (input_filename, lineno, ! field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_method method_list[]; */ --- 4468,4474 ---- decl_specs = build_tree_list (NULL_TREE, ridpointers[(int) RID_INT]); field_decl = get_identifier ("method_count"); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* struct objc_method method_list[]; */ *************** build_method_list_template (list_type, s *** 3770,3777 **** field_decl = build_nt (ARRAY_REF, get_identifier ("method_list"), build_int_2 (size, 0)); ! field_decl = grokfield (input_filename, lineno, ! field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); finish_struct (objc_ivar_list_record, field_decl_chain, NULL_TREE); --- 4477,4483 ---- field_decl = build_nt (ARRAY_REF, get_identifier ("method_list"), build_int_2 (size, 0)); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); finish_struct (objc_ivar_list_record, field_decl_chain, NULL_TREE); *************** build_method_list_template (list_type, s *** 3780,3788 **** } static tree ! build_ivar_list_initializer (type, field_decl) ! tree type; ! tree field_decl; { tree initlist = NULL_TREE; --- 4486,4492 ---- } static tree ! build_ivar_list_initializer (tree type, tree field_decl) { tree initlist = NULL_TREE; *************** build_ivar_list_initializer (type, field *** 3817,3839 **** /* Set offset. */ ivar = tree_cons (NULL_TREE, byte_position (field_decl), ivar); ! initlist = tree_cons (NULL_TREE, ! build_constructor (type, nreverse (ivar)), initlist); ! ! field_decl = TREE_CHAIN (field_decl); } while (field_decl); ! return build_constructor (build_array_type (type, 0), nreverse (initlist)); } static tree ! generate_ivars_list (type, name, size, list) ! tree type; ! const char *name; ! int size; ! tree list; { tree sc_spec, decl_specs, decl, initlist; --- 4521,4541 ---- /* Set offset. */ ivar = tree_cons (NULL_TREE, byte_position (field_decl), ivar); ! initlist = tree_cons (NULL_TREE, ! objc_build_constructor (type, nreverse (ivar)), initlist); ! do ! field_decl = TREE_CHAIN (field_decl); ! while (field_decl && TREE_CODE (field_decl) != FIELD_DECL); } while (field_decl); ! return objc_build_constructor (build_array_type (type, 0), ! nreverse (initlist)); } static tree ! generate_ivars_list (tree type, const char *name, int size, tree list) { tree sc_spec, decl_specs, decl, initlist; *************** generate_ivars_list (type, name, size, l *** 3847,3860 **** initlist = tree_cons (NULL_TREE, list, initlist); finish_decl (decl, ! build_constructor (TREE_TYPE (decl), nreverse (initlist)), NULL_TREE); return decl; } static void ! generate_ivar_lists () { tree initlist, ivar_list_template, chain; tree cast, variable_length_type; --- 4549,4575 ---- initlist = tree_cons (NULL_TREE, list, initlist); finish_decl (decl, ! objc_build_constructor (TREE_TYPE (decl), nreverse (initlist)), NULL_TREE); return decl; } + /* Count only the fields occurring in T. */ + static int + ivar_list_length (tree t) + { + int count = 0; + + for (; t; t = TREE_CHAIN (t)) + if (TREE_CODE (t) == FIELD_DECL) + ++count; + + return count; + } + static void ! generate_ivar_lists (void) { tree initlist, ivar_list_template, chain; tree cast, variable_length_type; *************** generate_ivar_lists () *** 3878,3884 **** if (CLASS_SUPER_NAME (implementation_template) == NULL_TREE && (chain = TYPE_FIELDS (objc_class_template))) { ! size = list_length (chain); ivar_list_template = build_ivar_list_template (objc_ivar_template, size); initlist = build_ivar_list_initializer (objc_ivar_template, chain); --- 4593,4599 ---- if (CLASS_SUPER_NAME (implementation_template) == NULL_TREE && (chain = TYPE_FIELDS (objc_class_template))) { ! size = ivar_list_length (chain); ivar_list_template = build_ivar_list_template (objc_ivar_template, size); initlist = build_ivar_list_initializer (objc_ivar_template, chain); *************** generate_ivar_lists () *** 3894,3900 **** chain = CLASS_IVARS (implementation_template); if (chain) { ! size = list_length (chain); ivar_list_template = build_ivar_list_template (objc_ivar_template, size); initlist = build_ivar_list_initializer (objc_ivar_template, chain); --- 4609,4615 ---- chain = CLASS_IVARS (implementation_template); if (chain) { ! size = ivar_list_length (chain); ivar_list_template = build_ivar_list_template (objc_ivar_template, size); initlist = build_ivar_list_initializer (objc_ivar_template, chain); *************** generate_ivar_lists () *** 3910,3918 **** } static tree ! build_dispatch_table_initializer (type, entries) ! tree type; ! tree entries; { tree initlist = NULL_TREE; --- 4625,4631 ---- } static tree ! build_dispatch_table_initializer (tree type, tree entries) { tree initlist = NULL_TREE; *************** build_dispatch_table_initializer (type, *** 3927,3965 **** /* Generate the method encoding if we don't have one already. */ if (! METHOD_ENCODING (entries)) METHOD_ENCODING (entries) = ! encode_method_def (METHOD_DEFINITION (entries)); elemlist = tree_cons (NULL_TREE, add_objc_string (METHOD_ENCODING (entries), meth_var_types), elemlist); ! elemlist = tree_cons (NULL_TREE, build_unary_op (ADDR_EXPR, METHOD_DEFINITION (entries), 1), elemlist); ! initlist = tree_cons (NULL_TREE, ! build_constructor (type, nreverse (elemlist)), initlist); entries = TREE_CHAIN (entries); } while (entries); ! return build_constructor (build_array_type (type, 0), nreverse (initlist)); } /* To accomplish method prototyping without generating all kinds of inane warnings, the definition of the dispatch table entries were changed from: ! struct objc_method { SEL _cmd; ...; id (*_imp)(); }; to: ! struct objc_method { SEL _cmd; ...; void *_imp; }; */ static tree ! build_method_template () { tree _SLT_record; tree decl_specs, field_decl, field_decl_chain; --- 4640,4679 ---- /* Generate the method encoding if we don't have one already. */ if (! METHOD_ENCODING (entries)) METHOD_ENCODING (entries) = ! encode_method_prototype (entries); elemlist = tree_cons (NULL_TREE, add_objc_string (METHOD_ENCODING (entries), meth_var_types), elemlist); ! elemlist = tree_cons (NULL_TREE, build_unary_op (ADDR_EXPR, METHOD_DEFINITION (entries), 1), elemlist); ! initlist = tree_cons (NULL_TREE, ! objc_build_constructor (type, nreverse (elemlist)), initlist); entries = TREE_CHAIN (entries); } while (entries); ! return objc_build_constructor (build_array_type (type, 0), ! nreverse (initlist)); } /* To accomplish method prototyping without generating all kinds of inane warnings, the definition of the dispatch table entries were changed from: ! struct objc_method { SEL _cmd; ...; id (*_imp)(); }; to: ! struct objc_method { SEL _cmd; ...; void *_imp; }; */ static tree ! build_method_template (void) { tree _SLT_record; tree decl_specs, field_decl, field_decl_chain; *************** build_method_template () *** 3973,3995 **** NULL_TREE); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("_cmd")); ! field_decl = grokfield (input_filename, lineno, field_decl, ! decl_specs, NULL_TREE); field_decl_chain = field_decl; decl_specs = tree_cons (NULL_TREE, ridpointers[(int) RID_CHAR], NULL_TREE); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("method_types")); ! field_decl = grokfield (input_filename, lineno, field_decl, ! decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* void *_imp; */ decl_specs = tree_cons (NULL_TREE, ridpointers[(int) RID_VOID], NULL_TREE); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("_imp")); ! field_decl = grokfield (input_filename, lineno, field_decl, ! decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); finish_struct (_SLT_record, field_decl_chain, NULL_TREE); --- 4687,4706 ---- NULL_TREE); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("_cmd")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); field_decl_chain = field_decl; decl_specs = tree_cons (NULL_TREE, ridpointers[(int) RID_CHAR], NULL_TREE); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("method_types")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); /* void *_imp; */ decl_specs = tree_cons (NULL_TREE, ridpointers[(int) RID_VOID], NULL_TREE); field_decl = build1 (INDIRECT_REF, NULL_TREE, get_identifier ("_imp")); ! field_decl = grokfield (field_decl, decl_specs, NULL_TREE); chainon (field_decl_chain, field_decl); finish_struct (_SLT_record, field_decl_chain, NULL_TREE); *************** build_method_template () *** 3999,4009 **** static tree ! generate_dispatch_table (type, name, size, list) ! tree type; ! const char *name; ! int size; ! tree list; { tree sc_spec, decl_specs, decl, initlist; --- 4710,4716 ---- static tree ! generate_dispatch_table (tree type, const char *name, int size, tree list) { tree sc_spec, decl_specs, decl, initlist; *************** generate_dispatch_table (type, name, siz *** 4018,4031 **** initlist = tree_cons (NULL_TREE, list, initlist); finish_decl (decl, ! build_constructor (TREE_TYPE (decl), nreverse (initlist)), NULL_TREE); return decl; } static void ! generate_dispatch_tables () { tree initlist, chain, method_list_template; tree cast, variable_length_type; --- 4725,4762 ---- initlist = tree_cons (NULL_TREE, list, initlist); finish_decl (decl, ! objc_build_constructor (TREE_TYPE (decl), nreverse (initlist)), NULL_TREE); return decl; } static void ! mark_referenced_methods (void) ! { ! struct imp_entry *impent; ! tree chain; ! ! for (impent = imp_list; impent; impent = impent->next) ! { ! chain = CLASS_CLS_METHODS (impent->imp_context); ! while (chain) ! { ! cgraph_mark_needed_node (cgraph_node (METHOD_DEFINITION (chain))); ! chain = TREE_CHAIN (chain); ! } ! ! chain = CLASS_NST_METHODS (impent->imp_context); ! while (chain) ! { ! cgraph_mark_needed_node (cgraph_node (METHOD_DEFINITION (chain))); ! chain = TREE_CHAIN (chain); ! } ! } ! } ! ! static void ! generate_dispatch_tables (void) { tree initlist, chain, method_list_template; tree cast, variable_length_type; *************** generate_dispatch_tables () *** 4093,4100 **** } static tree ! generate_protocol_list (i_or_p) ! tree i_or_p; { tree initlist, decl_specs, sc_spec; tree refs_decl, expr_decl, lproto, e, plist; --- 4824,4830 ---- } static tree ! generate_protocol_list (tree i_or_p) { tree initlist, decl_specs, sc_spec; tree refs_decl, expr_decl, lproto, e, plist; *************** generate_protocol_list (i_or_p) *** 4172,4193 **** refs_decl = start_decl (expr_decl, decl_specs, 1, NULL_TREE); DECL_CONTEXT (refs_decl) = NULL_TREE; ! finish_decl (refs_decl, build_constructor (TREE_TYPE (refs_decl), ! nreverse (initlist)), NULL_TREE); return refs_decl; } static tree ! build_category_initializer (type, cat_name, class_name, ! instance_methods, class_methods, protocol_list) ! tree type; ! tree cat_name; ! tree class_name; ! tree instance_methods; ! tree class_methods; ! tree protocol_list; { tree initlist = NULL_TREE, expr; --- 4902,4918 ---- refs_decl = start_decl (expr_decl, decl_specs, 1, NULL_TREE); DECL_CONTEXT (refs_decl) = NULL_TREE; ! finish_decl (refs_decl, objc_build_constructor (TREE_TYPE (refs_decl), ! nreverse (initlist)), NULL_TREE); return refs_decl; } static tree ! build_category_initializer (tree type, tree cat_name, tree class_name, ! tree instance_methods, tree class_methods, ! tree protocol_list) { tree initlist = NULL_TREE, expr; *************** build_category_initializer (type, cat_na *** 4227,4233 **** initlist = tree_cons (NULL_TREE, expr, initlist); } ! return build_constructor (type, nreverse (initlist)); } /* struct objc_class { --- 4952,4958 ---- initlist = tree_cons (NULL_TREE, expr, initlist); } ! return objc_build_constructor (type, nreverse (initlist)); } /* struct objc_class { *************** build_category_initializer (type, cat_na *** 4247,4267 **** struct objc_class *sibling_class; } struct objc_protocol_list *protocols; void *gc_object_type; }; */ static tree ! build_shared_structure_initializer (type, isa, super, name, size, status, ! dispatch_table, ivar_list, protocol_list) ! tree type; ! tree isa; ! tree super; ! tree name; ! tree size; ! int status; ! tree dispatch_table; ! tree ivar_list; ! tree protocol_list; { tree initlist = NULL_TREE, expr; --- 4972,4987 ---- struct objc_class *sibling_class; } struct objc_protocol_list *protocols; + if (flag_next_runtime) + void *sel_id; void *gc_object_type; }; */ static tree ! build_shared_structure_initializer (tree type, tree isa, tree super, ! tree name, tree size, int status, ! tree dispatch_table, tree ivar_list, ! tree protocol_list) { tree initlist = NULL_TREE, expr; *************** build_shared_structure_initializer (type *** 4335,4351 **** initlist = tree_cons (NULL_TREE, expr, initlist); } /* gc_object_type = NULL */ initlist = tree_cons (NULL_TREE, build_int_2 (0, 0), initlist); ! return build_constructor (type, nreverse (initlist)); } /* static struct objc_category _OBJC_CATEGORY_ = { ... }; */ static void ! generate_category (cat) ! tree cat; { tree sc_spec, decl_specs, decl; tree initlist, cat_name_expr, class_name_expr; --- 5055,5086 ---- initlist = tree_cons (NULL_TREE, expr, initlist); } + if (flag_next_runtime) + /* sel_id = NULL */ + initlist = tree_cons (NULL_TREE, build_int_2 (0, 0), initlist); + /* gc_object_type = NULL */ initlist = tree_cons (NULL_TREE, build_int_2 (0, 0), initlist); ! return objc_build_constructor (type, nreverse (initlist)); ! } ! ! /* Retrieve category interface CAT_NAME (if any) associated with CLASS. */ ! ! static inline tree ! lookup_category (tree class, tree cat_name) ! { ! tree category = CLASS_CATEGORY_LIST (class); ! ! while (category && CLASS_SUPER_NAME (category) != cat_name) ! category = CLASS_CATEGORY_LIST (category); ! return category; } /* static struct objc_category _OBJC_CATEGORY_ = { ... }; */ static void ! generate_category (tree cat) { tree sc_spec, decl_specs, decl; tree initlist, cat_name_expr, class_name_expr; *************** generate_category (cat) *** 4356,4370 **** class_name_expr = add_objc_string (CLASS_NAME (cat), class_names); ! category = CLASS_CATEGORY_LIST (implementation_template); ! ! /* find the category interface from the class it is associated with */ ! while (category) ! { ! if (CLASS_SUPER_NAME (cat) == CLASS_SUPER_NAME (category)) ! break; ! category = CLASS_CATEGORY_LIST (category); ! } if (category && CLASS_PROTOCOL_LIST (category)) { --- 5091,5098 ---- class_name_expr = add_objc_string (CLASS_NAME (cat), class_names); ! category = lookup_category (implementation_template, ! CLASS_SUPER_NAME (cat)); if (category && CLASS_PROTOCOL_LIST (category)) { *************** generate_category (cat) *** 4387,4393 **** UOBJC_CLASS_METHODS_decl, protocol_decl); - TREE_USED (decl) = 1; finish_decl (decl, initlist, NULL_TREE); } --- 5115,5120 ---- *************** generate_category (cat) *** 4395,4401 **** static struct objc_class _OBJC_CLASS_Foo={ ... }; */ static void ! generate_shared_structures () { tree sc_spec, decl_specs, decl; tree name_expr, super_expr, root_expr; --- 5122,5128 ---- static struct objc_class _OBJC_CLASS_Foo={ ... }; */ static void ! generate_shared_structures (void) { tree sc_spec, decl_specs, decl; tree name_expr, super_expr, root_expr; *************** generate_shared_structures () *** 4498,4506 **** } static tree ! synth_id_with_class_suffix (preamble, ctxt) ! const char *preamble; ! tree ctxt; { char *string; if (TREE_CODE (ctxt) == CLASS_IMPLEMENTATION_TYPE --- 5225,5231 ---- } static tree ! synth_id_with_class_suffix (const char *preamble, tree ctxt) { char *string; if (TREE_CODE (ctxt) == CLASS_IMPLEMENTATION_TYPE *************** synth_id_with_class_suffix (preamble, ct *** 4535,4547 **** } else abort (); ! return get_identifier (string); } static int ! is_objc_type_qualifier (node) ! tree node; { return (TREE_CODE (node) == IDENTIFIER_NODE && (node == ridpointers [(int) RID_CONST] --- 5260,5271 ---- } else abort (); ! return get_identifier (string); } static int ! is_objc_type_qualifier (tree node) { return (TREE_CODE (node) == IDENTIFIER_NODE && (node == ridpointers [(int) RID_CONST] *************** is_objc_type_qualifier (node) *** 4558,4565 **** type of id (otherwise grokdeclarator will default to int). */ static tree ! adjust_type_for_id_default (type) ! tree type; { tree declspecs, chain; --- 5282,5288 ---- type of id (otherwise grokdeclarator will default to int). */ static tree ! adjust_type_for_id_default (tree type) { tree declspecs, chain; *************** adjust_type_for_id_default (type) *** 4575,4581 **** chain = TREE_CHAIN (chain)) { if (TYPED_OBJECT (TREE_VALUE (chain)) ! && !(TREE_VALUE (type) && TREE_CODE (TREE_VALUE (type)) == INDIRECT_REF)) error ("can not use an object as parameter to a method\n"); if (!is_objc_type_qualifier (TREE_VALUE (chain))) --- 5298,5304 ---- chain = TREE_CHAIN (chain)) { if (TYPED_OBJECT (TREE_VALUE (chain)) ! && !(TREE_VALUE (type) && TREE_CODE (TREE_VALUE (type)) == INDIRECT_REF)) error ("can not use an object as parameter to a method\n"); if (!is_objc_type_qualifier (TREE_VALUE (chain))) *************** adjust_type_for_id_default (type) *** 4588,4615 **** } /* Usage: ! keyworddecl: ! selector ':' '(' typename ')' identifier ! Purpose: ! Transform an Objective-C keyword argument into ! the C equivalent parameter declarator. ! In: key_name, an "identifier_node" (optional). ! arg_type, a "tree_list" (optional). ! arg_name, an "identifier_node". ! Note: It would be really nice to strongly type the preceding ! arguments in the function prototype; however, then I ! could not use the "accessor" macros defined in "tree.h". ! Out: an instance of "keyword_decl". */ tree ! build_keyword_decl (key_name, arg_type, arg_name) ! tree key_name; ! tree arg_type; ! tree arg_name; { tree keyword_decl; --- 5311,5335 ---- } /* Usage: ! keyworddecl: ! selector ':' '(' typename ')' identifier ! Purpose: ! Transform an Objective-C keyword argument into ! the C equivalent parameter declarator. ! In: key_name, an "identifier_node" (optional). ! arg_type, a "tree_list" (optional). ! arg_name, an "identifier_node". ! Note: It would be really nice to strongly type the preceding ! arguments in the function prototype; however, then I ! could not use the "accessor" macros defined in "tree.h". ! Out: an instance of "keyword_decl". */ tree ! build_keyword_decl (tree key_name, tree arg_type, tree arg_name) { tree keyword_decl; *************** build_keyword_decl (key_name, arg_type, *** 4628,4635 **** /* Given a chain of keyword_decl's, synthesize the full keyword selector. */ static tree ! build_keyword_selector (selector) ! tree selector; { int len = 0; tree key_chain, key_name; --- 5348,5354 ---- /* Given a chain of keyword_decl's, synthesize the full keyword selector. */ static tree ! build_keyword_selector (tree selector) { int len = 0; tree key_chain, key_name; *************** build_keyword_selector (selector) *** 4661,4667 **** if (TREE_CODE (selector) == KEYWORD_DECL) key_name = KEYWORD_KEY_NAME (key_chain); else if (TREE_CODE (selector) == TREE_LIST) ! key_name = TREE_PURPOSE (key_chain); else abort (); --- 5380,5392 ---- if (TREE_CODE (selector) == KEYWORD_DECL) key_name = KEYWORD_KEY_NAME (key_chain); else if (TREE_CODE (selector) == TREE_LIST) ! { ! key_name = TREE_PURPOSE (key_chain); ! /* The keyword decl chain will later be used as a function argument ! chain. Unhook the selector itself so as to not confuse other ! parts of the compiler. */ ! TREE_PURPOSE (key_chain) = NULL_TREE; ! } else abort (); *************** build_keyword_selector (selector) *** 4676,4686 **** /* Used for declarations and definitions. */ tree ! build_method_decl (code, ret_type, selector, add_args) ! enum tree_code code; ! tree ret_type; ! tree selector; ! tree add_args; { tree method_decl; --- 5401,5408 ---- /* Used for declarations and definitions. */ tree ! build_method_decl (enum tree_code code, tree ret_type, tree selector, ! tree add_args) { tree method_decl; *************** build_method_decl (code, ret_type, selec *** 4711,4728 **** #define METHOD_DEF 0 #define METHOD_REF 1 ! /* Used by `build_objc_method_call' and `comp_method_types'. Return an argument list for method METH. CONTEXT is either METHOD_DEF or METHOD_REF, saying whether we are trying to define a method or call one. SUPERFLAG says this is for a send to super; this makes a difference for the NeXT calling sequence in which the lookup and ! the method call are done together. */ static tree ! get_arg_type_list (meth, context, superflag) ! tree meth; ! int context; ! int superflag; { tree arglist, akey; --- 5433,5448 ---- #define METHOD_DEF 0 #define METHOD_REF 1 ! /* Used by `build_objc_method_call' and `comp_proto_with_proto'. Return an argument list for method METH. CONTEXT is either METHOD_DEF or METHOD_REF, saying whether we are trying to define a method or call one. SUPERFLAG says this is for a send to super; this makes a difference for the NeXT calling sequence in which the lookup and ! the method call are done together. If METH is null, user-defined ! arguments (i.e., beyond self and _cmd) shall be represented by `...'. */ static tree ! get_arg_type_list (tree meth, int context, int superflag) { tree arglist, akey; *************** get_arg_type_list (meth, context, superf *** 4737,4742 **** --- 5457,5467 ---- /* Selector type - will eventually change to `int'. */ chainon (arglist, build_tree_list (NULL_TREE, selector_type)); + /* No actual method prototype given -- assume that remaining arguments + are `...'. */ + if (!meth) + return arglist; + /* Build a list of argument types. */ for (akey = METHOD_SEL_ARGS (meth); akey; akey = TREE_CHAIN (akey)) { *************** get_arg_type_list (meth, context, superf *** 4756,4769 **** } else /* finalize the arglist...simulate get_parm_info (1) */ ! chainon (arglist, build_tree_list (NULL_TREE, void_type_node)); return arglist; } static tree ! check_duplicates (hsh) ! hash hsh; { tree meth = NULL_TREE; --- 5481,5493 ---- } else /* finalize the arglist...simulate get_parm_info (1) */ ! chainon (arglist, OBJC_VOID_AT_END); return arglist; } static tree ! check_duplicates (hash hsh, int methods, int is_class) { tree meth = NULL_TREE; *************** check_duplicates (hsh) *** 4773,4788 **** if (hsh->list) { ! /* We have two methods with the same name and different types. */ attr loop; - char type = (TREE_CODE (meth) == INSTANCE_METHOD_DECL) ? '-' : '+'; ! warning ("multiple declarations for method `%s'", IDENTIFIER_POINTER (METHOD_SEL_NAME (meth))); ! warn_with_method ("using", type, meth); for (loop = hsh->list; loop; loop = loop->next) ! warn_with_method ("also found", type, loop->value); } } return meth; --- 5497,5522 ---- if (hsh->list) { ! /* We have two or more methods with the same name but ! different types. */ attr loop; ! warning ("multiple %s named `%c%s' found", ! methods ? "methods" : "selectors", ! (is_class ? '+' : '-'), IDENTIFIER_POINTER (METHOD_SEL_NAME (meth))); ! warn_with_method (methods ? "using" : "found", ! ((TREE_CODE (meth) == INSTANCE_METHOD_DECL) ! ? '-' ! : '+'), ! meth); for (loop = hsh->list; loop; loop = loop->next) ! warn_with_method ("also found", ! ((TREE_CODE (loop->value) == INSTANCE_METHOD_DECL) ! ? '-' ! : '+'), ! loop->value); } } return meth; *************** check_duplicates (hsh) *** 4794,4845 **** used. */ static tree ! receiver_is_class_object (receiver) ! tree receiver; { tree chain, exp, arg; ! /* The receiver is 'self' in the context of a class method. */ if (objc_method_context ! && receiver == self_decl ! && TREE_CODE (objc_method_context) == CLASS_METHOD_DECL) ! { ! return CLASS_NAME (objc_implementation_context); ! } ! if (flag_next_runtime) { /* The receiver is a variable created by build_class_reference_decl. */ if (TREE_CODE (receiver) == VAR_DECL ! && TREE_TYPE (receiver) == objc_class_type) ! /* Look up the identifier. */ for (chain = cls_ref_chain; chain; chain = TREE_CHAIN (chain)) if (TREE_PURPOSE (chain) == receiver) ! return TREE_VALUE (chain); } ! else { ! /* The receiver is a function call that returns an id. Check if ! it is a call to objc_getClass, if so, pick up the class name. */ ! if (TREE_CODE (receiver) == CALL_EXPR ! && (exp = TREE_OPERAND (receiver, 0)) ! && TREE_CODE (exp) == ADDR_EXPR ! && (exp = TREE_OPERAND (exp, 0)) ! && TREE_CODE (exp) == FUNCTION_DECL ! && exp == objc_get_class_decl ! /* We have a call to objc_getClass! */ ! && (arg = TREE_OPERAND (receiver, 1)) ! && TREE_CODE (arg) == TREE_LIST ! && (arg = TREE_VALUE (arg))) ! { ! STRIP_NOPS (arg); ! if (TREE_CODE (arg) == ADDR_EXPR ! && (arg = TREE_OPERAND (arg, 0)) ! && TREE_CODE (arg) == STRING_CST) ! /* Finally, we have the class name. */ ! return get_identifier (TREE_STRING_POINTER (arg)); ! } } return 0; } --- 5528,5580 ---- used. */ static tree ! receiver_is_class_object (tree receiver, int self, int super) { tree chain, exp, arg; ! /* The receiver is 'self' or 'super' in the context of a class method. */ if (objc_method_context ! && TREE_CODE (objc_method_context) == CLASS_METHOD_DECL ! && (self || super)) ! return (super ! ? CLASS_SUPER_NAME (implementation_template) ! : CLASS_NAME (implementation_template)); ! if (flag_next_runtime) { /* The receiver is a variable created by build_class_reference_decl. */ if (TREE_CODE (receiver) == VAR_DECL ! && TREE_TYPE (TREE_TYPE (receiver)) == TREE_TYPE (objc_class_type)) ! /* Look up the identifier. */ for (chain = cls_ref_chain; chain; chain = TREE_CHAIN (chain)) if (TREE_PURPOSE (chain) == receiver) ! return TREE_VALUE (chain); } ! ! /* The receiver is a function call that returns an id. Check if ! it is a call to objc_getClass, if so, pick up the class name. */ ! if (TREE_CODE (receiver) == CALL_EXPR ! && (exp = TREE_OPERAND (receiver, 0)) ! && TREE_CODE (exp) == ADDR_EXPR ! && (exp = TREE_OPERAND (exp, 0)) ! && TREE_CODE (exp) == FUNCTION_DECL ! /* For some reason, we sometimes wind up with multiple FUNCTION_DECL ! prototypes for objc_get_class(). Thankfuly, they seem to share the ! same function type. */ ! && TREE_TYPE (exp) == TREE_TYPE (objc_get_class_decl) ! && !strcmp (IDENTIFIER_POINTER (DECL_NAME (exp)), TAG_GETCLASS) ! /* We have a call to objc_get_class/objc_getClass! */ ! && (arg = TREE_OPERAND (receiver, 1)) ! && TREE_CODE (arg) == TREE_LIST ! && (arg = TREE_VALUE (arg))) { ! STRIP_NOPS (arg); ! if (TREE_CODE (arg) == ADDR_EXPR ! && (arg = TREE_OPERAND (arg, 0)) ! && TREE_CODE (arg) == STRING_CST) ! /* Finally, we have the class name. */ ! return get_identifier (TREE_STRING_POINTER (arg)); } return 0; } *************** receiver_is_class_object (receiver) *** 4851,4857 **** static tree current_objc_message_selector = 0; tree ! objc_message_selector () { return current_objc_message_selector; } --- 5586,5592 ---- static tree current_objc_message_selector = 0; tree ! objc_message_selector (void) { return current_objc_message_selector; } *************** objc_message_selector () *** 4864,4871 **** (*((*)())_msgSuper)(receiver, selTransTbl[n], ...); */ tree ! build_message_expr (mess) ! tree mess; { tree receiver = TREE_PURPOSE (mess); tree sel_name; --- 5599,5605 ---- (*((*)())_msgSuper)(receiver, selTransTbl[n], ...); */ tree ! build_message_expr (tree mess) { tree receiver = TREE_PURPOSE (mess); tree sel_name; *************** build_message_expr (mess) *** 4908,5130 **** method_params = args; } return finish_message_expr (receiver, sel_name, method_params); } /* The 'finish_message_expr' routine is called from within 'build_message_expr' for non-template functions. In the case of C++ template functions, it is called from 'build_expr_from_tree' (in decl2.c) after RECEIVER and METHOD_PARAMS have been expanded. */ ! tree ! finish_message_expr (receiver, sel_name, method_params) ! tree receiver, sel_name, method_params; ! { ! tree method_prototype = NULL_TREE, class_ident = NULL_TREE; ! tree selector, self_object, retval; ! int statically_typed = 0, statically_allocated = 0; ! ! /* Determine receiver type. */ ! tree rtype = TREE_TYPE (receiver); ! int super = IS_SUPER (rtype); ! if (! super) { ! if (TREE_STATIC_TEMPLATE (rtype)) ! statically_allocated = 1; ! else if (TREE_CODE (rtype) == POINTER_TYPE ! && TREE_STATIC_TEMPLATE (TREE_TYPE (rtype))) ! statically_typed = 1; ! else if ((flag_next_runtime ! || (IS_ID (rtype))) ! && (class_ident = receiver_is_class_object (receiver))) ! ; ! else if (! IS_ID (rtype) ! /* Allow any type that matches objc_class_type. */ ! && ! comptypes (rtype, objc_class_type)) { ! warning ("invalid receiver type `%s'", ! gen_declaration (rtype, errbuf)); } ! if (statically_allocated) ! receiver = build_unary_op (ADDR_EXPR, receiver, 0); ! ! /* Don't evaluate the receiver twice. */ ! receiver = save_expr (receiver); ! self_object = receiver; } - else - /* If sending to `super', use current self as the object. */ - self_object = self_decl; ! /* Determine operation return type. */ ! ! if (super) { ! tree iface; ! ! if (CLASS_SUPER_NAME (implementation_template)) { ! iface ! = lookup_interface (CLASS_SUPER_NAME (implementation_template)); ! ! if (TREE_CODE (objc_method_context) == INSTANCE_METHOD_DECL) ! method_prototype = lookup_instance_method_static (iface, sel_name); ! else ! method_prototype = lookup_class_method_static (iface, sel_name); ! ! if (iface && !method_prototype) ! warning ("`%s' does not respond to `%s'", ! IDENTIFIER_POINTER (CLASS_SUPER_NAME (implementation_template)), ! IDENTIFIER_POINTER (sel_name)); } else ! { ! error ("no super class declared in interface for `%s'", ! IDENTIFIER_POINTER (CLASS_NAME (implementation_template))); ! return error_mark_node; ! } ! ! } ! else if (statically_allocated) ! { ! tree ctype = TREE_TYPE (rtype); ! tree iface = lookup_interface (TYPE_NAME (rtype)); ! ! if (iface) ! method_prototype = lookup_instance_method_static (iface, sel_name); ! if (! method_prototype && ctype && TYPE_PROTOCOL_LIST (ctype)) method_prototype ! = lookup_method_in_protocol_list (TYPE_PROTOCOL_LIST (ctype), ! sel_name, 0); ! ! if (!method_prototype) ! warning ("`%s' does not respond to `%s'", ! IDENTIFIER_POINTER (TYPE_NAME (rtype)), ! IDENTIFIER_POINTER (sel_name)); } ! else if (statically_typed) { ! tree ctype = TREE_TYPE (rtype); ! ! /* `self' is now statically_typed. All methods should be visible ! within the context of the implementation. */ ! if (objc_implementation_context ! && CLASS_NAME (objc_implementation_context) == TYPE_NAME (ctype)) ! { ! method_prototype ! = lookup_instance_method_static (implementation_template, ! sel_name); ! ! if (! method_prototype && TYPE_PROTOCOL_LIST (ctype)) ! method_prototype ! = lookup_method_in_protocol_list (TYPE_PROTOCOL_LIST (ctype), ! sel_name, 0); ! if (! method_prototype ! && implementation_template != objc_implementation_context) ! /* The method is not published in the interface. Check ! locally. */ ! method_prototype ! = lookup_method (CLASS_NST_METHODS (objc_implementation_context), ! sel_name); ! } ! else { ! tree iface; ! ! if ((iface = lookup_interface (TYPE_NAME (ctype)))) ! method_prototype = lookup_instance_method_static (iface, sel_name); ! ! if (! method_prototype) ! { ! tree protocol_list = TYPE_PROTOCOL_LIST (ctype); ! if (protocol_list) ! method_prototype ! = lookup_method_in_protocol_list (protocol_list, ! sel_name, 0); ! } } ! ! if (!method_prototype) ! warning ("`%s' does not respond to `%s'", ! IDENTIFIER_POINTER (TYPE_NAME (ctype)), ! IDENTIFIER_POINTER (sel_name)); ! } ! else if (class_ident) ! { ! if (objc_implementation_context ! && CLASS_NAME (objc_implementation_context) == class_ident) { method_prototype ! = lookup_class_method_static (implementation_template, sel_name); ! if (!method_prototype ! && implementation_template != objc_implementation_context) ! /* The method is not published in the interface. Check ! locally. */ method_prototype ! = lookup_method (CLASS_CLS_METHODS (objc_implementation_context), ! sel_name); ! } ! else ! { ! tree iface; ! if ((iface = lookup_interface (class_ident))) ! method_prototype = lookup_class_method_static (iface, sel_name); } ! ! if (!method_prototype) { ! warning ("cannot find class (factory) method"); ! warning ("return type for `%s' defaults to id", ! IDENTIFIER_POINTER (sel_name)); } ! } ! else if (IS_PROTOCOL_QUALIFIED_ID (rtype)) ! { ! /* An anonymous object that has been qualified with a protocol. */ ! ! tree protocol_list = TYPE_PROTOCOL_LIST (rtype); ! ! method_prototype = lookup_method_in_protocol_list (protocol_list, ! sel_name, 0); ! ! if (!method_prototype) ! { ! hash hsh; ! ! warning ("method `%s' not implemented by protocol", ! IDENTIFIER_POINTER (sel_name)); ! ! /* Try and find the method signature in the global pools. */ ! ! if (!(hsh = hash_lookup (nst_method_hash_list, sel_name))) ! hsh = hash_lookup (cls_method_hash_list, sel_name); ! if (!(method_prototype = check_duplicates (hsh))) ! warning ("return type defaults to id"); ! } ! } ! else { ! hash hsh; ! ! /* We think we have an instance...loophole: extern id Object; */ ! hsh = hash_lookup (nst_method_hash_list, sel_name); ! ! if (!hsh) ! /* For various loopholes */ ! hsh = hash_lookup (cls_method_hash_list, sel_name); ! method_prototype = check_duplicates (hsh); ! if (!method_prototype) { ! warning ("cannot find method"); ! warning ("return type for `%s' defaults to id", ! IDENTIFIER_POINTER (sel_name)); } } --- 5642,5836 ---- method_params = args; } + #ifdef OBJCPLUS + if (processing_template_decl) + /* Must wait until template instantiation time. */ + return build_min_nt (MESSAGE_SEND_EXPR, receiver, sel_name, + method_params); + #endif + return finish_message_expr (receiver, sel_name, method_params); } + /* Look up method SEL_NAME that would be suitable for receiver + of type 'id' (if IS_CLASS is zero) or 'Class' (if IS_CLASS is + nonzero), and report on any duplicates. */ + + static tree + lookup_method_in_hash_lists (tree sel_name, int is_class) + { + hash method_prototype = NULL; + + if (!is_class) + method_prototype = hash_lookup (nst_method_hash_list, + sel_name); + + if (!method_prototype) + { + method_prototype = hash_lookup (cls_method_hash_list, + sel_name); + is_class = 1; + } + + return check_duplicates (method_prototype, 1, is_class); + } + /* The 'finish_message_expr' routine is called from within 'build_message_expr' for non-template functions. In the case of C++ template functions, it is called from 'build_expr_from_tree' (in decl2.c) after RECEIVER and METHOD_PARAMS have been expanded. */ ! tree ! finish_message_expr (tree receiver, tree sel_name, tree method_params) ! { ! tree method_prototype = NULL_TREE, rprotos = NULL_TREE, rtype; ! tree selector, retval, is_class; ! int self, super, have_cast; ! /* Extract the receiver of the message, as well as its type ! (where the latter may take the form of a cast or be inferred ! from the implementation context). */ ! rtype = receiver; ! while (TREE_CODE (rtype) == COMPOUND_EXPR ! || TREE_CODE (rtype) == MODIFY_EXPR ! || TREE_CODE (rtype) == NOP_EXPR ! || TREE_CODE (rtype) == COMPONENT_REF) ! rtype = TREE_OPERAND (rtype, 0); ! self = (rtype == self_decl); ! super = (rtype == UOBJC_SUPER_decl); ! rtype = TREE_TYPE (receiver); ! have_cast = (TREE_CODE (receiver) == NOP_EXPR ! || (TREE_CODE (receiver) == COMPOUND_EXPR ! && !IS_SUPER (rtype))); ! ! /* If the receiver is a class object, retrieve the corresponding ! @interface, if one exists. */ ! is_class = receiver_is_class_object (receiver, self, super); ! ! /* Now determine the receiver type (if an explicit cast has not been ! provided). */ ! if (!have_cast) { ! if (is_class) ! rtype = lookup_interface (is_class); ! /* Handle `self' and `super'. */ ! else if (super) { ! if (!CLASS_SUPER_NAME (implementation_template)) ! { ! error ("no super class declared in @interface for `%s'", ! IDENTIFIER_POINTER (CLASS_NAME (implementation_template))); ! return error_mark_node; ! } ! rtype = lookup_interface (CLASS_SUPER_NAME (implementation_template)); } ! else if (self) ! rtype = lookup_interface (CLASS_NAME (implementation_template)); } ! /* If receiver is of type `id' or `Class' (or if the @interface for a ! class is not visible), we shall be satisfied with the existence of ! any instance or class method. */ ! if (!rtype || IS_ID (rtype) ! || TREE_TYPE (rtype) == TREE_TYPE (objc_class_type)) { ! if (!rtype) ! rtype = xref_tag (RECORD_TYPE, is_class); ! else if (IS_ID (rtype)) { ! rprotos = TYPE_PROTOCOL_LIST (rtype); ! rtype = NULL_TREE; } else ! is_class = TYPE_NAME (rtype) = get_identifier ("Class"); ! if (rprotos) method_prototype ! = lookup_method_in_protocol_list (rprotos, sel_name, ! is_class != NULL_TREE); ! if (!method_prototype && !rprotos) ! method_prototype ! = lookup_method_in_hash_lists (sel_name, ! is_class != NULL_TREE); } ! else { ! tree orig_rtype = rtype, saved_rtype; ! if (TREE_CODE (rtype) == POINTER_TYPE) ! rtype = TREE_TYPE (rtype); ! /* Traverse typedef aliases */ ! while (TREE_CODE (rtype) == RECORD_TYPE && TYPE_NAME (rtype) ! && TREE_CODE (TYPE_NAME (rtype)) == TYPE_DECL ! && DECL_ORIGINAL_TYPE (TYPE_NAME (rtype))) ! rtype = DECL_ORIGINAL_TYPE (TYPE_NAME (rtype)); ! saved_rtype = rtype; ! if (TYPED_OBJECT (rtype)) { ! rprotos = TYPE_PROTOCOL_LIST (rtype); ! rtype = lookup_interface (OBJC_TYPE_NAME (rtype)); } ! /* If we could not find an @interface declaration, we must have ! only seen a @class declaration; so, we cannot say anything ! more intelligent about which methods the receiver will ! understand. */ ! if (!rtype) ! rtype = saved_rtype; ! else if (TREE_CODE (rtype) == CLASS_INTERFACE_TYPE ! || TREE_CODE (rtype) == CLASS_IMPLEMENTATION_TYPE) { + /* We have a valid ObjC class name. Look up the method name + in the published @interface for the class (and its + superclasses). */ method_prototype ! = lookup_method_static (rtype, sel_name, is_class != NULL_TREE); ! /* If the method was not found in the @interface, it may still ! exist locally as part of the @implementation. */ ! if (!method_prototype && objc_implementation_context ! && CLASS_NAME (objc_implementation_context) ! == OBJC_TYPE_NAME (rtype)) method_prototype ! = lookup_method ! ((is_class ! ? CLASS_CLS_METHODS (objc_implementation_context) ! : CLASS_NST_METHODS (objc_implementation_context)), ! sel_name); ! /* If we haven't found a candidate method by now, try looking for ! it in the protocol list. */ ! if (!method_prototype && rprotos) ! method_prototype ! = lookup_method_in_protocol_list (rprotos, sel_name, ! is_class != NULL_TREE); } ! else { ! warning ("invalid receiver type `%s'", ! gen_declaration (orig_rtype, errbuf)); ! rtype = rprotos = NULL_TREE; } ! } ! if (!method_prototype) { ! static bool warn_missing_methods = false; ! if (rtype) ! warning ("`%s' may not respond to `%c%s'", ! IDENTIFIER_POINTER (OBJC_TYPE_NAME (rtype)), ! (is_class ? '+' : '-'), ! IDENTIFIER_POINTER (sel_name)); ! if (rprotos) ! warning ("`%c%s' not implemented by protocol(s)", ! (is_class ? '+' : '-'), ! IDENTIFIER_POINTER (sel_name)); ! if (!warn_missing_methods) { ! warning ("(Messages without a matching method signature"); ! warning ("will be assumed to return `id' and accept"); ! warning ("`...' as arguments.)"); ! warn_missing_methods = true; } } *************** finish_message_expr (receiver, sel_name, *** 5140,5146 **** selector = build_selector_reference (sel_name); retval = build_objc_method_call (super, method_prototype, ! receiver, self_object, selector, method_params); current_objc_message_selector = 0; --- 5846,5852 ---- selector = build_selector_reference (sel_name); retval = build_objc_method_call (super, method_prototype, ! receiver, selector, method_params); current_objc_message_selector = 0; *************** finish_message_expr (receiver, sel_name, *** 5156,5230 **** If SUPER_FLAG is nonzero, we look up the superclass's method. */ static tree ! build_objc_method_call (super_flag, method_prototype, lookup_object, object, ! selector, method_params) ! int super_flag; ! tree method_prototype, lookup_object, object, selector, method_params; { ! tree sender = (super_flag ? umsg_super_decl : umsg_decl); ! tree rcv_p = (super_flag ! ? build_pointer_type (xref_tag (RECORD_TYPE, ! get_identifier (TAG_SUPER))) ! : id_type); ! ! if (flag_next_runtime) ! { ! if (! method_prototype) ! { ! method_params = tree_cons (NULL_TREE, lookup_object, ! tree_cons (NULL_TREE, selector, ! method_params)); ! assemble_external (sender); ! return build_function_call (sender, method_params); ! } ! else ! { ! /* This is a real kludge, but it is used only for the Next. ! Clobber the data type of SENDER temporarily to accept ! all the arguments for this operation, and to return ! whatever this operation returns. */ ! tree arglist = NULL_TREE, retval, savarg, savret; ! tree ret_type = groktypename (TREE_TYPE (method_prototype)); ! ! /* Save the proper contents of SENDER's data type. */ ! savarg = TYPE_ARG_TYPES (TREE_TYPE (sender)); ! savret = TREE_TYPE (TREE_TYPE (sender)); ! /* Install this method's argument types. */ ! arglist = get_arg_type_list (method_prototype, METHOD_REF, ! super_flag); ! TYPE_ARG_TYPES (TREE_TYPE (sender)) = arglist; ! /* Install this method's return type. */ ! TREE_TYPE (TREE_TYPE (sender)) = ret_type; ! /* Call SENDER with all the parameters. This will do type ! checking using the arg types for this method. */ ! method_params = tree_cons (NULL_TREE, lookup_object, ! tree_cons (NULL_TREE, selector, ! method_params)); ! assemble_external (sender); ! retval = build_function_call (sender, method_params); ! /* Restore SENDER's return/argument types. */ ! TYPE_ARG_TYPES (TREE_TYPE (sender)) = savarg; ! TREE_TYPE (TREE_TYPE (sender)) = savret; ! return retval; ! } } else { ! /* This is the portable way. ! First call the lookup function to get a pointer to the method, ! then cast the pointer, then call it with the method arguments. */ ! tree method; ! ! /* Avoid trouble since we may evaluate each of these twice. */ ! object = save_expr (object); ! selector = save_expr (selector); ! ! lookup_object = build_c_cast (rcv_p, lookup_object); assemble_external (sender); method = build_function_call (sender, --- 5862,5927 ---- If SUPER_FLAG is nonzero, we look up the superclass's method. */ static tree ! build_objc_method_call (int super_flag, tree method_prototype, ! tree lookup_object, tree selector, ! tree method_params) { ! tree sender = (super_flag ? umsg_super_decl : ! (!flag_next_runtime || flag_nil_receivers ! ? umsg_decl ! : umsg_nonnil_decl)); ! tree rcv_p = (super_flag ? super_type : id_type); ! /* If a prototype for the method to be called exists, then cast ! the sender's return type and arguments to match that of the method. ! Otherwise, leave sender as is. */ ! tree ret_type ! = (method_prototype ! ? groktypename (TREE_TYPE (method_prototype)) ! : id_type); ! tree sender_cast ! = build_pointer_type ! (build_function_type ! (ret_type, ! get_arg_type_list ! (method_prototype, METHOD_REF, super_flag))); ! lookup_object = build_c_cast (rcv_p, lookup_object); ! if (flag_next_runtime) ! { ! /* If we are returning a struct in memory, and the address ! of that memory location is passed as a hidden first ! argument, then change which messenger entry point this ! expr will call. NB: Note that sender_cast remains ! unchanged (it already has a struct return type). */ ! if (!targetm.calls.struct_value_rtx (0, 0) ! && (TREE_CODE (ret_type) == RECORD_TYPE ! || TREE_CODE (ret_type) == UNION_TYPE) ! && targetm.calls.return_in_memory (ret_type, 0)) ! sender = (super_flag ? umsg_super_stret_decl : ! flag_nil_receivers ? umsg_stret_decl : umsg_nonnil_stret_decl); ! method_params = tree_cons (NULL_TREE, lookup_object, ! tree_cons (NULL_TREE, selector, ! method_params)); ! TREE_USED (sender) = 1; ! assemble_external (sender); ! /* We want to cast the sender, not convert it. */ ! return build_function_call (build_c_cast (sender_cast, sender), ! method_params); } else { ! /* This is the portable (GNU) way. */ ! tree method, object; + /* First, call the lookup function to get a pointer to the method, + then cast the pointer, then call it with the method arguments. + Use SAVE_EXPR to avoid evaluating the receiver twice. */ + lookup_object = save_expr (lookup_object); + object = (super_flag ? self_decl : lookup_object); + TREE_USED (sender) = 1; assemble_external (sender); method = build_function_call (sender, *************** build_objc_method_call (super_flag, meth *** 5232,5268 **** tree_cons (NULL_TREE, selector, NULL_TREE))); - /* If we have a method prototype, construct the data type this - method needs, and cast what we got from SENDER into a pointer - to that type. */ - if (method_prototype) - { - tree arglist = get_arg_type_list (method_prototype, METHOD_REF, - super_flag); - tree valtype = groktypename (TREE_TYPE (method_prototype)); - tree fake_function_type = build_function_type (valtype, arglist); - TREE_TYPE (method) = build_pointer_type (fake_function_type); - } - else - TREE_TYPE (method) - = build_pointer_type (build_function_type (ptr_type_node, NULL_TREE)); - /* Pass the object to the method. */ assemble_external (method); ! return build_function_call (method, ! tree_cons (NULL_TREE, object, ! tree_cons (NULL_TREE, selector, ! method_params))); } } static void ! build_protocol_reference (p) ! tree p; { tree decl, ident, ptype; ! /* extern struct objc_protocol _OBJC_PROTOCOL_; */ ident = synth_id_with_class_suffix ("_OBJC_PROTOCOL", p); ptype --- 5929,5950 ---- tree_cons (NULL_TREE, selector, NULL_TREE))); /* Pass the object to the method. */ + TREE_USED (method) = 1; assemble_external (method); ! return build_function_call ! (build_c_cast (sender_cast, method), ! tree_cons (NULL_TREE, object, ! tree_cons (NULL_TREE, selector, method_params))); } } static void ! build_protocol_reference (tree p) { tree decl, ident, ptype; ! /* static struct objc_protocol _OBJC_PROTOCOL_; */ ident = synth_id_with_class_suffix ("_OBJC_PROTOCOL", p); ptype *************** build_protocol_reference (p) *** 5270,5282 **** objc_protocol_template), NULL_TREE)); ! if (IDENTIFIER_GLOBAL_VALUE (ident)) ! decl = IDENTIFIER_GLOBAL_VALUE (ident); /* Set by pushdecl. */ else { decl = build_decl (VAR_DECL, ident, ptype); DECL_EXTERNAL (decl) = 1; ! TREE_PUBLIC (decl) = 1; TREE_USED (decl) = 1; DECL_ARTIFICIAL (decl) = 1; --- 5952,5964 ---- objc_protocol_template), NULL_TREE)); ! if (identifier_global_value (ident)) ! decl = identifier_global_value (ident); /* Set by pushdecl. */ else { decl = build_decl (VAR_DECL, ident, ptype); DECL_EXTERNAL (decl) = 1; ! TREE_PUBLIC (decl) = 0; TREE_USED (decl) = 1; DECL_ARTIFICIAL (decl) = 1; *************** build_protocol_reference (p) *** 5290,5297 **** /* This function is called by the parser when (and only when) a @protocol() expression is found, in order to compile it. */ tree ! build_protocol_expr (protoname) ! tree protoname; { tree expr; tree p = lookup_protocol (protoname); --- 5972,5978 ---- /* This function is called by the parser when (and only when) a @protocol() expression is found, in order to compile it. */ tree ! build_protocol_expr (tree protoname) { tree expr; tree p = lookup_protocol (protoname); *************** build_protocol_expr (protoname) *** 5328,5337 **** /* This type is a struct containing the fields of a Protocol object. (Cfr. protocol_type instead is the type of a pointer to such a struct). */ ! tree protocol_struct_type = xref_tag (RECORD_TYPE, get_identifier (PROTOCOL_OBJECT_CLASS_NAME)); tree *chain; ! /* Look for the list of Protocol statically allocated instances to fixup at runtime. Create a new list to hold Protocol statically allocated instances, if the list is not found. At --- 6009,6018 ---- /* This type is a struct containing the fields of a Protocol object. (Cfr. protocol_type instead is the type of a pointer to such a struct). */ ! tree protocol_struct_type = xref_tag (RECORD_TYPE, get_identifier (PROTOCOL_OBJECT_CLASS_NAME)); tree *chain; ! /* Look for the list of Protocol statically allocated instances to fixup at runtime. Create a new list to hold Protocol statically allocated instances, if the list is not found. At *************** build_protocol_expr (protoname) *** 5343,5358 **** if (!*chain) { *chain = tree_cons (NULL_TREE, protocol_struct_type, NULL_TREE); ! add_objc_string (TYPE_NAME (protocol_struct_type), class_names); } ! /* Add this statically allocated instance to the Protocol list. */ ! TREE_PURPOSE (*chain) = tree_cons (NULL_TREE, PROTOCOL_FORWARD_DECL (p), TREE_PURPOSE (*chain)); } ! return expr; } --- 6024,6039 ---- if (!*chain) { *chain = tree_cons (NULL_TREE, protocol_struct_type, NULL_TREE); ! add_objc_string (OBJC_TYPE_NAME (protocol_struct_type), class_names); } ! /* Add this statically allocated instance to the Protocol list. */ ! TREE_PURPOSE (*chain) = tree_cons (NULL_TREE, PROTOCOL_FORWARD_DECL (p), TREE_PURPOSE (*chain)); } ! return expr; } *************** build_protocol_expr (protoname) *** 5361,5368 **** is found, in order to compile it. It is only called by the parser and only to compile a @selector(). */ tree ! build_selector_expr (selnamelist) ! tree selnamelist; { tree selname; --- 6042,6048 ---- is found, in order to compile it. It is only called by the parser and only to compile a @selector(). */ tree ! build_selector_expr (tree selnamelist) { tree selname; *************** build_selector_expr (selnamelist) *** 5386,5405 **** /* First try with instance methods. */ hsh = hash_lookup (nst_method_hash_list, selname); ! /* If not found, try with class methods. */ if (!hsh) { hsh = hash_lookup (cls_method_hash_list, selname); } ! /* If still not found, print out a warning. */ if (!hsh) { warning ("undeclared selector `%s'", IDENTIFIER_POINTER (selname)); } } ! if (flag_typed_selectors) return build_typed_selector_reference (selname, 0); --- 6066,6085 ---- /* First try with instance methods. */ hsh = hash_lookup (nst_method_hash_list, selname); ! /* If not found, try with class methods. */ if (!hsh) { hsh = hash_lookup (cls_method_hash_list, selname); } ! /* If still not found, print out a warning. */ if (!hsh) { warning ("undeclared selector `%s'", IDENTIFIER_POINTER (selname)); } } ! if (flag_typed_selectors) return build_typed_selector_reference (selname, 0); *************** build_selector_expr (selnamelist) *** 5408,5415 **** } tree ! build_encode_expr (type) ! tree type; { tree result; const char *string; --- 6088,6094 ---- } tree ! build_encode_expr (tree type) { tree result; const char *string; *************** build_encode_expr (type) *** 5426,5433 **** } tree ! build_ivar_reference (id) ! tree id; { if (TREE_CODE (objc_method_context) == CLASS_METHOD_DECL) { --- 6105,6111 ---- } tree ! build_ivar_reference (tree id) { if (TREE_CODE (objc_method_context) == CLASS_METHOD_DECL) { *************** build_ivar_reference (id) *** 5451,5473 **** /* Compute a hash value for a given method SEL_NAME. */ static size_t ! hash_func (sel_name) ! tree sel_name; { ! const unsigned char *s = (const unsigned char *)IDENTIFIER_POINTER (sel_name); size_t h = 0; ! while (*s) h = h * 67 + *s++ - 113; ! return h; } ! static void ! hash_init () { ! nst_method_hash_list = (hash *) ggc_calloc (SIZEHASHTABLE, sizeof (hash)); ! cls_method_hash_list = (hash *) ggc_calloc (SIZEHASHTABLE, sizeof (hash)); } /* WARNING!!!! hash_enter is called with a method, and will peek --- 6129,6152 ---- /* Compute a hash value for a given method SEL_NAME. */ static size_t ! hash_func (tree sel_name) { ! const unsigned char *s = (const unsigned char *)IDENTIFIER_POINTER (sel_name); size_t h = 0; ! while (*s) h = h * 67 + *s++ - 113; ! return h; } ! static void ! hash_init (void) { ! nst_method_hash_list ! = (hash *) ggc_alloc_cleared (SIZEHASHTABLE * sizeof (hash)); ! cls_method_hash_list ! = (hash *) ggc_alloc_cleared (SIZEHASHTABLE * sizeof (hash)); } /* WARNING!!!! hash_enter is called with a method, and will peek *************** hash_init () *** 5476,5484 **** entry's key (method) for comparison. */ static void ! hash_enter (hashlist, method) ! hash *hashlist; ! tree method; { hash obj; int slot = hash_func (METHOD_SEL_NAME (method)) % SIZEHASHTABLE; --- 6155,6161 ---- entry's key (method) for comparison. */ static void ! hash_enter (hash *hashlist, tree method) { hash obj; int slot = hash_func (METHOD_SEL_NAME (method)) % SIZEHASHTABLE; *************** hash_enter (hashlist, method) *** 5492,5500 **** } static hash ! hash_lookup (hashlist, sel_name) ! hash *hashlist; ! tree sel_name; { hash target; --- 6169,6175 ---- } static hash ! hash_lookup (hash *hashlist, tree sel_name) { hash target; *************** hash_lookup (hashlist, sel_name) *** 5511,5519 **** } static void ! hash_add_attr (entry, value) ! hash entry; ! tree value; { attr obj; --- 6186,6192 ---- } static void ! hash_add_attr (hash entry, tree value) { attr obj; *************** hash_add_attr (entry, value) *** 5525,5533 **** } static tree ! lookup_method (mchain, method) ! tree mchain; ! tree method; { tree key; --- 6198,6204 ---- } static tree ! lookup_method (tree mchain, tree method) { tree key; *************** lookup_method (mchain, method) *** 5547,5750 **** } static tree ! lookup_instance_method_static (interface, ident) ! tree interface; ! tree ident; { tree inter = interface; - tree chain = CLASS_NST_METHODS (inter); - tree meth = NULL_TREE; ! do { if ((meth = lookup_method (chain, ident))) return meth; ! if (CLASS_CATEGORY_LIST (inter)) { ! tree category = CLASS_CATEGORY_LIST (inter); ! chain = CLASS_NST_METHODS (category); ! ! do ! { ! if ((meth = lookup_method (chain, ident))) ! return meth; ! ! /* Check for instance methods in protocols in categories. */ ! if (CLASS_PROTOCOL_LIST (category)) ! { ! if ((meth = (lookup_method_in_protocol_list ! (CLASS_PROTOCOL_LIST (category), ident, 0)))) ! return meth; ! } ! ! if ((category = CLASS_CATEGORY_LIST (category))) ! chain = CLASS_NST_METHODS (category); ! } ! while (category); ! } ! if (CLASS_PROTOCOL_LIST (inter)) ! { ! if ((meth = (lookup_method_in_protocol_list ! (CLASS_PROTOCOL_LIST (inter), ident, 0)))) return meth; - } - - if ((inter = lookup_interface (CLASS_SUPER_NAME (inter)))) - chain = CLASS_NST_METHODS (inter); - } - while (inter); - - return meth; - } ! static tree ! lookup_class_method_static (interface, ident) ! tree interface; ! tree ident; ! { ! tree inter = interface; ! tree chain = CLASS_CLS_METHODS (inter); ! tree meth = NULL_TREE; ! tree root_inter = NULL_TREE; ! ! do ! { ! if ((meth = lookup_method (chain, ident))) ! return meth; ! ! if (CLASS_CATEGORY_LIST (inter)) ! { ! tree category = CLASS_CATEGORY_LIST (inter); ! chain = CLASS_CLS_METHODS (category); ! ! do { ! if ((meth = lookup_method (chain, ident))) return meth; - - /* Check for class methods in protocols in categories. */ - if (CLASS_PROTOCOL_LIST (category)) - { - if ((meth = (lookup_method_in_protocol_list - (CLASS_PROTOCOL_LIST (category), ident, 1)))) - return meth; - } - - if ((category = CLASS_CATEGORY_LIST (category))) - chain = CLASS_CLS_METHODS (category); } - while (category); } ! /* Check for class methods in protocols. */ if (CLASS_PROTOCOL_LIST (inter)) { if ((meth = (lookup_method_in_protocol_list ! (CLASS_PROTOCOL_LIST (inter), ident, 1)))) return meth; } root_inter = inter; ! if ((inter = lookup_interface (CLASS_SUPER_NAME (inter)))) ! chain = CLASS_CLS_METHODS (inter); } while (inter); /* If no class (factory) method was found, check if an _instance_ method of the same name exists in the root class. This is what ! the Objective-C runtime will do. */ ! return lookup_instance_method_static (root_inter, ident); } ! tree ! add_class_method (class, method) ! tree class; ! tree method; { - tree mth; hash hsh; ! if (!(mth = lookup_method (CLASS_CLS_METHODS (class), method))) ! { ! /* put method on list in reverse order */ ! TREE_CHAIN (method) = CLASS_CLS_METHODS (class); ! CLASS_CLS_METHODS (class) = method; ! } ! else ! { ! if (TREE_CODE (class) == CLASS_IMPLEMENTATION_TYPE) ! error ("duplicate definition of class method `%s'", ! IDENTIFIER_POINTER (METHOD_SEL_NAME (mth))); ! else ! { ! /* Check types; if different, complain. */ ! if (!comp_proto_with_proto (method, mth)) ! error ("duplicate declaration of class method `%s'", ! IDENTIFIER_POINTER (METHOD_SEL_NAME (mth))); ! } ! } ! ! if (!(hsh = hash_lookup (cls_method_hash_list, METHOD_SEL_NAME (method)))) { /* Install on a global chain. */ ! hash_enter (cls_method_hash_list, method); } else { ! /* Check types; if different, add to a list. */ ! if (!comp_proto_with_proto (method, hsh->key)) ! hash_add_attr (hsh, method); } - return method; } ! tree ! add_instance_method (class, method) ! tree class; ! tree method; { tree mth; - hash hsh; ! if (!(mth = lookup_method (CLASS_NST_METHODS (class), method))) { ! /* Put method on list in reverse order. */ ! TREE_CHAIN (method) = CLASS_NST_METHODS (class); ! CLASS_NST_METHODS (class) = method; } else { ! if (TREE_CODE (class) == CLASS_IMPLEMENTATION_TYPE) ! error ("duplicate definition of instance method `%s'", ! IDENTIFIER_POINTER (METHOD_SEL_NAME (mth))); ! else ! { ! /* Check types; if different, complain. */ ! if (!comp_proto_with_proto (method, mth)) ! error ("duplicate declaration of instance method `%s'", ! IDENTIFIER_POINTER (METHOD_SEL_NAME (mth))); ! } } ! if (!(hsh = hash_lookup (nst_method_hash_list, METHOD_SEL_NAME (method)))) ! { ! /* Install on a global chain. */ ! hash_enter (nst_method_hash_list, method); ! } else { ! /* Check types; if different, add to a list. */ ! if (!comp_proto_with_proto (method, hsh->key)) ! hash_add_attr (hsh, method); } return method; } static tree ! add_class (class) ! tree class; { /* Put interfaces on list in reverse order. */ TREE_CHAIN (class) = interface_chain; --- 6218,6355 ---- } static tree ! lookup_method_static (tree interface, tree ident, int is_class) { + tree meth = NULL_TREE, root_inter = NULL_TREE; tree inter = interface; ! while (inter) { + tree chain = is_class ? CLASS_CLS_METHODS (inter) : CLASS_NST_METHODS (inter); + tree category = inter; + + /* First, look up the method in the class itself. */ if ((meth = lookup_method (chain, ident))) return meth; ! /* Failing that, look for the method in each category of the class. */ ! while ((category = CLASS_CATEGORY_LIST (category))) { ! chain = is_class ? CLASS_CLS_METHODS (category) : CLASS_NST_METHODS (category); ! /* Check directly in each category. */ ! if ((meth = lookup_method (chain, ident))) return meth; ! /* Failing that, check in each category's protocols. */ ! if (CLASS_PROTOCOL_LIST (category)) { ! if ((meth = (lookup_method_in_protocol_list ! (CLASS_PROTOCOL_LIST (category), ident, is_class)))) return meth; } } ! /* If not found in categories, check in protocols of the main class. */ if (CLASS_PROTOCOL_LIST (inter)) { if ((meth = (lookup_method_in_protocol_list ! (CLASS_PROTOCOL_LIST (inter), ident, is_class)))) return meth; } + /* Failing that, climb up the inheritance hierarchy. */ root_inter = inter; ! inter = lookup_interface (CLASS_SUPER_NAME (inter)); } while (inter); /* If no class (factory) method was found, check if an _instance_ method of the same name exists in the root class. This is what ! the Objective-C runtime will do. If an instance method was not ! found, return 0. */ ! return is_class ? lookup_method_static (root_inter, ident, 0): NULL_TREE; } ! /* Add the method to the hash list if it doesn't contain an identical ! method already. */ ! static void ! add_method_to_hash_list (hash *hash_list, tree method) { hash hsh; ! if (!(hsh = hash_lookup (hash_list, METHOD_SEL_NAME (method)))) { /* Install on a global chain. */ ! hash_enter (hash_list, method); } else { ! /* Check types against those; if different, add to a list. */ ! attr loop; ! int already_there = comp_proto_with_proto (method, hsh->key); ! for (loop = hsh->list; !already_there && loop; loop = loop->next) ! already_there |= comp_proto_with_proto (method, loop->value); ! if (!already_there) ! hash_add_attr (hsh, method); } } ! tree ! objc_add_method (tree class, tree method, int is_class) { tree mth; ! if (!(mth = lookup_method (is_class ? CLASS_CLS_METHODS (class) : CLASS_NST_METHODS (class), method))) { ! /* put method on list in reverse order */ ! if (is_class) ! { ! TREE_CHAIN (method) = CLASS_CLS_METHODS (class); ! CLASS_CLS_METHODS (class) = method; ! } ! else ! { ! TREE_CHAIN (method) = CLASS_NST_METHODS (class); ! CLASS_NST_METHODS (class) = method; ! } } else { ! /* When processing an @interface for a class or category, give hard ! errors on methods with identical selectors but differing argument ! and/or return types. We do not do this for @implementations, because ! C/C++ will do it for us (i.e., there will be duplicate function ! definition errors). */ ! if ((TREE_CODE (class) == CLASS_INTERFACE_TYPE ! || TREE_CODE (class) == CATEGORY_INTERFACE_TYPE) ! && !comp_proto_with_proto (method, mth)) ! error ("duplicate declaration of method `%c%s'", ! is_class ? '+' : '-', IDENTIFIER_POINTER (METHOD_SEL_NAME (mth))); } ! if (is_class) ! add_method_to_hash_list (cls_method_hash_list, method); else { ! add_method_to_hash_list (nst_method_hash_list, method); ! ! /* Instance methods in root classes (and categories thereof) ! may acts as class methods as a last resort. */ ! if (TREE_CODE (class) == CATEGORY_INTERFACE_TYPE ! || TREE_CODE (class) == CATEGORY_IMPLEMENTATION_TYPE) ! class = lookup_interface (CLASS_NAME (class)); ! ! if (TREE_CODE (class) != PROTOCOL_INTERFACE_TYPE ! && !CLASS_SUPER_NAME (class)) ! add_method_to_hash_list (cls_method_hash_list, method); } + return method; } static tree ! add_class (tree class) { /* Put interfaces on list in reverse order. */ TREE_CHAIN (class) = interface_chain; *************** add_class (class) *** 5753,5776 **** } static void ! add_category (class, category) ! tree class; ! tree category; { /* Put categories on list in reverse order. */ ! tree cat = CLASS_CATEGORY_LIST (class); ! while (cat) { ! if (CLASS_SUPER_NAME (cat) == CLASS_SUPER_NAME (category)) ! warning ("duplicate interface declaration for category `%s(%s)'", ! IDENTIFIER_POINTER (CLASS_NAME (class)), ! IDENTIFIER_POINTER (CLASS_SUPER_NAME (category))); ! cat = CLASS_CATEGORY_LIST (cat); } - - CLASS_CATEGORY_LIST (category) = CLASS_CATEGORY_LIST (class); - CLASS_CATEGORY_LIST (class) = category; } /* Called after parsing each instance variable declaration. Necessary to --- 6358,6379 ---- } static void ! add_category (tree class, tree category) { /* Put categories on list in reverse order. */ ! tree cat = lookup_category (class, CLASS_SUPER_NAME (category)); ! if (cat) { ! warning ("duplicate interface declaration for category `%s(%s)'", ! IDENTIFIER_POINTER (CLASS_NAME (class)), ! IDENTIFIER_POINTER (CLASS_SUPER_NAME (category))); ! } ! else ! { ! CLASS_CATEGORY_LIST (category) = CLASS_CATEGORY_LIST (class); ! CLASS_CATEGORY_LIST (class) = category; } } /* Called after parsing each instance variable declaration. Necessary to *************** add_category (class, category) *** 5779,5802 **** PUBLIC is 1 for public, 0 for protected, and 2 for private. */ tree ! add_instance_variable (class, public, declarator, declspecs, width) ! tree class; ! int public; ! tree declarator; ! tree declspecs; ! tree width; { ! tree field_decl, raw_decl; ! raw_decl = build_tree_list (declspecs, declarator); ! if (CLASS_RAW_IVARS (class)) ! chainon (CLASS_RAW_IVARS (class), raw_decl); ! else ! CLASS_RAW_IVARS (class) = raw_decl; ! field_decl = grokfield (input_filename, lineno, ! declarator, declspecs, width); /* Overload the public attribute, it is not used for FIELD_DECLs. */ switch (public) --- 6382,6445 ---- PUBLIC is 1 for public, 0 for protected, and 2 for private. */ tree ! add_instance_variable (tree class, int public, tree declarator, ! tree declspecs, tree width) { ! tree field_decl = grokfield (declarator, declspecs, width); ! tree field_type = TREE_TYPE (field_decl); ! const char *ivar_name = DECL_NAME (field_decl) ! ? IDENTIFIER_POINTER (DECL_NAME (field_decl)) ! : ""; ! tree raw_decl; ! #ifdef OBJCPLUS ! if (TREE_CODE (field_type) == REFERENCE_TYPE) ! { ! error ("illegal reference type specified for instance variable `%s'", ! ivar_name); ! /* Return class as is without adding this ivar. */ ! return class; ! } ! #endif ! if (field_type == error_mark_node || !TYPE_SIZE (field_type) ! || TYPE_SIZE (field_type) == error_mark_node ! /* 'type[0]' is allowed, but 'type[]' is not! */ ! #ifdef OBJCPLUS ! || (TYPE_SIZE (field_type) == bitsize_zero_node ! && !TREE_OPERAND (declarator, 1)) ! #endif ! ) ! { ! error ("instance variable `%s' has unknown size", ivar_name); ! /* Return class as is without adding this ivar. */ ! return class; ! } ! #ifdef OBJCPLUS ! /* zlaski 2001-Apr-24: C++ classes with non-trivial constructors and/or destructors ! cannot be ivars; ditto for classes with vtables. */ ! if(IS_AGGR_TYPE (field_type) && (TYPE_NEEDS_CONSTRUCTING (field_type) ! || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (field_type) || TYPE_POLYMORPHIC_P (field_type))) ! { ! const char *type_name = IDENTIFIER_POINTER (OBJC_TYPE_NAME (field_type)); ! if(TYPE_POLYMORPHIC_P (field_type)) { ! /* vtable pointers are Real Bad(tm), since Obj-C cannot initialize them */ ! error ("type `%s' has virtual member functions", type_name); ! error ("illegal aggregate type `%s' specified for instance variable `%s'", ! type_name, ivar_name); ! /* Return class as is without adding this ivar. */ ! return class; ! } ! /* user-defined constructors and destructors are not known to Obj-C and ! hence will not be called. This may or may not be a problem. */ ! if (TYPE_NEEDS_CONSTRUCTING (field_type)) ! warning ("type `%s' has a user-defined constructor", type_name); ! if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (field_type)) ! warning ("type `%s' has a user-defined destructor", type_name); ! warning ("C++ constructors and destructors will not be invoked for Objective-C fields"); ! } ! #endif /* Overload the public attribute, it is not used for FIELD_DECLs. */ switch (public) *************** add_instance_variable (class, public, de *** 5821,5838 **** } ! if (CLASS_IVARS (class)) ! chainon (CLASS_IVARS (class), field_decl); ! else ! CLASS_IVARS (class) = field_decl; ! return class; } tree ! is_ivar (decl_chain, ident) ! tree decl_chain; ! tree ident; { for ( ; decl_chain; decl_chain = TREE_CHAIN (decl_chain)) if (DECL_NAME (decl_chain) == ident) --- 6464,6477 ---- } ! raw_decl = build_tree_list (declspecs, build_tree_list (declarator, width)); ! CLASS_RAW_IVARS (class) = chainon (CLASS_RAW_IVARS (class), raw_decl); ! CLASS_IVARS (class) = chainon (CLASS_IVARS (class), field_decl); return class; } tree ! is_ivar (tree decl_chain, tree ident) { for ( ; decl_chain; decl_chain = TREE_CHAIN (decl_chain)) if (DECL_NAME (decl_chain) == ident) *************** is_ivar (decl_chain, ident) *** 5843,5854 **** /* True if the ivar is private and we are not in its implementation. */ int ! is_private (decl) ! tree decl; { if (TREE_PRIVATE (decl) && ! is_ivar (CLASS_IVARS (implementation_template), DECL_NAME (decl))) ! return 1; else return 0; } --- 6482,6496 ---- /* True if the ivar is private and we are not in its implementation. */ int ! is_private (tree decl) { if (TREE_PRIVATE (decl) && ! is_ivar (CLASS_IVARS (implementation_template), DECL_NAME (decl))) ! { ! error ("instance variable `%s' is declared private", ! IDENTIFIER_POINTER (DECL_NAME (decl))); ! return 1; ! } else return 0; } *************** is_private (decl) *** 5856,5864 **** /* We have an instance variable reference;, check to see if it is public. */ int ! is_public (expr, identifier) ! tree expr; ! tree identifier; { tree basetype = TREE_TYPE (expr); enum tree_code code = TREE_CODE (basetype); --- 6498,6504 ---- /* We have an instance variable reference;, check to see if it is public. */ int ! is_public (tree expr, tree identifier) { tree basetype = TREE_TYPE (expr); enum tree_code code = TREE_CODE (basetype); *************** is_public (expr, identifier) *** 5868,5877 **** { if (TREE_STATIC_TEMPLATE (basetype)) { ! if (!lookup_interface (TYPE_NAME (basetype))) { error ("cannot find interface declaration for `%s'", ! IDENTIFIER_POINTER (TYPE_NAME (basetype))); return 0; } --- 6508,6517 ---- { if (TREE_STATIC_TEMPLATE (basetype)) { ! if (!lookup_interface (OBJC_TYPE_NAME (basetype))) { error ("cannot find interface declaration for `%s'", ! IDENTIFIER_POINTER (OBJC_TYPE_NAME (basetype))); return 0; } *************** is_public (expr, identifier) *** 5889,5904 **** || (TREE_CODE (objc_implementation_context) == CATEGORY_IMPLEMENTATION_TYPE)) && (CLASS_NAME (objc_implementation_context) ! == TYPE_NAME (basetype)))) ! { ! int private = is_private (decl); ! if (private) ! error ("instance variable '%s' is declared private", ! IDENTIFIER_POINTER (DECL_NAME (decl))); ! ! return !private; ! } error ("instance variable `%s' is declared %s", IDENTIFIER_POINTER (identifier), TREE_PRIVATE (decl) ? "private" : "protected"); --- 6529,6548 ---- || (TREE_CODE (objc_implementation_context) == CATEGORY_IMPLEMENTATION_TYPE)) && (CLASS_NAME (objc_implementation_context) ! == OBJC_TYPE_NAME (basetype)))) ! return ! is_private (decl); + /* The 2.95.2 compiler sometimes allowed C functions to access + non-@public ivars. We will let this slide for now... */ + if (!objc_method_context) + { + warning ("instance variable `%s' is %s; " + "this will be a hard error in the future", + IDENTIFIER_POINTER (identifier), + TREE_PRIVATE (decl) ? "@private" : "@protected"); + return 1; + } + error ("instance variable `%s' is declared %s", IDENTIFIER_POINTER (identifier), TREE_PRIVATE (decl) ? "private" : "protected"); *************** is_public (expr, identifier) *** 5919,5928 **** /* Make sure all entries in CHAIN are also in LIST. */ static int ! check_methods (chain, list, mtype) ! tree chain; ! tree list; ! int mtype; { int first = 1; --- 6563,6569 ---- /* Make sure all entries in CHAIN are also in LIST. */ static int ! check_methods (tree chain, tree list, int mtype) { int first = 1; *************** check_methods (chain, list, mtype) *** 5956,5964 **** /* Check if CLASS, or its superclasses, explicitly conforms to PROTOCOL. */ static int ! conforms_to_protocol (class, protocol) ! tree class; ! tree protocol; { if (TREE_CODE (protocol) == PROTOCOL_INTERFACE_TYPE) { --- 6597,6603 ---- /* Check if CLASS, or its superclasses, explicitly conforms to PROTOCOL. */ static int ! conforms_to_protocol (tree class, tree protocol) { if (TREE_CODE (protocol) == PROTOCOL_INTERFACE_TYPE) { *************** conforms_to_protocol (class, protocol) *** 5980,5993 **** return 1; } ! /* Make sure all methods in CHAIN are accessible as MTYPE methods in CONTEXT. This is one of two mechanisms to check protocol integrity. */ static int ! check_methods_accessible (chain, context, mtype) ! tree chain; ! tree context; ! int mtype; { int first = 1; tree list; --- 6619,6629 ---- return 1; } ! /* Make sure all methods in CHAIN are accessible as MTYPE methods in CONTEXT. This is one of two mechanisms to check protocol integrity. */ static int ! check_methods_accessible (tree chain, tree context, int mtype) { int first = 1; tree list; *************** check_methods_accessible (chain, context *** 6004,6020 **** list = CLASS_NST_METHODS (context); if (lookup_method (list, chain)) ! break; else if (TREE_CODE (context) == CLASS_IMPLEMENTATION_TYPE || TREE_CODE (context) == CLASS_INTERFACE_TYPE) ! context = (CLASS_SUPER_NAME (context) ? lookup_interface (CLASS_SUPER_NAME (context)) : NULL_TREE); else if (TREE_CODE (context) == CATEGORY_IMPLEMENTATION_TYPE || TREE_CODE (context) == CATEGORY_INTERFACE_TYPE) ! context = (CLASS_NAME (context) ? lookup_interface (CLASS_NAME (context)) : NULL_TREE); else --- 6640,6656 ---- list = CLASS_NST_METHODS (context); if (lookup_method (list, chain)) ! break; else if (TREE_CODE (context) == CLASS_IMPLEMENTATION_TYPE || TREE_CODE (context) == CLASS_INTERFACE_TYPE) ! context = (CLASS_SUPER_NAME (context) ? lookup_interface (CLASS_SUPER_NAME (context)) : NULL_TREE); else if (TREE_CODE (context) == CATEGORY_IMPLEMENTATION_TYPE || TREE_CODE (context) == CATEGORY_INTERFACE_TYPE) ! context = (CLASS_NAME (context) ? lookup_interface (CLASS_NAME (context)) : NULL_TREE); else *************** check_methods_accessible (chain, context *** 6049,6060 **** /* Check whether the current interface (accessible via 'objc_implementation_context') actually implements protocol P, along with any protocols that P inherits. */ ! static void ! check_protocol (p, type, name) ! tree p; ! const char *type; ! const char *name; { if (TREE_CODE (p) == PROTOCOL_INTERFACE_TYPE) { --- 6685,6693 ---- /* Check whether the current interface (accessible via 'objc_implementation_context') actually implements protocol P, along with any protocols that P inherits. */ ! static void ! check_protocol (tree p, const char *type, const char *name) { if (TREE_CODE (p) == PROTOCOL_INTERFACE_TYPE) { *************** check_protocol (p, type, name) *** 6084,6090 **** warning ("%s `%s' does not fully implement the `%s' protocol", type, name, IDENTIFIER_POINTER (PROTOCOL_NAME (p))); } ! /* Check protocols recursively. */ if (PROTOCOL_LIST (p)) { --- 6717,6723 ---- warning ("%s `%s' does not fully implement the `%s' protocol", type, name, IDENTIFIER_POINTER (PROTOCOL_NAME (p))); } ! /* Check protocols recursively. */ if (PROTOCOL_LIST (p)) { *************** check_protocol (p, type, name) *** 6092,6098 **** tree super_class = lookup_interface (CLASS_SUPER_NAME (implementation_template)); ! while (subs) { tree sub = TREE_VALUE (subs); --- 6725,6731 ---- tree super_class = lookup_interface (CLASS_SUPER_NAME (implementation_template)); ! while (subs) { tree sub = TREE_VALUE (subs); *************** check_protocol (p, type, name) *** 6104,6119 **** } } } ! /* Check whether the current interface (accessible via 'objc_implementation_context') actually implements the protocols listed in PROTO_LIST. */ ! static void ! check_protocols (proto_list, type, name) ! tree proto_list; ! const char *type; ! const char *name; { for ( ; proto_list; proto_list = TREE_CHAIN (proto_list)) { --- 6737,6749 ---- } } } ! /* Check whether the current interface (accessible via 'objc_implementation_context') actually implements the protocols listed in PROTO_LIST. */ ! static void ! check_protocols (tree proto_list, const char *type, const char *name) { for ( ; proto_list; proto_list = TREE_CHAIN (proto_list)) { *************** check_protocols (proto_list, type, name) *** 6129,6142 **** CATEGORY_INTERFACE_TYPE, or CATEGORY_IMPLEMENTATION_TYPE. */ tree ! start_class (code, class_name, super_name, protocol_list) ! enum tree_code code; ! tree class_name; ! tree super_name; ! tree protocol_list; { tree class, decl; if (objc_implementation_context) { warning ("`@end' missing in implementation context"); --- 6759,6775 ---- CATEGORY_INTERFACE_TYPE, or CATEGORY_IMPLEMENTATION_TYPE. */ tree ! start_class (enum tree_code code, tree class_name, tree super_name, ! tree protocol_list) { tree class, decl; + #ifdef OBJCPLUS + if (current_namespace != global_namespace) { + error ("Objective-C declarations may only appear in global scope"); + } + #endif /* OBJCPLUS */ + if (objc_implementation_context) { warning ("`@end' missing in implementation context"); *************** start_class (code, class_name, super_nam *** 6146,6162 **** } class = make_node (code); ! TYPE_BINFO (class) = make_tree_vec (6); CLASS_NAME (class) = class_name; CLASS_SUPER_NAME (class) = super_name; CLASS_CLS_METHODS (class) = NULL_TREE; ! if (! is_class_name (class_name) && (decl = lookup_name (class_name))) { error ("`%s' redeclared as different kind of symbol", IDENTIFIER_POINTER (class_name)); ! error_with_decl (decl, "previous declaration of `%s'"); } if (code == CLASS_IMPLEMENTATION_TYPE) --- 6779,6797 ---- } class = make_node (code); ! TYPE_BINFO (class) = make_tree_vec (CLASS_BINFO_ELTS); CLASS_NAME (class) = class_name; CLASS_SUPER_NAME (class) = super_name; CLASS_CLS_METHODS (class) = NULL_TREE; ! if (! is_class_name (class_name) ! && (decl = lookup_name (class_name))) { error ("`%s' redeclared as different kind of symbol", IDENTIFIER_POINTER (class_name)); ! error ("%Jprevious declaration of '%D'", ! decl, decl); } if (code == CLASS_IMPLEMENTATION_TYPE) *************** start_class (code, class_name, super_nam *** 6175,6191 **** implemented_classes); } - /* Pre-build the following entities - for speed/convenience. */ - if (!self_id) - self_id = get_identifier ("self"); - if (!ucmd_id) - ucmd_id = get_identifier ("_cmd"); - if (!unused_list) - unused_list - = build_tree_list (get_identifier ("__unused__"), NULL_TREE); - if (!objc_super_template) - objc_super_template = build_super_template (); - /* Reset for multiple classes per file. */ method_slot = 0; --- 6810,6815 ---- *************** start_class (code, class_name, super_nam *** 6216,6222 **** else if (! super_name) { ! CLASS_SUPER_NAME (objc_implementation_context) = CLASS_SUPER_NAME (implementation_template); } } --- 6840,6846 ---- else if (! super_name) { ! CLASS_SUPER_NAME (objc_implementation_context) = CLASS_SUPER_NAME (implementation_template); } } *************** start_class (code, class_name, super_nam *** 6224,6231 **** else if (code == CLASS_INTERFACE_TYPE) { if (lookup_interface (class_name)) ! warning ("duplicate interface declaration for class `%s'", ! IDENTIFIER_POINTER (class_name)); else add_class (class); --- 6848,6859 ---- else if (code == CLASS_INTERFACE_TYPE) { if (lookup_interface (class_name)) ! #ifdef OBJCPLUS ! error ("duplicate interface declaration for class `%s'", ! #else ! warning ("duplicate interface declaration for class `%s'", ! #endif ! IDENTIFIER_POINTER (class_name)); else add_class (class); *************** start_class (code, class_name, super_nam *** 6258,6274 **** else if (code == CATEGORY_IMPLEMENTATION_TYPE) { - /* Pre-build the following entities for speed/convenience. */ - if (!self_id) - self_id = get_identifier ("self"); - if (!ucmd_id) - ucmd_id = get_identifier ("_cmd"); - if (!unused_list) - unused_list - = build_tree_list (get_identifier ("__unused__"), NULL_TREE); - if (!objc_super_template) - objc_super_template = build_super_template (); - /* Reset for multiple classes per file. */ method_slot = 0; --- 6886,6891 ---- *************** start_class (code, class_name, super_nam *** 6289,6296 **** } tree ! continue_class (class) ! tree class; { if (TREE_CODE (class) == CLASS_IMPLEMENTATION_TYPE || TREE_CODE (class) == CATEGORY_IMPLEMENTATION_TYPE) --- 6906,6912 ---- } tree ! continue_class (tree class) { if (TREE_CODE (class) == CLASS_IMPLEMENTATION_TYPE || TREE_CODE (class) == CATEGORY_IMPLEMENTATION_TYPE) *************** continue_class (class) *** 6332,6342 **** else if (TREE_CODE (class) == CLASS_INTERFACE_TYPE) { ! tree record = xref_tag (RECORD_TYPE, CLASS_NAME (class)); ! ! if (!TYPE_FIELDS (record)) { ! finish_struct (record, get_class_ivars (class), NULL_TREE); CLASS_STATIC_TEMPLATE (class) = record; /* Mark this record as a class template for static typing. */ --- 6948,6957 ---- else if (TREE_CODE (class) == CLASS_INTERFACE_TYPE) { ! if (!CLASS_STATIC_TEMPLATE (class)) { ! tree record = start_struct (RECORD_TYPE, CLASS_NAME (class)); ! finish_struct (record, get_class_ivars (class, 0), NULL_TREE); CLASS_STATIC_TEMPLATE (class) = record; /* Mark this record as a class template for static typing. */ *************** continue_class (class) *** 6353,6360 **** /* This is called once we see the "@end" in an interface/implementation. */ void ! finish_class (class) ! tree class; { if (TREE_CODE (class) == CLASS_IMPLEMENTATION_TYPE) { --- 6968,6974 ---- /* This is called once we see the "@end" in an interface/implementation. */ void ! finish_class (tree class) { if (TREE_CODE (class) == CLASS_IMPLEMENTATION_TYPE) { *************** finish_class (class) *** 6377,6391 **** else if (TREE_CODE (class) == CATEGORY_IMPLEMENTATION_TYPE) { ! tree category = CLASS_CATEGORY_LIST (implementation_template); ! ! /* Find the category interface from the class it is associated with. */ ! while (category) ! { ! if (CLASS_SUPER_NAME (class) == CLASS_SUPER_NAME (category)) ! break; ! category = CLASS_CATEGORY_LIST (category); ! } if (category) { --- 6991,6997 ---- else if (TREE_CODE (class) == CATEGORY_IMPLEMENTATION_TYPE) { ! tree category = lookup_category (implementation_template, CLASS_SUPER_NAME (class)); if (category) { *************** finish_class (class) *** 6420,6427 **** } static tree ! add_protocol (protocol) ! tree protocol; { /* Put protocol on list in reverse order. */ TREE_CHAIN (protocol) = protocol_chain; --- 7026,7032 ---- } static tree ! add_protocol (tree protocol) { /* Put protocol on list in reverse order. */ TREE_CHAIN (protocol) = protocol_chain; *************** add_protocol (protocol) *** 6430,6437 **** } static tree ! lookup_protocol (ident) ! tree ident; { tree chain; --- 7035,7041 ---- } static tree ! lookup_protocol (tree ident) { tree chain; *************** lookup_protocol (ident) *** 6446,6456 **** they are already declared or defined, the function has no effect. */ void ! objc_declare_protocols (names) ! tree names; { tree list; for (list = names; list; list = TREE_CHAIN (list)) { tree name = TREE_VALUE (list); --- 7050,7065 ---- they are already declared or defined, the function has no effect. */ void ! objc_declare_protocols (tree names) { tree list; + #ifdef OBJCPLUS + if (current_namespace != global_namespace) { + error ("Objective-C declarations may only appear in global scope"); + } + #endif /* OBJCPLUS */ + for (list = names; list; list = TREE_CHAIN (list)) { tree name = TREE_VALUE (list); *************** objc_declare_protocols (names) *** 6470,6482 **** } tree ! start_protocol (code, name, list) ! enum tree_code code; ! tree name; ! tree list; { tree protocol; /* This is as good a place as any. Need to invoke push_tag_toplevel. */ if (!objc_protocol_template) --- 7079,7094 ---- } tree ! start_protocol (enum tree_code code, tree name, tree list) { tree protocol; + #ifdef OBJCPLUS + if (current_namespace != global_namespace) { + error ("Objective-C declarations may only appear in global scope"); + } + #endif /* OBJCPLUS */ + /* This is as good a place as any. Need to invoke push_tag_toplevel. */ if (!objc_protocol_template) *************** start_protocol (code, name, list) *** 6513,6520 **** } void ! finish_protocol (protocol) ! tree protocol ATTRIBUTE_UNUSED; { } --- 7125,7131 ---- } void ! finish_protocol (tree protocol ATTRIBUTE_UNUSED) { } *************** finish_protocol (protocol) *** 6523,6530 **** ??? What is the FORMAT? Someone please document this! */ static void ! encode_type_qualifiers (declspecs) ! tree declspecs; { tree spec; --- 7134,7140 ---- ??? What is the FORMAT? Someone please document this! */ static void ! encode_type_qualifiers (tree declspecs) { tree spec; *************** encode_type_qualifiers (declspecs) *** 6550,6568 **** /* Encode a pointer type. */ static void ! encode_pointer (type, curtype, format) ! tree type; ! int curtype; ! int format; { tree pointer_to = TREE_TYPE (type); if (TREE_CODE (pointer_to) == RECORD_TYPE) { ! if (TYPE_NAME (pointer_to) ! && TREE_CODE (TYPE_NAME (pointer_to)) == IDENTIFIER_NODE) { ! const char *name = IDENTIFIER_POINTER (TYPE_NAME (pointer_to)); if (strcmp (name, TAG_OBJECT) == 0) /* '@' */ { --- 7160,7175 ---- /* Encode a pointer type. */ static void ! encode_pointer (tree type, int curtype, int format) { tree pointer_to = TREE_TYPE (type); if (TREE_CODE (pointer_to) == RECORD_TYPE) { ! if (OBJC_TYPE_NAME (pointer_to) ! && TREE_CODE (OBJC_TYPE_NAME (pointer_to)) == IDENTIFIER_NODE) { ! const char *name = IDENTIFIER_POINTER (OBJC_TYPE_NAME (pointer_to)); if (strcmp (name, TAG_OBJECT) == 0) /* '@' */ { *************** encode_pointer (type, curtype, format) *** 6600,6607 **** else if (TREE_CODE (pointer_to) == INTEGER_TYPE && TYPE_MODE (pointer_to) == QImode) { ! obstack_1grow (&util_obstack, '*'); ! return; } /* We have a type that does not get special treatment. */ --- 7207,7221 ---- else if (TREE_CODE (pointer_to) == INTEGER_TYPE && TYPE_MODE (pointer_to) == QImode) { ! tree pname = TREE_CODE (OBJC_TYPE_NAME (pointer_to)) == IDENTIFIER_NODE ! ? OBJC_TYPE_NAME (pointer_to) ! : DECL_NAME (OBJC_TYPE_NAME (pointer_to)); ! ! if (!flag_next_runtime || strcmp (IDENTIFIER_POINTER (pname), "BOOL")) ! { ! obstack_1grow (&util_obstack, '*'); ! return; ! } } /* We have a type that does not get special treatment. */ *************** encode_pointer (type, curtype, format) *** 6612,6621 **** } static void ! encode_array (type, curtype, format) ! tree type; ! int curtype; ! int format; { tree an_int_cst = TYPE_SIZE (type); tree array_of = TREE_TYPE (type); --- 7226,7232 ---- } static void ! encode_array (tree type, int curtype, int format) { tree an_int_cst = TYPE_SIZE (type); tree array_of = TREE_TYPE (type); *************** encode_array (type, curtype, format) *** 6639,6769 **** } static void ! encode_aggregate_within (type, curtype, format, left, right) ! tree type; ! int curtype; ! int format; ! int left; ! int right; { ! /* The RECORD_TYPE may in fact be a typedef! For purposes ! of encoding, we need the real underlying enchilada. */ ! if (TYPE_MAIN_VARIANT (type)) ! type = TYPE_MAIN_VARIANT (type); ! ! if (obstack_object_size (&util_obstack) > 0 ! && *(obstack_next_free (&util_obstack) - 1) == '^') ! { ! tree name = TYPE_NAME (type); ! ! /* we have a reference; this is a NeXT extension. */ ! ! if (obstack_object_size (&util_obstack) - curtype == 1 ! && format == OBJC_ENCODE_INLINE_DEFS) ! { ! /* Output format of struct for first level only. */ ! tree fields = TYPE_FIELDS (type); ! ! if (name && TREE_CODE (name) == IDENTIFIER_NODE) ! { ! obstack_1grow (&util_obstack, left); ! obstack_grow (&util_obstack, ! IDENTIFIER_POINTER (name), ! strlen (IDENTIFIER_POINTER (name))); ! obstack_1grow (&util_obstack, '='); ! } ! else ! { ! obstack_1grow (&util_obstack, left); ! obstack_grow (&util_obstack, "?=", 2); ! } ! ! for ( ; fields; fields = TREE_CHAIN (fields)) ! encode_field_decl (fields, curtype, format); ! ! obstack_1grow (&util_obstack, right); ! } ! ! else if (name && TREE_CODE (name) == IDENTIFIER_NODE) ! { ! obstack_1grow (&util_obstack, left); ! obstack_grow (&util_obstack, ! IDENTIFIER_POINTER (name), ! strlen (IDENTIFIER_POINTER (name))); ! obstack_1grow (&util_obstack, right); ! } ! else ! { ! /* We have an untagged structure or a typedef. */ ! obstack_1grow (&util_obstack, left); ! obstack_1grow (&util_obstack, '?'); ! obstack_1grow (&util_obstack, right); ! } ! } else { - tree name = TYPE_NAME (type); tree fields = TYPE_FIELDS (type); ! if (format == OBJC_ENCODE_INLINE_DEFS ! || generating_instance_variables) { ! obstack_1grow (&util_obstack, left); ! if (name && TREE_CODE (name) == IDENTIFIER_NODE) ! obstack_grow (&util_obstack, ! IDENTIFIER_POINTER (name), ! strlen (IDENTIFIER_POINTER (name))); ! else ! obstack_1grow (&util_obstack, '?'); ! ! obstack_1grow (&util_obstack, '='); ! ! for (; fields; fields = TREE_CHAIN (fields)) { ! if (generating_instance_variables) ! { ! tree fname = DECL_NAME (fields); ! ! obstack_1grow (&util_obstack, '"'); ! if (fname && TREE_CODE (fname) == IDENTIFIER_NODE) ! { ! obstack_grow (&util_obstack, ! IDENTIFIER_POINTER (fname), ! strlen (IDENTIFIER_POINTER (fname))); ! } ! ! obstack_1grow (&util_obstack, '"'); ! } ! encode_field_decl (fields, curtype, format); } ! ! obstack_1grow (&util_obstack, right); ! } ! ! else ! { ! obstack_1grow (&util_obstack, left); ! if (name && TREE_CODE (name) == IDENTIFIER_NODE) ! obstack_grow (&util_obstack, ! IDENTIFIER_POINTER (name), ! strlen (IDENTIFIER_POINTER (name))); ! else ! /* We have an untagged structure or a typedef. */ ! obstack_1grow (&util_obstack, '?'); ! ! obstack_1grow (&util_obstack, right); } } } static void ! encode_aggregate (type, curtype, format) ! tree type; ! int curtype; ! int format; { enum tree_code code = TREE_CODE (type); --- 7250,7324 ---- } static void ! encode_aggregate_within (tree type, int curtype, int format, int left, ! int right) { ! tree name; ! /* NB: aggregates that are pointed to have slightly different encoding ! rules in that you never encode the names of instance variables. */ ! int pointed_to ! = (obstack_object_size (&util_obstack) > 0 ! && *(obstack_next_free (&util_obstack) - 1) == '^'); ! int inline_contents ! = ((format == OBJC_ENCODE_INLINE_DEFS || generating_instance_variables) ! && (!pointed_to || obstack_object_size (&util_obstack) - curtype == 1)); ! /* Traverse struct aliases; it is important to get the ! original struct and its tag name (if any). */ ! type = TYPE_MAIN_VARIANT (type); ! name = OBJC_TYPE_NAME (type); ! /* Open parenth/bracket. */ ! obstack_1grow (&util_obstack, left); + /* Encode the struct/union tag name, or '?' if a tag was + not provided. Typedef aliases do not qualify. */ + if (name && TREE_CODE (name) == IDENTIFIER_NODE + #ifdef OBJCPLUS + /* Did this struct have a tag? */ + && !TYPE_WAS_ANONYMOUS (type) + #endif + ) + obstack_grow (&util_obstack, + IDENTIFIER_POINTER (name), + strlen (IDENTIFIER_POINTER (name))); else + obstack_1grow (&util_obstack, '?'); + + /* Encode the types (and possibly names) of the inner fields, + if required. */ + if (inline_contents) { tree fields = TYPE_FIELDS (type); ! obstack_1grow (&util_obstack, '='); ! for (; fields; fields = TREE_CHAIN (fields)) { ! #ifdef OBJCPLUS ! /* C++ static members, and things that are not fields at all, ! should not appear in the encoding. */ ! if (TREE_CODE (fields) != FIELD_DECL || TREE_STATIC (fields)) ! continue; ! #endif ! if (generating_instance_variables && !pointed_to) { ! tree fname = DECL_NAME (fields); ! obstack_1grow (&util_obstack, '"'); ! if (fname && TREE_CODE (fname) == IDENTIFIER_NODE) ! obstack_grow (&util_obstack, ! IDENTIFIER_POINTER (fname), ! strlen (IDENTIFIER_POINTER (fname))); ! obstack_1grow (&util_obstack, '"'); } ! encode_field_decl (fields, curtype, format); } } + /* Close parenth/bracket. */ + obstack_1grow (&util_obstack, right); } static void ! encode_aggregate (tree type, int curtype, int format) { enum tree_code code = TREE_CODE (type); *************** encode_aggregate (type, curtype, format) *** 6771,6782 **** { case RECORD_TYPE: { ! encode_aggregate_within(type, curtype, format, '{', '}'); break; } case UNION_TYPE: { ! encode_aggregate_within(type, curtype, format, '(', ')'); break; } --- 7326,7337 ---- { case RECORD_TYPE: { ! encode_aggregate_within (type, curtype, format, '{', '}'); break; } case UNION_TYPE: { ! encode_aggregate_within (type, curtype, format, '(', ')'); break; } *************** encode_aggregate (type, curtype, format) *** 6789,6807 **** } } ! /* Support bitfields. The current version of Objective-C does not support ! them. The string will consist of one or more "b:n"'s where n is an ! integer describing the width of the bitfield. Currently, classes in ! the kit implement a method "-(char *)describeBitfieldStruct:" that ! simulates this. If they do not implement this method, the archiver ! assumes the bitfield is 16 bits wide (padded if necessary) and packed ! according to the GNU compiler. After looking at the "kit", it appears ! that all classes currently rely on this default behavior, rather than ! hand generating this string (which is tedious). */ static void ! encode_bitfield (width) ! int width; { char buffer[40]; sprintf (buffer, "b%d", width); --- 7344,7354 ---- } } ! /* Encode a bitfield NeXT-style (i.e., without a bit offset or the underlying ! field type. */ static void ! encode_next_bitfield (int width) { char buffer[40]; sprintf (buffer, "b%d", width); *************** encode_bitfield (width) *** 6809,6878 **** } /* FORMAT will be OBJC_ENCODE_INLINE_DEFS or OBJC_ENCODE_DONT_INLINE_DEFS. */ - static void ! encode_type (type, curtype, format) ! tree type; ! int curtype; ! int format; { enum tree_code code = TREE_CODE (type); if (code == INTEGER_TYPE) { ! if (integer_zerop (TYPE_MIN_VALUE (type))) ! { ! /* Unsigned integer types. */ ! ! if (TYPE_MODE (type) == QImode) ! obstack_1grow (&util_obstack, 'C'); ! else if (TYPE_MODE (type) == HImode) ! obstack_1grow (&util_obstack, 'S'); ! else if (TYPE_MODE (type) == SImode) ! { ! if (type == long_unsigned_type_node) ! obstack_1grow (&util_obstack, 'L'); ! else ! obstack_1grow (&util_obstack, 'I'); ! } ! else if (TYPE_MODE (type) == DImode) ! obstack_1grow (&util_obstack, 'Q'); ! } ! ! else ! /* Signed integer types. */ { ! if (TYPE_MODE (type) == QImode) ! obstack_1grow (&util_obstack, 'c'); ! else if (TYPE_MODE (type) == HImode) ! obstack_1grow (&util_obstack, 's'); ! else if (TYPE_MODE (type) == SImode) ! { ! if (type == long_integer_type_node) ! obstack_1grow (&util_obstack, 'l'); ! else ! obstack_1grow (&util_obstack, 'i'); ! } ! ! else if (TYPE_MODE (type) == DImode) ! obstack_1grow (&util_obstack, 'q'); } } else if (code == REAL_TYPE) { /* Floating point types. */ ! ! if (TYPE_MODE (type) == SFmode) ! obstack_1grow (&util_obstack, 'f'); ! else if (TYPE_MODE (type) == DFmode ! || TYPE_MODE (type) == TFmode) ! obstack_1grow (&util_obstack, 'd'); } else if (code == VOID_TYPE) obstack_1grow (&util_obstack, 'v'); else if (code == ARRAY_TYPE) encode_array (type, curtype, format); --- 7356,7405 ---- } /* FORMAT will be OBJC_ENCODE_INLINE_DEFS or OBJC_ENCODE_DONT_INLINE_DEFS. */ static void ! encode_type (tree type, int curtype, int format) { enum tree_code code = TREE_CODE (type); + char c; if (code == INTEGER_TYPE) { ! switch (GET_MODE_BITSIZE (TYPE_MODE (type))) { ! case 8: c = TREE_UNSIGNED (type) ? 'C' : 'c'; break; ! case 16: c = TREE_UNSIGNED (type) ? 'S' : 's'; break; ! case 32: ! if (type == long_unsigned_type_node ! || type == long_integer_type_node) ! c = TREE_UNSIGNED (type) ? 'L' : 'l'; ! else ! c = TREE_UNSIGNED (type) ? 'I' : 'i'; ! break; ! case 64: c = TREE_UNSIGNED (type) ? 'Q' : 'q'; break; ! default: abort (); } + obstack_1grow (&util_obstack, c); } else if (code == REAL_TYPE) { /* Floating point types. */ ! switch (GET_MODE_BITSIZE (TYPE_MODE (type))) ! { ! case 32: c = 'f'; break; ! case 64: ! case 128: c = 'd'; break; ! default: abort (); ! } ! obstack_1grow (&util_obstack, c); } else if (code == VOID_TYPE) obstack_1grow (&util_obstack, 'v'); + else if (code == BOOLEAN_TYPE) + obstack_1grow (&util_obstack, 'B'); + else if (code == ARRAY_TYPE) encode_array (type, curtype, format); *************** encode_type (type, curtype, format) *** 6887,6896 **** } static void ! encode_complete_bitfield (position, type, size) ! int position; ! tree type; ! int size; { enum tree_code code = TREE_CODE (type); char buffer[40]; --- 7414,7420 ---- } static void ! encode_gnu_bitfield (int position, tree type, int size) { enum tree_code code = TREE_CODE (type); char buffer[40]; *************** encode_complete_bitfield (position, type *** 6946,6984 **** } static void ! encode_field_decl (field_decl, curtype, format) ! tree field_decl; ! int curtype; ! int format; { tree type; type = TREE_TYPE (field_decl); ! /* If this field is obviously a bitfield, or is a bitfield that has been ! clobbered to look like a ordinary integer mode, go ahead and generate ! the bitfield typing information. */ ! if (flag_next_runtime) { ! if (DECL_BIT_FIELD_TYPE (field_decl)) ! encode_bitfield (tree_low_cst (DECL_SIZE (field_decl), 1)); else ! encode_type (TREE_TYPE (field_decl), curtype, format); } else ! { ! if (DECL_BIT_FIELD_TYPE (field_decl)) ! encode_complete_bitfield (int_bit_position (field_decl), ! DECL_BIT_FIELD_TYPE (field_decl), ! tree_low_cst (DECL_SIZE (field_decl), 1)); ! else ! encode_type (TREE_TYPE (field_decl), curtype, format); ! } } static tree ! expr_last (complex_expr) ! tree complex_expr; { tree next; --- 7470,7506 ---- } static void ! encode_field_decl (tree field_decl, int curtype, int format) { tree type; + #ifdef OBJCPLUS + /* C++ static members, and things that are not fields at all, + should not appear in the encoding. */ + if (TREE_CODE (field_decl) != FIELD_DECL || TREE_STATIC (field_decl)) + return; + #endif + type = TREE_TYPE (field_decl); ! /* Generate the bitfield typing information, if needed. Note the difference ! between GNU and NeXT runtimes. */ ! if (DECL_BIT_FIELD_TYPE (field_decl)) { ! int size = tree_low_cst (DECL_SIZE (field_decl), 1); ! ! if (flag_next_runtime) ! encode_next_bitfield (size); else ! encode_gnu_bitfield (int_bit_position (field_decl), ! DECL_BIT_FIELD_TYPE (field_decl), size); } else ! encode_type (TREE_TYPE (field_decl), curtype, format); } static tree ! objc_expr_last (tree complex_expr) { tree next; *************** expr_last (complex_expr) *** 6988,7013 **** return complex_expr; } - - /* Transform a method definition into a function definition as follows: - - synthesize the first two arguments, "self" and "_cmd". */ ! void ! start_method_def (method) ! tree method; { tree decl_specs; ! /* Required to implement _msgSuper. */ ! objc_method_context = method; ! UOBJC_SUPER_decl = NULL_TREE; ! ! /* Must be called BEFORE start_function. */ ! pushlevel (0); ! ! /* Generate prototype declarations for arguments..."new-style". */ ! ! if (TREE_CODE (objc_method_context) == INSTANCE_METHOD_DECL) decl_specs = build_tree_list (NULL_TREE, uprivate_record); else /* Really a `struct objc_class *'. However, we allow people to --- 7510,7523 ---- return complex_expr; } ! static void ! synth_self_and_ucmd_args (void) { tree decl_specs; ! if (objc_method_context ! && TREE_CODE (objc_method_context) == INSTANCE_METHOD_DECL) decl_specs = build_tree_list (NULL_TREE, uprivate_record); else /* Really a `struct objc_class *'. However, we allow people to *************** start_method_def (method) *** 7026,7031 **** --- 7536,7558 ---- (build_tree_list (decl_specs, build1 (INDIRECT_REF, NULL_TREE, ucmd_id)), unused_list)); + } + + /* Transform a method definition into a function definition as follows: + - synthesize the first two arguments, "self" and "_cmd". */ + + void + start_method_def (tree method) + { + /* Required to implement _msgSuper. */ + objc_method_context = method; + UOBJC_SUPER_decl = NULL_TREE; + + /* Must be called BEFORE start_function. */ + pushlevel (0); + + /* Generate prototype declarations for arguments..."new-style". */ + synth_self_and_ucmd_args (); /* Generate argument declarations if a keyword_decl. */ if (METHOD_SEL_ARGS (method)) *************** start_method_def (method) *** 7038,7044 **** if (arg_decl) { ! tree last_expr = expr_last (arg_decl); /* Unite the abstract decl with its name. */ TREE_OPERAND (last_expr, 0) = KEYWORD_ARG_NAME (arglist); --- 7565,7571 ---- if (arg_decl) { ! tree last_expr = objc_expr_last (arg_decl); /* Unite the abstract decl with its name. */ TREE_OPERAND (last_expr, 0) = KEYWORD_ARG_NAME (arglist); *************** start_method_def (method) *** 7046,7053 **** --- 7573,7582 ---- (build_tree_list (arg_spec, arg_decl), NULL_TREE)); + #ifndef OBJCPLUS /* Unhook: restore the abstract declarator. */ TREE_OPERAND (last_expr, 0) = NULL_TREE; + #endif } else *************** start_method_def (method) *** 7078,7106 **** } static void ! warn_with_method (message, mtype, method) ! const char *message; ! int mtype; ! tree method; { - if (!diagnostic_count_diagnostic (global_dc, DK_WARNING)) - return; - - diagnostic_report_current_function (global_dc); - /* Add a readable method name to the warning. */ ! warning_with_file_and_line (DECL_SOURCE_FILE (method), ! DECL_SOURCE_LINE (method), ! "%s `%c%s'", ! message, mtype, ! gen_method_decl (method, errbuf)); } /* Return 1 if METHOD is consistent with PROTO. */ static int ! comp_method_with_proto (method, proto) ! tree method, proto; { /* Create a function template node at most once. */ if (!function1_template) --- 7607,7623 ---- } static void ! warn_with_method (const char *message, int mtype, tree method) { /* Add a readable method name to the warning. */ ! warning ("%J%s `%c%s'", method, ! message, mtype, gen_method_decl (method, errbuf)); } /* Return 1 if METHOD is consistent with PROTO. */ static int ! comp_method_with_proto (tree method, tree proto) { /* Create a function template node at most once. */ if (!function1_template) *************** comp_method_with_proto (method, proto) *** 7112,7141 **** /* install return type */ TREE_TYPE (function1_template) = groktypename (TREE_TYPE (proto)); ! return comptypes (TREE_TYPE (METHOD_DEFINITION (method)), function1_template); } ! /* Return 1 if PROTO1 is consistent with PROTO2. */ static int ! comp_proto_with_proto (proto0, proto1) ! tree proto0, proto1; { ! /* Create a couple of function_template nodes at most once. */ ! if (!function1_template) ! function1_template = make_node (FUNCTION_TYPE); ! if (!function2_template) ! function2_template = make_node (FUNCTION_TYPE); ! /* Install argument types; normally set by build_function_type. */ ! TYPE_ARG_TYPES (function1_template) = get_arg_type_list (proto0, METHOD_REF, 0); ! TYPE_ARG_TYPES (function2_template) = get_arg_type_list (proto1, METHOD_REF, 0); ! /* Install return type. */ ! TREE_TYPE (function1_template) = groktypename (TREE_TYPE (proto0)); ! TREE_TYPE (function2_template) = groktypename (TREE_TYPE (proto1)); ! return comptypes (function1_template, function2_template); } /* - Generate an identifier for the function. the format is "_n_cls", --- 7629,7689 ---- /* install return type */ TREE_TYPE (function1_template) = groktypename (TREE_TYPE (proto)); ! return comptypes (TREE_TYPE (METHOD_DEFINITION (method)), function1_template, ! false); } ! /* Return 1 if TYPE1 is equivalent to TYPE2. */ static int ! objc_types_are_equivalent (tree type1, tree type2) { ! if (type1 == type2) ! return 1; ! if (TYPE_MAIN_VARIANT (type1) != TYPE_MAIN_VARIANT (type2)) ! return 0; ! type1 = TYPE_PROTOCOL_LIST (type1); ! type2 = TYPE_PROTOCOL_LIST (type2); ! if (list_length (type1) == list_length (type2)) ! { ! for (; type2; type2 = TREE_CHAIN (type2)) ! if (!lookup_protocol_in_reflist (type1, TREE_VALUE (type2))) ! return 0; ! return 1; ! } ! return 0; ! } ! /* Return 1 if PROTO1 is equivalent to PROTO2. */ ! static int ! comp_proto_with_proto (tree proto1, tree proto2) ! { ! tree type1, type2; ! /* The following test is needed in case there are hashing ! collisions. */ ! if (METHOD_SEL_NAME (proto1) != METHOD_SEL_NAME (proto2)) ! return 0; ! ! /* Compare return types. */ ! type1 = groktypename (TREE_TYPE (proto1)); ! type2 = groktypename (TREE_TYPE (proto2)); ! ! if (!objc_types_are_equivalent (type1, type2)) ! return 0; ! ! /* Compare argument types. */ ! for (type1 = get_arg_type_list (proto1, METHOD_REF, 0), ! type2 = get_arg_type_list (proto2, METHOD_REF, 0); ! type1 && type2; ! type1 = TREE_CHAIN (type1), type2 = TREE_CHAIN (type2)) ! { ! if (!objc_types_are_equivalent (TREE_VALUE (type1), TREE_VALUE (type2))) ! return 0; ! } ! ! return (!type1 && !type2); } /* - Generate an identifier for the function. the format is "_n_cls", *************** comp_proto_with_proto (proto0, proto1) *** 7145,7152 **** - If we have a prototype, check for type consistency. */ static void ! really_start_method (method, parmlist) ! tree method, parmlist; { tree sc_spec, ret_spec, ret_decl, decl_specs; tree method_decl, method_id; --- 7693,7699 ---- - If we have a prototype, check for type consistency. */ static void ! really_start_method (tree method, tree parmlist) { tree sc_spec, ret_spec, ret_decl, decl_specs; tree method_decl, method_id; *************** really_start_method (method, parmlist) *** 7175,7180 **** --- 7722,7733 ---- method_id = get_identifier (buf); + #ifdef OBJCPLUS + /* Objective-C methods cannot be overloaded, so we don't need + the type encoding appended. It looks bad anyway... */ + push_lang_context (lang_name_c); + #endif + method_decl = build_nt (CALL_EXPR, method_id, parmlist, NULL_TREE); /* Check the declarator portion of the return type for the method. */ *************** really_start_method (method, parmlist) *** 7182,7188 **** { /* Unite the complex decl (specified in the abstract decl) with the function decl just synthesized..(int *), (int (*)()), (int (*)[]). */ ! tree save_expr = expr_last (ret_decl); TREE_OPERAND (save_expr, 0) = method_decl; method_decl = ret_decl; --- 7735,7741 ---- { /* Unite the complex decl (specified in the abstract decl) with the function decl just synthesized..(int *), (int (*)()), (int (*)[]). */ ! tree save_expr = objc_expr_last (ret_decl); TREE_OPERAND (save_expr, 0) = method_decl; method_decl = ret_decl; *************** really_start_method (method, parmlist) *** 7205,7242 **** TREE_VALUE (TREE_TYPE (method)) = NULL_TREE; } METHOD_DEFINITION (method) = current_function_decl; /* Check consistency...start_function, pushdecl, duplicate_decls. */ if (implementation_template != objc_implementation_context) { ! tree proto; ! if (TREE_CODE (method) == INSTANCE_METHOD_DECL) ! proto = lookup_instance_method_static (implementation_template, ! METHOD_SEL_NAME (method)); ! else ! proto = lookup_class_method_static (implementation_template, ! METHOD_SEL_NAME (method)); ! if (proto && ! comp_method_with_proto (method, proto)) { ! char type = (TREE_CODE (method) == INSTANCE_METHOD_DECL ? '-' : '+'); ! warn_with_method ("conflicting types for", type, method); ! warn_with_method ("previous declaration of", type, proto); } } } /* The following routine is always called...this "architecture" is to accommodate "old-style" variable length selectors. ! - a:a b:b // prototype ; id c; id d; // old-style. */ void ! continue_method_def () { tree parmlist; --- 7758,7829 ---- TREE_VALUE (TREE_TYPE (method)) = NULL_TREE; } + #ifdef OBJCPLUS + /* set self_decl from the first argument...this global is used by + * build_ivar_reference().build_indirect_ref(). + */ + self_decl = DECL_ARGUMENTS (current_function_decl); + + /* snaroff (3/28/96): when compiling with -Wall, this suppresses + * the following: warning:unused parameter `struct objc_selector * _cmd' + */ + TREE_USED (self_decl) = 1; + TREE_USED (TREE_CHAIN (self_decl)) = 1; + /* Ditto for the underlying (static) C function. */ + TREE_USED (current_function_decl) = 1; + pop_lang_context (); + #endif + METHOD_DEFINITION (method) = current_function_decl; /* Check consistency...start_function, pushdecl, duplicate_decls. */ if (implementation_template != objc_implementation_context) { ! tree proto ! = lookup_method_static (implementation_template, ! METHOD_SEL_NAME (method), ! TREE_CODE (method) == CLASS_METHOD_DECL); ! if (proto) ! { ! if (!comp_method_with_proto (method, proto)) ! { ! char type = (TREE_CODE (method) == INSTANCE_METHOD_DECL ? '-' : '+'); ! warn_with_method ("conflicting types for", type, method); ! warn_with_method ("previous declaration of", type, proto); ! } ! } ! else { ! /* We have a method @implementation even though we did not ! see a corresponding @interface declaration (which is allowed ! by Objective-C rules). Go ahead and place the method in ! the @interface anyway, so that message dispatch lookups ! will see it. */ ! tree interface = implementation_template; ! if (TREE_CODE (objc_implementation_context) ! == CATEGORY_IMPLEMENTATION_TYPE) ! interface = lookup_category ! (interface, ! CLASS_SUPER_NAME (objc_implementation_context)); ! ! if (interface) ! objc_add_method (interface, copy_node (method), ! TREE_CODE (method) == CLASS_METHOD_DECL); } } } /* The following routine is always called...this "architecture" is to accommodate "old-style" variable length selectors. ! - a:a b:b // prototype ; id c; id d; // old-style. */ void ! continue_method_def (void) { tree parmlist; *************** continue_method_def () *** 7246,7279 **** else parmlist = get_parm_info (1); /* place a `void_at_end' */ /* Set self_decl from the first argument...this global is used by build_ivar_reference calling build_indirect_ref. */ self_decl = TREE_PURPOSE (parmlist); poplevel (0, 0, 0); really_start_method (objc_method_context, parmlist); store_parm_decls (); } ! /* Called by the parser, from the `pushlevel' production. */ ! ! void ! add_objc_decls () ! { ! if (!UOBJC_SUPER_decl) ! { ! UOBJC_SUPER_decl = start_decl (get_identifier (UTAG_SUPER), ! build_tree_list (NULL_TREE, ! objc_super_template), ! 0, NULL_TREE); ! ! finish_decl (UOBJC_SUPER_decl, NULL_TREE, NULL_TREE); ! ! /* This prevents `unused variable' warnings when compiling with -Wall. */ ! TREE_USED (UOBJC_SUPER_decl) = 1; ! DECL_ARTIFICIAL (UOBJC_SUPER_decl) = 1; ! } ! } /* _n_Method (id self, SEL sel, ...) { --- 7833,7850 ---- else parmlist = get_parm_info (1); /* place a `void_at_end' */ + #ifndef OBJCPLUS /* Set self_decl from the first argument...this global is used by build_ivar_reference calling build_indirect_ref. */ self_decl = TREE_PURPOSE (parmlist); + #endif /* !OBJCPLUS */ poplevel (0, 0, 0); really_start_method (objc_method_context, parmlist); store_parm_decls (); } ! static void *UOBJC_SUPER_scope = 0; /* _n_Method (id self, SEL sel, ...) { *************** add_objc_decls () *** 7282,7293 **** } */ tree ! get_super_receiver () { if (objc_method_context) { tree super_expr, super_expr_list; /* Set receiver to self. */ super_expr = build_component_ref (UOBJC_SUPER_decl, self_id); super_expr = build_modify_expr (super_expr, NOP_EXPR, self_decl); --- 7853,7880 ---- } */ tree ! get_super_receiver (void) { if (objc_method_context) { tree super_expr, super_expr_list; + if (!UOBJC_SUPER_decl) + { + UOBJC_SUPER_decl = start_decl (get_identifier (TAG_SUPER), + build_tree_list (NULL_TREE, + objc_super_template), + 0, NULL_TREE); + + finish_decl (UOBJC_SUPER_decl, NULL_TREE, NULL_TREE); + + /* This prevents `unused variable' warnings when compiling with -Wall. */ + TREE_USED (UOBJC_SUPER_decl) = 1; + DECL_ARTIFICIAL (UOBJC_SUPER_decl) = 1; + + UOBJC_SUPER_scope = get_current_scope (); + } + /* Set receiver to self. */ super_expr = build_component_ref (UOBJC_SUPER_decl, self_id); super_expr = build_modify_expr (super_expr, NOP_EXPR, self_decl); *************** get_super_receiver () *** 7323,7339 **** return error_mark_node; } ! if (flag_next_runtime) { super_class = get_class_reference (super_name); if (TREE_CODE (objc_method_context) == CLASS_METHOD_DECL) ! /* Cast the super class to 'id', since the user may not have ! included , leaving 'struct objc_class' ! an incomplete type. */ super_class ! = build_component_ref (build_indirect_ref ! (build_c_cast (id_type, super_class), "->"), ! get_identifier ("isa")); } else { --- 7910,7927 ---- return error_mark_node; } ! if (flag_next_runtime && !flag_zero_link) { super_class = get_class_reference (super_name); if (TREE_CODE (objc_method_context) == CLASS_METHOD_DECL) ! /* If we are in a class method, we must retrieve the ! _metaclass_ for the current class, pointed at by ! the class's "isa" pointer. The following assumes that ! "isa" is the first ivar in a class (which it must be). */ super_class ! = build_indirect_ref ! (build_c_cast (build_pointer_type (objc_class_type), ! super_class), "unary *"); } else { *************** get_super_receiver () *** 7350,7357 **** IDENTIFIER_POINTER (super_name)))); } ! TREE_TYPE (super_class) = TREE_TYPE (ucls_super_ref); ! super_expr = build_modify_expr (super_expr, NOP_EXPR, super_class); } chainon (super_expr_list, build_tree_list (NULL_TREE, super_expr)); --- 7938,7947 ---- IDENTIFIER_POINTER (super_name)))); } ! super_expr ! = build_modify_expr (super_expr, NOP_EXPR, ! build_c_cast (TREE_TYPE (super_expr), ! super_class)); } chainon (super_expr_list, build_tree_list (NULL_TREE, super_expr)); *************** get_super_receiver () *** 7368,7441 **** } } ! static tree ! encode_method_def (func_decl) ! tree func_decl; ! { ! tree parms; ! int stack_size; ! HOST_WIDE_INT max_parm_end = 0; ! char buffer[40]; ! tree result; ! ! /* Return type. */ ! encode_type (TREE_TYPE (TREE_TYPE (func_decl)), ! obstack_object_size (&util_obstack), ! OBJC_ENCODE_INLINE_DEFS); ! ! /* Stack size. */ ! for (parms = DECL_ARGUMENTS (func_decl); parms; ! parms = TREE_CHAIN (parms)) ! { ! HOST_WIDE_INT parm_end = (forwarding_offset (parms) ! + int_size_in_bytes (TREE_TYPE (parms))); ! ! if (! offset_is_register && parm_end > max_parm_end) ! max_parm_end = parm_end; ! } ! ! stack_size = max_parm_end - OBJC_FORWARDING_MIN_OFFSET; ! ! sprintf (buffer, "%d", stack_size); ! obstack_grow (&util_obstack, buffer, strlen (buffer)); ! ! /* Argument types. */ ! for (parms = DECL_ARGUMENTS (func_decl); parms; ! parms = TREE_CHAIN (parms)) ! { ! /* Type. */ ! encode_type (TREE_TYPE (parms), ! obstack_object_size (&util_obstack), ! OBJC_ENCODE_INLINE_DEFS); ! ! /* Compute offset. */ ! sprintf (buffer, "%d", forwarding_offset (parms)); ! ! /* Indicate register. */ ! if (offset_is_register) ! obstack_1grow (&util_obstack, '+'); ! ! obstack_grow (&util_obstack, buffer, strlen (buffer)); ! } ! /* Null terminate string. */ ! obstack_1grow (&util_obstack, 0); ! result = get_identifier (obstack_finish (&util_obstack)); ! obstack_free (&util_obstack, util_firstobj); ! return result; } static void ! objc_expand_function_end () { ! METHOD_ENCODING (objc_method_context) = encode_method_def (current_function_decl); } void ! finish_method_def () { lang_expand_function_end = objc_expand_function_end; ! finish_function (0, 1); lang_expand_function_end = NULL; /* Required to implement _msgSuper. This must be done AFTER finish_function, --- 7958,8002 ---- } } ! /* When exiting a scope, sever links to a 'super' declaration (if any) ! therein contained. */ ! void ! objc_clear_super_receiver (void) ! { ! if (objc_method_context ! && UOBJC_SUPER_scope == get_current_scope ()) { ! UOBJC_SUPER_decl = 0; ! UOBJC_SUPER_scope = 0; ! } } static void ! objc_expand_function_end (void) { ! /* This routine may also get called for C functions, including those ! nested within ObjC methods. In such cases, method encoding is ! meaningless. */ ! if (objc_method_context == NULL_TREE ! || DECL_INITIAL (objc_method_context) != current_function_decl) ! return; ! ! METHOD_ENCODING (objc_method_context) ! = encode_method_prototype (objc_method_context); } void ! finish_method_def (void) { lang_expand_function_end = objc_expand_function_end; ! /* We cannot validly inline ObjC methods, at least not without a language ! extension to declare that a method need not be dynamically ! dispatched, so suppress all thoughts of doing so. */ ! DECL_INLINE (current_function_decl) = 0; ! DECL_UNINLINABLE (current_function_decl) = 1; ! current_function_cannot_inline = "methods cannot be inlined"; ! ! finish_function (); lang_expand_function_end = NULL; /* Required to implement _msgSuper. This must be done AFTER finish_function, *************** finish_method_def () *** 7445,7452 **** #if 0 int ! lang_report_error_function (decl) ! tree decl; { if (objc_method_context) { --- 8006,8012 ---- #if 0 int ! lang_report_error_function (tree decl) { if (objc_method_context) { *************** lang_report_error_function (decl) *** 7461,7468 **** #endif static int ! is_complex_decl (type) ! tree type; { return (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == FUNCTION_TYPE --- 8021,8027 ---- #endif static int ! is_complex_decl (tree type) { return (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == FUNCTION_TYPE *************** is_complex_decl (type) *** 7475,7483 **** static char tmpbuf[256]; static void ! adorn_decl (decl, str) ! tree decl; ! char *str; { enum tree_code code = TREE_CODE (decl); --- 8034,8040 ---- static char tmpbuf[256]; static void ! adorn_decl (tree decl, char *str) { enum tree_code code = TREE_CODE (decl); *************** adorn_decl (decl, str) *** 7577,7586 **** } static char * ! gen_declarator (decl, buf, name) ! tree decl; ! char *buf; ! const char *name; { if (decl) { --- 8134,8140 ---- } static char * ! gen_declarator (tree decl, char *buf, const char *name) { if (decl) { *************** gen_declarator (decl, buf, name) *** 7669,7678 **** } static void ! gen_declspecs (declspecs, buf, raw) ! tree declspecs; ! char *buf; ! int raw; { if (raw) { --- 8223,8229 ---- } static void ! gen_declspecs (tree declspecs, char *buf, int raw) { if (raw) { *************** gen_declspecs (declspecs, buf, raw) *** 7687,7699 **** strcat (buf, IDENTIFIER_POINTER (aspec)); else if (TREE_CODE (aspec) == RECORD_TYPE) { ! if (TYPE_NAME (aspec)) { tree protocol_list = TYPE_PROTOCOL_LIST (aspec); if (! TREE_STATIC_TEMPLATE (aspec)) strcat (buf, "struct "); ! strcat (buf, IDENTIFIER_POINTER (TYPE_NAME (aspec))); /* NEW!!! */ if (protocol_list) --- 8238,8250 ---- strcat (buf, IDENTIFIER_POINTER (aspec)); else if (TREE_CODE (aspec) == RECORD_TYPE) { ! if (OBJC_TYPE_NAME (aspec)) { tree protocol_list = TYPE_PROTOCOL_LIST (aspec); if (! TREE_STATIC_TEMPLATE (aspec)) strcat (buf, "struct "); ! strcat (buf, IDENTIFIER_POINTER (OBJC_TYPE_NAME (aspec))); /* NEW!!! */ if (protocol_list) *************** gen_declspecs (declspecs, buf, raw) *** 7720,7730 **** else if (TREE_CODE (aspec) == UNION_TYPE) { ! if (TYPE_NAME (aspec)) { if (! TREE_STATIC_TEMPLATE (aspec)) strcat (buf, "union "); ! strcat (buf, IDENTIFIER_POINTER (TYPE_NAME (aspec))); } else strcat (buf, "untagged union"); --- 8271,8281 ---- else if (TREE_CODE (aspec) == UNION_TYPE) { ! if (OBJC_TYPE_NAME (aspec)) { if (! TREE_STATIC_TEMPLATE (aspec)) strcat (buf, "union "); ! strcat (buf, IDENTIFIER_POINTER (OBJC_TYPE_NAME (aspec))); } else strcat (buf, "untagged union"); *************** gen_declspecs (declspecs, buf, raw) *** 7732,7742 **** else if (TREE_CODE (aspec) == ENUMERAL_TYPE) { ! if (TYPE_NAME (aspec)) { if (! TREE_STATIC_TEMPLATE (aspec)) strcat (buf, "enum "); ! strcat (buf, IDENTIFIER_POINTER (TYPE_NAME (aspec))); } else strcat (buf, "untagged enum"); --- 8283,8293 ---- else if (TREE_CODE (aspec) == ENUMERAL_TYPE) { ! if (OBJC_TYPE_NAME (aspec)) { if (! TREE_STATIC_TEMPLATE (aspec)) strcat (buf, "enum "); ! strcat (buf, IDENTIFIER_POINTER (OBJC_TYPE_NAME (aspec))); } else strcat (buf, "untagged enum"); *************** gen_declspecs (declspecs, buf, raw) *** 7826,7839 **** break; case RECORD_TYPE: ! if (TYPE_NAME (declspecs) ! && TREE_CODE (TYPE_NAME (declspecs)) == IDENTIFIER_NODE) { tree protocol_list = TYPE_PROTOCOL_LIST (declspecs); if (! TREE_STATIC_TEMPLATE (declspecs)) strcat (buf, "struct "); ! strcat (buf, IDENTIFIER_POINTER (TYPE_NAME (declspecs))); if (protocol_list) { --- 8377,8390 ---- break; case RECORD_TYPE: ! if (OBJC_TYPE_NAME (declspecs) ! && TREE_CODE (OBJC_TYPE_NAME (declspecs)) == IDENTIFIER_NODE) { tree protocol_list = TYPE_PROTOCOL_LIST (declspecs); if (! TREE_STATIC_TEMPLATE (declspecs)) strcat (buf, "struct "); ! strcat (buf, IDENTIFIER_POINTER (OBJC_TYPE_NAME (declspecs))); if (protocol_list) { *************** gen_declspecs (declspecs, buf, raw) *** 7860,7870 **** break; case UNION_TYPE: ! if (TYPE_NAME (declspecs) ! && TREE_CODE (TYPE_NAME (declspecs)) == IDENTIFIER_NODE) { strcat (buf, "union "); ! strcat (buf, IDENTIFIER_POINTER (TYPE_NAME (declspecs))); strcat (buf, " "); } --- 8411,8421 ---- break; case UNION_TYPE: ! if (OBJC_TYPE_NAME (declspecs) ! && TREE_CODE (OBJC_TYPE_NAME (declspecs)) == IDENTIFIER_NODE) { strcat (buf, "union "); ! strcat (buf, IDENTIFIER_POINTER (OBJC_TYPE_NAME (declspecs))); strcat (buf, " "); } *************** gen_declspecs (declspecs, buf, raw) *** 7873,7883 **** break; case ENUMERAL_TYPE: ! if (TYPE_NAME (declspecs) ! && TREE_CODE (TYPE_NAME (declspecs)) == IDENTIFIER_NODE) { strcat (buf, "enum "); ! strcat (buf, IDENTIFIER_POINTER (TYPE_NAME (declspecs))); strcat (buf, " "); } --- 8424,8434 ---- break; case ENUMERAL_TYPE: ! if (OBJC_TYPE_NAME (declspecs) ! && TREE_CODE (OBJC_TYPE_NAME (declspecs)) == IDENTIFIER_NODE) { strcat (buf, "enum "); ! strcat (buf, IDENTIFIER_POINTER (OBJC_TYPE_NAME (declspecs))); strcat (buf, " "); } *************** gen_declspecs (declspecs, buf, raw) *** 7913,7919 **** } } break; ! default: break; } --- 8464,8470 ---- } } break; ! default: break; } *************** gen_declspecs (declspecs, buf, raw) *** 7924,7932 **** buffer, overwriting the buffer. */ static char * ! gen_declaration (atype_or_adecl, buf) ! tree atype_or_adecl; ! char *buf; { buf[0] = '\0'; gen_declaration_1 (atype_or_adecl, buf); --- 8475,8481 ---- buffer, overwriting the buffer. */ static char * ! gen_declaration (tree atype_or_adecl, char *buf) { buf[0] = '\0'; gen_declaration_1 (atype_or_adecl, buf); *************** gen_declaration (atype_or_adecl, buf) *** 7937,7945 **** given buffer. */ static void ! gen_declaration_1 (atype_or_adecl, buf) ! tree atype_or_adecl; ! char *buf; { char declbuf[256]; --- 8486,8492 ---- given buffer. */ static void ! gen_declaration_1 (tree atype_or_adecl, char *buf) { char declbuf[256]; *************** gen_declaration_1 (atype_or_adecl, buf) *** 7947,7955 **** --- 8494,8510 ---- { tree declspecs; /* "identifier_node", "record_type" */ tree declarator; /* "array_ref", "indirect_ref", "call_expr"... */ + tree width = NULL_TREE; /* for bitfields */ /* We have a "raw", abstract declarator (typename). */ declarator = TREE_VALUE (atype_or_adecl); + /* In the case of raw ivars, the declarator itself is a list, + and contains bitfield widths. */ + if (declarator && TREE_CODE (declarator) == TREE_LIST) + { + width = TREE_VALUE (declarator); + declarator = TREE_PURPOSE (declarator); + } declspecs = TREE_PURPOSE (atype_or_adecl); gen_declspecs (declspecs, buf, 1); *************** gen_declaration_1 (atype_or_adecl, buf) *** 7958,7963 **** --- 8513,8521 ---- strcat (buf, " "); strcat (buf, gen_declarator (declarator, declbuf, "")); } + if (width) + sprintf (buf + strlen (buf), ": " HOST_WIDE_INT_PRINT_UNSIGNED, + TREE_INT_CST_LOW (width)); } else *************** gen_declaration_1 (atype_or_adecl, buf) *** 8028,8036 **** buffer (overwriting) and return a pointer to the buffer. */ static char * ! gen_method_decl (method, buf) ! tree method; ! char *buf; { tree chain; --- 8586,8592 ---- buffer (overwriting) and return a pointer to the buffer. */ static char * ! gen_method_decl (tree method, char *buf) { tree chain; *************** gen_method_decl (method, buf) *** 8097,8105 **** prints out an @interface declaration of all classes compiled in this run); potentially useful for debugging the compiler too. */ static void ! dump_interface (fp, chain) ! FILE *fp; ! tree chain; { /* FIXME: A heap overflow here whenever a method (or ivar) declaration is so long that it doesn't fit in the buffer. The --- 8653,8659 ---- prints out an @interface declaration of all classes compiled in this run); potentially useful for debugging the compiler too. */ static void ! dump_interface (FILE *fp, tree chain) { /* FIXME: A heap overflow here whenever a method (or ivar) declaration is so long that it doesn't fit in the buffer. The *************** dump_interface (fp, chain) *** 8113,8125 **** fprintf (fp, "\n@interface %s", my_name); ! /* CLASS_SUPER_NAME is used to store the superclass name for classes, and the category name for categories. */ if (CLASS_SUPER_NAME (chain)) { const char *name = IDENTIFIER_POINTER (CLASS_SUPER_NAME (chain)); ! ! if (TREE_CODE (chain) == CATEGORY_IMPLEMENTATION_TYPE || TREE_CODE (chain) == CATEGORY_INTERFACE_TYPE) { fprintf (fp, " (%s)\n", name); --- 8667,8679 ---- fprintf (fp, "\n@interface %s", my_name); ! /* CLASS_SUPER_NAME is used to store the superclass name for classes, and the category name for categories. */ if (CLASS_SUPER_NAME (chain)) { const char *name = IDENTIFIER_POINTER (CLASS_SUPER_NAME (chain)); ! ! if (TREE_CODE (chain) == CATEGORY_IMPLEMENTATION_TYPE || TREE_CODE (chain) == CATEGORY_INTERFACE_TYPE) { fprintf (fp, " (%s)\n", name); *************** dump_interface (fp, chain) *** 8162,8169 **** /* Demangle function for Objective-C */ static const char * ! objc_demangle (mangled) ! const char *mangled; { char *demangled, *cp; --- 8716,8722 ---- /* Demangle function for Objective-C */ static const char * ! objc_demangle (const char *mangled) { char *demangled, *cp; *************** objc_demangle (mangled) *** 8218,8232 **** } const char * ! objc_printable_name (decl, kind) ! tree decl; ! int kind ATTRIBUTE_UNUSED; { return objc_demangle (IDENTIFIER_POINTER (DECL_NAME (decl))); } static void ! init_objc () { gcc_obstack_init (&util_obstack); util_firstobj = (char *) obstack_finish (&util_obstack); --- 8771,8783 ---- } const char * ! objc_printable_name (tree decl, int kind ATTRIBUTE_UNUSED) { return objc_demangle (IDENTIFIER_POINTER (DECL_NAME (decl))); } static void ! init_objc (void) { gcc_obstack_init (&util_obstack); util_firstobj = (char *) obstack_finish (&util_obstack); *************** init_objc () *** 8237,8243 **** } static void ! finish_objc () { struct imp_entry *impent; tree chain; --- 8788,8794 ---- } static void ! finish_objc (void) { struct imp_entry *impent; tree chain; *************** finish_objc () *** 8257,8266 **** generate_forward_declaration_to_string_table (); - #ifdef OBJC_PROLOGUE - OBJC_PROLOGUE; - #endif - /* Process the static instances here because initialization of objc_symtab depends on them. */ if (objc_static_instances) --- 8808,8813 ---- *************** finish_objc () *** 8277,8283 **** UOBJC_CLASS_decl = impent->class_decl; UOBJC_METACLASS_decl = impent->meta_decl; ! /* Dump the @interface of each class as we compile it, if the -gen-decls option is in use. TODO: Dump the classes in the order they were found, rather than in reverse order as we --- 8824,8830 ---- UOBJC_CLASS_decl = impent->class_decl; UOBJC_METACLASS_decl = impent->meta_decl; ! /* Dump the @interface of each class as we compile it, if the -gen-decls option is in use. TODO: Dump the classes in the order they were found, rather than in reverse order as we *************** finish_objc () *** 8286,8292 **** { dump_interface (gen_declaration_file, objc_implementation_context); } ! if (TREE_CODE (objc_implementation_context) == CLASS_IMPLEMENTATION_TYPE) { /* all of the following reference the string pool... */ --- 8833,8839 ---- { dump_interface (gen_declaration_file, objc_implementation_context); } ! if (TREE_CODE (objc_implementation_context) == CLASS_IMPLEMENTATION_TYPE) { /* all of the following reference the string pool... */ *************** finish_objc () *** 8309,8314 **** --- 8856,8864 ---- if (protocol_chain) generate_protocols (); + if (flag_replace_objc_classes && imp_list) + generate_objc_image_info (); + if (objc_implementation_context || class_names_chain || objc_static_instances || meth_var_names_chain || meth_var_types_chain || sel_ref_chain) { *************** finish_objc () *** 8346,8381 **** selector which has multiple methods. */ for (slot = 0; slot < SIZEHASHTABLE; slot++) ! for (hsh = cls_method_hash_list[slot]; hsh; hsh = hsh->next) ! if (hsh->list) ! { ! tree meth = hsh->key; ! char type = (TREE_CODE (meth) == INSTANCE_METHOD_DECL ! ? '-' : '+'); ! attr loop; ! ! warning ("potential selector conflict for method `%s'", ! IDENTIFIER_POINTER (METHOD_SEL_NAME (meth))); ! warn_with_method ("found", type, meth); ! for (loop = hsh->list; loop; loop = loop->next) ! warn_with_method ("found", type, loop->value); ! } ! ! for (slot = 0; slot < SIZEHASHTABLE; slot++) ! for (hsh = nst_method_hash_list[slot]; hsh; hsh = hsh->next) ! if (hsh->list) ! { ! tree meth = hsh->key; ! char type = (TREE_CODE (meth) == INSTANCE_METHOD_DECL ! ? '-' : '+'); ! attr loop; ! ! warning ("potential selector conflict for method `%s'", ! IDENTIFIER_POINTER (METHOD_SEL_NAME (meth))); ! warn_with_method ("found", type, meth); ! for (loop = hsh->list; loop; loop = loop->next) ! warn_with_method ("found", type, loop->value); ! } } warn_missing_braces = save_warn_missing_braces; --- 8896,8907 ---- selector which has multiple methods. */ for (slot = 0; slot < SIZEHASHTABLE; slot++) ! { ! for (hsh = cls_method_hash_list[slot]; hsh; hsh = hsh->next) ! check_duplicates (hsh, 0, 1); ! for (hsh = nst_method_hash_list[slot]; hsh; hsh = hsh->next) ! check_duplicates (hsh, 0, 1); ! } } warn_missing_braces = save_warn_missing_braces; *************** finish_objc () *** 8384,8391 **** /* Subroutines of finish_objc. */ static void ! generate_classref_translation_entry (chain) ! tree chain; { tree expr, name, decl_specs, decl, sc_spec; tree type; --- 8910,8916 ---- /* Subroutines of finish_objc. */ static void ! generate_classref_translation_entry (tree chain) { tree expr, name, decl_specs, decl, sc_spec; tree type; *************** generate_classref_translation_entry (cha *** 8411,8418 **** } static void ! handle_class_ref (chain) ! tree chain; { const char *name = IDENTIFIER_POINTER (TREE_VALUE (chain)); char *string = (char *) alloca (strlen (name) + 30); --- 8936,8942 ---- } static void ! handle_class_ref (tree chain) { const char *name = IDENTIFIER_POINTER (TREE_VALUE (chain)); char *string = (char *) alloca (strlen (name) + 30); *************** handle_class_ref (chain) *** 8452,8459 **** } static void ! handle_impent (impent) ! struct imp_entry *impent; { char *string; --- 8976,8982 ---- } static void ! handle_impent (struct imp_entry *impent) { char *string; *************** handle_impent (impent) *** 8514,8523 **** } } /* Look up ID as an instance variable. */ tree ! lookup_objc_ivar (id) ! tree id; { tree decl; --- 9037,9077 ---- } } + /* The Fix-and-Countinue functionality available in Mac OS X 10.3 and + later requires that ObjC translation units participating in F&C be + specially marked. The following routine accomplishes this. */ + + /* static int _OBJC_IMAGE_INFO[2] = { 0, 1 }; */ + + static void + generate_objc_image_info (void) + { + tree sc_spec, decl, initlist; + + sc_spec = build_tree_list (NULL_TREE, ridpointers[(int) RID_STATIC]); + decl + = start_decl (get_identifier ("_OBJC_IMAGE_INFO"), + tree_cons (NULL_TREE, + build_array_type + (integer_type_node, + build_index_type (build_int_2 (1, 0))), + sc_spec), + 1, + NULL_TREE); + + initlist = build_tree_list (NULL_TREE, build_int_2 (0, 0)); + initlist = tree_cons (NULL_TREE, build_int_2 (1, 0), initlist); + initlist = build_constructor (TREE_TYPE (decl), nreverse (initlist)); + + TREE_USED (decl) = DECL_IGNORED_P (decl) = DECL_ARTIFICIAL (decl) = 1; + TREE_CONSTANT (initlist) = TREE_STATIC (initlist) = 1; + finish_decl (decl, initlist, NULL_TREE); + } + /* Look up ID as an instance variable. */ + tree ! lookup_objc_ivar (tree id) { tree decl; *************** lookup_objc_ivar (id) *** 8527,8533 **** else if (objc_method_context && (decl = is_ivar (objc_ivar_chain, id))) { if (is_private (decl)) ! return 0; else return build_ivar_reference (id); } --- 9081,9087 ---- else if (objc_method_context && (decl = is_ivar (objc_ivar_chain, id))) { if (is_private (decl)) ! return error_mark_node; else return build_ivar_reference (id); } *************** lookup_objc_ivar (id) *** 8535,8538 **** --- 9089,9093 ---- return 0; } + #include "gt-objc-objc-act.h" #include "gtype-objc.h" diff -Nrc3pad gcc-3.3.3/gcc/objc/objc-act.h gcc-3.4.0/gcc/objc/objc-act.h *** gcc-3.3.3/gcc/objc/objc-act.h 2002-08-20 01:27:38.000000000 +0000 --- gcc-3.4.0/gcc/objc/objc-act.h 2003-10-15 00:10:27.000000000 +0000 *************** *** 1,20 **** /* Declarations for objc-act.c. ! Copyright (C) 1990, 2000, 2001 Free Software Foundation, Inc. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,21 ---- /* Declarations for objc-act.c. ! Copyright (C) 1990, 2000, 2001, 2002, 2003 ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ *************** Boston, MA 02111-1307, USA. */ *** 23,79 **** /*** Public Interface (procedures) ***/ ! const char *objc_init PARAMS ((const char *)); ! const char *objc_printable_name PARAMS ((tree, int)); /* used by yyparse */ ! void finish_file PARAMS ((void)); ! tree start_class PARAMS ((enum tree_code, tree, tree, tree)); ! tree continue_class PARAMS ((tree)); ! void finish_class PARAMS ((tree)); ! void start_method_def PARAMS ((tree)); ! void continue_method_def PARAMS ((void)); ! void finish_method_def PARAMS ((void)); ! tree start_protocol PARAMS ((enum tree_code, tree, tree)); ! void finish_protocol PARAMS ((tree)); ! void add_objc_decls PARAMS ((void)); ! tree is_ivar PARAMS ((tree, tree)); ! int is_private PARAMS ((tree)); ! int is_public PARAMS ((tree, tree)); ! tree add_instance_variable PARAMS ((tree, int, tree, tree, tree)); ! tree add_class_method PARAMS ((tree, tree)); ! tree add_instance_method PARAMS ((tree, tree)); ! tree get_super_receiver PARAMS ((void)); ! tree get_class_ivars PARAMS ((tree)); ! tree get_class_reference PARAMS ((tree)); ! tree get_static_reference PARAMS ((tree, tree)); ! tree get_object_reference PARAMS ((tree)); ! tree build_message_expr PARAMS ((tree)); ! tree finish_message_expr PARAMS ((tree, tree, tree)); ! tree build_selector_expr PARAMS ((tree)); ! tree build_ivar_reference PARAMS ((tree)); ! tree build_keyword_decl PARAMS ((tree, tree, tree)); ! tree build_method_decl PARAMS ((enum tree_code, tree, tree, tree)); ! tree build_protocol_expr PARAMS ((tree)); ! tree build_objc_string_object PARAMS ((tree)); ! void objc_declare_alias PARAMS ((tree, tree)); ! void objc_declare_class PARAMS ((tree)); ! void objc_declare_protocols PARAMS ((tree)); /* the following routines are used to implement statically typed objects */ ! int objc_comptypes PARAMS ((tree, tree, int)); ! void objc_check_decl PARAMS ((tree)); /* NeXT extensions */ ! tree build_encode_expr PARAMS ((tree)); /* Objective-C structures */ /* KEYWORD_DECL */ #define KEYWORD_KEY_NAME(DECL) ((DECL)->decl.name) #define KEYWORD_ARG_NAME(DECL) ((DECL)->decl.arguments) --- 24,93 ---- /*** Public Interface (procedures) ***/ ! bool objc_init (void); ! const char *objc_printable_name (tree, int); /* used by yyparse */ ! void finish_file (void); ! tree start_class (enum tree_code, tree, tree, tree); ! tree continue_class (tree); ! void finish_class (tree); ! void start_method_def (tree); ! void continue_method_def (void); ! void finish_method_def (void); ! tree start_protocol (enum tree_code, tree, tree); ! void finish_protocol (tree); ! tree objc_build_throw_stmt (tree); ! tree objc_build_try_catch_finally_stmt (int, int); ! void objc_build_synchronized_prologue (tree); ! tree objc_build_synchronized_epilogue (void); ! tree objc_build_try_prologue (void); ! void objc_build_try_epilogue (int); ! void objc_build_catch_stmt (tree); ! void objc_build_catch_epilogue (void); ! tree objc_build_finally_prologue (void); ! tree objc_build_finally_epilogue (void); ! tree is_ivar (tree, tree); ! int is_private (tree); ! int is_public (tree, tree); ! tree add_instance_variable (tree, int, tree, tree, tree); ! tree objc_add_method (tree, tree, int); ! tree get_super_receiver (void); ! void objc_clear_super_receiver (void); ! tree get_class_ivars_from_name (tree); ! tree get_class_reference (tree); ! tree get_static_reference (tree, tree); ! tree get_object_reference (tree); ! tree build_message_expr (tree); ! tree finish_message_expr (tree, tree, tree); ! tree build_selector_expr (tree); ! tree build_ivar_reference (tree); ! tree build_keyword_decl (tree, tree, tree); ! tree build_method_decl (enum tree_code, tree, tree, tree); ! tree build_protocol_expr (tree); ! tree build_objc_string_object (tree); ! ! void objc_declare_alias (tree, tree); ! void objc_declare_class (tree); ! void objc_declare_protocols (tree); /* the following routines are used to implement statically typed objects */ ! int objc_comptypes (tree, tree, int); ! void objc_check_decl (tree); /* NeXT extensions */ ! tree build_encode_expr (tree); /* Objective-C structures */ + #define CLASS_BINFO_ELTS 6 + #define PROTOCOL_BINFO_ELTS 2 + /* KEYWORD_DECL */ #define KEYWORD_KEY_NAME(DECL) ((DECL)->decl.name) #define KEYWORD_ARG_NAME(DECL) ((DECL)->decl.arguments) *************** tree build_encode_expr PARAMS ((tree) *** 89,95 **** CATEGORY_INTERFACE_TYPE, CATEGORY_IMPLEMENTATION_TYPE, PROTOCOL_INTERFACE_TYPE */ #define CLASS_NAME(CLASS) ((CLASS)->type.name) ! #define CLASS_SUPER_NAME(CLASS) ((CLASS)->type.context) #define CLASS_IVARS(CLASS) TREE_VEC_ELT (TYPE_BINFO (CLASS), 0) #define CLASS_RAW_IVARS(CLASS) TREE_VEC_ELT (TYPE_BINFO (CLASS), 1) #define CLASS_NST_METHODS(CLASS) ((CLASS)->type.minval) --- 103,109 ---- CATEGORY_INTERFACE_TYPE, CATEGORY_IMPLEMENTATION_TYPE, PROTOCOL_INTERFACE_TYPE */ #define CLASS_NAME(CLASS) ((CLASS)->type.name) ! #define CLASS_SUPER_NAME(CLASS) (TYPE_CHECK (CLASS)->type.context) #define CLASS_IVARS(CLASS) TREE_VEC_ELT (TYPE_BINFO (CLASS), 0) #define CLASS_RAW_IVARS(CLASS) TREE_VEC_ELT (TYPE_BINFO (CLASS), 1) #define CLASS_NST_METHODS(CLASS) ((CLASS)->type.minval) *************** tree build_encode_expr PARAMS ((tree) *** 104,125 **** #define PROTOCOL_CLS_METHODS(CLASS) ((CLASS)->type.maxval) #define PROTOCOL_FORWARD_DECL(CLASS) TREE_VEC_ELT (TYPE_BINFO (CLASS), 1) #define PROTOCOL_DEFINED(CLASS) TREE_USED (CLASS) ! #define TYPE_PROTOCOL_LIST(TYPE) ((TYPE)->type.context) /* Set by `continue_class' and checked by `is_public'. */ #define TREE_STATIC_TEMPLATE(record_type) (TREE_PUBLIC (record_type)) #define TYPED_OBJECT(type) \ (TREE_CODE (type) == RECORD_TYPE && TREE_STATIC_TEMPLATE (type)) /* Define the Objective-C or Objective-C++ language-specific tree codes. */ #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM, enum objc_tree_code { ! #ifdef OBJCPLUS LAST_BASE_TREE_CODE = LAST_CPLUS_TREE_CODE, ! #else LAST_BASE_TREE_CODE = LAST_C_TREE_CODE, #endif #include "objc-tree.def" LAST_OBJC_TREE_CODE --- 118,150 ---- #define PROTOCOL_CLS_METHODS(CLASS) ((CLASS)->type.maxval) #define PROTOCOL_FORWARD_DECL(CLASS) TREE_VEC_ELT (TYPE_BINFO (CLASS), 1) #define PROTOCOL_DEFINED(CLASS) TREE_USED (CLASS) ! /* We need to distinguish TYPE_PROTOCOL_LISTs from TYPE_CONTEXTs, both of which ! are stored in the same accessor slot. */ ! #define TYPE_PROTOCOL_LIST(TYPE) \ ! ((TYPE_CHECK (TYPE)->type.context \ ! && TREE_CODE ((TYPE)->type.context) == TREE_LIST) \ ! ? (TYPE)->type.context : NULL_TREE) ! #define SET_TYPE_PROTOCOL_LIST(TYPE, P) (TYPE_CHECK (TYPE)->type.context = (P)) /* Set by `continue_class' and checked by `is_public'. */ #define TREE_STATIC_TEMPLATE(record_type) (TREE_PUBLIC (record_type)) #define TYPED_OBJECT(type) \ (TREE_CODE (type) == RECORD_TYPE && TREE_STATIC_TEMPLATE (type)) + #define OBJC_TYPE_NAME(type) TYPE_NAME(type) /* Define the Objective-C or Objective-C++ language-specific tree codes. */ #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM, enum objc_tree_code { ! #if defined (GCC_CP_TREE_H) LAST_BASE_TREE_CODE = LAST_CPLUS_TREE_CODE, ! #else ! #if defined (GCC_C_TREE_H) LAST_BASE_TREE_CODE = LAST_C_TREE_CODE, + #else + #error You must include or before + #endif #endif #include "objc-tree.def" LAST_OBJC_TREE_CODE *************** struct hashed_entry GTY(()) *** 146,152 **** extern GTY ((length ("SIZEHASHTABLE"))) hash *nst_method_hash_list; extern GTY ((length ("SIZEHASHTABLE"))) hash *cls_method_hash_list; ! #define SIZEHASHTABLE 257 /* Objective-C/Objective-C++ @implementation list. */ --- 171,177 ---- extern GTY ((length ("SIZEHASHTABLE"))) hash *nst_method_hash_list; extern GTY ((length ("SIZEHASHTABLE"))) hash *cls_method_hash_list; ! #define SIZEHASHTABLE 257 /* Objective-C/Objective-C++ @implementation list. */ *************** enum objc_tree_index *** 177,182 **** --- 202,209 ---- OCTI_SELF_DECL, OCTI_UMSG_DECL, OCTI_UMSG_SUPER_DECL, + OCTI_UMSG_STRET_DECL, + OCTI_UMSG_SUPER_STRET_DECL, OCTI_GET_CLASS_DECL, OCTI_GET_MCLASS_DECL, OCTI_SUPER_TYPE, *************** enum objc_tree_index *** 240,246 **** OCTI_CNST_STR_GLOB_ID, OCTI_STRING_CLASS_DECL, OCTI_SUPER_DECL, ! OCTI_MAX }; --- 267,291 ---- OCTI_CNST_STR_GLOB_ID, OCTI_STRING_CLASS_DECL, OCTI_SUPER_DECL, ! OCTI_UMSG_NONNIL_DECL, ! OCTI_UMSG_NONNIL_STRET_DECL, ! OCTI_STORAGE_CLS, ! OCTI_EXCEPTION_EXTRACT_DECL, ! OCTI_EXCEPTION_TRY_ENTER_DECL, ! OCTI_EXCEPTION_TRY_EXIT_DECL, ! OCTI_EXCEPTION_MATCH_DECL, ! OCTI_EXCEPTION_THROW_DECL, ! OCTI_SYNC_ENTER_DECL, ! OCTI_SYNC_EXIT_DECL, ! OCTI_SETJMP_DECL, ! OCTI_EXCDATA_TEMPL, ! OCTI_STACK_EXCEPTION_DATA_DECL, ! OCTI_LOCAL_EXCEPTION_DECL, ! OCTI_RETHROW_EXCEPTION_DECL, ! OCTI_EVAL_ONCE_DECL, ! OCTI_EXCEPTION_BLK_STACK, ! OCTI_CATCH_TYPE, ! OCTI_MAX }; *************** extern GTY(()) tree objc_global_trees[OC *** 262,267 **** --- 307,314 ---- #define self_decl objc_global_trees[OCTI_SELF_DECL] #define umsg_decl objc_global_trees[OCTI_UMSG_DECL] #define umsg_super_decl objc_global_trees[OCTI_UMSG_SUPER_DECL] + #define umsg_stret_decl objc_global_trees[OCTI_UMSG_STRET_DECL] + #define umsg_super_stret_decl objc_global_trees[OCTI_UMSG_SUPER_STRET_DECL] #define objc_get_class_decl objc_global_trees[OCTI_GET_CLASS_DECL] #define objc_get_meta_class_decl \ objc_global_trees[OCTI_GET_MCLASS_DECL] *************** extern GTY(()) tree objc_global_trees[OC *** 280,286 **** #define IS_PROTOCOL_QUALIFIED_ID(TYPE) \ (IS_ID (TYPE) && TYPE_PROTOCOL_LIST (TYPE)) #define IS_SUPER(TYPE) \ ! (super_type && TYPE_MAIN_VARIANT (TYPE) == TYPE_MAIN_VARIANT (super_type)) #define class_chain objc_global_trees[OCTI_CLS_CHAIN] #define alias_chain objc_global_trees[OCTI_ALIAS_CHAIN] --- 327,333 ---- #define IS_PROTOCOL_QUALIFIED_ID(TYPE) \ (IS_ID (TYPE) && TYPE_PROTOCOL_LIST (TYPE)) #define IS_SUPER(TYPE) \ ! (TREE_CODE (TYPE) == POINTER_TYPE && TREE_TYPE (TYPE) == objc_super_template) #define class_chain objc_global_trees[OCTI_CLS_CHAIN] #define alias_chain objc_global_trees[OCTI_ALIAS_CHAIN] *************** extern GTY(()) tree objc_global_trees[OC *** 334,339 **** --- 381,413 ---- #define ucls_super_ref objc_global_trees[OCTI_UCLS_SUPER_REF] #define uucls_super_ref objc_global_trees[OCTI_UUCLS_SUPER_REF] + #define umsg_nonnil_decl objc_global_trees[OCTI_UMSG_NONNIL_DECL] + #define umsg_nonnil_stret_decl objc_global_trees[OCTI_UMSG_NONNIL_STRET_DECL] + #define objc_storage_class objc_global_trees[OCTI_STORAGE_CLS] + #define objc_exception_extract_decl \ + objc_global_trees[OCTI_EXCEPTION_EXTRACT_DECL] + #define objc_exception_try_enter_decl \ + objc_global_trees[OCTI_EXCEPTION_TRY_ENTER_DECL] + #define objc_exception_try_exit_decl \ + objc_global_trees[OCTI_EXCEPTION_TRY_EXIT_DECL] + #define objc_exception_match_decl \ + objc_global_trees[OCTI_EXCEPTION_MATCH_DECL] + #define objc_exception_throw_decl \ + objc_global_trees[OCTI_EXCEPTION_THROW_DECL] + #define objc_sync_enter_decl objc_global_trees[OCTI_SYNC_ENTER_DECL] + #define objc_sync_exit_decl objc_global_trees[OCTI_SYNC_EXIT_DECL] + #define objc_exception_data_template \ + objc_global_trees[OCTI_EXCDATA_TEMPL] + #define objc_setjmp_decl objc_global_trees[OCTI_SETJMP_DECL] + #define objc_stack_exception_data \ + objc_global_trees[OCTI_STACK_EXCEPTION_DATA_DECL] + #define objc_caught_exception objc_global_trees[OCTI_LOCAL_EXCEPTION_DECL] + #define objc_rethrow_exception objc_global_trees[OCTI_RETHROW_EXCEPTION_DECL] + #define objc_eval_once objc_global_trees[OCTI_EVAL_ONCE_DECL] + #define objc_exception_block_stack \ + objc_global_trees[OCTI_EXCEPTION_BLK_STACK] + #define objc_catch_type objc_global_trees[OCTI_CATCH_TYPE] + #define objc_method_template objc_global_trees[OCTI_METH_TEMPL] #define objc_ivar_template objc_global_trees[OCTI_IVAR_TEMPL] #define objc_symtab_template objc_global_trees[OCTI_SYMTAB_TEMPL] *************** extern GTY(()) tree objc_global_trees[OC *** 344,350 **** objc_global_trees[OCTI_METH_PROTO_TEMPL] #define function1_template objc_global_trees[OCTI_FUNCTION1_TEMPL] #define function2_template objc_global_trees[OCTI_FUNCTION2_TEMPL] ! #define objc_object_id objc_global_trees[OCTI_OBJ_ID] #define objc_class_id objc_global_trees[OCTI_CLS_ID] #define objc_id_id objc_global_trees[OCTI_ID_ID] --- 418,424 ---- objc_global_trees[OCTI_METH_PROTO_TEMPL] #define function1_template objc_global_trees[OCTI_FUNCTION1_TEMPL] #define function2_template objc_global_trees[OCTI_FUNCTION2_TEMPL] ! #define objc_object_id objc_global_trees[OCTI_OBJ_ID] #define objc_class_id objc_global_trees[OCTI_CLS_ID] #define objc_id_id objc_global_trees[OCTI_ID_ID] diff -Nrc3pad gcc-3.3.3/gcc/objc/objc-lang.c gcc-3.4.0/gcc/objc/objc-lang.c *** gcc-3.3.3/gcc/objc/objc-lang.c 2002-08-10 02:18:28.000000000 +0000 --- gcc-3.4.0/gcc/objc/objc-lang.c 2003-08-29 23:21:13.000000000 +0000 *************** *** 1,26 **** /* Language-dependent hooks for Objective-C. ! Copyright 2001, 2002 Free Software Foundation, Inc. Contributed by Ziemowit Laski ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" #include "tree.h" #include "c-tree.h" #include "c-common.h" --- 1,28 ---- /* Language-dependent hooks for Objective-C. ! Copyright 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Ziemowit Laski ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" + #include "coretypes.h" + #include "tm.h" #include "tree.h" #include "c-tree.h" #include "c-common.h" *************** Boston, MA 02111-1307, USA. */ *** 29,35 **** #include "langhooks.h" #include "langhooks-def.h" ! static void objc_init_options PARAMS ((void)); #undef LANG_HOOKS_NAME #define LANG_HOOKS_NAME "GNU Objective-C" --- 31,37 ---- #include "langhooks.h" #include "langhooks-def.h" ! enum c_language_kind c_language = clk_objc; #undef LANG_HOOKS_NAME #define LANG_HOOKS_NAME "GNU Objective-C" *************** static void objc_init_options *** 38,46 **** #undef LANG_HOOKS_FINISH #define LANG_HOOKS_FINISH c_common_finish #undef LANG_HOOKS_INIT_OPTIONS ! #define LANG_HOOKS_INIT_OPTIONS objc_init_options ! #undef LANG_HOOKS_DECODE_OPTION ! #define LANG_HOOKS_DECODE_OPTION c_common_decode_option #undef LANG_HOOKS_POST_OPTIONS #define LANG_HOOKS_POST_OPTIONS c_common_post_options #undef LANG_HOOKS_GET_ALIAS_SET --- 40,52 ---- #undef LANG_HOOKS_FINISH #define LANG_HOOKS_FINISH c_common_finish #undef LANG_HOOKS_INIT_OPTIONS ! #define LANG_HOOKS_INIT_OPTIONS c_common_init_options ! #undef LANG_HOOKS_HANDLE_OPTION ! #define LANG_HOOKS_HANDLE_OPTION c_common_handle_option ! #undef LANG_HOOKS_HANDLE_FILENAME ! #define LANG_HOOKS_HANDLE_FILENAME c_common_handle_filename ! #undef LANG_HOOKS_MISSING_ARGUMENT ! #define LANG_HOOKS_MISSING_ARGUMENT c_common_missing_argument #undef LANG_HOOKS_POST_OPTIONS #define LANG_HOOKS_POST_OPTIONS c_common_post_options #undef LANG_HOOKS_GET_ALIAS_SET *************** static void objc_init_options *** 55,68 **** #define LANG_HOOKS_MARK_ADDRESSABLE c_mark_addressable #undef LANG_HOOKS_TRUTHVALUE_CONVERSION #define LANG_HOOKS_TRUTHVALUE_CONVERSION c_common_truthvalue_conversion - #undef LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES - #define LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES c_insert_default_attributes #undef LANG_HOOKS_FINISH_INCOMPLETE_DECL #define LANG_HOOKS_FINISH_INCOMPLETE_DECL c_finish_incomplete_decl #undef LANG_HOOKS_UNSAFE_FOR_REEVAL #define LANG_HOOKS_UNSAFE_FOR_REEVAL c_common_unsafe_for_reeval #undef LANG_HOOKS_STATICP #define LANG_HOOKS_STATICP c_staticp #undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL #define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL c_dup_lang_specific_decl #undef LANG_HOOKS_PRINT_IDENTIFIER --- 61,76 ---- #define LANG_HOOKS_MARK_ADDRESSABLE c_mark_addressable #undef LANG_HOOKS_TRUTHVALUE_CONVERSION #define LANG_HOOKS_TRUTHVALUE_CONVERSION c_common_truthvalue_conversion #undef LANG_HOOKS_FINISH_INCOMPLETE_DECL #define LANG_HOOKS_FINISH_INCOMPLETE_DECL c_finish_incomplete_decl #undef LANG_HOOKS_UNSAFE_FOR_REEVAL #define LANG_HOOKS_UNSAFE_FOR_REEVAL c_common_unsafe_for_reeval #undef LANG_HOOKS_STATICP #define LANG_HOOKS_STATICP c_staticp + #undef LANG_HOOKS_SET_DECL_ASSEMBLER_NAME + #define LANG_HOOKS_SET_DECL_ASSEMBLER_NAME c_static_assembler_name + #undef LANG_HOOKS_NO_BODY_BLOCKS + #define LANG_HOOKS_NO_BODY_BLOCKS true #undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL #define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL c_dup_lang_specific_decl #undef LANG_HOOKS_PRINT_IDENTIFIER *************** static void objc_init_options *** 71,82 **** --- 79,95 ---- #define LANG_HOOKS_DECL_PRINTABLE_NAME objc_printable_name #undef LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL #define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL c_warn_unused_global_decl + #undef LANG_HOOKS_DECL_UNINIT + #define LANG_HOOKS_DECL_UNINIT c_decl_uninit #undef LANG_HOOKS_FUNCTION_ENTER_NESTED #define LANG_HOOKS_FUNCTION_ENTER_NESTED c_push_function_context #undef LANG_HOOKS_FUNCTION_LEAVE_NESTED #define LANG_HOOKS_FUNCTION_LEAVE_NESTED c_pop_function_context + #undef LANG_HOOKS_RTL_EXPAND_STMT + #define LANG_HOOKS_RTL_EXPAND_STMT expand_stmt + /* Attribute hooks. */ #undef LANG_HOOKS_COMMON_ATTRIBUTE_TABLE #define LANG_HOOKS_COMMON_ATTRIBUTE_TABLE c_common_attribute_table *************** static void objc_init_options *** 96,101 **** --- 109,119 ---- #undef LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING #define LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING \ c_convert_parm_for_inlining + #undef LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS + #define LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS c_estimate_num_insns + + #undef LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION + #define LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION c_expand_body #undef LANG_HOOKS_TYPE_FOR_MODE #define LANG_HOOKS_TYPE_FOR_MODE c_common_type_for_mode *************** static void objc_init_options *** 112,117 **** --- 130,138 ---- #undef LANG_HOOKS_TYPE_PROMOTES_TO #define LANG_HOOKS_TYPE_PROMOTES_TO c_type_promotes_to + #undef LANG_HOOKS_WRITE_GLOBALS + #define LANG_HOOKS_WRITE_GLOBALS c_write_global_declarations + /* Each front end provides its own hooks, for toplev.c. */ const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; *************** const char * const tree_code_name[] = { *** 158,167 **** #include "objc-tree.def" }; #undef DEFTREECODE - - static void - objc_init_options () - { - flag_objc = 1; - c_common_init_options (clk_c); - } --- 179,181 ---- diff -Nrc3pad gcc-3.3.3/gcc/objc/objc-parse.c gcc-3.4.0/gcc/objc/objc-parse.c *** gcc-3.3.3/gcc/objc/objc-parse.c 2004-02-14 20:46:56.000000000 +0000 --- gcc-3.4.0/gcc/objc/objc-parse.c 2004-04-19 02:26:21.000000000 +0000 *************** *** 1,5 **** ! /* A Bison parser, made from objc-parse.y ! by GNU bison 1.33. */ #define YYBISON 1 /* Identify Bison output. */ --- 1,5 ---- ! /* A Bison parser, made from objc/objc-parse.y ! by GNU bison 1.35. */ #define YYBISON 1 /* Identify Bison output. */ *************** *** 42,80 **** # define PTR_VALUE 293 # define PTR_BASE 294 # define PTR_EXTENT 295 ! # define STRING_FUNC_NAME 296 ! # define VAR_FUNC_NAME 297 ! # define ASSIGN 298 ! # define OROR 299 ! # define ANDAND 300 ! # define EQCOMPARE 301 ! # define ARITHCOMPARE 302 ! # define LSHIFT 303 ! # define RSHIFT 304 ! # define UNARY 305 ! # define PLUSPLUS 306 ! # define MINUSMINUS 307 ! # define HYPERUNARY 308 ! # define POINTSAT 309 ! # define INTERFACE 310 ! # define IMPLEMENTATION 311 ! # define END 312 ! # define SELECTOR 313 ! # define DEFS 314 ! # define ENCODE 315 ! # define CLASSNAME 316 ! # define PUBLIC 317 ! # define PRIVATE 318 ! # define PROTECTED 319 ! # define PROTOCOL 320 ! # define OBJECTNAME 321 ! # define CLASS 322 ! # define ALIAS 323 ! #line 33 "objc-parse.y" #include "config.h" #include "system.h" #include "tree.h" #include "input.h" #include "cpplib.h" --- 42,87 ---- # define PTR_VALUE 293 # define PTR_BASE 294 # define PTR_EXTENT 295 ! # define FUNC_NAME 296 ! # define ASSIGN 297 ! # define OROR 298 ! # define ANDAND 299 ! # define EQCOMPARE 300 ! # define ARITHCOMPARE 301 ! # define LSHIFT 302 ! # define RSHIFT 303 ! # define UNARY 304 ! # define PLUSPLUS 305 ! # define MINUSMINUS 306 ! # define HYPERUNARY 307 ! # define POINTSAT 308 ! # define INTERFACE 309 ! # define IMPLEMENTATION 310 ! # define END 311 ! # define SELECTOR 312 ! # define DEFS 313 ! # define ENCODE 314 ! # define CLASSNAME 315 ! # define PUBLIC 316 ! # define PRIVATE 317 ! # define PROTECTED 318 ! # define PROTOCOL 319 ! # define OBJECTNAME 320 ! # define CLASS 321 ! # define ALIAS 322 ! # define AT_THROW 323 ! # define AT_TRY 324 ! # define AT_CATCH 325 ! # define AT_FINALLY 326 ! # define AT_SYNCHRONIZED 327 ! # define OBJC_STRING 328 ! #line 33 "objc/objc-parse.y" #include "config.h" #include "system.h" + #include "coretypes.h" + #include "tm.h" #include "tree.h" #include "input.h" #include "cpplib.h" *************** *** 83,96 **** #include "c-pragma.h" /* For YYDEBUG definition, and parse_in. */ #include "c-tree.h" #include "flags.h" #include "output.h" #include "toplev.h" #include "ggc.h" - #ifdef MULTIBYTE_CHARS - #include - #endif - #include "objc-act.h" /* Like YYERROR but do call yyerror. */ --- 90,100 ---- #include "c-pragma.h" /* For YYDEBUG definition, and parse_in. */ #include "c-tree.h" #include "flags.h" + #include "varray.h" #include "output.h" #include "toplev.h" #include "ggc.h" #include "objc-act.h" /* Like YYERROR but do call yyerror. */ *************** do { \ *** 114,128 **** newsize = *(YYSSZ) *= 2; \ if (malloced_yyss) \ { \ ! newss = (short *) \ ! really_call_realloc (*(SS), newsize * sizeof (short)); \ ! newvs = (YYSTYPE *) \ ! really_call_realloc (*(VS), newsize * sizeof (YYSTYPE)); \ } \ else \ { \ ! newss = (short *) really_call_malloc (newsize * sizeof (short)); \ ! newvs = (YYSTYPE *) really_call_malloc (newsize * sizeof (YYSTYPE)); \ if (newss) \ memcpy (newss, *(SS), (SSSIZE)); \ if (newvs) \ --- 118,130 ---- newsize = *(YYSSZ) *= 2; \ if (malloced_yyss) \ { \ ! newss = really_call_realloc (*(SS), newsize * sizeof (short)); \ ! newvs = really_call_realloc (*(VS), newsize * sizeof (YYSTYPE)); \ } \ else \ { \ ! newss = really_call_malloc (newsize * sizeof (short)); \ ! newvs = really_call_malloc (newsize * sizeof (YYSTYPE)); \ if (newss) \ memcpy (newss, *(SS), (SSSIZE)); \ if (newvs) \ *************** do { \ *** 139,161 **** malloced_yyvs = (void *) newvs; \ } while (0) ! #line 103 "objc-parse.y" #ifndef YYSTYPE typedef union {long itype; tree ttype; enum tree_code code; ! const char *filename; int lineno; } yystype; # define YYSTYPE yystype #endif ! #line 248 "objc-parse.y" /* Number of statements (loosely speaking) and compound statements seen so far. */ static int stmt_count; static int compstmt_count; ! /* Input file and line number of the end of the body of last simple_if; used by the stmt-rule immediately after simple_if returns. */ ! static const char *if_stmt_file; ! static int if_stmt_line; /* List of types and structure classes of the current declaration. */ static GTY(()) tree current_declspecs; --- 141,164 ---- malloced_yyvs = (void *) newvs; \ } while (0) ! #line 100 "objc/objc-parse.y" #ifndef YYSTYPE typedef union {long itype; tree ttype; enum tree_code code; ! location_t location; } yystype; # define YYSTYPE yystype + # define YYSTYPE_IS_TRIVIAL 1 #endif ! #line 248 "objc/objc-parse.y" /* Number of statements (loosely speaking) and compound statements seen so far. */ static int stmt_count; static int compstmt_count; ! /* Input location of the end of the body of last simple_if; used by the stmt-rule immediately after simple_if returns. */ ! static location_t if_stmt_locus; ! /* List of types and structure classes of the current declaration. */ static GTY(()) tree current_declspecs; *************** static GTY(()) tree declspec_stack; *** 190,204 **** /* For __extension__, save/restore the warning flags which are controlled by __extension__. */ ! #define SAVE_EXT_FLAGS() \ ! size_int (pedantic \ ! | (warn_pointer_arith << 1) \ ! | (warn_traditional << 2) \ ! | (flag_iso << 3)) ! #define RESTORE_EXT_FLAGS(tval) \ do { \ - int val = tree_low_cst (tval, 0); \ pedantic = val & 1; \ warn_pointer_arith = (val >> 1) & 1; \ warn_traditional = (val >> 2) & 1; \ --- 193,206 ---- /* For __extension__, save/restore the warning flags which are controlled by __extension__. */ ! #define SAVE_EXT_FLAGS() \ ! (pedantic \ ! | (warn_pointer_arith << 1) \ ! | (warn_traditional << 2) \ ! | (flag_iso << 3)) ! #define RESTORE_EXT_FLAGS(val) \ do { \ pedantic = val & 1; \ warn_pointer_arith = (val >> 1) & 1; \ warn_traditional = (val >> 2) & 1; \ *************** static bool parsing_iso_function_signatu *** 224,240 **** #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL) ! static void yyprint PARAMS ((FILE *, int, YYSTYPE)); ! static void yyerror PARAMS ((const char *)); ! static int yylexname PARAMS ((void)); ! static int yylexstring PARAMS ((void)); ! static inline int _yylex PARAMS ((void)); ! static int yylex PARAMS ((void)); ! static void init_reswords PARAMS ((void)); /* Initialisation routine for this file. */ void ! c_parse_init () { init_reswords (); } --- 226,241 ---- #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL) ! static void yyprint (FILE *, int, YYSTYPE); ! static void yyerror (const char *); ! static int yylexname (void); ! static inline int _yylex (void); ! static int yylex (void); ! static void init_reswords (void); /* Initialisation routine for this file. */ void ! c_parse_init (void) { init_reswords (); } *************** c_parse_init () *** 245,256 **** ! #define YYFINAL 1165 #define YYFLAG -32768 ! #define YYNTBASE 93 /* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */ ! #define YYTRANSLATE(x) ((unsigned)(x) <= 323 ? yytranslate[x] : 358) /* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */ static const char yytranslate[] = --- 246,257 ---- ! #define YYFINAL 1153 #define YYFLAG -32768 ! #define YYNTBASE 97 /* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */ ! #define YYTRANSLATE(x) ((unsigned)(x) <= 328 ? yytranslate[x] : 365) /* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */ static const char yytranslate[] = *************** static const char yytranslate[] = *** 258,273 **** 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, 88, 2, 2, 2, 61, 52, 2, ! 68, 84, 59, 57, 89, 58, 67, 60, 2, 2, ! 2, 2, 2, 2, 2, 2, 2, 2, 47, 85, ! 2, 45, 2, 46, 92, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ! 2, 69, 2, 91, 51, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ! 2, 2, 2, 90, 50, 86, 87, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, --- 259,274 ---- 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, 93, 2, 2, 2, 60, 51, 2, ! 67, 89, 58, 56, 94, 57, 66, 59, 2, 2, ! 2, 2, 2, 2, 2, 2, 2, 2, 46, 90, ! 2, 44, 2, 45, 2, 2, 2, 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, 2, 96, 50, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ! 2, 2, 2, 95, 49, 91, 92, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, *************** static const char yytranslate[] = *** 284,293 **** 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, 48, ! 49, 53, 54, 55, 56, 62, 63, 64, 65, 66, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, ! 80, 81, 82, 83 }; #if YYDEBUG --- 285,294 ---- 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, 47, 48, ! 52, 53, 54, 55, 61, 62, 63, 64, 65, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, ! 80, 81, 82, 83, 84, 85, 86, 87, 88 }; #if YYDEBUG *************** static const short yyprhs[] = *** 295,593 **** { 0, 0, 1, 3, 4, 7, 8, 12, 14, 16, 18, 20, 26, 29, 33, 38, 43, 46, 49, 52, ! 54, 55, 56, 66, 71, 72, 73, 83, 88, 89, ! 90, 99, 103, 105, 107, 109, 111, 113, 115, 117, ! 119, 121, 123, 125, 127, 128, 130, 132, 136, 138, ! 141, 144, 147, 150, 153, 158, 161, 166, 169, 172, ! 174, 176, 178, 180, 185, 187, 191, 195, 199, 203, ! 207, 211, 215, 219, 223, 227, 231, 235, 236, 241, ! 242, 247, 248, 249, 257, 258, 264, 268, 272, 274, ! 276, 278, 280, 281, 289, 293, 297, 301, 305, 310, ! 317, 326, 333, 338, 342, 346, 349, 352, 354, 356, ! 358, 360, 362, 365, 369, 371, 372, 374, 378, 380, ! 382, 385, 388, 393, 398, 401, 404, 408, 409, 411, ! 416, 421, 425, 429, 432, 435, 437, 440, 443, 446, ! 449, 452, 454, 457, 459, 462, 465, 468, 471, 474, ! 477, 479, 482, 485, 488, 491, 494, 497, 500, 503, ! 506, 509, 512, 515, 518, 521, 524, 527, 529, 532, ! 535, 538, 541, 544, 547, 550, 553, 556, 559, 562, ! 565, 568, 571, 574, 577, 580, 583, 586, 589, 592, ! 595, 598, 601, 604, 607, 610, 613, 616, 619, 622, ! 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, ! 655, 658, 661, 663, 665, 667, 669, 671, 673, 675, ! 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, ! 697, 699, 701, 703, 705, 707, 709, 711, 713, 715, ! 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, ! 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, ! 757, 759, 761, 763, 765, 767, 769, 771, 773, 774, ! 776, 778, 780, 782, 784, 786, 788, 790, 793, 796, ! 798, 803, 808, 810, 815, 817, 822, 823, 828, 829, ! 836, 840, 841, 848, 852, 853, 855, 857, 860, 867, ! 869, 873, 874, 876, 881, 888, 893, 895, 897, 899, ! 901, 903, 905, 907, 908, 913, 915, 916, 919, 921, ! 925, 929, 932, 933, 938, 940, 941, 946, 948, 950, ! 952, 955, 958, 964, 968, 969, 970, 978, 979, 980, ! 988, 990, 992, 997, 1001, 1004, 1008, 1010, 1012, 1014, ! 1016, 1020, 1023, 1025, 1027, 1031, 1034, 1038, 1042, 1047, ! 1051, 1056, 1060, 1063, 1065, 1067, 1070, 1072, 1075, 1077, ! 1080, 1081, 1089, 1095, 1096, 1104, 1110, 1111, 1120, 1121, ! 1129, 1132, 1135, 1138, 1139, 1141, 1142, 1144, 1146, 1149, ! 1150, 1154, 1157, 1162, 1166, 1171, 1175, 1177, 1179, 1182, ! 1184, 1189, 1191, 1196, 1201, 1208, 1214, 1219, 1226, 1232, ! 1234, 1238, 1240, 1242, 1246, 1247, 1251, 1252, 1254, 1255, ! 1257, 1260, 1262, 1264, 1266, 1270, 1273, 1277, 1282, 1286, ! 1289, 1292, 1294, 1299, 1303, 1308, 1314, 1320, 1322, 1324, ! 1326, 1328, 1330, 1333, 1336, 1339, 1342, 1344, 1347, 1350, ! 1353, 1355, 1358, 1361, 1364, 1367, 1369, 1372, 1374, 1376, ! 1378, 1380, 1383, 1384, 1385, 1386, 1387, 1388, 1390, 1392, ! 1395, 1399, 1401, 1404, 1406, 1408, 1414, 1416, 1418, 1421, ! 1424, 1427, 1430, 1431, 1437, 1438, 1443, 1444, 1445, 1447, ! 1450, 1454, 1458, 1462, 1463, 1468, 1470, 1474, 1475, 1476, ! 1484, 1490, 1493, 1494, 1495, 1496, 1497, 1510, 1511, 1518, ! 1521, 1523, 1525, 1528, 1532, 1535, 1538, 1541, 1545, 1552, ! 1561, 1572, 1585, 1589, 1594, 1596, 1600, 1606, 1609, 1615, ! 1616, 1618, 1619, 1621, 1622, 1624, 1626, 1630, 1635, 1643, ! 1645, 1649, 1650, 1654, 1657, 1658, 1659, 1666, 1669, 1670, ! 1672, 1674, 1678, 1680, 1684, 1689, 1694, 1698, 1703, 1707, ! 1712, 1717, 1721, 1726, 1730, 1732, 1733, 1737, 1739, 1742, ! 1744, 1748, 1750, 1754, 1756, 1758, 1760, 1762, 1764, 1766, ! 1768, 1770, 1774, 1778, 1783, 1784, 1785, 1796, 1797, 1804, ! 1805, 1806, 1819, 1820, 1829, 1830, 1837, 1840, 1841, 1850, ! 1855, 1856, 1866, 1872, 1873, 1880, 1884, 1885, 1887, 1891, ! 1895, 1897, 1899, 1901, 1903, 1904, 1908, 1911, 1915, 1919, ! 1921, 1922, 1924, 1929, 1931, 1935, 1938, 1940, 1942, 1943, ! 1944, 1945, 1953, 1954, 1955, 1958, 1960, 1962, 1965, 1966, ! 1970, 1972, 1974, 1975, 1976, 1982, 1987, 1989, 1995, 1998, ! 1999, 2002, 2003, 2005, 2007, 2009, 2012, 2015, 2020, 2023, ! 2026, 2028, 2032, 2035, 2038, 2040, 2041, 2044, 2045, 2049, ! 2051, 2053, 2056, 2058, 2060, 2062, 2064, 2066, 2068, 2070, ! 2072, 2074, 2076, 2078, 2080, 2082, 2084, 2086, 2088, 2090, ! 2092, 2094, 2096, 2098, 2100, 2102, 2104, 2106, 2108, 2115, ! 2119, 2125, 2128, 2130, 2132, 2134, 2137, 2139, 2143, 2146, ! 2148, 2150, 2155, 2157, 2159, 2161, 2164, 2167, 2169, 2174, ! 2179 }; static const short yyrhs[] = { ! -1, 94, 0, 0, 95, 97, 0, 0, 94, 96, ! 97, 0, 98, 0, 100, 0, 99, 0, 295, 0, ! 28, 68, 109, 84, 85, 0, 294, 97, 0, 132, ! 166, 85, 0, 152, 132, 166, 85, 0, 151, 132, ! 165, 85, 0, 158, 85, 0, 1, 85, 0, 1, ! 86, 0, 85, 0, 0, 0, 151, 132, 195, 101, ! 126, 102, 255, 256, 244, 0, 151, 132, 195, 1, ! 0, 0, 0, 152, 132, 200, 103, 126, 104, 255, ! 256, 244, 0, 152, 132, 200, 1, 0, 0, 0, ! 132, 200, 105, 126, 106, 255, 256, 244, 0, 132, ! 200, 1, 0, 3, 0, 4, 0, 81, 0, 76, ! 0, 52, 0, 58, 0, 57, 0, 63, 0, 64, ! 0, 87, 0, 88, 0, 111, 0, 0, 111, 0, ! 117, 0, 111, 89, 117, 0, 123, 0, 59, 116, ! 0, 294, 116, 0, 108, 116, 0, 49, 107, 0, ! 113, 112, 0, 113, 68, 221, 84, 0, 114, 112, ! 0, 114, 68, 221, 84, 0, 34, 116, 0, 35, ! 116, 0, 12, 0, 30, 0, 29, 0, 112, 0, ! 68, 221, 84, 116, 0, 116, 0, 117, 57, 117, ! 0, 117, 58, 117, 0, 117, 59, 117, 0, 117, ! 60, 117, 0, 117, 61, 117, 0, 117, 55, 117, ! 0, 117, 56, 117, 0, 117, 54, 117, 0, 117, ! 53, 117, 0, 117, 52, 117, 0, 117, 50, 117, ! 0, 117, 51, 117, 0, 0, 117, 49, 118, 117, ! 0, 0, 117, 48, 119, 117, 0, 0, 0, 117, ! 46, 120, 109, 47, 121, 117, 0, 0, 117, 46, ! 122, 47, 117, 0, 117, 45, 117, 0, 117, 44, ! 117, 0, 3, 0, 9, 0, 10, 0, 43, 0, ! 0, 68, 221, 84, 90, 124, 181, 86, 0, 68, ! 109, 84, 0, 68, 1, 84, 0, 248, 246, 84, ! 0, 248, 1, 84, 0, 123, 68, 110, 84, 0, ! 36, 68, 117, 89, 221, 84, 0, 37, 68, 117, ! 89, 117, 89, 117, 84, 0, 38, 68, 221, 89, ! 221, 84, 0, 123, 69, 109, 91, 0, 123, 67, ! 107, 0, 123, 66, 107, 0, 123, 63, 0, 123, ! 64, 0, 351, 0, 355, 0, 356, 0, 357, 0, ! 125, 0, 92, 10, 0, 125, 92, 10, 0, 127, ! 0, 0, 129, 0, 255, 256, 130, 0, 128, 0, ! 236, 0, 129, 128, 0, 128, 236, 0, 153, 132, ! 165, 85, 0, 154, 132, 166, 85, 0, 153, 85, ! 0, 154, 85, 0, 255, 256, 134, 0, 0, 172, ! 0, 151, 132, 165, 85, 0, 152, 132, 166, 85, ! 0, 151, 132, 189, 0, 152, 132, 192, 0, 158, ! 85, 0, 294, 134, 0, 8, 0, 135, 8, 0, ! 136, 8, 0, 135, 173, 0, 137, 8, 0, 138, ! 8, 0, 173, 0, 137, 173, 0, 160, 0, 139, ! 8, 0, 140, 8, 0, 139, 162, 0, 140, 162, ! 0, 135, 160, 0, 136, 160, 0, 161, 0, 139, ! 173, 0, 139, 163, 0, 140, 163, 0, 135, 161, ! 0, 136, 161, 0, 141, 8, 0, 142, 8, 0, ! 141, 162, 0, 142, 162, 0, 137, 160, 0, 138, ! 160, 0, 141, 173, 0, 141, 163, 0, 142, 163, ! 0, 137, 161, 0, 138, 161, 0, 178, 0, 143, ! 8, 0, 144, 8, 0, 135, 178, 0, 136, 178, ! 0, 143, 178, 0, 144, 178, 0, 143, 173, 0, ! 145, 8, 0, 146, 8, 0, 137, 178, 0, 138, ! 178, 0, 145, 178, 0, 146, 178, 0, 145, 173, ! 0, 147, 8, 0, 148, 8, 0, 147, 162, 0, ! 148, 162, 0, 143, 160, 0, 144, 160, 0, 139, ! 178, 0, 140, 178, 0, 147, 178, 0, 148, 178, ! 0, 147, 173, 0, 147, 163, 0, 148, 163, 0, ! 143, 161, 0, 144, 161, 0, 149, 8, 0, 150, ! 8, 0, 149, 162, 0, 150, 162, 0, 145, 160, ! 0, 146, 160, 0, 141, 178, 0, 142, 178, 0, ! 149, 178, 0, 150, 178, 0, 149, 173, 0, 149, ! 163, 0, 150, 163, 0, 145, 161, 0, 146, 161, ! 0, 139, 0, 140, 0, 141, 0, 142, 0, 147, ! 0, 148, 0, 149, 0, 150, 0, 135, 0, 136, ! 0, 137, 0, 138, 0, 143, 0, 144, 0, 145, ! 0, 146, 0, 139, 0, 140, 0, 147, 0, 148, ! 0, 135, 0, 136, 0, 143, 0, 144, 0, 139, ! 0, 140, 0, 141, 0, 142, 0, 135, 0, 136, ! 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, ! 0, 142, 0, 135, 0, 136, 0, 137, 0, 138, ! 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, ! 0, 140, 0, 141, 0, 142, 0, 143, 0, 144, ! 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, ! 0, 150, 0, 0, 156, 0, 162, 0, 164, 0, ! 163, 0, 7, 0, 209, 0, 204, 0, 4, 0, ! 76, 311, 0, 81, 311, 0, 312, 0, 115, 68, ! 109, 84, 0, 115, 68, 221, 84, 0, 168, 0, ! 165, 89, 133, 168, 0, 170, 0, 166, 89, 133, ! 170, 0, 0, 28, 68, 10, 84, 0, 0, 195, ! 167, 172, 45, 169, 179, 0, 195, 167, 172, 0, ! 0, 200, 167, 172, 45, 171, 179, 0, 200, 167, ! 172, 0, 0, 173, 0, 174, 0, 173, 174, 0, ! 31, 68, 68, 175, 84, 84, 0, 176, 0, 175, ! 89, 176, 0, 0, 177, 0, 177, 68, 3, 84, ! 0, 177, 68, 3, 89, 111, 84, 0, 177, 68, ! 110, 84, 0, 107, 0, 178, 0, 7, 0, 8, ! 0, 6, 0, 5, 0, 117, 0, 0, 90, 180, ! 181, 86, 0, 1, 0, 0, 182, 210, 0, 183, ! 0, 182, 89, 183, 0, 187, 45, 185, 0, 188, ! 185, 0, 0, 107, 47, 184, 185, 0, 185, 0, ! 0, 90, 186, 181, 86, 0, 117, 0, 1, 0, ! 188, 0, 187, 188, 0, 67, 107, 0, 69, 117, ! 11, 117, 91, 0, 69, 117, 91, 0, 0, 0, ! 195, 190, 126, 191, 255, 256, 249, 0, 0, 0, ! 200, 193, 126, 194, 255, 256, 249, 0, 196, 0, ! 200, 0, 68, 172, 196, 84, 0, 196, 68, 289, ! 0, 196, 229, 0, 59, 159, 196, 0, 4, 0, ! 81, 0, 198, 0, 199, 0, 198, 68, 289, 0, ! 198, 229, 0, 4, 0, 81, 0, 199, 68, 289, ! 0, 199, 229, 0, 59, 159, 198, 0, 59, 159, ! 199, 0, 68, 172, 199, 84, 0, 200, 68, 289, ! 0, 68, 172, 200, 84, 0, 59, 159, 200, 0, ! 200, 229, 0, 3, 0, 14, 0, 14, 173, 0, ! 15, 0, 15, 173, 0, 13, 0, 13, 173, 0, ! 0, 201, 107, 90, 205, 212, 86, 172, 0, 201, ! 90, 212, 86, 172, 0, 0, 202, 107, 90, 206, ! 212, 86, 172, 0, 202, 90, 212, 86, 172, 0, ! 0, 203, 107, 90, 207, 219, 211, 86, 172, 0, ! 0, 203, 90, 208, 219, 211, 86, 172, 0, 201, ! 107, 0, 202, 107, 0, 203, 107, 0, 0, 89, ! 0, 0, 89, 0, 213, 0, 213, 214, 0, 0, ! 213, 214, 85, 0, 213, 85, 0, 74, 68, 76, ! 84, 0, 155, 132, 215, 0, 155, 132, 255, 256, ! 0, 156, 132, 216, 0, 156, 0, 1, 0, 294, ! 214, 0, 217, 0, 215, 89, 133, 217, 0, 218, ! 0, 216, 89, 133, 218, 0, 255, 256, 195, 172, ! 0, 255, 256, 195, 47, 117, 172, 0, 255, 256, ! 47, 117, 172, 0, 255, 256, 200, 172, 0, 255, ! 256, 200, 47, 117, 172, 0, 255, 256, 47, 117, ! 172, 0, 220, 0, 219, 89, 220, 0, 1, 0, ! 107, 0, 107, 45, 117, 0, 0, 157, 222, 223, ! 0, 0, 225, 0, 0, 225, 0, 226, 173, 0, ! 227, 0, 226, 0, 228, 0, 59, 159, 226, 0, ! 59, 159, 0, 59, 159, 227, 0, 68, 172, 225, ! 84, 0, 228, 68, 279, 0, 228, 229, 0, 68, ! 279, 0, 229, 0, 69, 159, 109, 91, 0, 69, ! 159, 91, 0, 69, 159, 59, 91, 0, 69, 6, ! 159, 109, 91, 0, 69, 156, 6, 109, 91, 0, ! 231, 0, 232, 0, 233, 0, 234, 0, 259, 0, ! 231, 259, 0, 232, 259, 0, 233, 259, 0, 234, ! 259, 0, 131, 0, 231, 131, 0, 232, 131, 0, ! 234, 131, 0, 260, 0, 231, 260, 0, 232, 260, ! 0, 233, 260, 0, 234, 260, 0, 236, 0, 235, ! 236, 0, 231, 0, 232, 0, 233, 0, 234, 0, ! 1, 85, 0, 0, 0, 0, 0, 0, 242, 0, ! 243, 0, 242, 243, 0, 33, 293, 85, 0, 249, ! 0, 1, 249, 0, 90, 0, 86, 0, 237, 241, ! 247, 86, 238, 0, 230, 0, 1, 0, 68, 90, ! 0, 245, 246, 0, 251, 258, 0, 251, 1, 0, ! 0, 16, 252, 68, 109, 84, 0, 0, 19, 254, ! 258, 18, 0, 0, 0, 259, 0, 260, 257, 0, ! 239, 257, 240, 0, 255, 256, 271, 0, 255, 256, ! 272, 0, 0, 250, 17, 262, 258, 0, 250, 0, ! 250, 17, 1, 0, 0, 0, 18, 263, 68, 109, ! 84, 264, 258, 0, 253, 68, 109, 84, 85, 0, ! 253, 1, 0, 0, 0, 0, 0, 20, 265, 68, ! 270, 266, 274, 85, 267, 274, 84, 268, 258, 0, ! 0, 21, 68, 109, 84, 269, 258, 0, 274, 85, ! 0, 134, 0, 249, 0, 109, 85, 0, 239, 261, ! 240, 0, 24, 85, 0, 25, 85, 0, 26, 85, ! 0, 26, 109, 85, 0, 28, 273, 68, 109, 84, ! 85, 0, 28, 273, 68, 109, 47, 275, 84, 85, ! 0, 28, 273, 68, 109, 47, 275, 47, 275, 84, ! 85, 0, 28, 273, 68, 109, 47, 275, 47, 275, ! 47, 278, 84, 85, 0, 27, 107, 85, 0, 27, ! 59, 109, 85, 0, 85, 0, 22, 117, 47, 0, ! 22, 117, 11, 117, 47, 0, 23, 47, 0, 107, ! 255, 256, 47, 172, 0, 0, 8, 0, 0, 109, ! 0, 0, 276, 0, 277, 0, 276, 89, 277, 0, ! 10, 68, 109, 84, 0, 69, 107, 91, 10, 68, ! 109, 84, 0, 10, 0, 278, 89, 10, 0, 0, ! 172, 280, 281, 0, 284, 84, 0, 0, 0, 285, ! 85, 282, 172, 283, 281, 0, 1, 84, 0, 0, ! 11, 0, 285, 0, 285, 89, 11, 0, 287, 0, ! 285, 89, 286, 0, 151, 132, 197, 172, 0, 151, ! 132, 200, 172, 0, 151, 132, 224, 0, 152, 132, ! 200, 172, 0, 152, 132, 224, 0, 153, 288, 197, ! 172, 0, 153, 288, 200, 172, 0, 153, 288, 224, ! 0, 154, 288, 200, 172, 0, 154, 288, 224, 0, ! 132, 0, 0, 172, 290, 291, 0, 281, 0, 292, ! 84, 0, 3, 0, 292, 89, 3, 0, 107, 0, ! 293, 89, 107, 0, 32, 0, 299, 0, 297, 0, ! 298, 0, 309, 0, 320, 0, 72, 0, 107, 0, ! 296, 89, 107, 0, 82, 296, 85, 0, 83, 107, ! 107, 85, 0, 0, 0, 70, 107, 311, 90, 300, ! 313, 86, 301, 324, 72, 0, 0, 70, 107, 311, ! 302, 324, 72, 0, 0, 0, 70, 107, 47, 107, ! 311, 90, 303, 313, 86, 304, 324, 72, 0, 0, ! 70, 107, 47, 107, 311, 305, 324, 72, 0, 0, ! 71, 107, 90, 306, 313, 86, 0, 71, 107, 0, ! 0, 71, 107, 47, 107, 90, 307, 313, 86, 0, ! 71, 107, 47, 107, 0, 0, 70, 107, 68, 107, ! 84, 311, 308, 324, 72, 0, 71, 107, 68, 107, ! 84, 0, 0, 80, 107, 311, 310, 324, 72, 0, ! 80, 296, 85, 0, 0, 312, 0, 54, 296, 54, ! 0, 313, 314, 315, 0, 315, 0, 78, 0, 79, ! 0, 77, 0, 0, 315, 316, 85, 0, 315, 85, ! 0, 155, 132, 317, 0, 156, 132, 317, 0, 1, ! 0, 0, 318, 0, 317, 89, 133, 318, 0, 195, ! 0, 195, 47, 117, 0, 47, 117, 0, 57, 0, ! 58, 0, 0, 0, 0, 319, 321, 332, 322, 333, ! 323, 244, 0, 0, 0, 325, 326, 0, 329, 0, ! 99, 0, 326, 329, 0, 0, 326, 327, 99, 0, ! 85, 0, 1, 0, 0, 0, 319, 330, 332, 331, ! 328, 0, 68, 221, 84, 341, 0, 341, 0, 68, ! 221, 84, 342, 339, 0, 342, 339, 0, 0, 85, ! 334, 0, 0, 335, 0, 336, 0, 236, 0, 335, ! 336, 0, 336, 236, 0, 151, 132, 337, 85, 0, ! 151, 85, 0, 152, 85, 0, 338, 0, 337, 89, ! 338, 0, 197, 172, 0, 200, 172, 0, 224, 0, ! 0, 89, 11, 0, 0, 89, 340, 284, 0, 343, ! 0, 345, 0, 342, 345, 0, 3, 0, 4, 0, ! 76, 0, 81, 0, 344, 0, 13, 0, 14, 0, ! 15, 0, 16, 0, 17, 0, 18, 0, 19, 0, ! 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, ! 25, 0, 26, 0, 27, 0, 28, 0, 12, 0, ! 29, 0, 30, 0, 7, 0, 8, 0, 343, 47, ! 68, 221, 84, 107, 0, 343, 47, 107, 0, 47, ! 68, 221, 84, 107, 0, 47, 107, 0, 343, 0, ! 347, 0, 349, 0, 347, 349, 0, 111, 0, 343, ! 47, 348, 0, 47, 348, 0, 109, 0, 76, 0, ! 69, 350, 346, 91, 0, 343, 0, 353, 0, 354, ! 0, 353, 354, 0, 343, 47, 0, 47, 0, 73, ! 68, 352, 84, 0, 80, 68, 107, 84, 0, 75, ! 68, 221, 84, 0 }; #endif --- 296,591 ---- { 0, 0, 1, 3, 4, 7, 8, 12, 14, 16, 18, 20, 26, 29, 33, 38, 43, 46, 49, 52, ! 54, 55, 56, 65, 70, 71, 72, 81, 86, 87, ! 88, 96, 100, 102, 104, 106, 108, 110, 112, 114, ! 116, 118, 120, 122, 124, 125, 127, 129, 133, 135, ! 138, 141, 144, 147, 150, 155, 158, 163, 166, 169, ! 171, 173, 175, 177, 182, 184, 188, 192, 196, 200, ! 204, 208, 212, 216, 220, 224, 228, 232, 233, 238, ! 239, 244, 245, 246, 254, 255, 261, 265, 269, 271, ! 273, 275, 277, 278, 286, 290, 294, 298, 302, 307, ! 314, 323, 330, 335, 339, 343, 346, 349, 351, 353, ! 355, 357, 359, 361, 362, 364, 367, 369, 371, 374, ! 377, 382, 387, 390, 393, 396, 397, 399, 404, 409, ! 413, 417, 420, 423, 425, 428, 431, 434, 437, 440, ! 442, 445, 447, 450, 453, 456, 459, 462, 465, 467, ! 470, 473, 476, 479, 482, 485, 488, 491, 494, 497, ! 500, 503, 506, 509, 512, 515, 517, 520, 523, 526, ! 529, 532, 535, 538, 541, 544, 547, 550, 553, 556, ! 559, 562, 565, 568, 571, 574, 577, 580, 583, 586, ! 589, 592, 595, 598, 601, 604, 607, 610, 613, 616, ! 619, 622, 625, 628, 631, 634, 637, 640, 643, 646, ! 649, 651, 653, 655, 657, 659, 661, 663, 665, 667, ! 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, ! 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, ! 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, ! 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, ! 749, 751, 753, 755, 757, 759, 761, 762, 764, 766, ! 768, 770, 772, 774, 776, 778, 781, 784, 786, 791, ! 796, 798, 803, 805, 810, 811, 816, 817, 824, 828, ! 829, 836, 840, 841, 843, 845, 848, 855, 857, 861, ! 862, 864, 869, 876, 881, 883, 885, 887, 889, 891, ! 893, 895, 896, 901, 903, 904, 907, 909, 913, 917, ! 920, 921, 926, 928, 929, 934, 936, 938, 940, 943, ! 946, 952, 956, 957, 958, 965, 966, 967, 974, 976, ! 978, 983, 987, 990, 994, 996, 998, 1000, 1002, 1006, ! 1009, 1011, 1013, 1017, 1020, 1024, 1028, 1033, 1037, 1042, ! 1046, 1049, 1051, 1053, 1056, 1058, 1061, 1063, 1066, 1067, ! 1075, 1081, 1082, 1090, 1096, 1097, 1106, 1107, 1115, 1118, ! 1121, 1124, 1125, 1127, 1128, 1130, 1132, 1135, 1136, 1140, ! 1143, 1148, 1152, 1155, 1159, 1161, 1163, 1166, 1168, 1173, ! 1175, 1180, 1183, 1188, 1192, 1195, 1200, 1204, 1206, 1210, ! 1212, 1214, 1218, 1219, 1223, 1224, 1226, 1227, 1229, 1232, ! 1234, 1236, 1238, 1242, 1245, 1249, 1254, 1258, 1261, 1264, ! 1266, 1271, 1275, 1280, 1286, 1292, 1294, 1296, 1298, 1300, ! 1302, 1305, 1308, 1311, 1314, 1316, 1319, 1322, 1325, 1327, ! 1330, 1333, 1336, 1339, 1341, 1344, 1346, 1348, 1350, 1352, ! 1355, 1356, 1357, 1358, 1359, 1360, 1362, 1364, 1367, 1371, ! 1373, 1376, 1378, 1380, 1386, 1388, 1390, 1393, 1396, 1399, ! 1402, 1403, 1409, 1410, 1415, 1416, 1418, 1421, 1425, 1428, ! 1431, 1432, 1437, 1439, 1443, 1444, 1445, 1453, 1459, 1462, ! 1463, 1464, 1465, 1466, 1479, 1480, 1487, 1490, 1492, 1494, ! 1497, 1501, 1504, 1507, 1510, 1514, 1521, 1530, 1541, 1554, ! 1558, 1563, 1565, 1569, 1572, 1573, 1577, 1578, 1585, 1586, ! 1590, 1592, 1593, 1597, 1600, 1602, 1603, 1610, 1613, 1614, ! 1618, 1624, 1627, 1632, 1633, 1635, 1636, 1638, 1639, 1641, ! 1643, 1647, 1652, 1660, 1662, 1666, 1667, 1671, 1674, 1675, ! 1676, 1683, 1686, 1687, 1689, 1691, 1695, 1697, 1701, 1706, ! 1711, 1715, 1720, 1724, 1729, 1734, 1738, 1743, 1747, 1749, ! 1750, 1754, 1756, 1759, 1761, 1765, 1767, 1771, 1773, 1775, ! 1777, 1779, 1781, 1783, 1785, 1787, 1791, 1795, 1800, 1803, ! 1804, 1808, 1809, 1810, 1811, 1821, 1822, 1828, 1829, 1839, ! 1845, 1846, 1853, 1857, 1858, 1860, 1864, 1868, 1870, 1872, ! 1874, 1876, 1877, 1881, 1884, 1888, 1892, 1894, 1895, 1897, ! 1902, 1904, 1908, 1911, 1913, 1915, 1916, 1917, 1918, 1926, ! 1927, 1930, 1931, 1935, 1937, 1939, 1940, 1941, 1947, 1952, ! 1954, 1960, 1963, 1964, 1967, 1968, 1970, 1972, 1974, 1977, ! 1980, 1985, 1988, 1991, 1993, 1997, 2000, 2003, 2005, 2006, ! 2009, 2010, 2014, 2016, 2018, 2021, 2023, 2025, 2027, 2029, ! 2031, 2033, 2035, 2037, 2039, 2041, 2043, 2045, 2047, 2049, ! 2051, 2053, 2055, 2057, 2059, 2061, 2063, 2065, 2067, 2069, ! 2071, 2073, 2080, 2084, 2090, 2093, 2095, 2097, 2099, 2102, ! 2104, 2108, 2111, 2113, 2115, 2117, 2122, 2124, 2126, 2128, ! 2131, 2134, 2136, 2141, 2146 }; static const short yyrhs[] = { ! -1, 98, 0, 0, 99, 101, 0, 0, 98, 100, ! 101, 0, 102, 0, 104, 0, 103, 0, 307, 0, ! 28, 67, 113, 89, 90, 0, 306, 101, 0, 135, ! 169, 90, 0, 155, 135, 169, 90, 0, 154, 135, ! 168, 90, 0, 161, 90, 0, 1, 90, 0, 1, ! 91, 0, 90, 0, 0, 0, 154, 135, 198, 105, ! 129, 258, 106, 247, 0, 154, 135, 198, 1, 0, ! 0, 0, 155, 135, 203, 107, 129, 258, 108, 247, ! 0, 155, 135, 203, 1, 0, 0, 0, 135, 203, ! 109, 129, 258, 110, 247, 0, 135, 203, 1, 0, ! 3, 0, 4, 0, 80, 0, 75, 0, 51, 0, ! 57, 0, 56, 0, 62, 0, 63, 0, 92, 0, ! 93, 0, 115, 0, 0, 115, 0, 121, 0, 115, ! 94, 121, 0, 127, 0, 58, 120, 0, 306, 120, ! 0, 112, 120, 0, 48, 111, 0, 117, 116, 0, ! 117, 67, 224, 89, 0, 118, 116, 0, 118, 67, ! 224, 89, 0, 34, 120, 0, 35, 120, 0, 12, ! 0, 30, 0, 29, 0, 116, 0, 67, 224, 89, ! 120, 0, 120, 0, 121, 56, 121, 0, 121, 57, ! 121, 0, 121, 58, 121, 0, 121, 59, 121, 0, ! 121, 60, 121, 0, 121, 54, 121, 0, 121, 55, ! 121, 0, 121, 53, 121, 0, 121, 52, 121, 0, ! 121, 51, 121, 0, 121, 49, 121, 0, 121, 50, ! 121, 0, 0, 121, 48, 122, 121, 0, 0, 121, ! 47, 123, 121, 0, 0, 0, 121, 45, 124, 113, ! 46, 125, 121, 0, 0, 121, 45, 126, 46, 121, ! 0, 121, 44, 121, 0, 121, 43, 121, 0, 3, ! 0, 9, 0, 10, 0, 42, 0, 0, 67, 224, ! 89, 95, 128, 184, 91, 0, 67, 113, 89, 0, ! 67, 1, 89, 0, 251, 249, 89, 0, 251, 1, ! 89, 0, 127, 67, 114, 89, 0, 36, 67, 121, ! 94, 224, 89, 0, 37, 67, 121, 94, 121, 94, ! 121, 89, 0, 38, 67, 224, 94, 224, 89, 0, ! 127, 68, 113, 96, 0, 127, 66, 111, 0, 127, ! 65, 111, 0, 127, 62, 0, 127, 63, 0, 358, ! 0, 362, 0, 363, 0, 364, 0, 88, 0, 130, ! 0, 0, 132, 0, 258, 133, 0, 131, 0, 239, ! 0, 132, 131, 0, 131, 239, 0, 156, 135, 168, ! 90, 0, 157, 135, 169, 90, 0, 156, 90, 0, ! 157, 90, 0, 258, 137, 0, 0, 175, 0, 154, ! 135, 168, 90, 0, 155, 135, 169, 90, 0, 154, ! 135, 192, 0, 155, 135, 195, 0, 161, 90, 0, ! 306, 137, 0, 8, 0, 138, 8, 0, 139, 8, ! 0, 138, 176, 0, 140, 8, 0, 141, 8, 0, ! 176, 0, 140, 176, 0, 163, 0, 142, 8, 0, ! 143, 8, 0, 142, 165, 0, 143, 165, 0, 138, ! 163, 0, 139, 163, 0, 164, 0, 142, 176, 0, ! 142, 166, 0, 143, 166, 0, 138, 164, 0, 139, ! 164, 0, 144, 8, 0, 145, 8, 0, 144, 165, ! 0, 145, 165, 0, 140, 163, 0, 141, 163, 0, ! 144, 176, 0, 144, 166, 0, 145, 166, 0, 140, ! 164, 0, 141, 164, 0, 181, 0, 146, 8, 0, ! 147, 8, 0, 138, 181, 0, 139, 181, 0, 146, ! 181, 0, 147, 181, 0, 146, 176, 0, 148, 8, ! 0, 149, 8, 0, 140, 181, 0, 141, 181, 0, ! 148, 181, 0, 149, 181, 0, 148, 176, 0, 150, ! 8, 0, 151, 8, 0, 150, 165, 0, 151, 165, ! 0, 146, 163, 0, 147, 163, 0, 142, 181, 0, ! 143, 181, 0, 150, 181, 0, 151, 181, 0, 150, ! 176, 0, 150, 166, 0, 151, 166, 0, 146, 164, ! 0, 147, 164, 0, 152, 8, 0, 153, 8, 0, ! 152, 165, 0, 153, 165, 0, 148, 163, 0, 149, ! 163, 0, 144, 181, 0, 145, 181, 0, 152, 181, ! 0, 153, 181, 0, 152, 176, 0, 152, 166, 0, ! 153, 166, 0, 148, 164, 0, 149, 164, 0, 142, ! 0, 143, 0, 144, 0, 145, 0, 150, 0, 151, ! 0, 152, 0, 153, 0, 138, 0, 139, 0, 140, ! 0, 141, 0, 146, 0, 147, 0, 148, 0, 149, ! 0, 142, 0, 143, 0, 150, 0, 151, 0, 138, ! 0, 139, 0, 146, 0, 147, 0, 142, 0, 143, ! 0, 144, 0, 145, 0, 138, 0, 139, 0, 140, ! 0, 141, 0, 142, 0, 143, 0, 144, 0, 145, ! 0, 138, 0, 139, 0, 140, 0, 141, 0, 138, ! 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, ! 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, ! 0, 149, 0, 150, 0, 151, 0, 152, 0, 153, ! 0, 0, 159, 0, 165, 0, 167, 0, 166, 0, ! 7, 0, 212, 0, 207, 0, 4, 0, 75, 320, ! 0, 80, 320, 0, 321, 0, 119, 67, 113, 89, ! 0, 119, 67, 224, 89, 0, 171, 0, 168, 94, ! 136, 171, 0, 173, 0, 169, 94, 136, 173, 0, ! 0, 28, 67, 10, 89, 0, 0, 198, 170, 175, ! 44, 172, 182, 0, 198, 170, 175, 0, 0, 203, ! 170, 175, 44, 174, 182, 0, 203, 170, 175, 0, ! 0, 176, 0, 177, 0, 176, 177, 0, 31, 67, ! 67, 178, 89, 89, 0, 179, 0, 178, 94, 179, ! 0, 0, 180, 0, 180, 67, 3, 89, 0, 180, ! 67, 3, 94, 115, 89, 0, 180, 67, 114, 89, ! 0, 111, 0, 181, 0, 7, 0, 8, 0, 6, ! 0, 5, 0, 121, 0, 0, 95, 183, 184, 91, ! 0, 1, 0, 0, 185, 213, 0, 186, 0, 185, ! 94, 186, 0, 190, 44, 188, 0, 191, 188, 0, ! 0, 111, 46, 187, 188, 0, 188, 0, 0, 95, ! 189, 184, 91, 0, 121, 0, 1, 0, 191, 0, ! 190, 191, 0, 66, 111, 0, 68, 121, 11, 121, ! 96, 0, 68, 121, 96, 0, 0, 0, 198, 193, ! 129, 258, 194, 252, 0, 0, 0, 203, 196, 129, ! 258, 197, 252, 0, 199, 0, 203, 0, 67, 175, ! 199, 89, 0, 199, 67, 301, 0, 199, 232, 0, ! 58, 162, 199, 0, 4, 0, 80, 0, 201, 0, ! 202, 0, 201, 67, 301, 0, 201, 232, 0, 4, ! 0, 80, 0, 202, 67, 301, 0, 202, 232, 0, ! 58, 162, 201, 0, 58, 162, 202, 0, 67, 175, ! 202, 89, 0, 203, 67, 301, 0, 67, 175, 203, ! 89, 0, 58, 162, 203, 0, 203, 232, 0, 3, ! 0, 14, 0, 14, 176, 0, 15, 0, 15, 176, ! 0, 13, 0, 13, 176, 0, 0, 204, 111, 95, ! 208, 215, 91, 175, 0, 204, 95, 215, 91, 175, ! 0, 0, 205, 111, 95, 209, 215, 91, 175, 0, ! 205, 95, 215, 91, 175, 0, 0, 206, 111, 95, ! 210, 222, 214, 91, 175, 0, 0, 206, 95, 211, ! 222, 214, 91, 175, 0, 204, 111, 0, 205, 111, ! 0, 206, 111, 0, 0, 94, 0, 0, 94, 0, ! 216, 0, 216, 217, 0, 0, 216, 217, 90, 0, ! 216, 90, 0, 73, 67, 75, 89, 0, 158, 135, ! 218, 0, 158, 135, 0, 159, 135, 219, 0, 159, ! 0, 1, 0, 306, 217, 0, 220, 0, 218, 94, ! 136, 220, 0, 221, 0, 219, 94, 136, 221, 0, ! 198, 175, 0, 198, 46, 121, 175, 0, 46, 121, ! 175, 0, 203, 175, 0, 203, 46, 121, 175, 0, ! 46, 121, 175, 0, 223, 0, 222, 94, 223, 0, ! 1, 0, 111, 0, 111, 44, 121, 0, 0, 160, ! 225, 226, 0, 0, 228, 0, 0, 228, 0, 229, ! 176, 0, 230, 0, 229, 0, 231, 0, 58, 162, ! 229, 0, 58, 162, 0, 58, 162, 230, 0, 67, ! 175, 228, 89, 0, 231, 67, 291, 0, 231, 232, ! 0, 67, 291, 0, 232, 0, 68, 162, 121, 96, ! 0, 68, 162, 96, 0, 68, 162, 58, 96, 0, ! 68, 6, 162, 121, 96, 0, 68, 159, 6, 121, ! 96, 0, 234, 0, 235, 0, 236, 0, 237, 0, ! 261, 0, 234, 261, 0, 235, 261, 0, 236, 261, ! 0, 237, 261, 0, 134, 0, 234, 134, 0, 235, ! 134, 0, 237, 134, 0, 262, 0, 234, 262, 0, ! 235, 262, 0, 236, 262, 0, 237, 262, 0, 239, ! 0, 238, 239, 0, 234, 0, 235, 0, 236, 0, ! 237, 0, 1, 90, 0, 0, 0, 0, 0, 0, ! 245, 0, 246, 0, 245, 246, 0, 33, 305, 90, ! 0, 252, 0, 1, 252, 0, 95, 0, 91, 0, ! 240, 244, 250, 91, 241, 0, 233, 0, 1, 0, ! 67, 95, 0, 248, 249, 0, 254, 260, 0, 254, ! 1, 0, 0, 16, 255, 67, 113, 89, 0, 0, ! 19, 257, 260, 18, 0, 0, 261, 0, 262, 259, ! 0, 242, 259, 243, 0, 258, 273, 0, 258, 284, ! 0, 0, 253, 17, 264, 260, 0, 253, 0, 253, ! 17, 1, 0, 0, 0, 18, 265, 67, 113, 89, ! 266, 260, 0, 256, 67, 113, 89, 90, 0, 256, ! 1, 0, 0, 0, 0, 0, 20, 267, 67, 272, ! 268, 286, 90, 269, 286, 89, 270, 260, 0, 0, ! 21, 67, 113, 89, 271, 260, 0, 286, 90, 0, ! 137, 0, 252, 0, 113, 90, 0, 242, 263, 243, ! 0, 24, 90, 0, 25, 90, 0, 26, 90, 0, ! 26, 113, 90, 0, 28, 285, 67, 113, 89, 90, ! 0, 28, 285, 67, 113, 46, 287, 89, 90, 0, ! 28, 285, 67, 113, 46, 287, 46, 287, 89, 90, ! 0, 28, 285, 67, 113, 46, 287, 46, 287, 46, ! 290, 89, 90, 0, 27, 111, 90, 0, 27, 58, ! 113, 90, 0, 90, 0, 83, 113, 90, 0, 83, ! 90, 0, 0, 276, 274, 283, 0, 0, 87, 67, ! 113, 89, 275, 252, 0, 0, 278, 277, 280, 0, ! 278, 0, 0, 84, 279, 252, 0, 280, 281, 0, ! 281, 0, 0, 85, 67, 298, 89, 282, 252, 0, ! 86, 252, 0, 0, 22, 121, 46, 0, 22, 121, ! 11, 121, 46, 0, 23, 46, 0, 111, 258, 46, ! 175, 0, 0, 8, 0, 0, 113, 0, 0, 288, ! 0, 289, 0, 288, 94, 289, 0, 10, 67, 113, ! 89, 0, 68, 111, 96, 10, 67, 113, 89, 0, ! 10, 0, 290, 94, 10, 0, 0, 175, 292, 293, ! 0, 296, 89, 0, 0, 0, 297, 90, 294, 175, ! 295, 293, 0, 1, 89, 0, 0, 11, 0, 297, ! 0, 297, 94, 11, 0, 299, 0, 297, 94, 298, ! 0, 154, 135, 200, 175, 0, 154, 135, 203, 175, ! 0, 154, 135, 227, 0, 155, 135, 203, 175, 0, ! 155, 135, 227, 0, 156, 300, 200, 175, 0, 156, ! 300, 203, 175, 0, 156, 300, 227, 0, 157, 300, ! 203, 175, 0, 157, 300, 227, 0, 135, 0, 0, ! 175, 302, 303, 0, 293, 0, 304, 89, 0, 3, ! 0, 304, 94, 3, 0, 111, 0, 305, 94, 111, ! 0, 32, 0, 313, 0, 309, 0, 310, 0, 318, ! 0, 329, 0, 71, 0, 111, 0, 308, 94, 111, ! 0, 81, 308, 90, 0, 82, 111, 111, 90, 0, ! 46, 111, 0, 0, 95, 322, 91, 0, 0, 0, ! 0, 69, 111, 311, 320, 314, 312, 315, 333, 71, ! 0, 0, 70, 111, 311, 316, 312, 0, 0, 69, ! 111, 67, 111, 89, 320, 317, 333, 71, 0, 70, ! 111, 67, 111, 89, 0, 0, 79, 111, 320, 319, ! 333, 71, 0, 79, 308, 90, 0, 0, 321, 0, ! 53, 308, 53, 0, 322, 323, 324, 0, 324, 0, ! 77, 0, 78, 0, 76, 0, 0, 324, 325, 90, ! 0, 324, 90, 0, 158, 135, 326, 0, 159, 135, ! 326, 0, 1, 0, 0, 327, 0, 326, 94, 136, ! 327, 0, 198, 0, 198, 46, 121, 0, 46, 121, ! 0, 56, 0, 57, 0, 0, 0, 0, 328, 330, ! 339, 331, 340, 332, 247, 0, 0, 333, 336, 0, ! 0, 333, 334, 103, 0, 90, 0, 1, 0, 0, ! 0, 328, 337, 339, 338, 335, 0, 67, 224, 89, ! 348, 0, 348, 0, 67, 224, 89, 349, 346, 0, ! 349, 346, 0, 0, 90, 341, 0, 0, 342, 0, ! 343, 0, 239, 0, 342, 343, 0, 343, 239, 0, ! 154, 135, 344, 90, 0, 154, 90, 0, 155, 90, ! 0, 345, 0, 344, 94, 345, 0, 200, 175, 0, ! 203, 175, 0, 227, 0, 0, 94, 11, 0, 0, ! 94, 347, 296, 0, 350, 0, 352, 0, 349, 352, ! 0, 3, 0, 4, 0, 75, 0, 80, 0, 351, ! 0, 13, 0, 14, 0, 15, 0, 16, 0, 17, ! 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, ! 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, ! 0, 28, 0, 12, 0, 29, 0, 30, 0, 7, ! 0, 8, 0, 350, 46, 67, 224, 89, 111, 0, ! 350, 46, 111, 0, 46, 67, 224, 89, 111, 0, ! 46, 111, 0, 350, 0, 354, 0, 356, 0, 354, ! 356, 0, 115, 0, 350, 46, 355, 0, 46, 355, ! 0, 113, 0, 75, 0, 4, 0, 68, 357, 353, ! 96, 0, 350, 0, 360, 0, 361, 0, 360, 361, ! 0, 350, 46, 0, 46, 0, 72, 67, 359, 89, ! 0, 79, 67, 111, 89, 0, 74, 67, 224, 89, ! 0 }; #endif *************** static const short yyrhs[] = *** 596,674 **** /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const short yyrline[] = { ! 0, 344, 349, 367, 367, 369, 369, 372, 377, 379, ! 380, 381, 389, 393, 401, 403, 405, 407, 408, 409, ! 414, 414, 414, 427, 429, 429, 429, 441, 443, 443, ! 443, 455, 459, 461, 462, 463, 466, 468, 470, 473, ! 475, 477, 479, 483, 487, 490, 493, 496, 500, 502, ! 505, 508, 512, 514, 520, 523, 526, 529, 531, 535, ! 539, 543, 547, 549, 553, 555, 557, 559, 561, 563, ! 565, 567, 569, 571, 573, 575, 577, 579, 579, 586, ! 586, 593, 593, 593, 603, 603, 614, 621, 632, 639, ! 640, 642, 644, 644, 657, 662, 664, 680, 687, 689, ! 692, 702, 712, 714, 721, 730, 732, 734, 736, 738, ! 740, 742, 748, 751, 755, 762, 770, 776, 781, 783, ! 784, 785, 792, 795, 797, 800, 808, 817, 827, 832, ! 835, 837, 839, 841, 843, 899, 903, 906, 911, 917, ! 921, 926, 930, 935, 939, 942, 945, 948, 951, 954, ! 959, 963, 966, 969, 972, 975, 980, 984, 987, 990, ! 993, 996, 1001, 1005, 1008, 1011, 1014, 1019, 1023, 1026, ! 1029, 1035, 1041, 1047, 1055, 1061, 1065, 1068, 1074, 1080, ! 1086, 1094, 1100, 1104, 1107, 1110, 1113, 1116, 1119, 1125, ! 1131, 1137, 1145, 1149, 1152, 1155, 1158, 1163, 1167, 1170, ! 1173, 1176, 1179, 1182, 1188, 1194, 1200, 1208, 1212, 1215, ! 1218, 1221, 1227, 1229, 1230, 1231, 1232, 1233, 1234, 1235, ! 1238, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1249, 1251, ! 1252, 1253, 1256, 1258, 1259, 1260, 1263, 1265, 1266, 1267, ! 1270, 1272, 1273, 1274, 1277, 1279, 1280, 1281, 1282, 1283, ! 1284, 1285, 1288, 1290, 1291, 1292, 1293, 1294, 1295, 1296, ! 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1308, 1311, ! 1336, 1338, 1341, 1345, 1348, 1351, 1355, 1360, 1362, 1367, ! 1369, 1371, 1377, 1379, 1382, 1384, 1387, 1390, 1394, 1394, ! 1403, 1410, 1410, 1419, 1426, 1429, 1433, 1436, 1440, 1445, ! 1448, 1452, 1455, 1457, 1459, 1461, 1468, 1470, 1471, 1472, ! 1475, 1477, 1482, 1484, 1484, 1488, 1493, 1497, 1500, 1502, ! 1507, 1511, 1514, 1514, 1520, 1523, 1523, 1528, 1530, 1533, ! 1535, 1538, 1541, 1545, 1549, 1549, 1549, 1580, 1580, 1580, ! 1614, 1616, 1621, 1624, 1629, 1631, 1633, 1634, 1641, 1643, ! 1646, 1652, 1654, 1655, 1658, 1664, 1666, 1668, 1670, 1677, ! 1683, 1685, 1687, 1689, 1692, 1695, 1699, 1702, 1706, 1709, ! 1719, 1719, 1726, 1730, 1730, 1734, 1738, 1738, 1743, 1743, ! 1750, 1753, 1755, 1763, 1765, 1768, 1770, 1775, 1778, 1783, ! 1785, 1787, 1791, 1806, 1810, 1820, 1823, 1828, 1830, 1835, ! 1837, 1841, 1843, 1847, 1851, 1855, 1860, 1864, 1868, 1878, ! 1880, 1885, 1890, 1893, 1897, 1897, 1905, 1908, 1911, 1916, ! 1920, 1926, 1928, 1931, 1933, 1937, 1940, 1944, 1947, 1949, ! 1951, 1953, 1959, 1962, 1964, 1966, 1969, 1979, 1981, 1982, ! 1986, 1989, 1991, 1992, 1993, 1994, 1997, 1999, 2002, 2003, ! 2006, 2008, 2009, 2010, 2011, 2014, 2016, 2019, 2021, 2022, ! 2023, 2026, 2029, 2038, 2043, 2061, 2076, 2078, 2083, 2085, ! 2088, 2102, 2105, 2108, 2112, 2114, 2121, 2123, 2126, 2144, ! 2151, 2157, 2160, 2160, 2182, 2182, 2202, 2208, 2214, 2216, ! 2220, 2226, 2240, 2249, 2249, 2258, 2270, 2280, 2280, 2280, ! 2290, 2293, 2295, 2295, 2295, 2295, 2295, 2310, 2310, 2317, ! 2320, 2325, 2328, 2331, 2335, 2338, 2341, 2344, 2347, 2351, ! 2355, 2360, 2364, 2376, 2382, 2390, 2393, 2396, 2399, 2414, ! 2418, 2422, 2425, 2430, 2432, 2435, 2437, 2441, 2444, 2450, ! 2453, 2462, 2462, 2473, 2475, 2475, 2475, 2488, 2494, 2496, ! 2506, 2510, 2514, 2517, 2523, 2529, 2534, 2537, 2543, 2550, ! 2556, 2561, 2564, 2570, 2575, 2584, 2584, 2595, 2597, 2614, ! 2617, 2622, 2625, 2629, 2640, 2642, 2643, 2644, 2645, 2646, ! 2660, 2663, 2667, 2674, 2681, 2681, 2681, 2699, 2699, 2712, ! 2712, 2712, 2729, 2729, 2742, 2742, 2754, 2762, 2762, 2774, ! 2782, 2782, 2795, 2804, 2804, 2820, 2826, 2831, 2834, 2844, ! 2846, 2849, 2851, 2852, 2855, 2860, 2861, 2878, 2882, 2885, ! 2889, 2892, 2893, 2896, 2904, 2910, 2919, 2922, 2926, 2926, ! 2926, 2926, 2956, 2958, 2958, 2961, 2963, 2964, 2965, 2965, ! 2968, 2970, 2973, 2973, 2973, 2991, 2997, 3002, 3007, 3016, ! 3018, 3024, 3026, 3029, 3031, 3032, 3033, 3036, 3039, 3041, ! 3045, 3048, 3055, 3060, 3064, 3068, 3073, 3078, 3078, 3090, ! 3094, 3097, 3103, 3105, 3106, 3107, 3108, 3111, 3112, 3112, ! 3112, 3112, 3112, 3112, 3112, 3113, 3113, 3113, 3113, 3113, ! 3113, 3114, 3114, 3114, 3114, 3114, 3115, 3115, 3118, 3124, ! 3129, 3134, 3140, 3142, 3145, 3147, 3154, 3166, 3171, 3177, ! 3179, 3185, 3190, 3192, 3195, 3197, 3203, 3208, 3214, 3221, ! 3230 }; #endif --- 594,672 ---- /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const short yyrline[] = { ! 0, 342, 346, 353, 353, 355, 355, 358, 363, 365, ! 366, 367, 375, 379, 387, 389, 391, 393, 394, 395, ! 400, 400, 400, 412, 414, 414, 414, 425, 427, 427, ! 427, 438, 442, 444, 445, 446, 449, 451, 453, 456, ! 458, 460, 462, 466, 470, 473, 476, 479, 483, 485, ! 488, 491, 495, 497, 503, 506, 509, 512, 514, 518, ! 522, 526, 530, 532, 536, 538, 540, 542, 544, 546, ! 548, 550, 552, 554, 556, 558, 560, 562, 562, 569, ! 569, 576, 576, 576, 586, 586, 597, 604, 615, 622, ! 623, 624, 626, 626, 639, 644, 646, 660, 666, 668, ! 671, 681, 691, 693, 700, 709, 711, 713, 715, 717, ! 719, 721, 725, 732, 743, 753, 758, 760, 761, 762, ! 769, 772, 774, 777, 785, 794, 804, 809, 812, 814, ! 816, 818, 820, 876, 880, 883, 888, 894, 898, 903, ! 907, 912, 916, 919, 922, 925, 928, 931, 936, 940, ! 943, 946, 949, 952, 957, 961, 964, 967, 970, 973, ! 978, 982, 985, 988, 991, 996, 1000, 1003, 1006, 1012, ! 1018, 1024, 1032, 1038, 1042, 1045, 1051, 1057, 1063, 1071, ! 1077, 1081, 1084, 1087, 1090, 1093, 1096, 1102, 1108, 1114, ! 1122, 1126, 1129, 1132, 1135, 1140, 1144, 1147, 1150, 1153, ! 1156, 1159, 1165, 1171, 1177, 1185, 1189, 1192, 1195, 1198, ! 1204, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1215, 1217, ! 1218, 1219, 1220, 1221, 1222, 1223, 1226, 1228, 1229, 1230, ! 1233, 1235, 1236, 1237, 1240, 1242, 1243, 1244, 1247, 1249, ! 1250, 1251, 1254, 1256, 1257, 1258, 1259, 1260, 1261, 1262, ! 1265, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, ! 1276, 1277, 1278, 1279, 1280, 1281, 1285, 1288, 1313, 1315, ! 1318, 1322, 1325, 1328, 1332, 1337, 1339, 1344, 1346, 1352, ! 1358, 1360, 1363, 1365, 1368, 1371, 1375, 1375, 1384, 1391, ! 1391, 1400, 1407, 1410, 1414, 1417, 1421, 1426, 1429, 1433, ! 1436, 1438, 1440, 1442, 1449, 1451, 1452, 1453, 1456, 1458, ! 1463, 1465, 1465, 1469, 1474, 1478, 1481, 1483, 1488, 1492, ! 1495, 1495, 1501, 1504, 1504, 1509, 1511, 1514, 1516, 1519, ! 1522, 1526, 1530, 1530, 1530, 1561, 1561, 1561, 1595, 1597, ! 1602, 1605, 1610, 1612, 1614, 1615, 1622, 1624, 1627, 1633, ! 1635, 1636, 1639, 1645, 1647, 1649, 1651, 1658, 1664, 1666, ! 1668, 1670, 1673, 1676, 1680, 1683, 1687, 1690, 1700, 1700, ! 1708, 1712, 1712, 1717, 1721, 1721, 1726, 1726, 1733, 1736, ! 1738, 1746, 1748, 1751, 1753, 1770, 1773, 1778, 1780, 1782, ! 1786, 1790, 1794, 1804, 1807, 1812, 1814, 1819, 1821, 1825, ! 1827, 1831, 1836, 1840, 1846, 1851, 1855, 1864, 1866, 1871, ! 1876, 1879, 1883, 1883, 1891, 1894, 1897, 1902, 1906, 1912, ! 1914, 1917, 1919, 1923, 1926, 1930, 1933, 1935, 1937, 1939, ! 1945, 1948, 1950, 1952, 1955, 1965, 1967, 1968, 1972, 1975, ! 1977, 1978, 1979, 1980, 1983, 1985, 1991, 1992, 1995, 1997, ! 1998, 1999, 2000, 2003, 2005, 2008, 2010, 2011, 2012, 2015, ! 2018, 2025, 2034, 2050, 2065, 2067, 2072, 2074, 2077, 2091, ! 2094, 2097, 2101, 2103, 2110, 2112, 2115, 2132, 2139, 2145, ! 2148, 2148, 2169, 2169, 2192, 2198, 2200, 2204, 2210, 2224, ! 2233, 2233, 2242, 2254, 2264, 2264, 2264, 2276, 2279, 2281, ! 2281, 2281, 2281, 2281, 2298, 2298, 2307, 2310, 2315, 2318, ! 2321, 2325, 2334, 2343, 2346, 2349, 2353, 2357, 2362, 2366, ! 2378, 2384, 2386, 2390, 2394, 2394, 2398, 2398, 2404, 2404, ! 2409, 2414, 2414, 2420, 2422, 2425, 2425, 2432, 2435, 2443, ! 2446, 2449, 2452, 2467, 2470, 2474, 2477, 2482, 2484, 2487, ! 2489, 2493, 2496, 2502, 2505, 2514, 2514, 2523, 2525, 2525, ! 2525, 2532, 2538, 2540, 2551, 2555, 2561, 2564, 2570, 2576, ! 2581, 2584, 2590, 2597, 2603, 2608, 2611, 2617, 2622, 2631, ! 2631, 2640, 2642, 2659, 2662, 2667, 2670, 2674, 2685, 2687, ! 2688, 2689, 2690, 2691, 2705, 2708, 2712, 2719, 2726, 2728, ! 2731, 2733, 2736, 2736, 2736, 2753, 2753, 2765, 2765, 2777, ! 2786, 2786, 2802, 2808, 2813, 2816, 2826, 2828, 2831, 2833, ! 2834, 2837, 2842, 2843, 2860, 2864, 2867, 2871, 2874, 2875, ! 2878, 2886, 2892, 2901, 2904, 2908, 2908, 2908, 2908, 2937, ! 2939, 2940, 2940, 2943, 2945, 2948, 2948, 2948, 2965, 2971, ! 2976, 2981, 2990, 2992, 2998, 3000, 3003, 3005, 3006, 3007, ! 3010, 3013, 3015, 3019, 3022, 3029, 3034, 3038, 3042, 3047, ! 3052, 3052, 3064, 3068, 3071, 3077, 3079, 3080, 3081, 3082, ! 3085, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3087, 3087, ! 3087, 3087, 3087, 3087, 3088, 3088, 3088, 3088, 3088, 3089, ! 3089, 3092, 3098, 3103, 3108, 3114, 3116, 3119, 3121, 3128, ! 3140, 3145, 3151, 3153, 3157, 3163, 3168, 3170, 3173, 3175, ! 3181, 3186, 3192, 3199, 3208 }; #endif *************** static const char *const yytname[] = *** 684,716 **** "CASE", "DEFAULT", "BREAK", "CONTINUE", "RETURN", "GOTO", "ASM_KEYWORD", "TYPEOF", "ALIGNOF", "ATTRIBUTE", "EXTENSION", "LABEL", "REALPART", "IMAGPART", "VA_ARG", "CHOOSE_EXPR", "TYPES_COMPATIBLE_P", "PTR_VALUE", ! "PTR_BASE", "PTR_EXTENT", "STRING_FUNC_NAME", "VAR_FUNC_NAME", "ASSIGN", ! "'='", "'?'", "':'", "OROR", "ANDAND", "'|'", "'^'", "'&'", "EQCOMPARE", ! "ARITHCOMPARE", "LSHIFT", "RSHIFT", "'+'", "'-'", "'*'", "'/'", "'%'", ! "UNARY", "PLUSPLUS", "MINUSMINUS", "HYPERUNARY", "POINTSAT", "'.'", ! "'('", "'['", "INTERFACE", "IMPLEMENTATION", "END", "SELECTOR", "DEFS", ! "ENCODE", "CLASSNAME", "PUBLIC", "PRIVATE", "PROTECTED", "PROTOCOL", ! "OBJECTNAME", "CLASS", "ALIAS", "')'", "';'", "'}'", "'~'", "'!'", ! "','", "'{'", "']'", "'@'", "program", "extdefs", "@1", "@2", "extdef", "extdef_1", "datadef", "fndef", "@3", "@4", "@5", "@6", "@7", "@8", "identifier", "unop", "expr", "exprlist", "nonnull_exprlist", "unary_expr", "sizeof", "alignof", "typeof", "cast_expr", "expr_no_commas", "@9", "@10", "@11", "@12", "@13", "primary", "@14", ! "objc_string", "old_style_parm_decls", "old_style_parm_decls_1", ! "lineno_datadecl", "datadecls", "datadecl", "lineno_decl", "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", "typespec_nonattr", "typespec_attr", ! "typespec_reserved_nonattr", "typespec_reserved_attr", "typespec_nonreserved_nonattr", "initdecls", "notype_initdecls", "maybeasm", "initdcl", "@15", "notype_initdcl", "@16", "maybe_attribute", "attributes", "attribute", "attribute_list", --- 682,714 ---- "CASE", "DEFAULT", "BREAK", "CONTINUE", "RETURN", "GOTO", "ASM_KEYWORD", "TYPEOF", "ALIGNOF", "ATTRIBUTE", "EXTENSION", "LABEL", "REALPART", "IMAGPART", "VA_ARG", "CHOOSE_EXPR", "TYPES_COMPATIBLE_P", "PTR_VALUE", ! "PTR_BASE", "PTR_EXTENT", "FUNC_NAME", "ASSIGN", "'='", "'?'", "':'", ! "OROR", "ANDAND", "'|'", "'^'", "'&'", "EQCOMPARE", "ARITHCOMPARE", ! "LSHIFT", "RSHIFT", "'+'", "'-'", "'*'", "'/'", "'%'", "UNARY", ! "PLUSPLUS", "MINUSMINUS", "HYPERUNARY", "POINTSAT", "'.'", "'('", "'['", ! "INTERFACE", "IMPLEMENTATION", "END", "SELECTOR", "DEFS", "ENCODE", ! "CLASSNAME", "PUBLIC", "PRIVATE", "PROTECTED", "PROTOCOL", "OBJECTNAME", ! "CLASS", "ALIAS", "AT_THROW", "AT_TRY", "AT_CATCH", "AT_FINALLY", ! "AT_SYNCHRONIZED", "OBJC_STRING", "')'", "';'", "'}'", "'~'", "'!'", ! "','", "'{'", "']'", "program", "extdefs", "@1", "@2", "extdef", "extdef_1", "datadef", "fndef", "@3", "@4", "@5", "@6", "@7", "@8", "identifier", "unop", "expr", "exprlist", "nonnull_exprlist", "unary_expr", "sizeof", "alignof", "typeof", "cast_expr", "expr_no_commas", "@9", "@10", "@11", "@12", "@13", "primary", "@14", ! "old_style_parm_decls", "old_style_parm_decls_1", "lineno_datadecl", ! "datadecls", "datadecl", "lineno_decl", "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", "typespec_nonattr", ! "typespec_attr", "typespec_reserved_nonattr", "typespec_reserved_attr", "typespec_nonreserved_nonattr", "initdecls", "notype_initdecls", "maybeasm", "initdcl", "@15", "notype_initdcl", "@16", "maybe_attribute", "attributes", "attribute", "attribute_list", *************** static const char *const yytname[] = *** 735,841 **** "maybe_label_decls", "label_decls", "label_decl", "compstmt_or_error", "compstmt_start", "compstmt_nostart", "compstmt_contents_nonempty", "compstmt_primary_start", "compstmt", "simple_if", "if_prefix", "@29", ! "do_stmt_start", "@30", "save_filename", "save_lineno", ! "lineno_labeled_stmt", "c99_block_lineno_labeled_stmt", "lineno_stmt", ! "lineno_label", "select_or_iter_stmt", "@31", "@32", "@33", "@34", ! "@35", "@36", "@37", "@38", "for_init_stmt", "stmt", "label", ! "maybe_type_qual", "xexpr", "asm_operands", "nonnull_asm_operands", ! "asm_operand", "asm_clobbers", "parmlist", "@39", "parmlist_1", "@40", ! "@41", "parmlist_2", "parms", "parm", "firstparm", "setspecs_fp", ! "parmlist_or_identifiers", "@42", "parmlist_or_identifiers_1", ! "identifiers", "identifiers_or_typenames", "extension", "objcdef", ! "identifier_list", "classdecl", "aliasdecl", "classdef", "@43", "@44", ! "@45", "@46", "@47", "@48", "@49", "@50", "@51", "protocoldef", "@52", ! "protocolrefs", "non_empty_protocolrefs", "ivar_decl_list", ! "visibility_spec", "ivar_decls", "ivar_decl", "ivars", "ivar_declarator", "methodtype", "methoddef", "@53", "@54", "@55", ! "methodprotolist", "@56", "methodprotolist2", "@57", "semi_or_error", ! "methodproto", "@58", "@59", "methoddecl", "optarglist", "myxdecls", ! "mydecls", "mydecl", "myparms", "myparm", "optparmlist", "@60", ! "unaryselector", "keywordselector", "selector", "reservedwords", ! "keyworddecl", "messageargs", "keywordarglist", "keywordexpr", ! "keywordarg", "receiver", "objcmessageexpr", "selectorarg", ! "keywordnamelist", "keywordname", "objcselectorexpr", ! "objcprotocolexpr", "objcencodeexpr", 0 }; #endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const short yyr1[] = { ! 0, 93, 93, 95, 94, 96, 94, 97, 98, 98, ! 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, ! 101, 102, 100, 100, 103, 104, 100, 100, 105, 106, ! 100, 100, 107, 107, 107, 107, 108, 108, 108, 108, ! 108, 108, 108, 109, 110, 110, 111, 111, 112, 112, ! 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, ! 114, 115, 116, 116, 117, 117, 117, 117, 117, 117, ! 117, 117, 117, 117, 117, 117, 117, 118, 117, 119, ! 117, 120, 121, 117, 122, 117, 117, 117, 123, 123, ! 123, 123, 124, 123, 123, 123, 123, 123, 123, 123, ! 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, ! 123, 123, 125, 125, 126, 127, 127, 128, 129, 129, ! 129, 129, 130, 130, 130, 130, 131, 132, 133, 134, ! 134, 134, 134, 134, 134, 135, 135, 135, 136, 137, ! 137, 138, 138, 139, 139, 139, 139, 139, 139, 139, ! 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, ! 141, 141, 142, 142, 142, 142, 142, 143, 143, 143, ! 143, 143, 143, 143, 144, 145, 145, 145, 145, 145, ! 145, 146, 147, 147, 147, 147, 147, 147, 147, 147, ! 147, 147, 148, 148, 148, 148, 148, 149, 149, 149, ! 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, ! 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, ! 152, 152, 152, 152, 152, 152, 152, 152, 153, 153, ! 153, 153, 154, 154, 154, 154, 155, 155, 155, 155, ! 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, ! 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, ! 158, 158, 158, 158, 158, 158, 158, 158, 159, 159, ! 160, 160, 161, 162, 162, 163, 164, 164, 164, 164, ! 164, 164, 165, 165, 166, 166, 167, 167, 169, 168, ! 168, 171, 170, 170, 172, 172, 173, 173, 174, 175, ! 175, 176, 176, 176, 176, 176, 177, 177, 177, 177, ! 178, 178, 179, 180, 179, 179, 181, 181, 182, 182, ! 183, 183, 184, 183, 183, 186, 185, 185, 185, 187, ! 187, 188, 188, 188, 190, 191, 189, 193, 194, 192, ! 195, 195, 196, 196, 196, 196, 196, 196, 197, 197, ! 198, 198, 198, 198, 199, 199, 199, 199, 199, 200, ! 200, 200, 200, 200, 201, 201, 202, 202, 203, 203, ! 205, 204, 204, 206, 204, 204, 207, 204, 208, 204, ! 209, 209, 209, 210, 210, 211, 211, 212, 212, 213, ! 213, 213, 213, 214, 214, 214, 214, 214, 214, 215, ! 215, 216, 216, 217, 217, 217, 218, 218, 218, 219, ! 219, 219, 220, 220, 222, 221, 223, 223, 224, 224, ! 224, 225, 225, 226, 226, 227, 227, 228, 228, 228, ! 228, 228, 229, 229, 229, 229, 229, 230, 230, 230, ! 230, 231, 231, 231, 231, 231, 232, 232, 232, 232, ! 233, 233, 233, 233, 233, 234, 234, 235, 235, 235, ! 235, 236, 237, 238, 239, 240, 241, 241, 242, 242, ! 243, 244, 244, 245, 246, 246, 247, 247, 248, 249, ! 250, 250, 252, 251, 254, 253, 255, 256, 257, 257, ! 258, 259, 260, 262, 261, 261, 261, 263, 264, 261, ! 261, 261, 265, 266, 267, 268, 261, 269, 261, 270, ! 270, 271, 271, 271, 271, 271, 271, 271, 271, 271, ! 271, 271, 271, 271, 271, 272, 272, 272, 272, 273, ! 273, 274, 274, 275, 275, 276, 276, 277, 277, 278, ! 278, 280, 279, 281, 282, 283, 281, 281, 284, 284, ! 284, 284, 285, 285, 286, 286, 286, 286, 286, 287, ! 287, 287, 287, 287, 288, 290, 289, 291, 291, 292, ! 292, 293, 293, 294, 295, 295, 295, 295, 295, 295, ! 296, 296, 297, 298, 300, 301, 299, 302, 299, 303, ! 304, 299, 305, 299, 306, 299, 299, 307, 299, 299, ! 308, 299, 299, 310, 309, 309, 311, 311, 312, 313, ! 313, 314, 314, 314, 315, 315, 315, 316, 316, 316, ! 317, 317, 317, 318, 318, 318, 319, 319, 321, 322, ! 323, 320, 324, 325, 324, 326, 326, 326, 327, 326, ! 328, 328, 330, 331, 329, 332, 332, 332, 332, 333, ! 333, 334, 334, 335, 335, 335, 335, 336, 336, 336, ! 337, 337, 338, 338, 338, 339, 339, 340, 339, 341, ! 342, 342, 343, 343, 343, 343, 343, 344, 344, 344, ! 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, ! 344, 344, 344, 344, 344, 344, 344, 344, 345, 345, ! 345, 345, 346, 346, 347, 347, 348, 349, 349, 350, ! 350, 351, 352, 352, 353, 353, 354, 354, 355, 356, ! 357 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ --- 733,839 ---- "maybe_label_decls", "label_decls", "label_decl", "compstmt_or_error", "compstmt_start", "compstmt_nostart", "compstmt_contents_nonempty", "compstmt_primary_start", "compstmt", "simple_if", "if_prefix", "@29", ! "do_stmt_start", "@30", "save_location", "lineno_labeled_stmt", ! "c99_block_lineno_labeled_stmt", "lineno_stmt", "lineno_label", ! "select_or_iter_stmt", "@31", "@32", "@33", "@34", "@35", "@36", "@37", ! "@38", "for_init_stmt", "stmt", "@39", "@40", "objc_try_catch_stmt", ! "@41", "objc_try_stmt", "@42", "objc_catch_list", "objc_catch_block", ! "@43", "objc_finally_block", "label", "maybe_type_qual", "xexpr", ! "asm_operands", "nonnull_asm_operands", "asm_operand", "asm_clobbers", ! "parmlist", "@44", "parmlist_1", "@45", "@46", "parmlist_2", "parms", ! "parm", "firstparm", "setspecs_fp", "parmlist_or_identifiers", "@47", ! "parmlist_or_identifiers_1", "identifiers", "identifiers_or_typenames", ! "extension", "objcdef", "identifier_list", "classdecl", "aliasdecl", ! "superclass", "class_ivars", "classdef", "@48", "@49", "@50", "@51", ! "protocoldef", "@52", "protocolrefs", "non_empty_protocolrefs", ! "ivar_decl_list", "visibility_spec", "ivar_decls", "ivar_decl", "ivars", "ivar_declarator", "methodtype", "methoddef", "@53", "@54", "@55", ! "methodprotolist", "@56", "semi_or_error", "methodproto", "@57", "@58", ! "methoddecl", "optarglist", "myxdecls", "mydecls", "mydecl", "myparms", ! "myparm", "optparmlist", "@59", "unaryselector", "keywordselector", ! "selector", "reservedwords", "keyworddecl", "messageargs", ! "keywordarglist", "keywordexpr", "keywordarg", "receiver", ! "objcmessageexpr", "selectorarg", "keywordnamelist", "keywordname", ! "objcselectorexpr", "objcprotocolexpr", "objcencodeexpr", 0 }; #endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const short yyr1[] = { ! 0, 97, 97, 99, 98, 100, 98, 101, 102, 102, ! 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, ! 105, 106, 104, 104, 107, 108, 104, 104, 109, 110, ! 104, 104, 111, 111, 111, 111, 112, 112, 112, 112, ! 112, 112, 112, 113, 114, 114, 115, 115, 116, 116, ! 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, ! 118, 119, 120, 120, 121, 121, 121, 121, 121, 121, ! 121, 121, 121, 121, 121, 121, 121, 122, 121, 123, ! 121, 124, 125, 121, 126, 121, 121, 121, 127, 127, ! 127, 127, 128, 127, 127, 127, 127, 127, 127, 127, ! 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, ! 127, 127, 129, 130, 130, 131, 132, 132, 132, 132, ! 133, 133, 133, 133, 134, 135, 136, 137, 137, 137, ! 137, 137, 137, 138, 138, 138, 139, 140, 140, 141, ! 141, 142, 142, 142, 142, 142, 142, 142, 143, 143, ! 143, 143, 143, 143, 144, 144, 144, 144, 144, 144, ! 145, 145, 145, 145, 145, 146, 146, 146, 146, 146, ! 146, 146, 147, 148, 148, 148, 148, 148, 148, 149, ! 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, ! 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, ! 152, 152, 152, 152, 152, 153, 153, 153, 153, 153, ! 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, ! 155, 155, 155, 155, 155, 155, 156, 156, 156, 156, ! 157, 157, 157, 157, 158, 158, 158, 158, 159, 159, ! 159, 159, 160, 160, 160, 160, 160, 160, 160, 160, ! 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, ! 161, 161, 161, 161, 161, 161, 162, 162, 163, 163, ! 164, 165, 165, 166, 167, 167, 167, 167, 167, 167, ! 168, 168, 169, 169, 170, 170, 172, 171, 171, 174, ! 173, 173, 175, 175, 176, 176, 177, 178, 178, 179, ! 179, 179, 179, 179, 180, 180, 180, 180, 181, 181, ! 182, 183, 182, 182, 184, 184, 185, 185, 186, 186, ! 187, 186, 186, 189, 188, 188, 188, 190, 190, 191, ! 191, 191, 193, 194, 192, 196, 197, 195, 198, 198, ! 199, 199, 199, 199, 199, 199, 200, 200, 201, 201, ! 201, 201, 202, 202, 202, 202, 202, 203, 203, 203, ! 203, 203, 204, 204, 205, 205, 206, 206, 208, 207, ! 207, 209, 207, 207, 210, 207, 211, 207, 212, 212, ! 212, 213, 213, 214, 214, 215, 215, 216, 216, 216, ! 216, 217, 217, 217, 217, 217, 217, 218, 218, 219, ! 219, 220, 220, 220, 221, 221, 221, 222, 222, 222, ! 223, 223, 225, 224, 226, 226, 227, 227, 227, 228, ! 228, 229, 229, 230, 230, 231, 231, 231, 231, 231, ! 232, 232, 232, 232, 232, 233, 233, 233, 233, 234, ! 234, 234, 234, 234, 235, 235, 235, 235, 236, 236, ! 236, 236, 236, 237, 237, 238, 238, 238, 238, 239, ! 240, 241, 242, 243, 244, 244, 245, 245, 246, 247, ! 247, 248, 249, 249, 250, 250, 251, 252, 253, 253, ! 255, 254, 257, 256, 258, 259, 259, 260, 261, 262, ! 264, 263, 263, 263, 265, 266, 263, 263, 263, 267, ! 268, 269, 270, 263, 271, 263, 272, 272, 273, 273, ! 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, ! 273, 273, 273, 273, 274, 273, 275, 273, 277, 276, ! 276, 279, 278, 280, 280, 282, 281, 283, 283, 284, ! 284, 284, 284, 285, 285, 286, 286, 287, 287, 288, ! 288, 289, 289, 290, 290, 292, 291, 293, 294, 295, ! 293, 293, 296, 296, 296, 296, 297, 297, 298, 298, ! 298, 298, 298, 299, 299, 299, 299, 299, 300, 302, ! 301, 303, 303, 304, 304, 305, 305, 306, 307, 307, ! 307, 307, 307, 307, 308, 308, 309, 310, 311, 311, ! 312, 312, 314, 315, 313, 316, 313, 317, 313, 313, ! 319, 318, 318, 320, 320, 321, 322, 322, 323, 323, ! 323, 324, 324, 324, 325, 325, 325, 326, 326, 326, ! 327, 327, 327, 328, 328, 330, 331, 332, 329, 333, ! 333, 334, 333, 335, 335, 337, 338, 336, 339, 339, ! 339, 339, 340, 340, 341, 341, 342, 342, 342, 342, ! 343, 343, 343, 344, 344, 345, 345, 345, 346, 346, ! 347, 346, 348, 349, 349, 350, 350, 350, 350, 350, ! 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, ! 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, ! 351, 352, 352, 352, 352, 353, 353, 354, 354, 355, ! 356, 356, 357, 357, 357, 358, 359, 359, 360, 360, ! 361, 361, 362, 363, 364 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ *************** static const short yyr2[] = *** 843,850 **** { 0, 0, 1, 0, 2, 0, 3, 1, 1, 1, 1, 5, 2, 3, 4, 4, 2, 2, 2, 1, ! 0, 0, 9, 4, 0, 0, 9, 4, 0, 0, ! 8, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 3, 1, 2, 2, 2, 2, 2, 4, 2, 4, 2, 2, 1, 1, 1, 1, 4, 1, 3, 3, 3, 3, 3, --- 841,848 ---- { 0, 0, 1, 0, 2, 0, 3, 1, 1, 1, 1, 5, 2, 3, 4, 4, 2, 2, 2, 1, ! 0, 0, 8, 4, 0, 0, 8, 4, 0, 0, ! 7, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 3, 1, 2, 2, 2, 2, 2, 4, 2, 4, 2, 2, 1, 1, 1, 1, 4, 1, 3, 3, 3, 3, 3, *************** static const short yyr2[] = *** 852,919 **** 4, 0, 0, 7, 0, 5, 3, 3, 1, 1, 1, 1, 0, 7, 3, 3, 3, 3, 4, 6, 8, 6, 4, 3, 3, 2, 2, 1, 1, 1, ! 1, 1, 2, 3, 1, 0, 1, 3, 1, 1, ! 2, 2, 4, 4, 2, 2, 3, 0, 1, 4, ! 4, 3, 3, 2, 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, 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, 2, 2, 1, - 4, 4, 1, 4, 1, 4, 0, 4, 0, 6, - 3, 0, 6, 3, 0, 1, 1, 2, 6, 1, - 3, 0, 1, 4, 6, 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, 4, 3, 2, 3, 1, 1, 1, 1, - 3, 2, 1, 1, 3, 2, 3, 3, 4, 3, - 4, 3, 2, 1, 1, 2, 1, 2, 1, 2, - 0, 7, 5, 0, 7, 5, 0, 8, 0, 7, - 2, 2, 2, 0, 1, 0, 1, 1, 2, 0, - 3, 2, 4, 3, 4, 3, 1, 1, 2, 1, - 4, 1, 4, 4, 6, 5, 4, 6, 5, 1, - 3, 1, 1, 3, 0, 3, 0, 1, 0, 1, - 2, 1, 1, 1, 3, 2, 3, 4, 3, 2, - 2, 1, 4, 3, 4, 5, 5, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, - 1, 2, 2, 2, 2, 1, 2, 1, 1, 1, - 1, 2, 0, 0, 0, 0, 0, 1, 1, 2, - 3, 1, 2, 1, 1, 5, 1, 1, 2, 2, - 2, 2, 0, 5, 0, 4, 0, 0, 1, 2, - 3, 3, 3, 0, 4, 1, 3, 0, 0, 7, - 5, 2, 0, 0, 0, 0, 12, 0, 6, 2, - 1, 1, 2, 3, 2, 2, 2, 3, 6, 8, - 10, 12, 3, 4, 1, 3, 5, 2, 5, 0, - 1, 0, 1, 0, 1, 1, 3, 4, 7, 1, - 3, 0, 3, 2, 0, 0, 6, 2, 0, 1, - 1, 3, 1, 3, 4, 4, 3, 4, 3, 4, - 4, 3, 4, 3, 1, 0, 3, 1, 2, 1, - 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, - 1, 3, 3, 4, 0, 0, 10, 0, 6, 0, - 0, 12, 0, 8, 0, 6, 2, 0, 8, 4, - 0, 9, 5, 0, 6, 3, 0, 1, 3, 3, - 1, 1, 1, 1, 0, 3, 2, 3, 3, 1, - 0, 1, 4, 1, 3, 2, 1, 1, 0, 0, - 0, 7, 0, 0, 2, 1, 1, 2, 0, 3, - 1, 1, 0, 0, 5, 4, 1, 5, 2, 0, - 2, 0, 1, 1, 1, 2, 2, 4, 2, 2, - 1, 3, 2, 2, 1, 0, 2, 0, 3, 1, - 1, 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, 6, 3, ! 5, 2, 1, 1, 1, 2, 1, 3, 2, 1, ! 1, 4, 1, 1, 1, 2, 2, 1, 4, 4, ! 4 }; /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE --- 850,917 ---- 4, 0, 0, 7, 0, 5, 3, 3, 1, 1, 1, 1, 0, 7, 3, 3, 3, 3, 4, 6, 8, 6, 4, 3, 3, 2, 2, 1, 1, 1, ! 1, 1, 1, 0, 1, 2, 1, 1, 2, 2, ! 4, 4, 2, 2, 2, 0, 1, 4, 4, 3, ! 3, 2, 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, 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, 2, 2, 1, 4, 4, ! 1, 4, 1, 4, 0, 4, 0, 6, 3, 0, ! 6, 3, 0, 1, 1, 2, 6, 1, 3, 0, ! 1, 4, 6, 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, 6, 0, 0, 6, 1, 1, ! 4, 3, 2, 3, 1, 1, 1, 1, 3, 2, ! 1, 1, 3, 2, 3, 3, 4, 3, 4, 3, ! 2, 1, 1, 2, 1, 2, 1, 2, 0, 7, ! 5, 0, 7, 5, 0, 8, 0, 7, 2, 2, ! 2, 0, 1, 0, 1, 1, 2, 0, 3, 2, ! 4, 3, 2, 3, 1, 1, 2, 1, 4, 1, ! 4, 2, 4, 3, 2, 4, 3, 1, 3, 1, ! 1, 3, 0, 3, 0, 1, 0, 1, 2, 1, ! 1, 1, 3, 2, 3, 4, 3, 2, 2, 1, ! 4, 3, 4, 5, 5, 1, 1, 1, 1, 1, ! 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, ! 2, 2, 2, 1, 2, 1, 1, 1, 1, 2, ! 0, 0, 0, 0, 0, 1, 1, 2, 3, 1, ! 2, 1, 1, 5, 1, 1, 2, 2, 2, 2, ! 0, 5, 0, 4, 0, 1, 2, 3, 2, 2, ! 0, 4, 1, 3, 0, 0, 7, 5, 2, 0, ! 0, 0, 0, 12, 0, 6, 2, 1, 1, 2, ! 3, 2, 2, 2, 3, 6, 8, 10, 12, 3, ! 4, 1, 3, 2, 0, 3, 0, 6, 0, 3, ! 1, 0, 3, 2, 1, 0, 6, 2, 0, 3, ! 5, 2, 4, 0, 1, 0, 1, 0, 1, 1, ! 3, 4, 7, 1, 3, 0, 3, 2, 0, 0, ! 6, 2, 0, 1, 1, 3, 1, 3, 4, 4, ! 3, 4, 3, 4, 4, 3, 4, 3, 1, 0, ! 3, 1, 2, 1, 3, 1, 3, 1, 1, 1, ! 1, 1, 1, 1, 1, 3, 3, 4, 2, 0, ! 3, 0, 0, 0, 9, 0, 5, 0, 9, 5, ! 0, 6, 3, 0, 1, 3, 3, 1, 1, 1, ! 1, 0, 3, 2, 3, 3, 1, 0, 1, 4, ! 1, 3, 2, 1, 1, 0, 0, 0, 7, 0, ! 2, 0, 3, 1, 1, 0, 0, 5, 4, 1, ! 5, 2, 0, 2, 0, 1, 1, 1, 2, 2, ! 4, 2, 2, 1, 3, 2, 2, 1, 0, 2, ! 0, 3, 1, 1, 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, 6, 3, 5, 2, 1, 1, 1, 2, 1, ! 3, 2, 1, 1, 1, 4, 1, 1, 1, 2, ! 2, 1, 4, 4, 4 }; /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE *************** static const short yyr2[] = *** 921,2230 **** error. */ static const short yydefact[] = { ! 3, 5, 0, 0, 0, 276, 311, 310, 273, 135, ! 368, 364, 366, 0, 61, 0, 573, 0, 626, 627, ! 0, 0, 579, 606, 0, 606, 0, 0, 19, 4, ! 7, 9, 8, 0, 0, 220, 221, 222, 223, 212, ! 213, 214, 215, 224, 225, 226, 227, 216, 217, 218, ! 219, 127, 127, 0, 143, 150, 270, 272, 271, 141, ! 296, 167, 0, 0, 0, 275, 274, 0, 10, 575, ! 576, 574, 577, 279, 628, 578, 6, 17, 18, 369, ! 365, 367, 0, 0, 32, 33, 35, 34, 580, 0, ! 606, 596, 277, 607, 606, 0, 278, 0, 0, 0, ! 363, 268, 294, 0, 284, 0, 136, 148, 154, 138, ! 170, 137, 149, 155, 171, 139, 160, 165, 142, 177, ! 140, 161, 166, 178, 144, 146, 152, 151, 188, 145, ! 147, 153, 189, 156, 158, 163, 162, 203, 157, 159, ! 164, 204, 168, 186, 195, 174, 172, 169, 187, 196, ! 173, 175, 201, 210, 181, 179, 176, 202, 211, 180, ! 182, 184, 193, 192, 190, 183, 185, 194, 191, 197, ! 199, 208, 207, 205, 198, 200, 209, 206, 0, 0, ! 16, 297, 389, 380, 389, 381, 378, 382, 12, 0, 88, 89, 90, 59, 60, 0, 0, 0, 0, 0, 91, 0, 36, 38, 37, 0, 39, 40, 0, 0, ! 0, 0, 0, 41, 42, 0, 0, 0, 43, 62, ! 0, 0, 64, 46, 48, 111, 0, 0, 107, 108, ! 109, 110, 301, 608, 0, 0, 0, 587, 0, 0, ! 594, 603, 605, 582, 0, 0, 248, 249, 250, 251, ! 244, 245, 246, 247, 414, 0, 240, 241, 242, 243, ! 269, 0, 0, 295, 13, 294, 31, 0, 294, 268, ! 0, 294, 362, 346, 268, 294, 347, 0, 282, 0, ! 340, 341, 0, 0, 0, 0, 0, 370, 0, 373, ! 0, 376, 672, 673, 696, 697, 693, 677, 678, 679, ! 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, ! 690, 691, 692, 694, 695, 0, 0, 674, 675, 629, ! 646, 665, 669, 676, 670, 57, 58, 0, 0, 0, ! 52, 49, 0, 478, 0, 0, 710, 709, 0, 0, ! 0, 0, 112, 51, 0, 0, 0, 53, 0, 55, ! 0, 0, 81, 79, 77, 0, 0, 0, 0, 0, ! 0, 0, 0, 0, 0, 0, 0, 105, 106, 0, ! 0, 44, 0, 0, 0, 474, 466, 0, 50, 308, ! 309, 306, 0, 299, 302, 307, 581, 606, 0, 584, ! 633, 599, 0, 614, 633, 583, 280, 416, 281, 361, ! 0, 0, 128, 0, 565, 359, 268, 269, 0, 0, ! 29, 114, 0, 486, 119, 487, 293, 0, 0, 15, ! 294, 23, 0, 294, 294, 344, 14, 27, 0, 0, ! 294, 397, 391, 240, 241, 242, 243, 236, 237, 238, ! 239, 127, 127, 388, 0, 389, 294, 389, 411, 412, ! 385, 409, 0, 0, 701, 0, 649, 667, 648, 0, ! 671, 0, 0, 0, 0, 95, 94, 0, 0, 702, ! 0, 703, 704, 717, 712, 0, 713, 714, 0, 0, ! 11, 47, 0, 0, 87, 86, 0, 0, 0, 0, ! 75, 76, 74, 73, 72, 70, 71, 65, 66, 67, ! 68, 69, 104, 103, 0, 45, 0, 113, 97, 0, ! 0, 467, 468, 96, 0, 301, 44, 592, 606, 614, ! 0, 0, 597, 602, 0, 0, 0, 268, 294, 415, ! 417, 422, 421, 423, 431, 360, 285, 286, 0, 0, ! 0, 0, 0, 433, 0, 461, 486, 121, 120, 0, ! 291, 345, 0, 0, 21, 290, 343, 25, 0, 372, ! 486, 486, 390, 398, 0, 375, 0, 0, 386, 0, ! 385, 0, 0, 0, 630, 666, 548, 0, 699, 0, ! 0, 0, 92, 63, 706, 708, 0, 711, 0, 705, ! 716, 718, 0, 715, 720, 719, 54, 56, 0, 0, ! 80, 78, 98, 102, 571, 0, 477, 446, 476, 486, ! 486, 486, 486, 0, 455, 0, 487, 441, 450, 469, ! 298, 300, 88, 0, 589, 633, 600, 0, 588, 636, ! 0, 127, 127, 642, 638, 635, 614, 613, 611, 612, ! 595, 614, 619, 616, 127, 127, 0, 604, 425, 541, ! 430, 294, 429, 287, 0, 569, 549, 232, 233, 228, ! 229, 234, 235, 230, 231, 127, 127, 567, 0, 550, ! 552, 566, 0, 0, 0, 434, 432, 487, 117, 127, ! 127, 0, 342, 283, 286, 486, 288, 486, 392, 393, ! 399, 487, 395, 401, 487, 294, 294, 413, 410, 294, ! 0, 0, 645, 665, 220, 221, 222, 223, 212, 213, ! 214, 215, 224, 225, 226, 227, 216, 217, 218, 219, ! 127, 0, 654, 650, 652, 0, 0, 668, 550, 0, ! 0, 0, 0, 0, 707, 82, 85, 470, 0, 447, ! 442, 451, 448, 443, 452, 487, 444, 453, 449, 445, ! 454, 456, 463, 464, 303, 0, 305, 614, 0, 633, ! 585, 0, 0, 0, 0, 637, 0, 0, 620, 620, ! 615, 424, 426, 0, 0, 541, 428, 547, 564, 418, ! 418, 543, 544, 0, 568, 0, 435, 436, 0, 124, ! 0, 125, 0, 315, 313, 312, 292, 487, 0, 487, ! 294, 394, 294, 0, 371, 374, 379, 294, 700, 647, ! 658, 418, 659, 655, 656, 0, 473, 631, 462, 471, ! 0, 99, 0, 101, 328, 88, 0, 0, 325, 0, ! 327, 0, 383, 318, 324, 0, 0, 0, 572, 464, ! 475, 276, 0, 0, 0, 0, 0, 0, 529, 606, ! 606, 524, 486, 0, 126, 127, 127, 0, 0, 511, ! 491, 492, 0, 0, 0, 593, 0, 633, 643, 639, ! 598, 0, 623, 617, 621, 618, 427, 542, 352, 268, ! 294, 353, 294, 348, 349, 294, 561, 419, 422, 268, ! 294, 294, 563, 294, 551, 127, 127, 553, 570, 30, ! 0, 0, 0, 0, 289, 0, 486, 0, 294, 486, ! 0, 294, 377, 294, 294, 664, 0, 660, 472, 479, ! 698, 0, 331, 46, 0, 322, 93, 0, 317, 0, ! 0, 330, 321, 83, 0, 527, 514, 515, 516, 0, ! 0, 0, 530, 0, 487, 512, 0, 0, 133, 482, ! 497, 484, 502, 0, 495, 0, 0, 465, 134, 304, ! 590, 601, 0, 0, 625, 0, 294, 425, 541, 559, ! 294, 351, 294, 355, 560, 420, 425, 541, 562, 545, ! 418, 418, 122, 123, 0, 22, 26, 400, 487, 294, ! 0, 403, 402, 294, 0, 406, 662, 663, 657, 418, ! 100, 0, 333, 0, 0, 319, 320, 0, 0, 525, ! 517, 0, 522, 0, 0, 0, 131, 334, 0, 132, ! 337, 0, 0, 464, 0, 0, 0, 481, 486, 480, ! 501, 0, 513, 633, 586, 641, 640, 644, 624, 0, ! 356, 357, 0, 350, 354, 0, 294, 294, 556, 294, ! 558, 314, 0, 405, 294, 408, 294, 661, 0, 326, ! 323, 0, 523, 0, 294, 129, 0, 130, 0, 0, ! 0, 0, 531, 0, 496, 464, 465, 488, 486, 0, ! 0, 622, 358, 546, 554, 555, 557, 404, 407, 332, ! 526, 533, 0, 528, 335, 338, 0, 0, 485, 532, ! 510, 503, 0, 507, 494, 490, 489, 0, 591, 0, ! 0, 0, 534, 535, 518, 486, 486, 483, 498, 531, ! 509, 464, 500, 0, 0, 533, 0, 0, 487, 487, ! 464, 0, 508, 0, 0, 0, 519, 536, 0, 0, ! 499, 504, 537, 0, 0, 0, 336, 339, 531, 0, ! 539, 0, 520, 0, 0, 0, 0, 505, 538, 521, ! 540, 464, 506, 0, 0, 0 }; static const short yydefgoto[] = { ! 1163, 1, 2, 3, 29, 30, 31, 32, 422, 685, ! 428, 687, 270, 546, 829, 216, 334, 504, 218, 219, ! 220, 221, 33, 222, 223, 489, 488, 486, 837, 487, ! 224, 733, 225, 410, 411, 412, 413, 678, 607, 34, ! 401, 854, 246, 247, 248, 249, 250, 251, 252, 253, ! 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, ! 665, 666, 441, 260, 254, 53, 261, 54, 55, 56, ! 57, 58, 277, 103, 271, 278, 798, 104, 681, 402, ! 263, 60, 382, 383, 384, 61, 796, 902, 831, 832, ! 833, 1004, 834, 924, 835, 836, 1016, 1066, 1115, 1019, ! 1068, 1116, 684, 280, 913, 883, 884, 281, 62, 63, ! 64, 65, 445, 447, 452, 290, 66, 928, 569, 285, ! 286, 443, 689, 692, 690, 693, 450, 451, 255, 397, ! 529, 915, 887, 888, 532, 533, 272, 608, 609, 610, ! 611, 612, 613, 414, 376, 840, 1028, 1032, 510, 511, ! 512, 817, 818, 377, 615, 226, 819, 954, 955, 1021, ! 956, 1023, 415, 549, 1076, 1029, 1077, 1078, 957, 1075, ! 1022, 1130, 1024, 1119, 1148, 1161, 1121, 1101, 860, 861, ! 943, 1102, 1111, 1112, 1113, 1151, 650, 774, 667, 893, ! 1045, 668, 669, 897, 670, 779, 405, 539, 671, 672, ! 605, 227, 68, 89, 69, 70, 71, 519, 867, 390, ! 757, 1033, 625, 393, 636, 759, 72, 394, 92, 73, ! 524, 641, 525, 646, 873, 874, 74, 75, 189, 456, ! 726, 520, 521, 634, 764, 1037, 635, 763, 963, 319, ! 574, 723, 724, 725, 916, 917, 458, 576, 320, 321, ! 322, 323, 324, 470, 471, 585, 472, 338, 228, 475, ! 476, 477, 229, 230, 231 }; static const short yypact[] = { ! 102, 110, 3920, 3920, 36,-32768,-32768,-32768,-32768,-32768, ! 116, 116, 116, 87,-32768, 193,-32768, 210,-32768,-32768, ! 210, 210,-32768, 117, 210, 117, 210, 210,-32768,-32768, ! -32768,-32768,-32768, 208, 333, 3085, 1851, 4122, 2017, 514, ! 425, 760, 1016, 4150, 4207, 4179, 4233, 1159, 1072, 1293, ! 1193,-32768,-32768, 203,-32768,-32768,-32768,-32768,-32768, 116, ! -32768,-32768, 315, 317, 334,-32768,-32768, 3920,-32768,-32768, ! -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 116, ! 116, 116, 3414, 228,-32768,-32768,-32768,-32768,-32768, 60, ! 304, 187,-32768,-32768, 418, 161,-32768, 363, 210, 3072, ! -32768, 89, 116, 389,-32768, 1683,-32768,-32768,-32768, 116, ! -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 116,-32768, ! -32768,-32768,-32768,-32768,-32768,-32768,-32768, 116,-32768,-32768, ! -32768,-32768,-32768,-32768,-32768,-32768, 116,-32768,-32768,-32768, ! -32768,-32768,-32768,-32768,-32768, 116,-32768,-32768,-32768,-32768, ! -32768,-32768,-32768,-32768, 116,-32768,-32768,-32768,-32768,-32768, ! -32768,-32768,-32768, 116,-32768,-32768,-32768,-32768,-32768,-32768, ! -32768,-32768, 116,-32768,-32768,-32768,-32768,-32768, 400, 333, ! -32768,-32768, 225, 264, 225, 276,-32768, 286,-32768, 4312, ! -32768,-32768,-32768,-32768,-32768, 3414, 3414, 331, 348, 355, ! -32768, 210,-32768,-32768,-32768, 3414,-32768,-32768, 1531, 1905, ! 361, 368, 374,-32768,-32768, 435, 3414, 370, 375,-32768, ! 3481, 3548,-32768, 4245, 1116, 379, 2142, 3414,-32768,-32768, ! -32768,-32768, 1246,-32768, 210, 210, 210, 376, 210, 210, ! -32768,-32768,-32768,-32768, 395, 416, 4683, 952, 4696, 1471, ! 700, 804, 856, 1082,-32768, 421, 160, 510, 222, 517, ! -32768, 333, 333, 116,-32768, 116,-32768, 465, 116, 221, ! 1501, 116,-32768,-32768, 89, 116,-32768, 451,-32768, 3723, ! 259, 422, 516, 3704, 479, 483, 1256,-32768, 485,-32768, ! 345,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768,-32768,-32768, 458, 4716,-32768,-32768,-32768, - -32768, 3830, 527,-32768,-32768,-32768,-32768, 3414, 3414, 4716, - -32768,-32768, 502,-32768, 537, 540,-32768,-32768, 4348, 4393, - 4716, 210,-32768,-32768, 542, 3414, 1531,-32768, 1531,-32768, - 3414, 3414, 622,-32768,-32768, 3414, 3414, 3414, 3414, 3414, - 3414, 3414, 3414, 3414, 3414, 3414, 3414,-32768,-32768, 210, - 210, 3414, 3414, 668, 612,-32768, 665, 616,-32768,-32768, - -32768,-32768, 99,-32768, 644,-32768,-32768, 117, 634,-32768, - 651, 635, 643,-32768, 651,-32768,-32768, 359,-32768, 422, - 305, 333,-32768, 719,-32768,-32768, 89, 727, 3146, 650, - -32768,-32768, 1728, 63,-32768,-32768, 693, 400, 400,-32768, - 116,-32768, 1501, 116, 116,-32768,-32768,-32768, 1501, 669, - 116,-32768,-32768, 4683, 952, 4696, 1471, 700, 804, 856, - 1082,-32768, 478, 659, 1040, 225, 116, 225,-32768, 706, - 663,-32768, 345, 4716,-32768, 670, 674, 742,-32768, 527, - -32768, 713, 4774, 4792, 672,-32768,-32768, 3213, 3414, 716, - 681, 4348,-32768,-32768, 731, 698, 4393,-32768, 703, 708, - -32768, 4245, 712, 717, 4245, 4245, 3414, 743, 3414, 3414, - 2552, 1946, 1290, 1257, 1367, 1152, 1152, 452, 452,-32768, - -32768,-32768,-32768,-32768, 718, 375, 709,-32768,-32768, 210, - 2232, 665,-32768,-32768, 724, 1246, 3615, 725, 117,-32768, - 744, 3952,-32768,-32768, 539, 3685, 748, 89, 116,-32768, - -32768,-32768,-32768, 515,-32768,-32768,-32768, 313, 737, 4040, - 3414, 3414, 3280,-32768, 733,-32768,-32768,-32768,-32768, 4068, - -32768, 259, 440, 400,-32768, 780,-32768,-32768, 745,-32768, - -32768,-32768,-32768,-32768, 741,-32768, 746, 3414, 210, 753, - 663, 750, 4429, 1627,-32768,-32768, 4457, 4716,-32768, 4716, - 3414, 4716,-32768,-32768, 375,-32768, 3414,-32768, 716,-32768, - -32768,-32768, 731,-32768,-32768,-32768, 738, 738, 794, 3414, - 1818, 2465,-32768,-32768,-32768, 558, 650,-32768,-32768, 72, - 94, 103, 122, 842,-32768, 758,-32768,-32768,-32768,-32768, - -32768,-32768, 266, 762,-32768, 651,-32768, 615,-32768,-32768, - 333,-32768,-32768,-32768, 250,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768,-32768,-32768,-32768, 766,-32768, 359, 359, - -32768, 116,-32768,-32768, 768,-32768,-32768, 4475, 4600, 1052, - 1381, 4487, 4612, 1664, 1401,-32768,-32768,-32768, 770, 559, - -32768,-32768, 404, 764, 769,-32768,-32768,-32768,-32768, 774, - 781, 2659,-32768,-32768, 840,-32768,-32768,-32768,-32768, 785, - -32768,-32768, 786,-32768,-32768, 116, 116, 4245,-32768, 116, - 793, 210,-32768, 3830, 4475, 4600, 4517, 4632, 1052, 1381, - 1748, 1475, 4487, 4612, 4568, 4665, 1664, 1401, 1782, 1826, - 796, 797,-32768,-32768, 4581, 3810, 66,-32768, 800, 799, - 801, 4816, 812, 2412,-32768,-32768, 2377,-32768, 210,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, ! -32768,-32768,-32768, 2818,-32768, 3414,-32768,-32768, 826, 651, ! -32768, 400, 333, 4312, 4011,-32768, 625, 3861, 572, 572, ! -32768,-32768,-32768, 817, 4094,-32768,-32768,-32768,-32768, 408, ! 414,-32768,-32768, 2921,-32768, 900,-32768,-32768, 66,-32768, ! 400,-32768, 333,-32768,-32768, 4245,-32768,-32768, 2659,-32768, ! 116, 629, 116, 491,-32768,-32768,-32768, 116,-32768,-32768, ! -32768, 408,-32768,-32768,-32768, 816,-32768,-32768, 823,-32768, ! 210,-32768, 3414,-32768,-32768, 861, 210, 1905,-32768, 866, ! 4245, 828, 829,-32768,-32768, 298, 2590, 3414,-32768, 2982, ! -32768, 868, 3414, 874, 837, 841, 3347, 382, 917, 340, ! 366,-32768,-32768, 845,-32768,-32768,-32768, 847, 973,-32768, ! -32768,-32768, 2908, 413, 671,-32768, 855, 651,-32768,-32768, ! -32768, 3414, 886, 852,-32768, 852,-32768,-32768,-32768, 89, ! 116,-32768, 116, 523, 534, 95,-32768,-32768, 116, 89, ! 116, 95,-32768, 116,-32768,-32768,-32768,-32768,-32768,-32768, ! 567, 577, 2412, 66,-32768, 66,-32768, 3414, 232,-32768, ! 3414, 292,-32768, 116, 95,-32768, 583,-32768,-32768,-32768, ! -32768, 4834,-32768, 4221, 2412,-32768,-32768, 2502,-32768, 2728, ! 3414,-32768,-32768, 2377, 4754,-32768,-32768,-32768,-32768, 851, ! 3414, 860,-32768, 878,-32768,-32768, 400, 333,-32768,-32768, ! -32768,-32768,-32768, 880, 932, 2032, 91,-32768,-32768,-32768, ! -32768,-32768, 882, 100, 4245, 3414, 116, 408, 513,-32768, ! 116,-32768, 116,-32768,-32768, 116, 414, 414,-32768,-32768, ! 408, 414,-32768,-32768, 864,-32768,-32768,-32768,-32768, 4871, ! 3414,-32768,-32768, 4871, 3414,-32768,-32768,-32768,-32768, 408, ! -32768, 3414,-32768, 869, 2728,-32768,-32768, 4221, 3414,-32768, ! -32768, 879,-32768, 3414, 921, 585,-32768, 578, 601,-32768, ! 822, 901, 904,-32768, 905, 3414, 2322,-32768,-32768,-32768, ! -32768, 3414,-32768, 651,-32768,-32768,-32768,-32768, 4245, 572, ! 523, 534, 462,-32768,-32768, 4094, 116, 95,-32768, 95, ! -32768,-32768, 629,-32768, 4871,-32768, 4871,-32768, 4730,-32768, ! -32768, 4889,-32768, 21, 116,-32768, 1501,-32768, 1501, 3414, ! 3414, 956, 2908, 895,-32768,-32768,-32768,-32768,-32768, 896, ! 915,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, ! -32768, 79, 911,-32768,-32768,-32768, 913, 916,-32768,-32768, ! -32768,-32768, 914,-32768,-32768,-32768,-32768, 918,-32768, 934, ! 210, 61, 920,-32768,-32768,-32768,-32768,-32768,-32768, 3414, ! -32768,-32768,-32768, 3414, 922, 79, 929, 79,-32768,-32768, ! -32768, 930,-32768, 923, 995, 113,-32768,-32768, 816, 816, ! -32768,-32768,-32768, 949, 1009, 942,-32768,-32768, 3414, 3414, ! -32768, 415,-32768, 941, 950, 953, 1025,-32768,-32768,-32768, ! -32768,-32768,-32768, 1042, 1043,-32768 }; static const short yypgoto[] = { ! -32768,-32768,-32768,-32768, 134,-32768, -486,-32768,-32768,-32768, ! -32768,-32768,-32768,-32768, -17,-32768, 124, 535, -330, 417, ! -32768,-32768,-32768, -77, 1084,-32768,-32768,-32768,-32768,-32768, ! -32768,-32768,-32768, -411,-32768, 639,-32768,-32768, -55, 497, ! -400, -831, 31, 73, 40, 109, 170, 237, 133, 164, ! -477, -449, -496, -489, -395, -340, -480, -467, -499, -482, ! 507, 512, -456, -232,-32768, -732, -244, 940, 1087, 1111, ! 1423,-32768, -754, -177, -278, 509,-32768, 673,-32768, 412, ! 16, 7,-32768, 555,-32768, 1185, 275,-32768, -686,-32768, ! 154,-32768, -778,-32768,-32768, 247,-32768,-32768,-32768,-32768, ! -32768,-32768, -140, 242, -731, 125, -226, 69,-32768,-32768, ! -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 521, -132, ! -32768, 640,-32768,-32768, 192, 191, 652, 538, 431,-32768, ! -32768, -700, -357, -389, -632,-32768, 391,-32768,-32768,-32768, ! -32768,-32768,-32768, -368,-32768,-32768, -682, 26,-32768,-32768, ! 594, -728,-32768, 291,-32768,-32768, -730,-32768,-32768,-32768, ! -32768,-32768, 809, -487, 32, -910, -416, -241,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, ! -32768, -916, -11,-32768, -14,-32768, 464,-32768, -750,-32768, ! -32768, 541, 543,-32768,-32768, 454, -410,-32768,-32768,-32768, ! -32768, 3,-32768, 518,-32768,-32768,-32768,-32768,-32768,-32768, ! -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -12, 108, ! -490,-32768, 486,-32768, 357, 96, -465,-32768,-32768,-32768, ! -32768, -382,-32768,-32768,-32768,-32768, 500,-32768,-32768, 373, ! -32768,-32768,-32768, 419,-32768, 139, 436,-32768, 568, 574, ! -289,-32768, -306,-32768,-32768, 561, 677,-32768,-32768,-32768, ! -32768, 678,-32768,-32768,-32768 }; ! #define YYLAST 4950 static const short yytable[] = { ! 88, 423, 282, 90, 91, 67, 67, 94, 531, 88, ! 98, 554, 526, 96, 556, 460, 772, 557, 59, 59, ! 553, 857, 631, 859, 877, 408, 79, 80, 81, 627, ! 417, 958, 459, 35, 35, 629, 900, 407, 279, 632, ! 530, 505, 37, 37, 547, 183, 185, 187, 882, 469, ! 474, 109, 288, 118, 442, 127, 633, 136, 932, 145, ! 899, 154, 661, 163, -116, 172, 181, 815, 1091, 644, ! 67, 858, 661, -457, 720, 36, 36, 714, 237, 886, ! 892, 244, 241, 59, 715, 918, 181, 181, 181, 1109, ! 662, 721, 1030, 718, 617, -458, 712, 9, 35, 661, ! 662, 1035, -1, 105, -459, 1092, 719, 37, 1125, 859, ! -2, 38, 38, 1071, 233, 59, 181, 59, 325, 326, ! 15, 77, 78, -460, 713, 181, 15, 662, 331, 753, ! 857, 93, 256, 93, 181, 41, 41, 76, 584, 343, ! 36, 258, 614, 181, 663, 1126, 766, 15, 1110, 234, ! 378, 1006, 181, -116, 663, 82, 816, 858, -437, 1031, ! 1144, 181, 540, 268, 269, 1104, 42, 42, 106, 633, ! 181, 17, 39, 39, 257, 985, 38, 986, 716, 181, ! -438, 663, 588, 514, 330, 1036, 505, 592, 515, -439, ! 788, 15, 1015, 740, 743, 746, 749, 1145, 93, 664, ! 41, 188, 93, 1131, 801, 722, 217, 803, -440, 664, ! 259, 1132, 442, 84, 85, 381, 984, 386, 387, 388, ! 1140, 391, 392, 245, 59, 720, 1060, 406, 714, 9, ! 115, 42, 1153, 717, 238, 715, 664, 39, 1003, 40, ! 40, 1100, 721, 758, 718, 751, 242, 712, 283, 1046, ! 234, 1162, 15, 15, 855, 239, 584, 719, 839, 771, ! 531, 83, 109, 15, 118, 631, 127, 864, 136, 618, ! 181, 856, 109, 449, 118, 713, 99, 240, 869, 990, ! 1048, 1050, 632, 648, 895, 59, 86, 714, 180, 444, ! 59, 87, 773, 645, 715, 1083, 232, 661, 454, 284, ! 256, 896, 59, 718, 40, 256, 712, 18, 19, 258, ! 903, 644, 905, 564, 258, 566, 719, 433, 84, 85, ! 84, 85, -634, 15, 479, 662, 435, 424, 269, 716, ! 399, 400, 59, 337, 713, 772, 100, 84, 85, 994, ! 857, 267, 257, 929, 772, 59, 448, 257, 84, 85, ! 754, 235, 502, 503, 287, 755, 59, 814, 17, 434, ! 268, 269, 59, 855, 59, 826, 289, 930, 741, 744, ! 747, 750, 236, 268, 269, 517, 291, 866, 259, 663, ! 856, 268, 269, 259, 717, 84, 85, -35, 716, 535, ! 583, 86, 101, 86, 17, 436, 87, 460, 87, 327, ! 906, 102, 909, 100, 273, 182, 423, 184, 1146, 1147, ! 86, 100, 878, -34, 459, 87, 328, 100, 527, 439, ! 17, 86, 59, 329, 186, 863, 87, 528, 269, 339, ! 6, 7, 8, 129, 664, 449, 340, 256, 10, 11, ! 12, 940, 341, 717, 578, 342, 258, 444, 243, 109, ! 440, 118, 234, 127, 344, 136, 437, 1014, 86, 274, ! 59, 84, 85, 87, 345, 331, 389, 879, 275, 59, ! 537, 373, 17, 889, 264, 433, 880, 269, 265, 257, ! 395, 276, 890, 269, 435, 962, 399, 400, 784, 881, ! 268, 269, 604, 785, 100, 93, 506, 959, 381, 1155, ! 396, 1052, 345, -580, 1156, 398, 626, -580, 424, 269, ! -257, 364, 365, 366, 262, 259, 100, 434, 111, 6, ! 7, 8, 124, 438, 682, 120, 453, 10, 11, 12, ! 972, 269, 544, 403, 86, 645, 419, 59, 910, 87, ! 420, 59, 95, 59, 97, 15, 1082, 429, 178, 179, ! 101, 449, 35, 436, 739, 742, 433, 748, 256, 102, ! 1043, 37, 1044, -396, -396, 435, 1039, 258, 661, 430, ! 657, 446, 879, 855, 461, 100, 273, 439, 771, 531, ! 657, 880, 269, 651, 269, 282, 465, 771, 531, 59, ! 856, 970, 269, 59, 36, 59, 662, 59, 434, -256, ! 257, 426, 972, 269, 704, 265, 267, 657, 440, -286, ! 598, 773, 658, 706, 437, 901, 637, 638, 639, 871, ! 773, 466, 658, -286, 467, 640, 93, 480, 872, 872, ! 38, 274, 100, 273, 436, 967, 259, 347, 349, 335, ! 275, 1138, 1139, 737, 782, 976, 705, 738, 783, 658, ! 663, 1080, 982, 276, 41, 1094, 420, 1095, 439, 551, ! 552, 908, 983, -286, 673, 674, 265, -286, 998, -84, ! 1065, 425, 999, 109, 420, 127, 907, 145, 507, 163, ! 404, 438, 707, 416, 808, 42, 1067, 418, 274, 440, ! 265, 39, 637, 638, 639, 437, 508, 275, 509, 537, ! 513, 760, 637, 638, 639, 664, 710, 8, 124, 659, ! 276, 870, 516, 10, 11, 12, 84, 85, 518, 659, ! 109, 838, 118, -632, 127, 522, 136, 523, 145, 538, ! 154, 15, 163, 541, 172, 545, 852, 711, 550, 423, ! 59, 1041, 1042, 708, 562, 558, 659, 455, 637, 638, ! 639, 567, 568, 575, 572, 704, 862, 960, 40, 573, ! 464, 581, 438, 586, 706, 6, 7, 8, 133, 59, ! 1018, 478, 587, 10, 11, 12, 660, 482, 590, 483, ! 59, 577, 591, 59, 35, 378, 660, 594, 534, 86, ! 599, 15, 595, 37, 87, 35, 596, 705, 433, 59, ! 603, 597, 602, 920, 37, 657, 1017, 435, 620, 922, ! 709, 8, 129, 660, 704, 624, 628, 10, 11, 12, ! 647, 653, 852, 706, 676, 686, 36, 695, 582, 688, ! 941, 537, 696, 707, 701, 555, 404, 36, 96, 699, ! 434, 735, 559, 409, 752, -258, 756, 658, 885, 891, ! 267, 770, 777, -286, 781, 786, 705, 710, 565, 789, ! 787, 537, 38, 8, 133, 862, 791, -286, 267, 10, ! 11, 12, 911, 38, 800, 802, 436, 853, 59, 807, ! 914, 810, 812, 820, 571, 821, 41, 15, 711, 783, ! 268, 269, 707, 35, 708, 59, 823, 41, 865, 872, ! 439, 876, 37, 898, 975, 59, 816, -286, -32, 375, ! 256, -286, 908, 925, 926, -33, 710, 42, 927, 258, ! 256, 935, 936, 39, 652, 942, 937, 961, 42, 258, ! 945, 440, 948, 965, 39, 36, 1010, 437, 560, 561, ! 649, 966, 425, 425, 659, 1012, 1013, 711, 1025, 1026, ! 1051, 337, 257, 708, 1034, 1059, 5, 93, 93, 8, ! 111, 709, 257, 853, 1062, 10, 11, 12, 1064, 1069, ! 939, 38, 1070, 1072, 1098, 107, 112, 116, 121, 1103, ! 1107, 14, 181, 143, 148, 152, 157, 1108, 259, 949, ! 40, 950, 951, 952, 953, 41, 1114, 1117, 259, 1120, ! 1118, 40, 1123, 1122, 438, 1143, 17, 1142, 729, 1127, ! 730, 660, 732, 1134, 1136, 1141, 1020, 1149, 630, 1150, ! 709, 6, 7, 8, 138, 1157, 42, 1152, 23, 10, ! 11, 12, 39, 25, 1158, 1160, 399, 400, 1159, 534, ! 534, 431, 1164, 1165, 5, 399, 400, 8, 9, 1047, ! 1049, 623, 548, 10, 11, 12, 679, 6, 7, 8, ! 124, 680, 683, 775, 1011, 10, 11, 12, 914, 14, ! 621, 15, 16, 904, 536, 862, 657, 6, 7, 8, ! 165, 1005, 931, 15, 563, 10, 11, 12, 59, 8, ! 138, 700, 1040, 1124, 17, 10, 11, 12, 987, 40, ! 992, -259, 1105, 35, 570, 619, 698, 804, 805, 919, ! 1106, 806, 37, 1137, 1135, 776, 23, 727, 658, 728, ! 780, 25, 108, 113, 117, 122, 875, 767, 761, 762, ! 144, 149, 153, 158, 765, 1081, 868, 1063, 1057, 809, ! 702, 768, 769, 813, 0, 36, 703, 734, 589, 1073, ! 125, 130, 134, 139, 593, 1079, 0, -265, 161, 166, ! 170, 175, 778, 778, 6, 7, 8, 160, 0, 0, ! 534, 534, 10, 11, 12, 0, 790, 792, 0, 367, ! 368, 38, 369, 370, 371, 372, 107, 112, 116, 121, ! 15, 0, 0, 1096, 1097, 0, 1099, 0, 6, 7, ! 8, 174, 534, 0, 0, 41, 10, 11, 12, 362, ! 363, 364, 365, 366, 0, 659, 0, 811, 0, 912, ! 110, 114, 119, 123, 128, 132, 137, 141, 146, 150, ! 155, 159, 164, 168, 173, 177, 42, 0, 0, 0, ! 0, 0, 39, 1099, -264, 0, 0, 1133, 0, 84, ! 85, 6, 7, 379, 380, 0, 0, 431, 0, 0, ! 5, 630, 0, 8, 9, 0, 0, 0, 0, 10, ! 11, 12, 1099, 1154, 971, 973, 0, 0, -267, 0, ! 0, 0, 660, 0, 0, 14, 0, 15, 16, 0, ! 0, 0, 968, 0, 969, 0, 0, 974, 6, 7, ! 8, 169, 977, 978, 0, 979, 10, 11, 12, 40, ! 17, 359, 360, 361, 362, 363, 364, 365, 366, 616, ! 991, 0, 86, 995, 15, 996, 997, 87, 0, 0, ! 0, 0, 23, 108, 113, 117, 122, 25, 0, 0, ! 0, 432, -387, 358, 359, 360, 361, 362, 363, 364, ! 365, 366, 946, 947, 0, 677, 0, 0, 534, 534, ! 0, 125, 130, 134, 139, 0, 0, 534, 534, 691, ! 694, 534, 534, 107, 112, 116, 121, 0, -266, 0, ! 0, 0, 404, 0, 404, 0, 6, 7, 8, 129, ! 534, 0, 980, 981, 10, 11, 12, 0, 0, 0, ! 0, 1053, 0, 0, 0, 1055, 6, 7, 8, 165, ! 0, 462, 463, 0, 10, 11, 12, 385, 616, 616, ! 745, 616, 360, 361, 362, 363, 364, 365, 366, 481, ! 0, 971, 973, 973, 484, 485, 0, 0, 0, 490, ! 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, ! 501, 0, 0, 0, 0, 0, 0, 0, 1084, 1085, ! 0, 1086, 126, 131, 135, 140, 1087, 0, 1088, 0, ! 162, 167, 171, 176, 0, 5, 1093, 0, 8, 120, ! 6, 7, 8, 138, 10, 11, 12, 0, 10, 11, ! 12, 0, 0, 0, 797, 0, 799, 0, 0, 0, ! 14, 0, 409, 0, 0, -486, -486, -486, -486, -486, ! 0, 0, 0, 0, -486, -486, -486, 0, 0, 0, ! 108, 113, 117, 122, 0, 17, 0, 0, 0, 0, ! -486, 0, 332, 0, 190, 5, 0, 0, 8, 9, ! 191, 192, 0, 193, 10, 11, 12, 23, 125, 130, ! 134, 139, 25, 0, 0, -486, 0, 0, 0, 0, ! 14, 194, 15, 16, 0, 195, 196, 197, 198, 199, ! 0, 0, 600, 601, 200, 0, 0, -486, 0, 0, ! 201, 0, -486, 202, 0, 17, 0, 0, 203, 204, ! 205, -115, 0, 0, 206, 207, 0, 107, 112, 208, ! 209, 143, 148, 0, 210, 0, 211, 23, 0, 0, ! 0, 212, 25, 0, 0, 0, 0, 0, 213, 214, ! 0, 333, 0, 215, 0, 0, 0, 0, 409, 0, ! 0, 5, 6, 7, 8, 9, 0, 0, 0, 0, ! 10, 11, 12, 0, 107, 112, 116, 121, 0, 0, ! 0, 697, 143, 148, 152, 157, 14, 0, 15, 0, ! 0, 944, 0, 0, 731, 0, 0, 0, 0, 6, ! 7, 8, 160, 126, 131, 135, 140, 10, 11, 12, ! 0, 17, 0, 736, 266, 0, 0, -28, -28, -28, ! -28, -28, 0, 0, 0, 15, -28, -28, -28, 0, ! 385, 0, 0, 23, 0, 0, 0, 0, 25, 0, ! 0, 267, -28, 0, -286, 988, 0, -651, 694, 0, ! 0, 0, 0, 0, 0, 0, 0, 0, -286, 409, ! 0, 0, -118, -118, -118, -118, -118, -28, 0, 0, ! 0, -118, -118, -118, 108, 113, 0, 0, 144, 149, ! 0, 268, 269, 6, 7, 8, 133, -118, 0, -28, ! 0, 10, 11, 12, -28, 795, 0, 0, -286, 0, ! 125, 130, -286, -28, 161, 166, 0, 0, 0, 15, ! 0, 0, -118, 0, 0, 0, 0, 6, 7, 8, ! 169, 108, 113, 117, 122, 10, 11, 12, 0, 144, ! 149, 153, 158, 0, -118, 0, 0, 0, 0, -118, ! 0, 0, 0, 15, 0, 0, 0, 830, -118, 125, ! 130, 134, 139, 0, 0, 0, 0, 161, 166, 170, ! 175, 6, 7, 8, 174, 0, 0, 745, 0, 10, ! 11, 12, 110, 114, 128, 132, 146, 150, 164, 168, ! 0, 0, 0, 0, 0, 5, 6, 7, 8, 111, ! 126, 131, 135, 140, 10, 11, 12, 354, 355, 356, ! 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, ! 14, 0, 795, 0, 0, 0, 0, 745, 0, 110, ! 114, 119, 123, 128, 132, 137, 141, 146, 150, 155, ! 159, 164, 168, 173, 177, 17, 921, 0, 190, 0, ! 0, 923, 0, 0, 191, 192, 0, 193, 0, 0, ! 830, 933, 0, 0, 1128, 1129, 934, 23, 0, 0, ! 0, 0, 25, 0, 0, 194, -253, 16, 0, 195, ! 196, 197, 198, 199, 0, 0, 0, 0, 200, 0, ! 0, 0, 0, 0, 201, 964, 0, 202, 0, 0, 0, 0, 203, 204, 205, 0, 0, 0, 206, 207, ! 0, 0, 0, 208, 209, 0, 0, 0, 210, 0, ! 211, 336, 0, 0, 0, 212, 830, 0, 0, 0, ! 0, 989, 213, 214, 993, 0, 0, 215, 357, 358, ! 359, 360, 361, 362, 363, 364, 365, 366, 830, 0, ! 0, 830, 0, 830, 1007, 0, 0, 0, 0, 0, ! 0, 5, 6, 7, 8, 120, 0, 0, 0, 0, ! 10, 11, 12, 1027, 0, -464, -464, 0, 0, 0, ! 0, -464, -464, 0, -464, 0, 14, 0, -464, 1038, ! -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, ! -464, 0, -464, 0, -464, 0, -464, -464, -464, -464, ! -464, 17, 0, 0, 1054, -464, 0, 0, 1056, 0, ! 0, -464, 126, 131, -464, 1058, 162, 167, 830, -464, ! -464, -464, 1061, 23, 0, -464, -464, 0, 25, 0, ! -464, -464, -255, 0, 0, -464, 0, -464, -464, 0, ! 0, 0, -464, -464, 0, 0, 0, -464, 0, -464, ! -464, 0, -464, 0, -464, 0, 0, 0, 0, 0, ! 0, 126, 131, 135, 140, 0, 0, 0, 0, 162, ! 167, 171, 176, 374, 0, -462, -462, -462, -462, -462, ! -462, -462, -462, 0, -462, -462, -462, -462, -462, 0, ! -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, ! -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, ! -462, 0, 0, 0, 0, -462, 0, 0, 0, 0, ! 0, -462, 0, 0, -462, 0, -462, 0, 0, -462, ! -462, -462, 0, 0, 0, -462, -462, 0, 0, 0, ! -462, -462, 0, 0, 0, -462, 0, -462, -462, 0, ! 0, 0, -462, -462, 0, 0, 0, -462, 375, -462, ! -462, 0, -462, 606, -462, -486, -486, -486, -486, -486, ! -486, -486, -486, 0, -486, -486, -486, -486, -486, 0, ! -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, ! -486, -486, -486, -486, -486, 0, -486, -486, -486, -486, ! -486, 0, 0, 0, 0, -486, 0, 0, 0, 0, ! 0, -486, 0, 0, -486, 0, -486, 0, 0, -486, ! -486, -486, 0, 0, 0, -486, -486, 0, 0, 0, ! -486, -486, 0, 0, 0, -486, 0, -486, -486, 0, ! 0, 0, -486, -486, 0, 0, 0, -486, 0, -486, ! -486, 0, -486, 1074, -486, -493, -493, 0, 0, 0, ! 0, -493, -493, 0, -493, 0, 0, 0, -493, 0, ! -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, ! -493, 0, -493, 0, -493, 0, -493, -493, -493, -493, ! -493, 0, 0, 0, 0, -493, 0, 0, 0, 0, ! 0, -493, 0, 0, -493, 0, 0, 0, 0, -493, ! -493, -493, 0, 0, 0, -493, -493, 0, 0, 0, ! -493, -493, 0, 0, 0, -493, 0, -493, -493, 0, ! 0, 0, -493, -493, 0, 0, 0, -493, 0, -493, ! -493, 0, -493, 824, -493, 825, 85, 0, 0, 0, ! 0, 191, 192, 352, 193, 353, 354, 355, 356, 357, ! 358, 359, 360, 361, 362, 363, 364, 365, 366, 0, ! 0, 0, 194, 0, 16, 0, 195, 196, 197, 198, ! 199, 0, 0, 0, 0, 200, 0, 0, 0, 0, ! 0, 201, 0, 0, 202, 0, 0, 0, 0, 203, ! 204, 205, 0, 0, 0, 206, 207, 0, 0, 826, ! 208, 827, 0, 0, 0, 210, 0, 211, 86, 0, ! 0, 0, 212, 87, 0, 0, 0, 0, -316, 213, ! 214, 0, 828, 824, 215, 825, 85, 0, 0, 0, ! 0, 191, 192, 0, 193, 355, 356, 357, 358, 359, ! 360, 361, 362, 363, 364, 365, 366, 0, 0, 0, 0, 0, 194, 0, 16, 0, 195, 196, 197, 198, ! 199, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 201, 0, 0, 202, 0, 0, 0, 0, 203, ! 204, 205, 0, 0, 0, 206, 207, 0, 0, 826, ! 208, 827, 0, 0, 0, 210, 0, 211, 86, 0, ! 0, 0, 212, 87, 0, 0, 0, 0, -384, 213, ! 214, 824, 828, 190, 215, 0, 0, 0, 0, 191, ! 192, 0, 193, 356, 357, 358, 359, 360, 361, 362, ! 363, 364, 365, 366, 0, 0, 0, 0, 0, 0, 194, 0, 16, 0, 195, 196, 197, 198, 199, 0, - 0, 0, 0, 200, 0, -329, 0, 0, 0, 201, - 0, 0, 202, 0, 0, 0, 0, 203, 204, 205, - 0, 0, 0, 206, 207, 0, 0, -329, 208, 209, - 793, 0, 190, 210, 0, 211, 0, 0, 191, 192, - 212, 193, 0, 0, 0, 0, 0, 213, 214, 0, - 828, 0, 215, 0, 0, 0, 0, 0, 0, 194, - 0, 16, 0, 195, 196, 197, 198, 199, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 201, 0, 0, 202, 0, 0, 0, 0, 203, 204, 205, 0, ! 0, 0, 206, 207, 0, 0, 0, 208, 209, 824, ! 0, 190, 210, 0, 211, 0, 0, 191, 192, 212, ! 193, 0, 0, 0, 0, 0, 213, 214, 0, 794, ! 0, 215, 0, 0, 0, 0, 0, 0, 194, 0, ! 16, 0, 195, 196, 197, 198, 199, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 201, 0, 0, 202, 0, 0, 0, 0, 203, 204, 205, 0, 0, 0, 206, 207, 0, 0, 0, 208, 209, 0, 0, ! 0, 210, 0, 211, 0, 0, 0, 0, 212, 0, ! 0, 0, 0, 0, 0, 213, 214, 0, 828, 0, ! 215, 825, 841, 6, 7, 8, 9, 191, 192, 0, ! 193, 10, 11, 12, 0, 0, 0, 0, 0, 0, ! 842, 843, 844, 845, 846, 847, 848, 14, 194, 15, ! 16, 0, 195, 196, 197, 198, 199, 0, 0, 0, ! 0, 200, 0, 0, 0, 0, 0, 201, 0, 0, ! 202, 0, 17, 0, 0, 203, 204, 205, 0, 0, ! 0, 206, 207, 0, 0, 0, 208, 209, 0, 0, ! 0, 210, 0, 211, 849, 0, 0, 0, 212, 850, ! 0, 0, 0, 851, 0, 213, 214, 0, 816, 0, ! 215, 190, 5, 6, 7, 8, 9, 191, 192, 0, ! 193, 10, 11, 12, 0, 5, 6, 7, 8, 9, ! 0, 0, 894, 0, 10, 11, 12, 14, 194, 15, ! 16, 0, 195, 196, 197, 198, 199, 0, 0, 0, ! 14, 200, 15, 0, 0, 0, 0, 201, 0, 0, ! 202, 0, 17, 0, 0, 203, 204, 205, 0, 0, ! 0, 206, 207, 0, 0, 17, 208, 209, 0, 0, ! 0, 210, 0, 211, 23, 825, 85, 0, 212, 25, ! 0, 191, 192, 0, 193, 213, 214, 23, 0, 0, ! 215, 0, 25, 0, 842, 843, 844, 845, 846, 847, ! 848, 0, 194, 0, 16, 0, 195, 196, 197, 198, ! 199, 0, 0, 0, 0, 200, 0, 0, 0, 0, ! 0, 201, 0, 0, 202, 0, 0, 0, 0, 203, ! 204, 205, 0, 0, 0, 206, 207, 0, 0, 0, ! 208, 209, 0, 0, 0, 210, 0, 211, 86, 0, ! 0, 0, 212, 87, 0, 0, 0, 851, 0, 213, ! 214, 0, 816, 0, 215, 190, 5, 0, 0, 8, ! 9, 191, 192, 0, 193, 10, 11, 12, 0, 5, ! 6, 7, 8, 106, 0, 0, 0, 0, 10, 11, ! 12, 14, 194, 15, 16, 0, 195, 196, 197, 198, ! 199, 0, 0, 0, 14, 200, 15, 0, 0, 0, ! 0, 201, 0, 0, 202, 0, 17, 0, 0, 203, ! 204, 205, 0, 0, 0, 206, 207, 0, 0, 17, ! 208, 209, 0, 0, 0, 210, 0, 211, 23, 190, ! 0, 0, 212, 25, 0, 191, 192, 0, 193, 213, ! 214, 23, 0, 0, 215, 0, 25, 0, 0, 0, ! -252, 0, 0, 0, 0, 0, 194, 0, 16, 0, ! 195, 196, 197, 198, 199, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 201, 0, 0, 202, 0, ! 0, 0, 0, 203, 204, 542, 0, 0, 0, 206, 207, 0, 0, 0, 208, 209, 190, 0, 0, 210, 0, 211, 191, 192, 0, 193, 212, 0, 0, 0, ! 0, 0, 0, 213, 214, 0, 0, 543, 215, 0, ! 0, 0, 0, 194, 0, 16, 0, 195, 196, 197, ! 198, 199, 0, 0, 0, 0, 200, 0, 0, 0, ! 0, 0, 201, 0, 0, 202, 0, 0, 0, 0, ! 203, 204, 205, 0, 0, 0, 206, 207, 0, 0, ! 0, 208, 209, 190, 0, 0, 210, 0, 211, 191, ! 192, 0, 193, 212, 0, 0, 0, 0, 0, 0, ! 213, 214, 0, 582, 0, 215, 0, 0, 0, 0, ! 194, 0, 16, 0, 195, 196, 197, 198, 199, 0, ! 0, 0, 0, 200, 0, 0, 0, 0, 0, 201, ! 0, 0, 202, 0, 0, 0, 0, 203, 204, 205, ! 0, 0, 0, 206, 207, 0, 0, 0, 208, 209, ! 190, 0, 0, 210, 0, 211, 191, 192, 0, 193, ! 212, 0, 0, 0, 0, 0, 0, 213, 214, 0, ! 0, 675, 215, 0, 0, 0, 0, 194, 0, 16, ! 0, 195, 196, 197, 198, 199, 0, 0, 0, 0, ! 200, 0, 0, 0, 0, 0, 201, 0, 0, 202, ! 0, 0, 0, 0, 203, 204, 205, 0, 0, 0, ! 206, 207, 0, 0, 0, 208, 209, 190, 0, 0, ! 210, 0, 211, 191, 192, 0, 193, 212, 0, 0, ! 0, 0, 938, 0, 213, 214, 0, 0, 0, 215, ! 0, 0, 0, 0, 194, 0, 16, 0, 195, 196, ! 197, 198, 199, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 201, 0, 0, 202, 0, 0, 0, 0, 203, 204, 205, 0, 0, 0, 206, 207, 0, ! 0, 0, 208, 209, 190, 0, 0, 210, 0, 211, 191, 192, 0, 193, 212, 0, 0, 0, 0, 0, ! 0, 213, 214, 0, 0, 0, 215, 0, 0, 0, 0, 194, 0, 16, 0, 195, 196, 197, 198, 199, ! 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, ! 201, 0, 0, 202, 0, 0, 0, 0, 203, 204, ! 205, 0, 0, 0, 206, 207, 0, 0, 0, 346, ! 209, 190, 0, 0, 210, 0, 211, 191, 192, 0, ! 193, 212, 0, 0, 0, 0, 0, 0, 213, 214, ! 0, 0, 0, 215, 0, 0, 0, 0, 194, 0, ! 16, 0, 195, 196, 197, 198, 199, 0, 0, 0, ! 0, 200, 0, 0, 0, 0, 0, 201, 0, 0, ! 202, 0, 0, 0, 0, 203, 204, 205, 0, 0, ! 0, 206, 207, 0, 0, 0, 348, 209, 622, 0, ! 0, 210, 0, 211, 191, 192, 0, 193, 212, 0, ! 0, 0, 0, 0, 0, 213, 214, 0, 0, 0, ! 215, 0, 0, 0, 0, 194, 0, 16, 0, 195, ! 196, 197, 198, 199, 0, 0, 0, 0, 200, 0, ! 0, 0, 0, 0, 201, 0, 0, 202, 0, 0, ! 0, 0, 203, 204, 205, 0, 0, 0, 206, 207, ! 0, 0, 0, 208, 209, 0, 642, 0, 210, 5, ! 211, 0, 8, 9, 0, 212, 0, 0, 10, 11, ! 12, 0, 213, 214, 0, 427, 0, 215, -24, -24, ! -24, -24, -24, 0, 14, 0, 15, -24, -24, -24, ! 0, 0, 0, 0, 421, 0, 0, -20, -20, -20, ! -20, -20, 267, -24, 0, -286, -20, -20, -20, 17, ! 0, 0, 0, 0, 0, 0, 0, 0, 0, -286, ! 0, 267, -20, 0, -286, 0, 0, 0, -24, 0, ! 0, 23, -610, -610, -610, 0, 25, 0, -286, 0, ! 643, -610, 268, 269, 0, 0, 0, -20, 0, 0, ! -24, 0, 0, 0, 0, -24, 0, 0, 0, -286, ! 0, 0, 0, -286, -24, 0, 0, 0, 0, -20, ! 0, 0, 0, 0, -20, 0, 0, 0, -286, 0, ! 0, 409, -286, -20, -653, -653, -653, -653, -653, 0, ! 0, 0, 0, -653, -653, -653, 0, 0, 0, 0, ! 0, 0, 0, 292, 293, 0, 0, 294, 295, -653, ! 0, -653, 296, 297, 298, 299, 300, 301, 302, 303, ! 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, ! 314, 0, 642, 0, -653, 5, 0, 0, 8, 9, ! 0, 0, 0, 0, 10, 11, 12, 315, 0, 0, ! 0, 0, 0, 0, 0, 0, -653, 0, 0, 0, ! 14, -653, 15, 0, 0, 0, 0, 0, 0, 0, ! -653, 0, 0, 0, 0, 0, 317, 0, 0, 0, ! 0, 318, 0, 0, 0, 17, 0, 0, 0, 457, ! 0, 4, 0, -127, 5, 6, 7, 8, 9, 0, ! 0, 0, 0, 10, 11, 12, 0, 23, -609, -609, ! -609, 0, 25, 0, 0, 0, 643, -609, 13, 14, ! 0, 15, 16, 4, 0, -127, 5, 6, 7, 8, ! 9, 0, 0, 0, 0, 10, 11, 12, 0, 0, ! 0, 0, 0, 0, 17, 0, 0, 18, 19, -127, ! 0, 14, 0, 15, 0, 0, 0, 0, -127, 0, ! 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, ! 24, 25, 26, 27, 0, 28, 17, 0, 0, 18, ! 19, -127, 4, 0, -127, 5, 6, 7, 8, 9, ! -127, 0, 0, 0, 10, 11, 12, 0, 23, 0, ! 0, 0, 0, 25, 0, 0, 0, 28, 0, 0, ! 14, 654, 15, 655, 5, 6, 7, 8, 9, 0, ! 0, 656, 0, 10, 11, 12, 0, 0, 0, 0, ! 0, 0, 0, 0, 0, 17, 0, 0, 0, 14, ! -127, 0, 5, 6, 7, 8, 9, 0, 0, -127, ! 0, 10, 11, 12, 0, 0, 0, 23, 0, 0, ! 0, 0, 25, 0, 17, 654, 28, 14, 5, 6, ! 7, 8, 9, 0, 0, 656, 0, 10, 11, 12, ! 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, ! 0, 25, 17, 14, -548, 0, 5, 6, 7, 8, ! 115, 0, 0, 0, 0, 10, 11, 12, 0, 0, ! 0, 0, 0, 0, 23, 0, 0, 0, 17, 25, ! 0, 14, 0, 15, 5, 6, 7, 8, 142, 0, ! 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, ! 23, 0, 0, 0, 0, 25, 17, 0, -548, 14, ! 0, 15, 0, 5, 6, 7, 8, 151, 0, 0, ! 0, 0, 10, 11, 12, 0, 0, 0, 23, 0, ! 0, 0, 0, 25, 17, 0, 0, -254, 14, 0, ! 15, 5, 6, 7, 8, 147, 0, 0, 0, 0, ! 10, 11, 12, 0, 0, 0, 23, 0, 0, 0, ! 0, 25, 1001, 17, 0, -260, 14, 5, 6, 7, ! 8, 156, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, ! 25, 17, 14, 0, -262, 350, 351, 352, 0, 353, ! 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, ! 364, 365, 366, 23, 0, 0, 0, 17, 25, 350, ! 351, 352, -261, 353, 354, 355, 356, 357, 358, 359, ! 360, 361, 362, 363, 364, 365, 366, 0, 0, 23, ! 0, 0, 1002, 0, 25, 292, 293, 0, -263, 294, ! 295, 0, 0, 0, 296, 297, 298, 299, 300, 301, ! 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, ! 312, 313, 314, 0, 0, 0, 0, 0, 0, 0, ! 0, 292, 293, 0, 0, 294, 295, 0, 0, 315, ! 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, ! 306, 307, 308, 309, 310, 311, 312, 313, 314, 0, ! 316, 0, 0, 0, 0, 0, 0, 0, 317, 0, ! 0, 0, 0, 318, 0, 468, 292, 293, 0, 0, ! 294, 295, 0, 0, 0, 296, 297, 298, 299, 300, ! 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, ! 311, 312, 313, 314, 317, 0, 0, 0, 0, 318, ! 0, 0, 292, 293, 0, 0, 294, 295, 0, 0, ! 473, 296, 297, 298, 299, 300, 301, 302, 303, 304, ! 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, ! 0, 5, 6, 7, 8, 9, 0, 0, 656, 317, ! 10, 11, 12, 0, 318, 0, 315, 0, 0, 5, ! 6, 7, 8, 106, 0, 0, 14, 0, 10, 11, ! 12, 5, 6, 7, 8, 142, 0, 0, 0, 0, ! 10, 11, 12, 0, 14, 317, 15, 0, 0, 0, ! 318, 17, 0, 0, 0, 0, 14, 0, 15, 0, ! 0, 5, 6, 7, 8, 115, 0, 0, 0, 17, ! 10, 11, 12, 23, 0, 0, 0, 0, 25, 0, ! 0, 17, 0, 0, 0, 0, 14, 0, 15, 0, 0, 23, 0, 0, 0, 0, 25, 0, 0, 0, ! 0, 0, 0, 23, 0, 0, 0, 0, 25, 0, ! 0, 17, 5, 6, 7, 8, 151, 0, 0, 0, ! 0, 10, 11, 12, 0, 5, 6, 7, 8, 9, ! 0, 0, 0, 23, 10, 11, 12, 14, 25, 15, ! 0, 0, 0, 0, 5, 6, 7, 8, 111, 0, ! 14, 0, 15, 10, 11, 12, 5, 6, 7, 8, ! 147, 0, 17, 0, 0, 10, 11, 12, 0, 14, ! 0, 0, 0, 0, 0, 17, 5, 6, 7, 8, ! 120, 14, 0, 0, 23, 10, 11, 12, 0, 25, ! 0, 0, 0, 0, 17, 0, 0, 23, 0, 0, ! 0, 14, 25, 0, 0, 0, 17, 0, 0, 5, ! 6, 7, 8, 156, 0, 0, 23, 0, 10, 11, ! 12, 25, 0, 0, 0, 0, 17, 5, 23, 0, ! 8, 106, 0, 25, 14, 0, 10, 11, 12, 0, ! 5, 0, 0, 8, 115, 0, 0, 0, 23, 10, ! 11, 12, 14, 25, 15, 0, 0, 0, 0, 17, ! 5, 0, 0, 8, 9, 14, 0, 15, 0, 10, ! 11, 12, 0, 0, 0, 0, 0, 17, 0, 0, ! 0, 23, 0, 0, 0, 14, 25, 15, 0, 0, ! 17, 0, 0, 0, 0, 0, 0, 0, 0, 23, ! 0, 0, 0, 0, 25, 1008, 0, 0, 0, 0, ! 17, 0, 23, 0, 350, 351, 352, 25, 353, 354, ! 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, ! 365, 366, 23, 0, 0, 0, 0, 25, 350, 351, ! 352, 1009, 353, 354, 355, 356, 357, 358, 359, 360, ! 361, 362, 363, 364, 365, 366, 0, 0, 350, 351, ! 352, 1089, 353, 354, 355, 356, 357, 358, 359, 360, ! 361, 362, 363, 364, 365, 366, 350, 351, 352, 0, ! 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, ! 363, 364, 365, 366, 0, 0, 0, 0, 0, 0, ! 350, 351, 352, 579, 353, 354, 355, 356, 357, 358, ! 359, 360, 361, 362, 363, 364, 365, 366, 350, 351, ! 352, 580, 353, 354, 355, 356, 357, 358, 359, 360, ! 361, 362, 363, 364, 365, 366, 0, 0, 0, 0, ! 0, 0, 15, 0, 0, 822, 0, 0, 0, 0, ! 0, 0, 0, 0, 0, 350, 351, 352, 1000, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, ! 364, 365, 366, 350, 351, 352, 1090, 353, 354, 355, ! 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, ! 366 }; static const short yycheck[] = { ! 17, 279, 179, 20, 21, 2, 3, 24, 397, 26, ! 27, 422, 394, 25, 424, 321, 648, 428, 2, 3, ! 420, 753, 521, 753, 774, 269, 10, 11, 12, 519, ! 274, 862, 321, 2, 3, 521, 790, 269, 178, 521, ! 397, 371, 2, 3, 412, 62, 63, 64, 779, 338, ! 339, 35, 184, 37, 286, 39, 521, 41, 836, 43, ! 788, 45, 539, 47, 1, 49, 59, 1, 47, 525, ! 67, 753, 549, 1, 573, 2, 3, 573, 90, 779, ! 780, 98, 94, 67, 573, 815, 79, 80, 81, 10, ! 539, 573, 1, 573, 510, 1, 573, 8, 67, 576, ! 549, 1, 0, 34, 1, 84, 573, 67, 47, 839, ! 0, 2, 3, 1023, 54, 99, 109, 101, 195, 196, ! 31, 85, 86, 1, 573, 118, 31, 576, 205, 616, ! 862, 23, 101, 25, 127, 2, 3, 3, 468, 216, ! 67, 101, 510, 136, 539, 84, 636, 31, 69, 89, ! 227, 929, 145, 90, 549, 68, 90, 839, 86, 68, ! 47, 154, 406, 68, 69, 1075, 2, 3, 8, 634, ! 163, 54, 2, 3, 101, 903, 67, 905, 573, 172, ! 86, 576, 471, 84, 201, 85, 516, 476, 89, 86, ! 677, 31, 946, 609, 610, 611, 612, 84, 90, 539, ! 67, 67, 94, 1119, 691, 573, 82, 694, 86, 549, ! 101, 1121, 444, 3, 4, 232, 902, 234, 235, 236, ! 1130, 238, 239, 99, 208, 724, 1004, 6, 724, 8, ! 8, 67, 1148, 573, 47, 724, 576, 67, 924, 2, ! 3, 1072, 724, 625, 724, 613, 85, 724, 179, 980, ! 89, 1161, 31, 31, 753, 68, 586, 724, 745, 648, ! 649, 68, 246, 31, 248, 764, 250, 757, 252, 510, ! 263, 753, 256, 290, 258, 724, 68, 90, 764, 47, ! 980, 981, 764, 527, 783, 269, 76, 783, 85, 286, ! 274, 81, 649, 525, 783, 1045, 68, 774, 315, 74, ! 269, 783, 286, 783, 67, 274, 783, 57, 58, 269, ! 797, 767, 799, 445, 274, 447, 783, 286, 3, 4, ! 3, 4, 72, 31, 341, 774, 286, 68, 69, 724, ! 261, 262, 316, 209, 783, 967, 3, 3, 4, 47, ! 1072, 28, 269, 45, 976, 329, 1, 274, 3, 4, ! 84, 47, 369, 370, 90, 89, 340, 725, 54, 286, ! 68, 69, 346, 862, 348, 67, 90, 69, 609, 610, ! 611, 612, 68, 68, 69, 387, 90, 759, 269, 774, ! 862, 68, 69, 274, 724, 3, 4, 47, 783, 84, ! 467, 76, 59, 76, 54, 286, 81, 703, 81, 68, ! 800, 68, 802, 3, 4, 90, 684, 90, 1138, 1139, ! 76, 3, 4, 47, 703, 81, 68, 3, 59, 286, ! 54, 76, 406, 68, 90, 755, 81, 68, 69, 68, ! 5, 6, 7, 8, 774, 452, 68, 406, 13, 14, ! 15, 59, 68, 783, 461, 10, 406, 444, 85, 433, ! 286, 435, 89, 437, 84, 439, 286, 944, 76, 59, ! 444, 3, 4, 81, 89, 542, 90, 59, 68, 453, ! 401, 92, 54, 59, 85, 444, 68, 69, 89, 406, ! 85, 81, 68, 69, 444, 867, 417, 418, 84, 81, ! 68, 69, 509, 89, 3, 387, 372, 84, 515, 84, ! 84, 988, 89, 85, 89, 84, 518, 89, 68, 69, ! 85, 59, 60, 61, 102, 406, 3, 444, 8, 5, ! 6, 7, 8, 286, 84, 8, 68, 13, 14, 15, ! 68, 69, 408, 68, 76, 767, 85, 521, 47, 81, ! 89, 525, 24, 527, 26, 31, 84, 68, 51, 52, ! 59, 568, 521, 444, 609, 610, 525, 612, 527, 68, ! 970, 521, 972, 85, 86, 525, 966, 527, 1045, 86, ! 539, 86, 59, 1072, 47, 3, 4, 444, 967, 968, ! 549, 68, 69, 68, 69, 762, 84, 976, 977, 573, ! 1072, 68, 69, 577, 521, 579, 1045, 581, 525, 85, ! 527, 85, 68, 69, 573, 89, 28, 576, 444, 31, ! 486, 968, 539, 573, 444, 792, 77, 78, 79, 47, ! 977, 84, 549, 45, 84, 86, 518, 85, 768, 769, ! 521, 59, 3, 4, 525, 879, 527, 220, 221, 208, ! 68, 1128, 1129, 85, 85, 889, 573, 89, 89, 576, ! 1045, 1033, 85, 81, 521, 1066, 89, 1068, 525, 417, ! 418, 801, 85, 85, 540, 541, 89, 89, 85, 47, ! 85, 280, 89, 657, 89, 659, 47, 661, 10, 663, ! 268, 444, 573, 271, 701, 521, 85, 275, 59, 525, ! 89, 521, 77, 78, 79, 525, 84, 68, 33, 630, ! 84, 86, 77, 78, 79, 1045, 573, 7, 8, 539, ! 81, 86, 68, 13, 14, 15, 3, 4, 84, 549, ! 704, 738, 706, 72, 708, 90, 710, 84, 712, 10, ! 714, 31, 716, 6, 718, 85, 753, 573, 45, 1017, ! 724, 967, 968, 573, 85, 76, 576, 316, 77, 78, ! 79, 45, 89, 11, 84, 724, 753, 86, 521, 85, ! 329, 89, 525, 47, 724, 5, 6, 7, 8, 753, ! 947, 340, 91, 13, 14, 15, 539, 346, 47, 348, ! 764, 68, 84, 767, 753, 862, 549, 84, 397, 76, ! 47, 31, 84, 753, 81, 764, 84, 724, 767, 783, ! 91, 84, 84, 820, 764, 774, 946, 767, 84, 826, ! 573, 7, 8, 576, 783, 90, 72, 13, 14, 15, ! 72, 84, 839, 783, 91, 45, 753, 86, 90, 84, ! 847, 762, 86, 724, 84, 423, 424, 764, 850, 86, ! 767, 47, 430, 1, 86, 85, 84, 774, 779, 780, ! 28, 85, 84, 31, 84, 91, 783, 724, 446, 85, ! 91, 792, 753, 7, 8, 862, 85, 45, 28, 13, ! 14, 15, 803, 764, 89, 89, 767, 753, 862, 86, ! 811, 85, 85, 84, 453, 84, 753, 31, 724, 89, ! 68, 69, 783, 862, 724, 879, 84, 764, 72, 1039, ! 767, 84, 862, 3, 888, 889, 90, 85, 47, 86, ! 879, 89, 1052, 47, 86, 47, 783, 753, 89, 879, ! 889, 47, 85, 753, 533, 8, 85, 72, 764, 889, ! 85, 767, 85, 47, 764, 862, 85, 767, 441, 442, ! 528, 89, 551, 552, 774, 85, 68, 783, 68, 17, ! 86, 827, 879, 783, 72, 86, 4, 849, 850, 7, ! 8, 724, 889, 839, 85, 13, 14, 15, 47, 68, ! 846, 862, 68, 68, 18, 35, 36, 37, 38, 84, ! 84, 29, 975, 43, 44, 45, 46, 72, 879, 16, ! 753, 18, 19, 20, 21, 862, 85, 84, 889, 85, ! 84, 764, 68, 85, 767, 10, 54, 84, 577, 89, ! 579, 774, 581, 91, 85, 85, 947, 68, 521, 10, ! 783, 5, 6, 7, 8, 84, 862, 85, 76, 13, ! 14, 15, 862, 81, 84, 10, 967, 968, 85, 648, ! 649, 1, 0, 0, 4, 976, 977, 7, 8, 980, ! 981, 516, 413, 13, 14, 15, 549, 5, 6, 7, ! 8, 549, 553, 651, 940, 13, 14, 15, 999, 29, ! 515, 31, 32, 798, 401, 1072, 1045, 5, 6, 7, ! 8, 927, 835, 31, 444, 13, 14, 15, 1072, 7, ! 8, 570, 967, 1110, 54, 13, 14, 15, 906, 862, ! 909, 85, 1076, 1072, 452, 511, 568, 695, 696, 818, ! 1078, 699, 1072, 1127, 1125, 651, 76, 576, 1045, 576, ! 666, 81, 35, 36, 37, 38, 769, 641, 631, 632, ! 43, 44, 45, 46, 634, 1039, 763, 1013, 999, 703, ! 572, 644, 645, 724, -1, 1072, 572, 586, 471, 1025, ! 39, 40, 41, 42, 476, 1031, -1, 85, 47, 48, ! 49, 50, 665, 666, 5, 6, 7, 8, -1, -1, ! 779, 780, 13, 14, 15, -1, 679, 680, -1, 63, ! 64, 1072, 66, 67, 68, 69, 246, 247, 248, 249, ! 31, -1, -1, 1069, 1070, -1, 1072, -1, 5, 6, ! 7, 8, 811, -1, -1, 1072, 13, 14, 15, 57, ! 58, 59, 60, 61, -1, 1045, -1, 720, -1, 807, ! 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, ! 45, 46, 47, 48, 49, 50, 1072, -1, -1, -1, ! -1, -1, 1072, 1119, 85, -1, -1, 1123, -1, 3, ! 4, 5, 6, 7, 8, -1, -1, 1, -1, -1, ! 4, 764, -1, 7, 8, -1, -1, -1, -1, 13, ! 14, 15, 1148, 1149, 883, 884, -1, -1, 85, -1, ! -1, -1, 1045, -1, -1, 29, -1, 31, 32, -1, ! -1, -1, 880, -1, 882, -1, -1, 885, 5, 6, ! 7, 8, 890, 891, -1, 893, 13, 14, 15, 1072, ! 54, 54, 55, 56, 57, 58, 59, 60, 61, 510, ! 908, -1, 76, 911, 31, 913, 914, 81, -1, -1, ! -1, -1, 76, 246, 247, 248, 249, 81, -1, -1, ! -1, 85, 86, 53, 54, 55, 56, 57, 58, 59, ! 60, 61, 855, 856, -1, 546, -1, -1, 967, 968, ! -1, 250, 251, 252, 253, -1, -1, 976, 977, 560, ! 561, 980, 981, 433, 434, 435, 436, -1, 85, -1, ! -1, -1, 970, -1, 972, -1, 5, 6, 7, 8, ! 999, -1, 895, 896, 13, 14, 15, -1, -1, -1, ! -1, 989, -1, -1, -1, 993, 5, 6, 7, 8, ! -1, 327, 328, -1, 13, 14, 15, 232, 609, 610, ! 611, 612, 55, 56, 57, 58, 59, 60, 61, 345, ! -1, 1040, 1041, 1042, 350, 351, -1, -1, -1, 355, ! 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, ! 366, -1, -1, -1, -1, -1, -1, -1, 1046, 1047, ! -1, 1049, 39, 40, 41, 42, 1054, -1, 1056, -1, ! 47, 48, 49, 50, -1, 4, 1064, -1, 7, 8, ! 5, 6, 7, 8, 13, 14, 15, -1, 13, 14, ! 15, -1, -1, -1, 685, -1, 687, -1, -1, -1, ! 29, -1, 1, -1, -1, 4, 5, 6, 7, 8, ! -1, -1, -1, -1, 13, 14, 15, -1, -1, -1, ! 433, 434, 435, 436, -1, 54, -1, -1, -1, -1, ! 29, -1, 1, -1, 3, 4, -1, -1, 7, 8, ! 9, 10, -1, 12, 13, 14, 15, 76, 437, 438, ! 439, 440, 81, -1, -1, 54, -1, -1, -1, -1, ! 29, 30, 31, 32, -1, 34, 35, 36, 37, 38, ! -1, -1, 488, 489, 43, -1, -1, 76, -1, -1, ! 49, -1, 81, 52, -1, 54, -1, -1, 57, 58, ! 59, 90, -1, -1, 63, 64, -1, 657, 658, 68, ! 69, 661, 662, -1, 73, -1, 75, 76, -1, -1, ! -1, 80, 81, -1, -1, -1, -1, -1, 87, 88, ! -1, 90, -1, 92, -1, -1, -1, -1, 1, -1, ! -1, 4, 5, 6, 7, 8, -1, -1, -1, -1, ! 13, 14, 15, -1, 704, 705, 706, 707, -1, -1, ! -1, 567, 712, 713, 714, 715, 29, -1, 31, -1, ! -1, 852, -1, -1, 580, -1, -1, -1, -1, 5, ! 6, 7, 8, 250, 251, 252, 253, 13, 14, 15, ! -1, 54, -1, 599, 1, -1, -1, 4, 5, 6, ! 7, 8, -1, -1, -1, 31, 13, 14, 15, -1, ! 515, -1, -1, 76, -1, -1, -1, -1, 81, -1, ! -1, 28, 29, -1, 31, 906, -1, 90, 909, -1, ! -1, -1, -1, -1, -1, -1, -1, -1, 45, 1, ! -1, -1, 4, 5, 6, 7, 8, 54, -1, -1, ! -1, 13, 14, 15, 657, 658, -1, -1, 661, 662, ! -1, 68, 69, 5, 6, 7, 8, 29, -1, 76, ! -1, 13, 14, 15, 81, 681, -1, -1, 85, -1, ! 659, 660, 89, 90, 663, 664, -1, -1, -1, 31, ! -1, -1, 54, -1, -1, -1, -1, 5, 6, 7, ! 8, 704, 705, 706, 707, 13, 14, 15, -1, 712, ! 713, 714, 715, -1, 76, -1, -1, -1, -1, 81, ! -1, -1, -1, 31, -1, -1, -1, 733, 90, 708, ! 709, 710, 711, -1, -1, -1, -1, 716, 717, 718, ! 719, 5, 6, 7, 8, -1, -1, 1028, -1, 13, ! 14, 15, 657, 658, 659, 660, 661, 662, 663, 664, ! -1, -1, -1, -1, -1, 4, 5, 6, 7, 8, ! 437, 438, 439, 440, 13, 14, 15, 49, 50, 51, ! 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, ! 29, -1, 798, -1, -1, -1, -1, 1078, -1, 704, ! 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, ! 715, 716, 717, 718, 719, 54, 822, -1, 3, -1, ! -1, 827, -1, -1, 9, 10, -1, 12, -1, -1, ! 836, 837, -1, -1, 1115, 1116, 842, 76, -1, -1, ! -1, -1, 81, -1, -1, 30, 85, 32, -1, 34, ! 35, 36, 37, 38, -1, -1, -1, -1, 43, -1, ! -1, -1, -1, -1, 49, 871, -1, 52, -1, -1, ! -1, -1, 57, 58, 59, -1, -1, -1, 63, 64, ! -1, -1, -1, 68, 69, -1, -1, -1, 73, -1, ! 75, 76, -1, -1, -1, 80, 902, -1, -1, -1, ! -1, 907, 87, 88, 910, -1, -1, 92, 52, 53, ! 54, 55, 56, 57, 58, 59, 60, 61, 924, -1, ! -1, 927, -1, 929, 930, -1, -1, -1, -1, -1, ! -1, 4, 5, 6, 7, 8, -1, -1, -1, -1, ! 13, 14, 15, 1, -1, 3, 4, -1, -1, -1, ! -1, 9, 10, -1, 12, -1, 29, -1, 16, 965, ! 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, ! 28, -1, 30, -1, 32, -1, 34, 35, 36, 37, ! 38, 54, -1, -1, 990, 43, -1, -1, 994, -1, ! -1, 49, 659, 660, 52, 1001, 663, 664, 1004, 57, ! 58, 59, 1008, 76, -1, 63, 64, -1, 81, -1, ! 68, 69, 85, -1, -1, 73, -1, 75, 76, -1, ! -1, -1, 80, 81, -1, -1, -1, 85, -1, 87, ! 88, -1, 90, -1, 92, -1, -1, -1, -1, -1, ! -1, 708, 709, 710, 711, -1, -1, -1, -1, 716, ! 717, 718, 719, 1, -1, 3, 4, 5, 6, 7, ! 8, 9, 10, -1, 12, 13, 14, 15, 16, -1, ! 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, ! 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, ! 38, -1, -1, -1, -1, 43, -1, -1, -1, -1, ! -1, 49, -1, -1, 52, -1, 54, -1, -1, 57, ! 58, 59, -1, -1, -1, 63, 64, -1, -1, -1, ! 68, 69, -1, -1, -1, 73, -1, 75, 76, -1, ! -1, -1, 80, 81, -1, -1, -1, 85, 86, 87, ! 88, -1, 90, 1, 92, 3, 4, 5, 6, 7, ! 8, 9, 10, -1, 12, 13, 14, 15, 16, -1, ! 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, ! 28, 29, 30, 31, 32, -1, 34, 35, 36, 37, ! 38, -1, -1, -1, -1, 43, -1, -1, -1, -1, ! -1, 49, -1, -1, 52, -1, 54, -1, -1, 57, ! 58, 59, -1, -1, -1, 63, 64, -1, -1, -1, ! 68, 69, -1, -1, -1, 73, -1, 75, 76, -1, ! -1, -1, 80, 81, -1, -1, -1, 85, -1, 87, ! 88, -1, 90, 1, 92, 3, 4, -1, -1, -1, ! -1, 9, 10, -1, 12, -1, -1, -1, 16, -1, ! 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, ! 28, -1, 30, -1, 32, -1, 34, 35, 36, 37, ! 38, -1, -1, -1, -1, 43, -1, -1, -1, -1, ! -1, 49, -1, -1, 52, -1, -1, -1, -1, 57, ! 58, 59, -1, -1, -1, 63, 64, -1, -1, -1, ! 68, 69, -1, -1, -1, 73, -1, 75, 76, -1, ! -1, -1, 80, 81, -1, -1, -1, 85, -1, 87, ! 88, -1, 90, 1, 92, 3, 4, -1, -1, -1, ! -1, 9, 10, 46, 12, 48, 49, 50, 51, 52, ! 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, ! -1, -1, 30, -1, 32, -1, 34, 35, 36, 37, ! 38, -1, -1, -1, -1, 43, -1, -1, -1, -1, ! -1, 49, -1, -1, 52, -1, -1, -1, -1, 57, ! 58, 59, -1, -1, -1, 63, 64, -1, -1, 67, ! 68, 69, -1, -1, -1, 73, -1, 75, 76, -1, ! -1, -1, 80, 81, -1, -1, -1, -1, 86, 87, ! 88, -1, 90, 1, 92, 3, 4, -1, -1, -1, ! -1, 9, 10, -1, 12, 50, 51, 52, 53, 54, ! 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, ! -1, -1, 30, -1, 32, -1, 34, 35, 36, 37, ! 38, -1, -1, -1, -1, 43, -1, -1, -1, -1, ! -1, 49, -1, -1, 52, -1, -1, -1, -1, 57, ! 58, 59, -1, -1, -1, 63, 64, -1, -1, 67, ! 68, 69, -1, -1, -1, 73, -1, 75, 76, -1, ! -1, -1, 80, 81, -1, -1, -1, -1, 86, 87, ! 88, 1, 90, 3, 92, -1, -1, -1, -1, 9, ! 10, -1, 12, 51, 52, 53, 54, 55, 56, 57, ! 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, 30, -1, 32, -1, 34, 35, 36, 37, 38, -1, ! -1, -1, -1, 43, -1, 45, -1, -1, -1, 49, ! -1, -1, 52, -1, -1, -1, -1, 57, 58, 59, ! -1, -1, -1, 63, 64, -1, -1, 67, 68, 69, ! 1, -1, 3, 73, -1, 75, -1, -1, 9, 10, ! 80, 12, -1, -1, -1, -1, -1, 87, 88, -1, ! 90, -1, 92, -1, -1, -1, -1, -1, -1, 30, -1, 32, -1, 34, 35, 36, 37, 38, -1, -1, ! -1, -1, 43, -1, -1, -1, -1, -1, 49, -1, ! -1, 52, -1, -1, -1, -1, 57, 58, 59, -1, ! -1, -1, 63, 64, -1, -1, -1, 68, 69, 1, ! -1, 3, 73, -1, 75, -1, -1, 9, 10, 80, ! 12, -1, -1, -1, -1, -1, 87, 88, -1, 90, ! -1, 92, -1, -1, -1, -1, -1, -1, 30, -1, ! 32, -1, 34, 35, 36, 37, 38, -1, -1, -1, ! -1, 43, -1, -1, -1, -1, -1, 49, -1, -1, ! 52, -1, -1, -1, -1, 57, 58, 59, -1, -1, ! -1, 63, 64, -1, -1, -1, 68, 69, -1, -1, ! -1, 73, -1, 75, -1, -1, -1, -1, 80, -1, ! -1, -1, -1, -1, -1, 87, 88, -1, 90, -1, ! 92, 3, 4, 5, 6, 7, 8, 9, 10, -1, ! 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, ! 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, ! 32, -1, 34, 35, 36, 37, 38, -1, -1, -1, ! -1, 43, -1, -1, -1, -1, -1, 49, -1, -1, ! 52, -1, 54, -1, -1, 57, 58, 59, -1, -1, ! -1, 63, 64, -1, -1, -1, 68, 69, -1, -1, ! -1, 73, -1, 75, 76, -1, -1, -1, 80, 81, ! -1, -1, -1, 85, -1, 87, 88, -1, 90, -1, ! 92, 3, 4, 5, 6, 7, 8, 9, 10, -1, ! 12, 13, 14, 15, -1, 4, 5, 6, 7, 8, ! -1, -1, 11, -1, 13, 14, 15, 29, 30, 31, ! 32, -1, 34, 35, 36, 37, 38, -1, -1, -1, ! 29, 43, 31, -1, -1, -1, -1, 49, -1, -1, ! 52, -1, 54, -1, -1, 57, 58, 59, -1, -1, ! -1, 63, 64, -1, -1, 54, 68, 69, -1, -1, ! -1, 73, -1, 75, 76, 3, 4, -1, 80, 81, ! -1, 9, 10, -1, 12, 87, 88, 76, -1, -1, ! 92, -1, 81, -1, 22, 23, 24, 25, 26, 27, ! 28, -1, 30, -1, 32, -1, 34, 35, 36, 37, ! 38, -1, -1, -1, -1, 43, -1, -1, -1, -1, ! -1, 49, -1, -1, 52, -1, -1, -1, -1, 57, ! 58, 59, -1, -1, -1, 63, 64, -1, -1, -1, ! 68, 69, -1, -1, -1, 73, -1, 75, 76, -1, ! -1, -1, 80, 81, -1, -1, -1, 85, -1, 87, ! 88, -1, 90, -1, 92, 3, 4, -1, -1, 7, ! 8, 9, 10, -1, 12, 13, 14, 15, -1, 4, ! 5, 6, 7, 8, -1, -1, -1, -1, 13, 14, ! 15, 29, 30, 31, 32, -1, 34, 35, 36, 37, ! 38, -1, -1, -1, 29, 43, 31, -1, -1, -1, ! -1, 49, -1, -1, 52, -1, 54, -1, -1, 57, ! 58, 59, -1, -1, -1, 63, 64, -1, -1, 54, ! 68, 69, -1, -1, -1, 73, -1, 75, 76, 3, ! -1, -1, 80, 81, -1, 9, 10, -1, 12, 87, ! 88, 76, -1, -1, 92, -1, 81, -1, -1, -1, ! 85, -1, -1, -1, -1, -1, 30, -1, 32, -1, ! 34, 35, 36, 37, 38, -1, -1, -1, -1, 43, ! -1, -1, -1, -1, -1, 49, -1, -1, 52, -1, ! -1, -1, -1, 57, 58, 59, -1, -1, -1, 63, ! 64, -1, -1, -1, 68, 69, 3, -1, -1, 73, ! -1, 75, 9, 10, -1, 12, 80, -1, -1, -1, ! -1, -1, -1, 87, 88, -1, -1, 91, 92, -1, ! -1, -1, -1, 30, -1, 32, -1, 34, 35, 36, ! 37, 38, -1, -1, -1, -1, 43, -1, -1, -1, ! -1, -1, 49, -1, -1, 52, -1, -1, -1, -1, ! 57, 58, 59, -1, -1, -1, 63, 64, -1, -1, ! -1, 68, 69, 3, -1, -1, 73, -1, 75, 9, ! 10, -1, 12, 80, -1, -1, -1, -1, -1, -1, ! 87, 88, -1, 90, -1, 92, -1, -1, -1, -1, ! 30, -1, 32, -1, 34, 35, 36, 37, 38, -1, ! -1, -1, -1, 43, -1, -1, -1, -1, -1, 49, ! -1, -1, 52, -1, -1, -1, -1, 57, 58, 59, ! -1, -1, -1, 63, 64, -1, -1, -1, 68, 69, ! 3, -1, -1, 73, -1, 75, 9, 10, -1, 12, ! 80, -1, -1, -1, -1, -1, -1, 87, 88, -1, ! -1, 91, 92, -1, -1, -1, -1, 30, -1, 32, ! -1, 34, 35, 36, 37, 38, -1, -1, -1, -1, ! 43, -1, -1, -1, -1, -1, 49, -1, -1, 52, ! -1, -1, -1, -1, 57, 58, 59, -1, -1, -1, ! 63, 64, -1, -1, -1, 68, 69, 3, -1, -1, ! 73, -1, 75, 9, 10, -1, 12, 80, -1, -1, ! -1, -1, 85, -1, 87, 88, -1, -1, -1, 92, -1, -1, -1, -1, 30, -1, 32, -1, 34, 35, ! 36, 37, 38, -1, -1, -1, -1, 43, -1, -1, ! -1, -1, -1, 49, -1, -1, 52, -1, -1, -1, ! -1, 57, 58, 59, -1, -1, -1, 63, 64, -1, ! -1, -1, 68, 69, 3, -1, -1, 73, -1, 75, ! 9, 10, -1, 12, 80, -1, -1, -1, -1, -1, ! -1, 87, 88, -1, -1, -1, 92, -1, -1, -1, -1, 30, -1, 32, -1, 34, 35, 36, 37, 38, ! -1, -1, -1, -1, 43, -1, -1, -1, -1, -1, ! 49, -1, -1, 52, -1, -1, -1, -1, 57, 58, ! 59, -1, -1, -1, 63, 64, -1, -1, -1, 68, ! 69, 3, -1, -1, 73, -1, 75, 9, 10, -1, ! 12, 80, -1, -1, -1, -1, -1, -1, 87, 88, ! -1, -1, -1, 92, -1, -1, -1, -1, 30, -1, ! 32, -1, 34, 35, 36, 37, 38, -1, -1, -1, ! -1, 43, -1, -1, -1, -1, -1, 49, -1, -1, ! 52, -1, -1, -1, -1, 57, 58, 59, -1, -1, ! -1, 63, 64, -1, -1, -1, 68, 69, 3, -1, ! -1, 73, -1, 75, 9, 10, -1, 12, 80, -1, ! -1, -1, -1, -1, -1, 87, 88, -1, -1, -1, ! 92, -1, -1, -1, -1, 30, -1, 32, -1, 34, ! 35, 36, 37, 38, -1, -1, -1, -1, 43, -1, ! -1, -1, -1, -1, 49, -1, -1, 52, -1, -1, ! -1, -1, 57, 58, 59, -1, -1, -1, 63, 64, ! -1, -1, -1, 68, 69, -1, 1, -1, 73, 4, ! 75, -1, 7, 8, -1, 80, -1, -1, 13, 14, ! 15, -1, 87, 88, -1, 1, -1, 92, 4, 5, ! 6, 7, 8, -1, 29, -1, 31, 13, 14, 15, ! -1, -1, -1, -1, 1, -1, -1, 4, 5, 6, ! 7, 8, 28, 29, -1, 31, 13, 14, 15, 54, ! -1, -1, -1, -1, -1, -1, -1, -1, -1, 45, ! -1, 28, 29, -1, 31, -1, -1, -1, 54, -1, ! -1, 76, 77, 78, 79, -1, 81, -1, 45, -1, ! 85, 86, 68, 69, -1, -1, -1, 54, -1, -1, ! 76, -1, -1, -1, -1, 81, -1, -1, -1, 85, ! -1, -1, -1, 89, 90, -1, -1, -1, -1, 76, ! -1, -1, -1, -1, 81, -1, -1, -1, 85, -1, ! -1, 1, 89, 90, 4, 5, 6, 7, 8, -1, ! -1, -1, -1, 13, 14, 15, -1, -1, -1, -1, ! -1, -1, -1, 3, 4, -1, -1, 7, 8, 29, ! -1, 31, 12, 13, 14, 15, 16, 17, 18, 19, ! 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, ! 30, -1, 1, -1, 54, 4, -1, -1, 7, 8, ! -1, -1, -1, -1, 13, 14, 15, 47, -1, -1, ! -1, -1, -1, -1, -1, -1, 76, -1, -1, -1, ! 29, 81, 31, -1, -1, -1, -1, -1, -1, -1, ! 90, -1, -1, -1, -1, -1, 76, -1, -1, -1, ! -1, 81, -1, -1, -1, 54, -1, -1, -1, 89, ! -1, 1, -1, 3, 4, 5, 6, 7, 8, -1, ! -1, -1, -1, 13, 14, 15, -1, 76, 77, 78, ! 79, -1, 81, -1, -1, -1, 85, 86, 28, 29, ! -1, 31, 32, 1, -1, 3, 4, 5, 6, 7, ! 8, -1, -1, -1, -1, 13, 14, 15, -1, -1, ! -1, -1, -1, -1, 54, -1, -1, 57, 58, 59, ! -1, 29, -1, 31, -1, -1, -1, -1, 68, -1, ! 70, 71, 72, -1, -1, -1, 76, -1, -1, -1, ! 80, 81, 82, 83, -1, 85, 54, -1, -1, 57, ! 58, 59, 1, -1, 3, 4, 5, 6, 7, 8, ! 68, -1, -1, -1, 13, 14, 15, -1, 76, -1, ! -1, -1, -1, 81, -1, -1, -1, 85, -1, -1, ! 29, 1, 31, 3, 4, 5, 6, 7, 8, -1, ! -1, 11, -1, 13, 14, 15, -1, -1, -1, -1, ! -1, -1, -1, -1, -1, 54, -1, -1, -1, 29, ! 59, -1, 4, 5, 6, 7, 8, -1, -1, 68, ! -1, 13, 14, 15, -1, -1, -1, 76, -1, -1, ! -1, -1, 81, -1, 54, 1, 85, 29, 4, 5, ! 6, 7, 8, -1, -1, 11, -1, 13, 14, 15, ! -1, -1, -1, -1, -1, -1, 76, -1, -1, -1, ! -1, 81, 54, 29, 84, -1, 4, 5, 6, 7, ! 8, -1, -1, -1, -1, 13, 14, 15, -1, -1, ! -1, -1, -1, -1, 76, -1, -1, -1, 54, 81, ! -1, 29, -1, 31, 4, 5, 6, 7, 8, -1, ! -1, -1, -1, 13, 14, 15, -1, -1, -1, -1, ! 76, -1, -1, -1, -1, 81, 54, -1, 84, 29, ! -1, 31, -1, 4, 5, 6, 7, 8, -1, -1, ! -1, -1, 13, 14, 15, -1, -1, -1, 76, -1, ! -1, -1, -1, 81, 54, -1, -1, 85, 29, -1, ! 31, 4, 5, 6, 7, 8, -1, -1, -1, -1, ! 13, 14, 15, -1, -1, -1, 76, -1, -1, -1, ! -1, 81, 11, 54, -1, 85, 29, 4, 5, 6, ! 7, 8, -1, -1, -1, -1, 13, 14, 15, -1, ! -1, -1, -1, -1, -1, 76, -1, -1, -1, -1, ! 81, 54, 29, -1, 85, 44, 45, 46, -1, 48, ! 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, ! 59, 60, 61, 76, -1, -1, -1, 54, 81, 44, ! 45, 46, 85, 48, 49, 50, 51, 52, 53, 54, ! 55, 56, 57, 58, 59, 60, 61, -1, -1, 76, ! -1, -1, 91, -1, 81, 3, 4, -1, 85, 7, ! 8, -1, -1, -1, 12, 13, 14, 15, 16, 17, ! 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, ! 28, 29, 30, -1, -1, -1, -1, -1, -1, -1, ! -1, 3, 4, -1, -1, 7, 8, -1, -1, 47, ! 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, ! 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, ! 68, -1, -1, -1, -1, -1, -1, -1, 76, -1, ! -1, -1, -1, 81, -1, 47, 3, 4, -1, -1, ! 7, 8, -1, -1, -1, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, ! 27, 28, 29, 30, 76, -1, -1, -1, -1, 81, ! -1, -1, 3, 4, -1, -1, 7, 8, -1, -1, ! 47, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, ! -1, 4, 5, 6, 7, 8, -1, -1, 11, 76, ! 13, 14, 15, -1, 81, -1, 47, -1, -1, 4, ! 5, 6, 7, 8, -1, -1, 29, -1, 13, 14, ! 15, 4, 5, 6, 7, 8, -1, -1, -1, -1, ! 13, 14, 15, -1, 29, 76, 31, -1, -1, -1, ! 81, 54, -1, -1, -1, -1, 29, -1, 31, -1, ! -1, 4, 5, 6, 7, 8, -1, -1, -1, 54, ! 13, 14, 15, 76, -1, -1, -1, -1, 81, -1, ! -1, 54, -1, -1, -1, -1, 29, -1, 31, -1, ! -1, 76, -1, -1, -1, -1, 81, -1, -1, -1, ! -1, -1, -1, 76, -1, -1, -1, -1, 81, -1, ! -1, 54, 4, 5, 6, 7, 8, -1, -1, -1, ! -1, 13, 14, 15, -1, 4, 5, 6, 7, 8, ! -1, -1, -1, 76, 13, 14, 15, 29, 81, 31, ! -1, -1, -1, -1, 4, 5, 6, 7, 8, -1, ! 29, -1, 31, 13, 14, 15, 4, 5, 6, 7, ! 8, -1, 54, -1, -1, 13, 14, 15, -1, 29, ! -1, -1, -1, -1, -1, 54, 4, 5, 6, 7, ! 8, 29, -1, -1, 76, 13, 14, 15, -1, 81, ! -1, -1, -1, -1, 54, -1, -1, 76, -1, -1, ! -1, 29, 81, -1, -1, -1, 54, -1, -1, 4, ! 5, 6, 7, 8, -1, -1, 76, -1, 13, 14, ! 15, 81, -1, -1, -1, -1, 54, 4, 76, -1, ! 7, 8, -1, 81, 29, -1, 13, 14, 15, -1, ! 4, -1, -1, 7, 8, -1, -1, -1, 76, 13, ! 14, 15, 29, 81, 31, -1, -1, -1, -1, 54, ! 4, -1, -1, 7, 8, 29, -1, 31, -1, 13, ! 14, 15, -1, -1, -1, -1, -1, 54, -1, -1, ! -1, 76, -1, -1, -1, 29, 81, 31, -1, -1, ! 54, -1, -1, -1, -1, -1, -1, -1, -1, 76, ! -1, -1, -1, -1, 81, 11, -1, -1, -1, -1, ! 54, -1, 76, -1, 44, 45, 46, 81, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, ! 60, 61, 76, -1, -1, -1, -1, 81, 44, 45, ! 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, ! 56, 57, 58, 59, 60, 61, -1, -1, 44, 45, ! 46, 91, 48, 49, 50, 51, 52, 53, 54, 55, ! 56, 57, 58, 59, 60, 61, 44, 45, 46, -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, ! 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, ! 44, 45, 46, 89, 48, 49, 50, 51, 52, 53, ! 54, 55, 56, 57, 58, 59, 60, 61, 44, 45, ! 46, 89, 48, 49, 50, 51, 52, 53, 54, 55, ! 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, ! -1, -1, 31, -1, -1, 89, -1, -1, -1, -1, ! -1, -1, -1, -1, -1, 44, 45, 46, 84, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, ! 59, 60, 61, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, ! 61 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/usr/share/bison/bison.simple" --- 919,2272 ---- error. */ static const short yydefact[] = { ! 3, 5, 0, 0, 0, 274, 309, 308, 271, 133, ! 366, 362, 364, 0, 61, 0, 587, 0, 633, 634, ! 0, 0, 593, 613, 0, 613, 0, 0, 19, 4, ! 7, 9, 8, 0, 0, 218, 219, 220, 221, 210, ! 211, 212, 213, 222, 223, 224, 225, 214, 215, 216, ! 217, 125, 125, 0, 141, 148, 268, 270, 269, 139, ! 294, 165, 0, 0, 0, 273, 272, 0, 10, 589, ! 590, 588, 591, 277, 635, 592, 6, 17, 18, 367, ! 363, 365, 0, 0, 32, 33, 35, 34, 594, 0, ! 599, 599, 275, 614, 613, 0, 276, 0, 0, 0, ! 361, 266, 292, 0, 282, 0, 134, 146, 152, 136, ! 168, 135, 147, 153, 169, 137, 158, 163, 140, 175, ! 138, 159, 164, 176, 142, 144, 150, 149, 186, 143, ! 145, 151, 187, 154, 156, 161, 160, 201, 155, 157, ! 162, 202, 166, 184, 193, 172, 170, 167, 185, 194, ! 171, 173, 199, 208, 179, 177, 174, 200, 209, 178, ! 180, 182, 191, 190, 188, 181, 183, 192, 189, 195, ! 197, 206, 205, 203, 196, 198, 207, 204, 0, 0, ! 16, 295, 387, 378, 387, 379, 376, 380, 12, 0, 88, 89, 90, 59, 60, 0, 0, 0, 0, 0, 91, 0, 36, 38, 37, 0, 39, 40, 0, 0, ! 0, 0, 0, 111, 41, 42, 0, 0, 43, 62, ! 0, 0, 64, 46, 48, 0, 0, 107, 108, 109, ! 110, 299, 615, 0, 0, 0, 613, 0, 605, 610, ! 612, 596, 0, 0, 246, 247, 248, 249, 242, 243, ! 244, 245, 412, 0, 238, 239, 240, 241, 267, 0, ! 0, 293, 13, 292, 31, 0, 292, 266, 0, 292, ! 360, 344, 266, 292, 345, 0, 280, 0, 338, 339, ! 0, 0, 0, 0, 0, 368, 0, 371, 0, 374, ! 675, 676, 699, 700, 696, 680, 681, 682, 683, 684, ! 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, ! 695, 697, 698, 0, 0, 677, 678, 636, 649, 668, ! 672, 679, 673, 57, 58, 0, 0, 0, 52, 49, ! 0, 476, 0, 0, 714, 713, 712, 0, 0, 0, ! 0, 51, 0, 0, 0, 53, 0, 55, 0, 0, ! 81, 79, 77, 0, 0, 0, 0, 0, 0, 0, ! 0, 0, 0, 0, 0, 105, 106, 0, 0, 44, ! 0, 0, 472, 464, 0, 50, 306, 307, 304, 0, ! 297, 300, 305, 595, 598, 0, 602, 0, 601, 639, ! 597, 278, 414, 279, 359, 0, 0, 126, 0, 579, ! 357, 266, 267, 0, 0, 484, 112, 0, 484, 117, ! 0, 291, 0, 0, 15, 292, 23, 0, 292, 292, ! 342, 14, 27, 0, 0, 292, 395, 389, 238, 239, ! 240, 241, 234, 235, 236, 237, 125, 125, 386, 0, ! 387, 292, 387, 409, 410, 383, 407, 0, 0, 704, ! 0, 652, 670, 651, 0, 674, 0, 0, 0, 0, ! 95, 94, 0, 0, 705, 0, 706, 707, 721, 716, ! 0, 717, 718, 0, 0, 11, 47, 0, 0, 87, ! 86, 0, 0, 0, 0, 75, 76, 74, 73, 72, ! 70, 71, 65, 66, 67, 68, 69, 104, 103, 0, ! 45, 0, 97, 0, 0, 465, 466, 96, 0, 299, ! 44, 613, 601, 609, 621, 606, 641, 266, 292, 413, ! 415, 420, 419, 421, 429, 358, 283, 284, 0, 0, ! 0, 0, 0, 431, 0, 459, 29, 119, 118, 115, ! 230, 231, 226, 227, 232, 233, 228, 229, 125, 125, ! 289, 343, 0, 0, 484, 288, 341, 484, 0, 370, ! 392, 0, 388, 396, 0, 373, 0, 0, 384, 0, ! 383, 0, 0, 0, 637, 669, 562, 0, 702, 0, ! 0, 0, 92, 63, 709, 711, 0, 715, 0, 708, ! 720, 722, 0, 719, 724, 723, 54, 56, 0, 0, ! 80, 78, 98, 102, 585, 0, 475, 444, 474, 484, ! 484, 484, 484, 0, 453, 0, 462, 439, 448, 467, ! 296, 298, 88, 0, 607, 603, 0, 0, 611, 645, ! 0, 640, 423, 555, 428, 292, 427, 285, 0, 583, ! 563, 125, 125, 581, 0, 564, 566, 580, 0, 0, ! 0, 432, 430, 0, 122, 0, 123, 0, 0, 340, ! 281, 284, 21, 286, 25, 390, 0, 292, 391, 397, ! 0, 292, 393, 399, 292, 292, 411, 408, 292, 0, ! 0, 648, 668, 218, 219, 220, 221, 210, 211, 212, ! 213, 222, 223, 224, 225, 214, 215, 216, 217, 125, ! 0, 657, 653, 655, 0, 0, 671, 564, 0, 0, ! 0, 0, 0, 710, 82, 85, 468, 0, 445, 440, ! 449, 446, 441, 450, 462, 442, 451, 447, 443, 452, ! 454, 461, 88, 274, 0, 0, 0, 0, 0, 0, ! 543, 613, 613, 0, 531, 0, 521, 471, 484, 0, ! 124, 125, 125, 0, 0, 460, 508, 488, 524, 530, ! 489, 0, 301, 0, 303, 639, 639, 620, 618, 619, ! 600, 621, 626, 623, 125, 125, 0, 0, 642, 0, ! 125, 125, 422, 424, 0, 0, 555, 426, 561, 578, ! 416, 416, 557, 558, 0, 582, 0, 433, 434, 0, ! 30, 469, 0, 0, 313, 311, 310, 290, 0, 0, ! 0, 292, 0, 401, 292, 292, 0, 404, 292, 369, ! 372, 377, 292, 703, 650, 661, 416, 662, 658, 659, ! 638, 0, 99, 0, 101, 326, 0, 0, 323, 0, ! 325, 0, 381, 316, 322, 0, 0, 0, 586, 473, ! 0, 541, 511, 512, 513, 0, 0, 0, 544, 0, ! 523, 0, 0, 0, 0, 509, 0, 0, 131, 480, ! 494, 482, 499, 0, 492, 0, 0, 463, 477, 538, ! 0, 132, 0, 641, 641, 0, 627, 627, 622, 646, ! 0, 0, 425, 556, 350, 266, 292, 351, 292, 346, ! 347, 292, 575, 417, 420, 266, 292, 292, 577, 292, ! 565, 125, 125, 567, 584, 470, 120, 121, 0, 22, ! 287, 26, 403, 292, 0, 406, 292, 0, 375, 292, ! 292, 667, 0, 663, 701, 0, 329, 46, 0, 320, ! 93, 0, 315, 0, 0, 328, 319, 83, 0, 539, ! 514, 0, 519, 0, 522, 532, 0, 292, 0, 129, ! 332, 0, 130, 335, 0, 0, 462, 0, 0, 0, ! 479, 484, 478, 498, 0, 510, 0, 525, 0, 529, ! 534, 302, 608, 604, 0, 630, 624, 628, 625, 0, ! 423, 555, 573, 292, 349, 292, 353, 574, 418, 423, ! 555, 576, 559, 416, 416, 0, 402, 398, 405, 400, ! 665, 666, 660, 416, 100, 0, 331, 0, 0, 317, ! 318, 0, 0, 520, 0, 526, 542, 127, 0, 128, ! 0, 0, 0, 0, 545, 0, 493, 462, 463, 485, ! 484, 0, 537, 0, 533, 632, 0, 292, 644, 643, ! 647, 354, 355, 0, 348, 352, 0, 292, 292, 570, ! 292, 572, 312, 664, 0, 324, 321, 540, 547, 0, ! 0, 484, 484, 0, 0, 483, 546, 507, 500, 0, ! 504, 491, 487, 486, 0, 0, 631, 0, 356, 560, ! 568, 569, 571, 330, 0, 0, 0, 548, 549, 515, ! 527, 333, 336, 481, 495, 545, 506, 462, 497, 535, ! 629, 0, 0, 547, 0, 0, 0, 0, 462, 0, ! 505, 0, 0, 0, 0, 516, 550, 334, 337, 496, ! 501, 536, 551, 0, 0, 0, 545, 0, 553, 0, ! 517, 0, 0, 0, 0, 502, 552, 518, 554, 462, ! 503, 0, 0, 0 }; static const short yydefgoto[] = { ! 1151, 1, 2, 3, 29, 30, 31, 32, 417, 808, ! 423, 810, 268, 653, 839, 216, 332, 499, 218, 219, ! 220, 221, 33, 222, 223, 484, 483, 481, 847, 482, ! 224, 712, 405, 406, 407, 408, 539, 607, 34, 396, ! 750, 244, 245, 246, 247, 248, 249, 250, 251, 43, ! 44, 45, 46, 47, 48, 49, 50, 51, 52, 641, ! 642, 436, 258, 252, 53, 259, 54, 55, 56, 57, ! 58, 275, 103, 269, 276, 809, 104, 658, 397, 261, ! 60, 379, 380, 381, 61, 807, 918, 841, 842, 843, ! 1018, 844, 938, 845, 846, 959, 1028, 1116, 962, 1030, ! 1117, 661, 278, 929, 899, 900, 279, 62, 63, 64, ! 65, 440, 442, 447, 288, 66, 942, 569, 283, 284, ! 438, 668, 672, 669, 673, 445, 446, 253, 392, 519, ! 931, 903, 904, 522, 523, 270, 608, 609, 610, 611, ! 612, 613, 409, 373, 849, 971, 975, 504, 505, 506, ! 800, 755, 374, 615, 225, 801, 874, 875, 964, 876, ! 966, 410, 1038, 972, 1039, 1040, 877, 1037, 965, 1118, ! 967, 1105, 1136, 1149, 1107, 1078, 757, 879, 1070, 758, ! 880, 759, 862, 979, 980, 1121, 977, 760, 859, 1079, ! 1096, 1097, 1098, 1139, 634, 785, 643, 909, 1056, 644, ! 645, 913, 646, 790, 400, 529, 647, 648, 605, 226, ! 68, 89, 69, 70, 236, 515, 71, 512, 766, 388, ! 765, 72, 389, 92, 73, 626, 771, 627, 776, 986, ! 987, 74, 75, 189, 451, 705, 516, 630, 1050, 631, ! 777, 989, 317, 574, 702, 703, 704, 932, 933, 453, ! 576, 318, 319, 320, 321, 322, 465, 466, 585, 467, ! 337, 227, 470, 471, 472, 228, 229, 230 }; static const short yypact[] = { ! 119, 138, 4124, 4124, 36,-32768,-32768,-32768,-32768,-32768, ! 129, 129, 129, 125,-32768, 143,-32768, 133,-32768,-32768, ! 133, 133,-32768, 186, 133, 186, 133, 133,-32768,-32768, ! -32768,-32768,-32768, 216, 234, 913, 1684, 1540, 4321, 332, ! 421, 351, 862, 4241, 4334, 4271, 4351, 547, 949, 771, ! 1100,-32768,-32768, 61,-32768,-32768,-32768,-32768,-32768, 129, ! -32768,-32768, 120, 219, 303,-32768,-32768, 4124,-32768,-32768, ! -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 129, ! 129, 129, 3789, 231,-32768,-32768,-32768,-32768,-32768, 49, ! 192, 217,-32768,-32768, 237, 287,-32768, 404, 133, 3516, ! -32768, 98, 129, 452,-32768, 1569,-32768,-32768,-32768, 129, ! -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 129,-32768, ! -32768,-32768,-32768,-32768,-32768,-32768,-32768, 129,-32768,-32768, ! -32768,-32768,-32768,-32768,-32768,-32768, 129,-32768,-32768,-32768, ! -32768,-32768,-32768,-32768,-32768, 129,-32768,-32768,-32768,-32768, ! -32768,-32768,-32768,-32768, 129,-32768,-32768,-32768,-32768,-32768, ! -32768,-32768,-32768, 129,-32768,-32768,-32768,-32768,-32768,-32768, ! -32768,-32768, 129,-32768,-32768,-32768,-32768,-32768, 200, 234, ! -32768,-32768, 238, 225, 238, 266,-32768, 279,-32768, 4453, ! -32768,-32768,-32768,-32768,-32768, 3789, 3789, 318, 327, 344, ! -32768, 133,-32768,-32768,-32768, 3789,-32768,-32768, 2443, 3589, ! 357, 393, 401,-32768,-32768,-32768, 3789, 244, 381,-32768, ! 3855, 3921,-32768, 5127, 872, 2164, 3789,-32768,-32768,-32768, ! -32768, 1116,-32768, 133, 133, 133, 186, 133,-32768,-32768, ! -32768,-32768, 407, 392, 1968, 4829, 4796, 4848, 998, 839, ! 1072, 1122,-32768, 402, 203, 498, 317, 506,-32768, 234, ! 234, 129,-32768, 129,-32768, 437, 129, 468, 1916, 129, ! -32768,-32768, 98, 129,-32768, 476,-32768, 1718, 387, 496, ! 527, 2916, 449, 436, 4088,-32768, 439,-32768, 369,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, ! -32768,-32768,-32768, 525, 4816,-32768,-32768,-32768,-32768, 3401, ! 487,-32768,-32768,-32768,-32768, 3789, 3789, 4816,-32768,-32768, ! 456,-32768, 458, 461,-32768,-32768,-32768, 1194, 4489, 4816, ! 133,-32768, 466, 3789, 2443,-32768, 2443,-32768, 3789, 3789, ! 535,-32768,-32768, 3789, 3789, 3789, 3789, 3789, 3789, 3789, ! 3789, 3789, 3789, 3789, 3789,-32768,-32768, 133, 133, 3789, ! 3789, 482,-32768, 550, 502,-32768,-32768,-32768,-32768, 20, ! -32768, 539,-32768,-32768,-32768, 513,-32768, 523, 545,-32768, ! -32768,-32768, 420,-32768, 496, 391, 234,-32768, 608,-32768, ! -32768, 98, 636, 2965, 569,-32768,-32768, 1942, 73,-32768, ! 4663, 620, 200, 200,-32768, 129,-32768, 1916, 129, 129, ! -32768,-32768,-32768, 1916, 638, 129,-32768,-32768, 1968, 4829, ! 4796, 4848, 998, 839, 1072, 1122,-32768, 618, 628, 1229, ! 238, 129, 238,-32768, 635, 627,-32768, 369, 4816,-32768, ! 641, 650, 714,-32768, 487,-32768, 720, 4982, 5000, 648, ! -32768,-32768, 3308, 3789, 698, 651, 1194,-32768,-32768, 712, ! 673, 4489,-32768, 677, 679,-32768, 5127, 694, 701, 5127, ! 5127, 3789, 778, 3789, 3789, 1908, 1091, 1504, 1318, 1405, ! 592, 592, 758, 758,-32768,-32768,-32768,-32768,-32768, 715, ! 381, 730,-32768, 133, 2257, 550,-32768,-32768, 742, 1116, ! 3987, 186, 545,-32768,-32768,-32768, 330, 98, 129,-32768, ! -32768,-32768,-32768, 713,-32768,-32768,-32768, 158, 750, 4212, ! 3789, 3789, 3033,-32768, 4882,-32768,-32768,-32768,-32768,-32768, ! 4384, 4699, 1126, 1489, 4567, 4716, 1285, 1516, 754, 765, ! -32768, 387, 435, 200,-32768, 813,-32768,-32768, 773,-32768, ! 405, 519,-32768,-32768, 774,-32768, 775, 3789, 133, 780, ! 627, 784, 4533, 1437,-32768,-32768, 3319, 4816,-32768, 4816, ! 3789, 4816,-32768,-32768, 381,-32768, 3789,-32768, 698,-32768, ! -32768,-32768, 712,-32768,-32768,-32768, 779, 779, 832, 3789, ! 1975, 2410,-32768,-32768,-32768, 579, 569,-32768,-32768, 68, ! 76, 83, 84, 880,-32768, 791, 3127,-32768,-32768,-32768, ! -32768,-32768, 247, 794,-32768,-32768, 512, 4033,-32768,-32768, ! 2951,-32768, 420, 420,-32768, 129,-32768,-32768, 795,-32768, ! -32768,-32768,-32768,-32768, 796, 581,-32768,-32768, 255, 4900, ! 4932,-32768,-32768, 88,-32768, 200,-32768, 234, 2772,-32768, ! -32768, 861,-32768,-32768,-32768,-32768, 3789, 70, 798,-32768, ! 3789, 286, 801,-32768, 129, 129, 5127,-32768, 129, 799, ! 133,-32768, 3401, 4384, 4699, 4580, 4742, 1126, 1489, 1351, ! 1647, 4567, 4716, 4610, 4779, 1285, 1516, 1619, 1661, 807, ! 809,-32768,-32768, 4622, 1857, 88,-32768, 806, 814, 816, ! 5030, 818, 2536,-32768,-32768, 2502,-32768, 133,-32768,-32768, ! -32768,-32768,-32768,-32768, 3220,-32768,-32768,-32768,-32768,-32768, ! -32768,-32768, 855, 863, 3789, 866, 825, 826, 3657, 365, ! 914, 263, 289, 3723,-32768, 864,-32768,-32768,-32768, 840, ! -32768,-32768,-32768, 843, 733, 852,-32768,-32768,-32768, 860, ! -32768, 3429,-32768, 3789,-32768,-32768,-32768,-32768,-32768,-32768, ! -32768,-32768,-32768,-32768,-32768,-32768, 857, 4453,-32768, 234, ! -32768,-32768,-32768,-32768, 859, 4229,-32768,-32768,-32768,-32768, ! 540, 415,-32768,-32768, 1418,-32768, 946,-32768,-32768, 865, ! -32768,-32768, 587, 594,-32768,-32768, 5127,-32768, 88, 2772, ! 88, 5091, 3789,-32768, 129, 5091, 3789,-32768, 129,-32768, ! -32768,-32768, 129,-32768,-32768,-32768, 540,-32768,-32768,-32768, ! -32768, 133,-32768, 3789,-32768,-32768, 133, 3589,-32768, 912, ! 5127, 868, 867,-32768,-32768, 260, 2704, 3789,-32768,-32768, ! 2090,-32768,-32768,-32768,-32768, 875, 3789, 877,-32768, 902, ! -32768, 881, 865, 3789, 927,-32768, 200, 234,-32768,-32768, ! -32768,-32768,-32768, 908, 959, 2037, 78,-32768,-32768, 891, ! 894,-32768, 282, 553, 589, 4069, 443, 443,-32768,-32768, ! 200, 234,-32768,-32768,-32768, 98, 129,-32768, 129, 725, ! 740, 162,-32768,-32768, 129, 98, 129, 162,-32768, 129, ! -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 2536,-32768, ! -32768,-32768,-32768, 5091, 405,-32768, 5091, 519,-32768, 129, ! 162,-32768, 603,-32768,-32768, 5048,-32768, 4395, 2536,-32768, ! -32768, 2629,-32768, 2840, 3789,-32768,-32768, 2502, 3789,-32768, ! -32768, 892,-32768, 3789,-32768,-32768, 895, 129, 604,-32768, ! 425, 605,-32768, 812, 918, 919,-32768, 920, 3789, 2350, ! -32768,-32768,-32768,-32768, 3789,-32768, 865,-32768, 922, 894, ! -32768,-32768,-32768,-32768, 3789, 935, 896,-32768, 896, 95, ! 540, 481,-32768, 129,-32768, 129,-32768,-32768, 129, 415, ! 415,-32768,-32768, 540, 415, 901,-32768,-32768,-32768,-32768, ! -32768,-32768,-32768, 540,-32768, 3789,-32768, 904, 2840,-32768, ! -32768, 4395, 5109,-32768, 29,-32768,-32768,-32768, 1916,-32768, ! 1916, 3789, 3789, 979, 3429, 909,-32768,-32768,-32768,-32768, ! -32768, 915,-32768, 4622,-32768, 5127, 3789, 129,-32768,-32768, ! -32768, 725, 740, 445,-32768,-32768, 4229, 129, 162,-32768, ! 162,-32768,-32768,-32768, 4950,-32768,-32768,-32768, 82, 911, ! 865,-32768,-32768, 925, 928,-32768,-32768,-32768,-32768, 917, ! -32768,-32768,-32768,-32768, 926, 931, 5127, 443,-32768,-32768, ! -32768,-32768,-32768,-32768, 954, 133, 42, 932,-32768,-32768, ! -32768,-32768,-32768,-32768,-32768, 3789,-32768,-32768,-32768,-32768, ! -32768, 3789, 906, 82, 938, 82, 865, 865,-32768, 941, ! -32768, 865, 944, 1024, 53,-32768,-32768,-32768,-32768,-32768, ! -32768,-32768,-32768, 969, 1030, 951, 3789, 3789,-32768, 331, ! -32768, 953, 955, 958, 1039,-32768,-32768,-32768,-32768,-32768, ! -32768, 1050, 1053,-32768 }; static const short yypgoto[] = { ! -32768,-32768,-32768,-32768, 105,-32768, 427,-32768,-32768,-32768, ! -32768,-32768,-32768,-32768, -17,-32768, -81, 551, -298, 591, ! -32768,-32768,-32768, -133, 1036,-32768,-32768,-32768,-32768,-32768, ! -32768,-32768, -350,-32768, 656,-32768,-32768, 92, 563, -381, ! -732, 3, 9, 130, 233, 11, 28, 38, 40, -382, ! -328, -550, -547, -324, -323, -534, -525, -476, -475, 659, ! 663, -594, -232,-32768, -591, -150, 1211, 1242, 140, 1466, ! -32768, -604, -162, -269, 522,-32768, 670,-32768, 423, 724, ! -15,-32768, 567,-32768, 1139, 268,-32768, -818,-32768, 141, ! -32768, -809,-32768,-32768, 246,-32768,-32768,-32768,-32768,-32768, ! -32768, -176, 408, -729, 102, -140, 19,-32768,-32768,-32768, ! -32768,-32768,-32768,-32768,-32768,-32768,-32768, 526, -127,-32768, ! 654,-32768,-32768, 171, 172, 653, 534, 16,-32768,-32768, ! -731, -365, -368, -583,-32768, 537,-32768,-32768,-32768,-32768, ! -32768,-32768, -352,-32768,-32768, -558, 66,-32768,-32768, 611, ! -637,-32768, 354,-32768,-32768, -580,-32768,-32768,-32768,-32768, ! -32768, -355, 77, -841, -448, -369,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, ! -32768,-32768,-32768,-32768, 131,-32768,-32768,-32768,-32768, -990, ! 14,-32768, 44,-32768, 491,-32768, -753,-32768,-32768, 577, ! 584, 112,-32768, 520, -399,-32768,-32768,-32768,-32768, 13, ! -32768, 87,-32768,-32768, 1070, 655,-32768,-32768,-32768,-32768, ! -32768,-32768,-32768, -3, -4,-32768,-32768, 394,-32768, 281, ! 79, -478,-32768,-32768,-32768,-32768, 93,-32768,-32768,-32768, ! -32768,-32768, 417,-32768,-32768,-32768, 489,-32768, 182, 517, ! -32768, 599, 631, -161,-32768, -265,-32768,-32768, 614, 759, ! -32768,-32768,-32768,-32768, 755,-32768,-32768,-32768 }; ! #define YYLAST 5187 static const short yytable[] = { ! 88, 217, 277, 90, 91, 35, 35, 94, 418, 88, ! 98, 36, 36, 39, 39, 67, 67, 280, 243, 93, ! 556, 93, 96, 693, 521, 753, 694, 520, 544, 881, ! 40, 40, 893, 774, 553, 402, 756, 946, 629, 697, ! 41, 41, 42, 42, 181, 183, 185, 187, 698, 783, ! 536, 802, 437, 105, 455, 537, 617, 286, 754, 902, ! 908, 898, 323, 324, 181, 181, 181, 554, 830, -455, ! 35, 500, 329, 557, -114, 1068, 36, -456, 39, 973, ! 67, 242, 545, 341, -457, -458, 546, 547, 1113, 799, ! 93, 239, 1094, 375, 181, 40, 1048, 699, 700, 1134, ! 1005, 15, 232, 181, 254, 41, 9, 42, 76, 508, ! 255, 95, 181, 97, 509, 1119, 812, 403, 1069, -1, ! 1017, 181, 412, 84, 85, 1033, 77, 78, 336, 15, ! 181, 1114, 37, 37, 1020, 618, 84, 85, -2, 181, ! 751, 752, 1135, 233, 756, 974, 1141, 544, 181, 616, ! 1095, 180, 614, 693, 780, 781, 694, 181, 454, -435, ! 15, 719, 722, 725, 728, 584, 754, -436, -114, 697, ! 753, 919, 188, 921, -437, -438, 464, 469, 698, 125, ! 130, 134, 139, 747, 328, 1049, 265, 161, 166, 170, ! 175, 691, 82, 15, 544, 86, 1081, 37, 281, 662, ! 87, 545, 664, 100, 271, 546, 547, 437, 86, 1066, ! 83, 106, 500, 87, 378, 182, 383, 384, 385, 915, ! 387, 701, 84, 85, 333, 266, 267, 699, 700, 266, ! 267, 256, 93, 386, 15, 38, 38, 100, 234, 17, ! 720, 723, 726, 729, 693, 692, 181, 694, 545, 695, ! 696, 530, 546, 547, 616, 616, 724, 616, 272, 235, ! 697, 730, 958, 234, 782, 521, 1120, 273, 784, 698, ! 254, 444, 1059, 1061, 1057, 254, 255, 1129, 394, 395, ! 274, 255, 955, 99, 237, 751, 752, 428, 584, 501, ! 17, 774, 101, 429, 86, 432, 449, 439, 231, 87, ! 38, 102, 1077, 1089, 943, 588, 84, 85, 1150, -35, ! 592, 282, 433, 564, 184, 566, 17, 15, 911, 912, ! 285, 691, 434, 474, 435, 115, 836, -594, 944, 583, ! 450, -594, 816, 342, 257, -34, 762, 6, 7, 8, ! 124, 763, 17, 459, 795, 10, 11, 12, 15, 796, ! 497, 498, 829, 266, 267, 473, 6, 7, 8, 133, ! 477, 287, 478, 15, 10, 11, 12, 632, 84, 85, ! 443, 981, 84, 85, 289, 692, 343, 240, 86, 695, ! 696, 233, 15, 87, 667, 325, 18, 19, 125, 130, ! 134, 139, 418, 864, 326, 775, 1042, 256, 186, 329, ! 598, 628, 256, 544, 254, 629, 629, 783, 100, 271, ! 255, 327, 691, 540, 430, 527, 783, 455, 100, 541, ! 1143, 542, -254, 856, 338, 1144, 6, 7, 8, 129, ! 444, 394, 395, 924, 10, 11, 12, 927, 543, 578, ! 86, -256, 428, 753, 86, 87, 100, 271, 429, 87, ! 432, 666, 439, 265, 419, 267, -284, 545, 266, 267, ! 339, 546, 547, 272, 571, 882, 692, 433, 340, -284, ! 695, 696, 273, 905, 401, 343, 9, 434, 517, 435, ! 525, 391, 906, 267, 100, 274, 604, 518, 267, 984, ! 1100, 393, 378, 693, 241, 803, 694, 390, 233, 15, ! 257, 272, 419, 267, 398, 257, 111, 93, 624, 697, ! 273, -255, 995, 267, 120, -284, 424, 431, 698, -284, ! 254, 454, 100, 274, 659, 260, 255, 425, 84, 85, ! 441, 256, 540, 456, 1088, 749, 1127, 1128, 541, 895, ! 542, 1131, 262, 100, 894, 460, 263, 461, 896, 267, ! 462, 444, 6, 7, 8, 160, 475, 543, 751, 752, ! 10, 11, 12, 266, 267, 670, 414, 911, 912, 430, ! 415, 502, 125, 130, 134, 139, 683, 101, 15, 540, ! 671, -84, 684, 503, 687, 541, 102, 542, 767, 768, ! 769, 507, 448, 708, 1054, 709, 1055, 711, 895, 748, ! 86, 688, 511, 770, 543, 87, 510, 896, 267, 18, ! 19, 689, 513, 690, 178, 179, 724, 421, 528, 35, ! 897, 263, 782, 521, 982, 36, 784, 39, 375, 761, ! 428, 782, 521, 35, 257, 784, 429, -262, 432, 36, ! 514, 39, 531, 749, 40, 18, 19, 256, 360, 361, ! 362, 363, 364, 775, 41, 433, 42, 855, 40, 535, ! 983, 691, 861, 823, 550, 434, 1087, 435, 41, 716, ! 42, 793, 431, 717, 544, 794, 527, 916, 1071, 567, ! 1072, 415, 125, 130, 917, 724, 161, 166, 263, 399, ! 960, 418, 411, 1012, 1027, 1029, 413, 1013, 415, 263, ! 848, 718, 721, 685, 727, 961, 683, 748, -394, -394, ! 985, 985, 684, 558, 687, 692, 1101, 1102, 562, 695, ! 696, 568, 857, 84, 85, 575, 59, 59, 545, 280, ! 572, 688, 546, 547, 79, 80, 81, 93, 93, 96, ! 573, 689, 581, 690, 586, 990, 37, 587, 667, 869, ! 257, 870, 871, 872, 873, 999, 336, 430, 590, 109, ! 37, 118, 591, 127, 35, 136, 594, 145, 595, 154, ! 36, 163, 39, 172, 761, 951, 6, 7, 8, 169, ! 635, 267, 956, 596, 10, 11, 12, 577, 540, 40, ! 597, 59, 993, 267, 541, 86, 542, 683, 527, 41, ! 87, 42, 15, 684, 602, 687, 686, 995, 267, 901, ! 907, 345, 347, 543, 934, 420, 362, 363, 364, 936, ! 551, 552, 688, 59, 599, 59, 603, 125, 130, 134, ! 139, 620, 689, 685, 690, 161, 166, 170, 175, 637, ! 265, 555, 399, -284, 654, 930, 8, 129, 559, 38, ! 1052, 1053, 10, 11, 12, 656, -284, 663, 883, 884, ! 431, -264, 665, 38, 565, 674, 675, 6, 7, 8, ! 138, 678, 1024, 680, 582, 10, 11, 12, 714, 266, ! 267, 404, 731, 764, 788, 792, 963, 1035, 428, 265, ! 822, 37, 814, 1041, 429, 818, 432, 825, 254, 827, ! 794, -32, -284, 831, 255, 832, -284, 834, 254, -33, ! 527, 985, 851, 433, 255, 852, 853, 5, 6, 7, ! 8, 106, 858, 434, 685, 435, 10, 11, 12, 524, ! 865, 863, 59, 868, 365, 366, 686, 367, 368, 369, ! 370, 633, 14, 372, 15, -528, 671, 888, 892, 914, ! 1073, 1074, -257, 1076, 6, 7, 8, 165, 939, 940, ! 747, 941, 10, 11, 12, 950, 17, 952, 109, 953, ! 118, 954, 127, 957, 136, 968, 969, 976, 109, 978, ! 118, 1046, 1023, 181, 1025, 1031, 1032, 1034, 23, 1043, ! 1047, 59, 1062, 25, 38, 1065, 59, 1075, 1080, 560, ! 561, 1099, 1123, -250, 1084, 8, 124, 1106, 59, 394, ! 395, 10, 11, 12, 1103, 430, 1108, 1104, 394, 395, ! 1109, 1111, 1058, 1060, 1076, 256, 1115, 686, 1125, 15, ! 1122, 1130, 930, 1132, 1133, 256, 1137, 35, 59, -263, ! 1138, 1140, 1145, 36, 1146, 39, 683, 761, 1147, 1148, ! 1152, 59, 684, 1153, 687, 1076, 1142, 778, 786, 540, ! 636, 623, 40, 59, 538, 541, 526, 542, 59, 548, ! 59, 688, 41, 549, 42, 660, 621, 920, 1112, 8, ! 133, 689, 1019, 690, 543, 10, 11, 12, 420, 420, ! 813, 945, 1051, 563, 817, 1007, 679, 819, 820, 1009, ! 570, 821, 677, 15, 1082, 6, 7, 8, 174, 878, ! 1044, 655, 657, 10, 11, 12, 619, 1083, 431, 84, ! 85, 6, 7, 376, 377, 59, 787, 1124, 257, 8, ! 138, 6, 7, 8, 124, 10, 11, 12, 257, 10, ! 11, 12, 355, 356, 357, 358, 359, 360, 361, 362, ! 363, 364, 109, 706, 118, 1085, 127, 15, 136, 1126, ! 707, 238, 791, 59, 37, 885, 1110, 625, 988, 524, ! 524, 681, 59, 685, 110, 114, 119, 123, 128, 132, ! 137, 141, 146, 150, 155, 159, 164, 168, 173, 177, ! -265, 86, 828, 779, 889, 1063, 87, 290, 291, 824, ! 713, 292, 293, 682, 789, 789, 294, 295, 296, 297, ! 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, ! 308, 309, 310, 311, 312, 589, 593, 0, 0, 0, ! 426, 0, 0, 5, 922, 0, 8, 9, 925, 0, ! 463, 59, 10, 11, 12, 928, 107, 112, 116, 121, ! 0, 0, 0, 0, 143, 148, 152, 157, 14, 0, ! 15, 16, 826, 0, 109, 0, 127, 38, 145, 315, ! 163, 0, 0, 0, 316, 0, 686, 108, 113, 117, ! 122, 0, 17, 0, 0, 144, 149, 153, 158, 0, ! 6, 7, 8, 160, 0, 0, 0, 59, 10, 11, ! 12, 59, 0, 59, 23, 59, 0, 0, 0, 25, ! 0, 0, 0, 0, 866, 867, 15, 0, 0, 991, ! 0, 992, 0, 0, 997, 0, 0, 524, 524, 1000, ! 1001, 0, 1002, 0, 0, 0, 0, 886, 887, 0, ! 59, 0, 0, 890, 891, 0, 1006, 0, 0, 1008, ! 0, 59, 1010, 1011, 59, 0, 6, 7, 8, 133, ! 0, 457, 458, 524, 10, 11, 12, 0, 0, 0, ! 382, 357, 358, 359, 360, 361, 362, 363, 364, 476, ! 1026, 0, 15, 0, 479, 480, 0, 0, 0, 485, ! 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, ! 496, 0, 0, 0, 0, 0, 0, 109, 0, 118, ! 0, 127, 0, 136, 0, 145, 399, 154, 399, 163, ! 0, 172, 5, 6, 7, 8, 9, 59, 0, 910, ! 0, 10, 11, 12, 0, 0, 994, 996, 404, 534, ! 0, 5, 6, 7, 8, 9, 0, 14, 0, 15, ! 10, 11, 12, 0, 0, 107, 112, 116, 121, 358, ! 359, 360, 361, 362, 363, 364, 14, 0, 15, 0, ! 0, 17, 0, 0, 1003, 1004, 0, 0, 0, 0, ! 1090, 1091, 0, 1092, 0, 59, 108, 113, 117, 122, ! 17, 0, 0, 23, 6, 7, 8, 129, 25, 0, ! 0, 0, 10, 11, 12, 126, 131, 135, 140, 0, ! 0, 0, 23, 162, 167, 171, 176, 25, 59, 600, ! 601, 6, 7, 8, 165, 0, 0, 524, 524, 10, ! 11, 12, -654, 0, 0, 0, 524, 524, 0, 0, ! 524, 524, 0, 0, 5, 6, 7, 8, 115, 0, ! 524, 0, 0, 10, 11, 12, 356, 357, 358, 359, ! 360, 361, 362, 363, 364, 0, 649, 650, 0, 14, ! 264, 15, 0, -28, -28, -28, -28, -28, 0, 0, ! 0, 0, -28, -28, -28, 0, 0, 0, 994, 996, ! 996, 0, 0, 17, 0, 0, 0, 265, -28, 0, ! -284, 0, 0, 676, 0, 0, 0, 0, 0, 59, ! 0, 0, 0, -284, 0, 23, 710, 0, 0, 59, ! 25, 0, -28, 0, 6, 7, 8, 169, 998, 59, ! -252, 0, 10, 11, 12, 715, 266, 267, 0, 107, ! 112, 116, 121, 0, -28, 0, 0, 0, 382, -28, ! 15, 0, 6, 7, 8, 138, 0, 0, 0, -284, ! 10, 11, 12, -284, -28, 0, 6, 7, 8, 174, ! 108, 113, 117, 122, 10, 11, 12, 0, 0, 110, ! 114, 128, 132, 146, 150, 164, 168, 0, 5, 6, ! 7, 8, 111, 0, 806, 0, 0, 10, 11, 12, ! 0, 0, 811, 0, 0, 0, 815, 0, 0, 0, ! 0, 0, 0, 14, 126, 131, 135, 140, 0, 416, ! 0, 0, -20, -20, -20, -20, -20, 0, 0, 0, ! 0, -20, -20, -20, 0, 0, 0, 17, 0, 0, ! 0, 0, 0, 0, 0, 0, 265, -20, 840, -284, ! 0, 107, 112, 0, 0, 143, 148, 0, 59, 23, ! 0, 0, -284, 0, 25, 0, 0, 59, 0, 0, ! 850, -20, 0, 0, -251, 0, 0, 0, 0, 0, ! 0, 0, 108, 113, 0, 0, 144, 149, 0, 0, ! 0, 0, 0, -20, 0, 0, 0, 0, -20, 0, ! 0, 0, 0, 0, 0, 0, 0, 0, -284, 0, ! 0, 0, -284, -20, 0, 0, 0, 0, 0, 0, ! 0, 0, 110, 114, 119, 123, 128, 132, 137, 141, ! 146, 150, 155, 159, 164, 168, 173, 177, 0, 0, ! 0, 0, 0, 0, 0, 806, 0, 0, 923, 0, ! 0, 0, 926, 0, 0, 0, 0, 0, 404, 0, ! 0, -656, -656, -656, -656, -656, 0, 0, 0, 935, ! -656, -656, -656, 937, 0, 0, 0, 0, 0, 0, ! 0, 0, 840, 947, 0, 0, -656, 0, -656, 0, ! 0, 0, 0, 0, 107, 112, 116, 121, 126, 131, ! 135, 140, 143, 148, 152, 157, 0, 0, 0, 0, ! -656, 0, 0, 0, 0, 0, 0, 404, 0, 0, ! -484, -484, -484, -484, -484, 108, 113, 117, 122, -484, ! -484, -484, -656, 144, 149, 153, 158, -656, 0, 0, ! 0, 0, 0, 404, 0, -484, -116, -116, -116, -116, ! -116, 0, -656, 0, 840, -116, -116, -116, 354, 355, ! 356, 357, 358, 359, 360, 361, 362, 363, 364, -484, ! 0, -116, 5, 0, 840, 8, 106, 840, 0, 840, ! 1021, 10, 11, 12, 1022, 0, 0, 0, 0, 0, ! 0, -484, 0, 0, 0, -116, -484, 14, 0, 15, ! 0, 0, 0, 0, 0, 0, 0, 0, 126, 131, ! 0, -113, 162, 167, 0, 0, 0, -116, 0, 0, ! 1045, 17, -116, 352, 353, 354, 355, 356, 357, 358, ! 359, 360, 361, 362, 363, 364, 0, -116, 970, 0, ! -462, -462, 0, 23, 0, 0, -462, -462, 25, -462, ! 0, 1064, 0, -462, 840, -462, -462, -462, -462, -462, ! -462, -462, -462, -462, -462, -462, 0, -462, 0, -462, ! 0, -462, -462, -462, -462, -462, 0, 0, 0, -462, ! 0, 0, 1086, 0, 0, -462, 0, 0, -462, 0, ! 0, 0, 0, -462, -462, -462, 0, 0, 0, -462, ! -462, 948, 0, 0, -462, -462, 0, 0, 0, -462, ! 0, -462, -462, 0, 0, 0, -462, -462, 0, 0, ! -462, -462, 0, 0, -462, -462, 0, -462, 0, -462, ! -462, 0, -462, 348, 349, 350, 949, 351, 352, 353, ! 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, ! 364, 0, 0, 126, 131, 135, 140, 0, 0, 0, ! 0, 162, 167, 171, 176, 371, 0, -460, -460, -460, ! -460, -460, -460, -460, -460, 0, -460, -460, -460, -460, ! -460, 0, -460, -460, -460, -460, -460, -460, -460, -460, ! -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, ! -460, -460, -460, 0, 0, 0, -460, 0, 0, 0, ! 0, 0, -460, 0, 0, -460, 0, -460, 0, 0, ! -460, -460, -460, 0, 0, 0, -460, -460, 0, 0, ! 0, -460, -460, 0, 0, 0, -460, 0, -460, -460, ! 0, 0, 0, -460, -460, 0, 0, -460, -460, 0, ! 0, -460, -460, 0, -460, 372, -460, -460, 606, -460, ! -484, -484, -484, -484, -484, -484, -484, -484, 0, -484, ! -484, -484, -484, -484, 0, -484, -484, -484, -484, -484, ! -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, ! 0, -484, -484, -484, -484, -484, 0, 0, 0, -484, ! 0, 0, 0, 0, 0, -484, 0, 0, -484, 0, ! -484, 0, 0, -484, -484, -484, 0, 0, 0, -484, ! -484, 0, 0, 0, -484, -484, 0, 0, 0, -484, ! 0, -484, -484, 0, 0, 0, -484, -484, 0, 0, ! -484, -484, 0, 0, -484, -484, 0, -484, 0, -484, ! -484, 1036, -484, -490, -490, 0, 0, 0, 0, -490, ! -490, 0, -490, 0, 0, 0, -490, 0, -490, -490, ! -490, -490, -490, -490, -490, -490, -490, -490, -490, 0, ! -490, 0, -490, 0, -490, -490, -490, -490, -490, 0, ! 0, 0, -490, 0, 0, 0, 0, 0, -490, 0, ! 0, -490, 0, 0, 0, 0, -490, -490, -490, 0, ! 0, 0, -490, -490, 0, 0, 0, -490, -490, 0, ! 0, 0, -490, 0, -490, -490, 0, 0, 0, -490, ! -490, 0, 0, -490, -490, 0, 0, -490, -490, 0, ! -490, 0, -490, -490, 330, -490, 190, 5, 0, 0, ! 8, 9, 191, 192, 0, 193, 10, 11, 12, 353, ! 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, ! 364, 0, 14, 194, 15, 16, 0, 195, 196, 197, ! 198, 199, 0, 0, 0, 200, 0, 0, 0, 0, ! 0, 201, 0, 0, 202, 0, 17, 0, 0, 203, ! 204, 205, 0, 0, 0, 206, 207, 0, 0, 0, ! 208, 209, 0, 0, 0, 210, 0, 211, 23, 0, ! 0, 0, 212, 25, 0, 0, 0, 0, 0, 0, ! 0, 213, 0, 0, 0, 214, 215, 835, 331, 732, ! 85, 0, 0, 0, 0, 191, 192, 350, 193, 351, ! 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, ! 362, 363, 364, 0, 0, 0, 194, 0, 16, 0, ! 195, 196, 197, 198, 199, 0, 0, 0, 200, 0, ! 0, 0, 0, 0, 201, 0, 0, 202, 0, 0, 0, 0, 203, 204, 205, 0, 0, 0, 206, 207, ! 0, 0, 836, 208, 837, 0, 0, 0, 210, 0, ! 211, 86, 0, 0, 0, 212, 87, 0, 0, 0, ! 0, 0, 0, 0, 213, 0, 0, -314, 214, 215, ! 835, 838, 732, 85, 0, 0, 0, 0, 191, 192, ! 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, ! 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, ! 0, 16, 0, 195, 196, 197, 198, 199, 0, 0, ! 0, 200, 0, 0, 0, 0, 0, 201, 0, 0, ! 202, 0, 0, 0, 0, 203, 204, 205, 0, 0, ! 0, 206, 207, 0, 0, 836, 208, 837, 0, 0, ! 0, 210, 0, 211, 86, 835, 0, 190, 212, 87, ! 0, 0, 0, 191, 192, 0, 193, 213, 0, 0, ! -382, 214, 215, 0, 838, 0, 0, 0, 0, 0, ! 0, 0, 0, 0, 194, 0, 16, 0, 195, 196, ! 197, 198, 199, 0, 0, 0, 200, 0, -327, 0, ! 0, 0, 201, 0, 0, 202, 0, 0, 0, 0, ! 203, 204, 205, 0, 0, 0, 206, 207, 0, 0, ! -327, 208, 209, 804, 0, 190, 210, 0, 211, 0, ! 0, 191, 192, 212, 193, 0, 0, 0, 0, 0, ! 0, 0, 213, 0, 0, 0, 214, 215, 0, 838, 0, 0, 194, 0, 16, 0, 195, 196, 197, 198, ! 199, 0, 0, 0, 200, 0, 0, 0, 0, 0, ! 201, 0, 0, 202, 0, 0, 0, 0, 203, 204, ! 205, 0, 0, 0, 206, 207, 0, 0, 0, 208, ! 209, 835, 0, 190, 210, 0, 211, 0, 0, 191, ! 192, 212, 193, 0, 0, 0, 0, 0, 0, 0, ! 213, 0, 0, 0, 214, 215, 0, 805, 0, 0, ! 194, 0, 16, 0, 195, 196, 197, 198, 199, 0, ! 0, 0, 200, 0, 0, 0, 0, 0, 201, 0, ! 0, 202, 0, 0, 0, 0, 203, 204, 205, 0, ! 0, 0, 206, 207, 0, 0, 0, 208, 209, 0, ! 0, 0, 210, 0, 211, 0, 0, 422, 0, 212, ! -24, -24, -24, -24, -24, 0, 0, 0, 213, -24, ! -24, -24, 214, 215, 0, 838, 0, 0, 0, 0, ! 0, 0, 0, 0, 265, -24, 0, -284, 0, 0, ! 0, 0, 4, 0, -125, 5, 6, 7, 8, 9, ! -284, 0, 0, 0, 10, 11, 12, 0, 190, -24, ! 0, 0, 0, 0, 191, 192, 0, 193, 0, 0, ! 14, 0, 15, 266, 267, 0, 0, 0, 0, 0, ! 0, -24, 0, 0, 0, 194, -24, 16, 0, 195, ! 196, 197, 198, 199, 17, 0, -284, 200, 0, -125, ! -284, -24, 0, 201, 0, 0, 202, 0, -125, 0, ! 0, 203, 204, 532, 0, 0, 23, 206, 207, 0, ! 0, 25, 208, 209, 0, 0, 190, 210, 0, 211, ! 0, 28, 191, 192, 212, 193, 0, 0, 0, 0, ! 0, 0, 0, 213, 0, 0, 0, 214, 215, 0, ! 0, 533, 0, 194, 0, 16, 0, 195, 196, 197, ! 198, 199, 0, 0, 0, 200, 0, 0, 0, 0, 0, 201, 0, 0, 202, 0, 0, 0, 0, 203, ! 204, 205, 0, 0, 0, 206, 207, 0, 0, 0, ! 208, 209, 0, 0, 0, 210, 0, 211, 0, 0, ! 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, ! 0, 213, 0, 0, 0, 214, 215, 0, 0, 651, ! 732, 733, 6, 7, 8, 9, 191, 192, 0, 193, ! 10, 11, 12, 0, 0, 0, 0, 0, 0, 734, ! 735, 736, 737, 738, 739, 740, 14, 194, 15, 16, ! 0, 195, 196, 197, 198, 199, 0, 0, 0, 200, ! 0, 0, 0, 0, 0, 201, 0, 0, 202, 0, ! 17, 0, 0, 203, 204, 205, 0, 0, 0, 206, ! 207, 0, 0, 0, 208, 209, 0, 0, 0, 210, ! 0, 211, 741, 0, 0, 0, 212, 742, 0, 0, ! 743, 744, 0, 0, 745, 213, 0, 746, 0, 214, ! 215, 0, 747, 732, 85, 0, 0, 0, 0, 191, ! 192, 0, 193, 0, 0, 0, 0, 0, 0, 0, ! 0, 0, 734, 735, 736, 737, 738, 739, 740, 0, 194, 0, 16, 0, 195, 196, 197, 198, 199, 0, 0, 0, 200, 0, 0, 0, 0, 0, 201, 0, 0, 202, 0, 0, 0, 0, 203, 204, 205, 0, ! 0, 0, 206, 207, 0, 0, 0, 208, 209, 0, ! 0, 0, 210, 0, 211, 86, 0, 0, 0, 212, ! 87, 0, 0, 743, 744, 0, 0, 745, 213, 0, ! 746, 190, 214, 215, 0, 747, 0, 191, 192, 0, ! 193, 0, 0, 5, 6, 7, 8, 9, 0, 0, ! 640, 0, 10, 11, 12, 0, 0, 0, 194, 0, ! 16, 0, 195, 196, 197, 198, 199, 0, 14, 0, ! 200, 0, 0, 0, 0, 0, 201, 0, 0, 202, ! 0, 0, 0, 0, 203, 204, 205, 0, 0, 0, ! 206, 207, 17, 0, 0, 208, 209, 0, 0, 0, ! 210, 0, 211, 0, 0, 0, 0, 212, 0, 0, ! 0, 0, 0, 0, 23, 0, 213, 0, 0, 25, ! 214, 215, 0, 582, 290, 291, 0, 0, 292, 293, ! 0, 0, 0, 294, 295, 296, 297, 298, 299, 300, ! 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, ! 311, 312, 190, 5, 6, 7, 8, 9, 191, 192, ! 0, 193, 10, 11, 12, 0, 0, 313, 0, 0, ! 0, 0, 0, 0, 0, 0, 0, 0, 14, 194, ! 15, 16, 0, 195, 196, 197, 198, 199, 0, 0, ! 0, 200, 0, 0, 0, 0, 315, 201, 0, 0, ! 202, 316, 17, 0, 0, 203, 204, 205, 0, 0, ! 0, 206, 207, 0, 0, 452, 208, 209, 0, 0, ! 0, 210, 0, 211, 23, 0, 0, 0, 212, 25, ! 0, 0, 0, 0, 0, 0, 0, 213, 0, 190, ! 5, 214, 215, 8, 9, 191, 192, 0, 193, 10, ! 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, ! 0, 0, 0, 0, 0, 14, 194, 15, 16, 0, ! 195, 196, 197, 198, 199, 0, 0, 0, 200, 0, ! 0, 0, 0, 0, 201, 0, 0, 202, 0, 17, ! 0, 0, 203, 204, 205, 0, 0, 0, 206, 207, ! 0, 0, 0, 208, 209, 0, 0, 0, 210, 0, ! 211, 23, 190, 334, 0, 212, 25, 0, 191, 192, ! 0, 193, 0, 0, 213, 0, 0, 0, 214, 215, ! 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, ! 0, 16, 0, 195, 196, 197, 198, 199, 0, 0, 0, 200, 0, 0, 0, 0, 0, 201, 0, 0, 202, 0, 0, 0, 0, 203, 204, 205, 0, 0, 0, 206, 207, 0, 0, 0, 208, 209, 0, 0, ! 190, 210, 0, 211, 335, 0, 191, 192, 212, 193, ! 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, ! 0, 214, 215, 0, 0, 0, 0, 194, 0, 16, ! 0, 195, 196, 197, 198, 199, 0, 0, 0, 200, 0, 0, 0, 0, 0, 201, 0, 0, 202, 0, ! 0, 0, 0, 203, 204, 205, 0, 0, 0, 206, 207, 0, 0, 0, 208, 209, 190, 0, 0, 210, 0, 211, 191, 192, 0, 193, 212, 0, 0, 0, ! 0, 0, 0, 0, 0, 213, 0, 854, 0, 214, ! 215, 0, 0, 194, 0, 16, 0, 195, 196, 197, ! 198, 199, 0, 0, 0, 200, 0, 0, 0, 0, ! 0, 201, 0, 0, 202, 0, 0, 0, 0, 203, ! 204, 205, 0, 0, 0, 206, 207, 0, 0, 0, ! 208, 209, 190, 0, 0, 210, 0, 211, 191, 192, ! 0, 193, 212, 0, 0, 0, 0, 0, 0, 0, ! 0, 213, 0, 860, 0, 214, 215, 0, 0, 194, ! 0, 16, 0, 195, 196, 197, 198, 199, 0, 0, ! 0, 200, 0, 0, 0, 0, 0, 201, 0, 0, ! 202, 0, 0, 0, 0, 203, 204, 205, 0, 0, ! 0, 206, 207, 0, 0, 0, 208, 209, 190, 0, ! 0, 210, 0, 211, 191, 192, 0, 193, 212, 0, ! 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, ! 0, 214, 215, 0, 0, 194, 0, 16, 0, 195, ! 196, 197, 198, 199, 0, 0, 0, 200, 0, 0, 0, 0, 0, 201, 0, 0, 202, 0, 0, 0, 0, 203, 204, 205, 0, 0, 0, 206, 207, 0, ! 0, 0, 344, 209, 190, 0, 0, 210, 0, 211, 191, 192, 0, 193, 212, 0, 0, 0, 0, 0, ! 0, 0, 0, 213, 0, 0, 0, 214, 215, 0, 0, 194, 0, 16, 0, 195, 196, 197, 198, 199, ! 0, 0, 0, 200, 0, 0, 0, 0, 0, 201, ! 0, 0, 202, 0, 0, 0, 0, 203, 204, 205, ! 0, 0, 0, 206, 207, 0, 0, 0, 346, 209, ! 622, 0, 0, 210, 0, 211, 191, 192, 0, 193, ! 212, 0, 0, 0, 0, 0, 0, 0, 0, 213, ! 0, 0, 0, 214, 215, 0, 0, 194, 0, 16, ! 0, 195, 196, 197, 198, 199, 0, 0, 0, 200, ! 0, 0, 0, 0, 772, 201, 0, 5, 202, 0, ! 8, 9, 0, 203, 204, 205, 10, 11, 12, 206, ! 207, 0, 0, 0, 208, 209, 0, 0, 0, 210, ! 0, 211, 14, 0, 15, 0, 212, 0, 0, 0, ! 772, 0, 0, 5, 0, 213, 8, 9, 0, 214, ! 215, 0, 10, 11, 12, 0, 17, 0, 0, 426, ! 0, 0, 5, 0, 0, 8, 9, 0, 14, 0, ! 15, 10, 11, 12, 0, 0, 0, 0, 23, -617, ! -617, -617, 0, 25, 0, 0, 0, 14, 0, 15, ! 16, 0, 17, 773, -617, 4, 0, -125, 5, 6, ! 7, 8, 9, 0, 0, 0, 0, 10, 11, 12, ! 0, 17, 0, 0, 23, -616, -616, -616, 0, 25, ! 0, 0, 13, 14, 0, 15, 16, 0, 0, 773, ! -616, 0, 0, 23, 0, 0, 0, 0, 25, 0, ! 0, 0, 0, 0, 0, 0, 0, 17, 427, -385, ! 18, 19, -125, 0, 0, 0, 0, 0, 0, 0, ! 0, -125, 0, 20, 21, 22, 0, 0, 0, 23, ! 0, 0, 0, 24, 25, 26, 27, 0, 0, 0, ! 0, 0, 0, 638, 28, 639, 5, 6, 7, 8, ! 9, 0, 0, 640, 0, 10, 11, 12, 0, 0, ! 638, 0, 0, 5, 6, 7, 8, 9, 0, 0, ! 640, 14, 10, 11, 12, 5, 6, 7, 8, 142, ! 0, 0, 0, 0, 10, 11, 12, 0, 14, 0, ! 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, ! 14, 0, 15, 0, 0, 5, 6, 7, 8, 151, ! 0, 0, 17, 0, 10, 11, 12, 23, 0, 0, ! 0, 0, 25, 0, 17, 0, 0, 0, 0, 0, ! 14, -562, 15, 0, 23, 0, 0, 0, 0, 25, ! 0, 0, 0, 0, 0, 0, 23, 0, -562, 0, ! 0, 25, 0, 0, 17, 5, 6, 7, 8, 120, ! 0, -258, 0, 0, 10, 11, 12, 0, 5, 6, ! 7, 8, 147, 0, 0, 0, 23, 10, 11, 12, ! 14, 25, 0, 0, 0, 5, 6, 7, 8, 156, ! 0, -260, 0, 14, 10, 11, 12, 0, 0, 0, ! 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, ! 14, 0, 0, 0, 0, 0, 0, 17, 5, 6, ! 7, 8, 106, 0, 0, 0, 23, 10, 11, 12, ! 0, 25, 0, 0, 17, 0, 1015, 0, 0, 23, ! 0, -253, 0, 14, 25, 15, 0, 0, 0, 0, ! 0, 0, 0, 0, -259, 0, 23, 0, 0, 0, ! 0, 25, 0, 0, 0, 0, 0, 17, 348, 349, ! 350, -261, 351, 352, 353, 354, 355, 356, 357, 358, ! 359, 360, 361, 362, 363, 364, 290, 291, 0, 23, ! 292, 293, 0, 0, 25, 294, 295, 296, 297, 298, ! 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, ! 309, 310, 311, 312, 0, 0, 0, 0, 0, 0, ! 0, 1016, 290, 291, 0, 0, 292, 293, 0, 313, ! 0, 294, 295, 296, 297, 298, 299, 300, 301, 302, ! 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, ! 314, 0, 0, 0, 0, 0, 0, 0, 315, 0, ! 0, 0, 0, 316, 0, 468, 290, 291, 0, 0, ! 292, 293, 0, 0, 0, 294, 295, 296, 297, 298, ! 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, ! 309, 310, 311, 312, 315, 0, 0, 0, 0, 316, ! 0, 5, 6, 7, 8, 142, 0, 0, 0, 313, ! 10, 11, 12, 0, 5, 6, 7, 8, 115, 0, ! 0, 0, 0, 10, 11, 12, 14, 0, 15, 0, ! 0, 0, 0, 0, 0, 0, 0, 0, 315, 14, ! 0, 15, 0, 316, 5, 6, 7, 8, 151, 0, ! 17, 0, 0, 10, 11, 12, 5, 6, 7, 8, ! 9, 0, 0, 17, 0, 10, 11, 12, 0, 14, ! 0, 15, 23, 0, 0, 0, 0, 25, 0, 0, ! 0, 14, 0, 15, 0, 23, 0, 0, 0, 0, ! 25, 0, 0, 17, 0, 0, 0, 5, 6, 7, ! 8, 9, 0, 0, 0, 17, 10, 11, 12, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, ! 25, 0, 14, 0, 0, 0, 0, 23, 0, 0, ! 0, 0, 25, 5, 6, 7, 8, 111, 0, 0, ! 0, 0, 10, 11, 12, 0, 17, 0, 0, 0, ! 5, 6, 7, 8, 147, 0, 0, 0, 14, 10, ! 11, 12, 0, 0, 0, 0, 0, 0, 23, 0, ! 0, 0, 0, 25, 0, 14, 5, 6, 7, 8, ! 120, 0, 17, 0, 0, 10, 11, 12, 0, 0, ! 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, ! 0, 14, 0, 0, 23, 0, 0, 0, 0, 25, ! 0, 0, 0, 5, 6, 7, 8, 156, 0, 0, ! 0, 23, 10, 11, 12, 17, 25, 0, 0, 0, ! 5, 0, 0, 8, 115, 0, 0, 0, 14, 10, ! 11, 12, 0, 0, 0, 0, 0, 23, 0, 0, ! 5, 0, 25, 8, 9, 14, 0, 15, 0, 10, ! 11, 12, 17, 5, 0, 0, 8, 111, 0, 0, ! 0, 0, 10, 11, 12, 14, 0, 15, 0, 17, ! 0, 0, 5, 0, 23, 8, 120, 0, 14, 25, ! 0, 10, 11, 12, 0, 0, 0, 0, 0, 17, ! 0, 23, 0, 0, 0, 0, 25, 14, 0, 0, ! 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 25, 0, 0, 0, ! 0, 17, 0, 0, 23, 0, 0, 0, 0, 25, ! 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 0, 0, 0, 23, 0, 348, 349, 350, 25, 351, ! 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, ! 362, 363, 364, 348, 349, 350, 0, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, ! 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 0, 0, 0, 0, 0, 348, 349, 350, 652, 351, ! 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, ! 362, 363, 364, 348, 349, 350, 797, 351, 352, 353, ! 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, ! 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 0, 0, 0, 0, 0, 348, 349, 350, 798, 351, ! 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, ! 362, 363, 364, 348, 349, 350, 1093, 351, 352, 353, ! 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, ! 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 0, 0, 0, 348, 349, 350, 579, 351, 352, 353, ! 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, ! 364, 348, 349, 350, 580, 351, 352, 353, 354, 355, ! 356, 357, 358, 359, 360, 361, 362, 363, 364, 0, ! 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 0, 0, 15, 0, 833, 0, 0, 0, 0, 0, ! 0, 0, 0, 0, 348, 349, 350, 1014, 351, 352, ! 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, ! 363, 364, 348, 349, 350, 1067, 351, 352, 353, 354, ! 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, ! 348, 349, 350, 0, 351, 352, 353, 354, 355, 356, ! 357, 358, 359, 360, 361, 362, 363, 364 }; static const short yycheck[] = { ! 17, 82, 178, 20, 21, 2, 3, 24, 277, 26, ! 27, 2, 3, 2, 3, 2, 3, 179, 99, 23, ! 419, 25, 25, 573, 392, 616, 573, 392, 410, 761, ! 2, 3, 785, 627, 415, 267, 616, 846, 516, 573, ! 2, 3, 2, 3, 59, 62, 63, 64, 573, 632, ! 405, 655, 284, 34, 319, 407, 504, 184, 616, 790, ! 791, 790, 195, 196, 79, 80, 81, 417, 705, 1, ! 67, 369, 205, 423, 1, 46, 67, 1, 67, 1, ! 67, 98, 410, 216, 1, 1, 410, 410, 46, 1, ! 94, 94, 10, 226, 109, 67, 1, 573, 573, 46, ! 918, 31, 53, 118, 101, 67, 8, 67, 3, 89, ! 101, 24, 127, 26, 94, 1105, 46, 267, 89, 0, ! 938, 136, 272, 3, 4, 966, 90, 91, 209, 31, ! 145, 89, 2, 3, 943, 504, 3, 4, 0, 154, ! 616, 616, 89, 94, 724, 67, 1136, 529, 163, 504, ! 68, 90, 504, 703, 630, 630, 703, 172, 319, 91, ! 31, 609, 610, 611, 612, 463, 724, 91, 95, 703, ! 761, 808, 67, 810, 91, 91, 337, 338, 703, 39, ! 40, 41, 42, 95, 201, 90, 28, 47, 48, 49, ! 50, 573, 67, 31, 576, 75, 1037, 67, 179, 554, ! 80, 529, 557, 3, 4, 529, 529, 439, 75, 1018, ! 67, 8, 510, 80, 231, 95, 233, 234, 235, 799, ! 237, 573, 3, 4, 208, 67, 68, 703, 703, 67, ! 68, 101, 236, 236, 31, 2, 3, 3, 46, 53, ! 609, 610, 611, 612, 794, 573, 261, 794, 576, 573, ! 573, 401, 576, 576, 609, 610, 611, 612, 58, 67, ! 794, 613, 866, 46, 632, 633, 1107, 67, 633, 794, ! 267, 288, 1003, 1004, 1003, 272, 267, 1118, 259, 260, ! 80, 272, 862, 67, 67, 761, 761, 284, 586, 370, ! 53, 885, 58, 284, 75, 284, 313, 284, 67, 80, ! 67, 67, 1034, 1056, 44, 466, 3, 4, 1149, 46, ! 471, 73, 284, 440, 95, 442, 53, 31, 794, 794, ! 95, 703, 284, 340, 284, 8, 66, 90, 68, 462, ! 314, 94, 46, 89, 101, 46, 89, 5, 6, 7, ! 8, 94, 53, 327, 89, 13, 14, 15, 31, 94, ! 367, 368, 704, 67, 68, 339, 5, 6, 7, 8, ! 344, 95, 346, 31, 13, 14, 15, 517, 3, 4, ! 1, 89, 3, 4, 95, 703, 94, 90, 75, 703, ! 703, 94, 31, 80, 560, 67, 56, 57, 248, 249, ! 250, 251, 661, 748, 67, 627, 976, 267, 95, 532, ! 481, 71, 272, 785, 401, 883, 884, 990, 3, 4, ! 401, 67, 794, 410, 284, 396, 999, 682, 3, 410, ! 89, 410, 90, 58, 67, 94, 5, 6, 7, 8, ! 447, 412, 413, 814, 13, 14, 15, 818, 410, 456, ! 75, 90, 439, 1034, 75, 80, 3, 4, 439, 80, ! 439, 46, 439, 28, 67, 68, 31, 785, 67, 68, ! 67, 785, 785, 58, 448, 763, 794, 439, 67, 44, ! 794, 794, 67, 58, 6, 94, 8, 439, 58, 439, ! 89, 89, 67, 68, 3, 80, 503, 67, 68, 46, ! 1070, 89, 509, 1043, 90, 657, 1043, 90, 94, 31, ! 267, 58, 67, 68, 67, 272, 8, 511, 511, 1043, ! 67, 90, 67, 68, 8, 90, 67, 284, 1043, 94, ! 517, 682, 3, 80, 89, 102, 517, 91, 3, 4, ! 91, 401, 529, 46, 89, 616, 1116, 1117, 529, 58, ! 529, 1121, 90, 3, 4, 89, 94, 89, 67, 68, ! 89, 568, 5, 6, 7, 8, 90, 529, 1034, 1034, ! 13, 14, 15, 67, 68, 46, 90, 1043, 1043, 439, ! 94, 89, 432, 433, 434, 435, 573, 58, 31, 576, ! 561, 46, 573, 33, 573, 576, 67, 576, 76, 77, ! 78, 89, 67, 577, 993, 579, 995, 581, 58, 616, ! 75, 573, 89, 91, 576, 80, 67, 67, 68, 56, ! 57, 573, 89, 573, 51, 52, 971, 90, 10, 616, ! 80, 94, 990, 991, 71, 616, 991, 616, 761, 616, ! 627, 999, 1000, 630, 401, 1000, 627, 90, 627, 630, ! 95, 630, 6, 724, 616, 56, 57, 517, 56, 57, ! 58, 59, 60, 885, 616, 627, 616, 738, 630, 90, ! 71, 1043, 743, 680, 44, 627, 1047, 627, 630, 90, ! 630, 90, 439, 94, 1056, 94, 657, 90, 1028, 44, ! 1030, 94, 542, 543, 90, 1040, 546, 547, 94, 266, ! 866, 960, 269, 90, 90, 90, 273, 94, 94, 94, ! 717, 609, 610, 573, 612, 867, 703, 724, 90, 91, ! 886, 887, 703, 75, 703, 1043, 1071, 1072, 90, 1043, ! 1043, 94, 739, 3, 4, 11, 2, 3, 1056, 891, ! 89, 703, 1056, 1056, 10, 11, 12, 741, 742, 742, ! 90, 703, 94, 703, 46, 895, 616, 96, 924, 16, ! 517, 18, 19, 20, 21, 905, 837, 627, 46, 35, ! 630, 37, 89, 39, 761, 41, 89, 43, 89, 45, ! 761, 47, 761, 49, 761, 856, 5, 6, 7, 8, ! 67, 68, 863, 89, 13, 14, 15, 67, 785, 761, ! 89, 67, 67, 68, 785, 75, 785, 794, 779, 761, ! 80, 761, 31, 794, 89, 794, 573, 67, 68, 790, ! 791, 220, 221, 785, 831, 278, 58, 59, 60, 836, ! 412, 413, 794, 99, 46, 101, 96, 687, 688, 689, ! 690, 89, 794, 703, 794, 695, 696, 697, 698, 89, ! 28, 418, 419, 31, 90, 826, 7, 8, 425, 616, ! 990, 991, 13, 14, 15, 90, 44, 44, 765, 766, ! 627, 90, 89, 630, 441, 91, 91, 5, 6, 7, ! 8, 91, 953, 89, 95, 13, 14, 15, 46, 67, ! 68, 1, 91, 89, 89, 89, 867, 968, 885, 28, ! 91, 761, 94, 974, 885, 94, 885, 90, 895, 90, ! 94, 46, 90, 89, 895, 89, 94, 89, 905, 46, ! 891, 1087, 46, 885, 905, 90, 90, 4, 5, 6, ! 7, 8, 8, 885, 794, 885, 13, 14, 15, 392, ! 90, 67, 208, 90, 62, 63, 703, 65, 66, 67, ! 68, 518, 29, 91, 31, 85, 927, 90, 89, 3, ! 1031, 1032, 90, 1034, 5, 6, 7, 8, 46, 91, ! 95, 94, 13, 14, 15, 90, 53, 90, 244, 67, ! 246, 90, 248, 46, 250, 67, 17, 86, 254, 85, ! 256, 46, 90, 998, 89, 67, 67, 67, 75, 67, ! 94, 267, 91, 80, 761, 91, 272, 18, 89, 436, ! 437, 90, 96, 90, 89, 7, 8, 90, 284, 990, ! 991, 13, 14, 15, 89, 885, 90, 89, 999, 1000, ! 89, 67, 1003, 1004, 1105, 895, 94, 794, 90, 31, ! 1111, 90, 1013, 89, 10, 905, 67, 1034, 314, 90, ! 10, 90, 89, 1034, 89, 1034, 1043, 1034, 90, 10, ! 0, 327, 1043, 0, 1043, 1136, 1137, 630, 635, 1056, ! 523, 510, 1034, 339, 408, 1056, 396, 1056, 344, 410, ! 346, 1043, 1034, 410, 1034, 553, 509, 809, 1095, 7, ! 8, 1043, 941, 1043, 1056, 13, 14, 15, 551, 552, ! 667, 845, 990, 439, 671, 924, 570, 674, 675, 927, ! 447, 678, 568, 31, 1038, 5, 6, 7, 8, 755, ! 979, 548, 549, 13, 14, 15, 505, 1040, 885, 3, ! 4, 5, 6, 7, 8, 401, 635, 1113, 895, 7, ! 8, 5, 6, 7, 8, 13, 14, 15, 905, 13, ! 14, 15, 51, 52, 53, 54, 55, 56, 57, 58, ! 59, 60, 428, 576, 430, 1043, 432, 31, 434, 1115, ! 576, 91, 642, 439, 1034, 771, 1087, 512, 887, 632, ! 633, 572, 448, 1043, 35, 36, 37, 38, 39, 40, ! 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ! 90, 75, 703, 630, 777, 1013, 80, 3, 4, 682, ! 586, 7, 8, 572, 641, 642, 12, 13, 14, 15, ! 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, ! 26, 27, 28, 29, 30, 466, 471, -1, -1, -1, ! 1, -1, -1, 4, 811, -1, 7, 8, 815, -1, ! 46, 517, 13, 14, 15, 822, 35, 36, 37, 38, ! -1, -1, -1, -1, 43, 44, 45, 46, 29, -1, ! 31, 32, 699, -1, 540, -1, 542, 1034, 544, 75, ! 546, -1, -1, -1, 80, -1, 1043, 35, 36, 37, ! 38, -1, 53, -1, -1, 43, 44, 45, 46, -1, ! 5, 6, 7, 8, -1, -1, -1, 573, 13, 14, ! 15, 577, -1, 579, 75, 581, -1, -1, -1, 80, ! -1, -1, -1, -1, 751, 752, 31, -1, -1, 896, ! -1, 898, -1, -1, 901, -1, -1, 790, 791, 906, ! 907, -1, 909, -1, -1, -1, -1, 774, 775, -1, ! 616, -1, -1, 780, 781, -1, 923, -1, -1, 926, ! -1, 627, 929, 930, 630, -1, 5, 6, 7, 8, ! -1, 325, 326, 826, 13, 14, 15, -1, -1, -1, ! 231, 53, 54, 55, 56, 57, 58, 59, 60, 343, ! 957, -1, 31, -1, 348, 349, -1, -1, -1, 353, ! 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, ! 364, -1, -1, -1, -1, -1, -1, 683, -1, 685, ! -1, 687, -1, 689, -1, 691, 993, 693, 995, 695, ! -1, 697, 4, 5, 6, 7, 8, 703, -1, 11, ! -1, 13, 14, 15, -1, -1, 899, 900, 1, 403, ! -1, 4, 5, 6, 7, 8, -1, 29, -1, 31, ! 13, 14, 15, -1, -1, 244, 245, 246, 247, 54, ! 55, 56, 57, 58, 59, 60, 29, -1, 31, -1, ! -1, 53, -1, -1, 911, 912, -1, -1, -1, -1, ! 1057, 1058, -1, 1060, -1, 761, 244, 245, 246, 247, ! 53, -1, -1, 75, 5, 6, 7, 8, 80, -1, ! -1, -1, 13, 14, 15, 39, 40, 41, 42, -1, ! -1, -1, 75, 47, 48, 49, 50, 80, 794, 483, ! 484, 5, 6, 7, 8, -1, -1, 990, 991, 13, ! 14, 15, 95, -1, -1, -1, 999, 1000, -1, -1, ! 1003, 1004, -1, -1, 4, 5, 6, 7, 8, -1, ! 1013, -1, -1, 13, 14, 15, 52, 53, 54, 55, ! 56, 57, 58, 59, 60, -1, 530, 531, -1, 29, ! 1, 31, -1, 4, 5, 6, 7, 8, -1, -1, ! -1, -1, 13, 14, 15, -1, -1, -1, 1051, 1052, ! 1053, -1, -1, 53, -1, -1, -1, 28, 29, -1, ! 31, -1, -1, 567, -1, -1, -1, -1, -1, 885, ! -1, -1, -1, 44, -1, 75, 580, -1, -1, 895, ! 80, -1, 53, -1, 5, 6, 7, 8, 904, 905, ! 90, -1, 13, 14, 15, 599, 67, 68, -1, 428, ! 429, 430, 431, -1, 75, -1, -1, -1, 509, 80, ! 31, -1, 5, 6, 7, 8, -1, -1, -1, 90, ! 13, 14, 15, 94, 95, -1, 5, 6, 7, 8, ! 428, 429, 430, 431, 13, 14, 15, -1, -1, 540, ! 541, 542, 543, 544, 545, 546, 547, -1, 4, 5, ! 6, 7, 8, -1, 658, -1, -1, 13, 14, 15, ! -1, -1, 666, -1, -1, -1, 670, -1, -1, -1, ! -1, -1, -1, 29, 248, 249, 250, 251, -1, 1, ! -1, -1, 4, 5, 6, 7, 8, -1, -1, -1, ! -1, 13, 14, 15, -1, -1, -1, 53, -1, -1, ! -1, -1, -1, -1, -1, -1, 28, 29, 712, 31, ! -1, 540, 541, -1, -1, 544, 545, -1, 1034, 75, ! -1, -1, 44, -1, 80, -1, -1, 1043, -1, -1, ! 734, 53, -1, -1, 90, -1, -1, -1, -1, -1, ! -1, -1, 540, 541, -1, -1, 544, 545, -1, -1, ! -1, -1, -1, 75, -1, -1, -1, -1, 80, -1, ! -1, -1, -1, -1, -1, -1, -1, -1, 90, -1, ! -1, -1, 94, 95, -1, -1, -1, -1, -1, -1, ! -1, -1, 683, 684, 685, 686, 687, 688, 689, 690, ! 691, 692, 693, 694, 695, 696, 697, 698, -1, -1, ! -1, -1, -1, -1, -1, 809, -1, -1, 812, -1, ! -1, -1, 816, -1, -1, -1, -1, -1, 1, -1, ! -1, 4, 5, 6, 7, 8, -1, -1, -1, 833, ! 13, 14, 15, 837, -1, -1, -1, -1, -1, -1, ! -1, -1, 846, 847, -1, -1, 29, -1, 31, -1, ! -1, -1, -1, -1, 683, 684, 685, 686, 432, 433, ! 434, 435, 691, 692, 693, 694, -1, -1, -1, -1, ! 53, -1, -1, -1, -1, -1, -1, 1, -1, -1, ! 4, 5, 6, 7, 8, 683, 684, 685, 686, 13, ! 14, 15, 75, 691, 692, 693, 694, 80, -1, -1, ! -1, -1, -1, 1, -1, 29, 4, 5, 6, 7, ! 8, -1, 95, -1, 918, 13, 14, 15, 50, 51, ! 52, 53, 54, 55, 56, 57, 58, 59, 60, 53, ! -1, 29, 4, -1, 938, 7, 8, 941, -1, 943, ! 944, 13, 14, 15, 948, -1, -1, -1, -1, -1, ! -1, 75, -1, -1, -1, 53, 80, 29, -1, 31, ! -1, -1, -1, -1, -1, -1, -1, -1, 542, 543, ! -1, 95, 546, 547, -1, -1, -1, 75, -1, -1, ! 984, 53, 80, 48, 49, 50, 51, 52, 53, 54, ! 55, 56, 57, 58, 59, 60, -1, 95, 1, -1, ! 3, 4, -1, 75, -1, -1, 9, 10, 80, 12, ! -1, 1015, -1, 16, 1018, 18, 19, 20, 21, 22, ! 23, 24, 25, 26, 27, 28, -1, 30, -1, 32, ! -1, 34, 35, 36, 37, 38, -1, -1, -1, 42, ! -1, -1, 1046, -1, -1, 48, -1, -1, 51, -1, ! -1, -1, -1, 56, 57, 58, -1, -1, -1, 62, ! 63, 11, -1, -1, 67, 68, -1, -1, -1, 72, ! -1, 74, 75, -1, -1, -1, 79, 80, -1, -1, ! 83, 84, -1, -1, 87, 88, -1, 90, -1, 92, ! 93, -1, 95, 43, 44, 45, 46, 47, 48, 49, ! 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, ! 60, -1, -1, 687, 688, 689, 690, -1, -1, -1, ! -1, 695, 696, 697, 698, 1, -1, 3, 4, 5, ! 6, 7, 8, 9, 10, -1, 12, 13, 14, 15, ! 16, -1, 18, 19, 20, 21, 22, 23, 24, 25, ! 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, ! 36, 37, 38, -1, -1, -1, 42, -1, -1, -1, ! -1, -1, 48, -1, -1, 51, -1, 53, -1, -1, ! 56, 57, 58, -1, -1, -1, 62, 63, -1, -1, ! -1, 67, 68, -1, -1, -1, 72, -1, 74, 75, ! -1, -1, -1, 79, 80, -1, -1, 83, 84, -1, ! -1, 87, 88, -1, 90, 91, 92, 93, 1, 95, ! 3, 4, 5, 6, 7, 8, 9, 10, -1, 12, ! 13, 14, 15, 16, -1, 18, 19, 20, 21, 22, ! 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, ! -1, 34, 35, 36, 37, 38, -1, -1, -1, 42, ! -1, -1, -1, -1, -1, 48, -1, -1, 51, -1, ! 53, -1, -1, 56, 57, 58, -1, -1, -1, 62, ! 63, -1, -1, -1, 67, 68, -1, -1, -1, 72, ! -1, 74, 75, -1, -1, -1, 79, 80, -1, -1, ! 83, 84, -1, -1, 87, 88, -1, 90, -1, 92, ! 93, 1, 95, 3, 4, -1, -1, -1, -1, 9, ! 10, -1, 12, -1, -1, -1, 16, -1, 18, 19, ! 20, 21, 22, 23, 24, 25, 26, 27, 28, -1, 30, -1, 32, -1, 34, 35, 36, 37, 38, -1, ! -1, -1, 42, -1, -1, -1, -1, -1, 48, -1, ! -1, 51, -1, -1, -1, -1, 56, 57, 58, -1, ! -1, -1, 62, 63, -1, -1, -1, 67, 68, -1, ! -1, -1, 72, -1, 74, 75, -1, -1, -1, 79, ! 80, -1, -1, 83, 84, -1, -1, 87, 88, -1, ! 90, -1, 92, 93, 1, 95, 3, 4, -1, -1, ! 7, 8, 9, 10, -1, 12, 13, 14, 15, 49, ! 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, ! 60, -1, 29, 30, 31, 32, -1, 34, 35, 36, ! 37, 38, -1, -1, -1, 42, -1, -1, -1, -1, ! -1, 48, -1, -1, 51, -1, 53, -1, -1, 56, ! 57, 58, -1, -1, -1, 62, 63, -1, -1, -1, ! 67, 68, -1, -1, -1, 72, -1, 74, 75, -1, ! -1, -1, 79, 80, -1, -1, -1, -1, -1, -1, ! -1, 88, -1, -1, -1, 92, 93, 1, 95, 3, ! 4, -1, -1, -1, -1, 9, 10, 45, 12, 47, ! 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, ! 58, 59, 60, -1, -1, -1, 30, -1, 32, -1, ! 34, 35, 36, 37, 38, -1, -1, -1, 42, -1, ! -1, -1, -1, -1, 48, -1, -1, 51, -1, -1, ! -1, -1, 56, 57, 58, -1, -1, -1, 62, 63, ! -1, -1, 66, 67, 68, -1, -1, -1, 72, -1, ! 74, 75, -1, -1, -1, 79, 80, -1, -1, -1, ! -1, -1, -1, -1, 88, -1, -1, 91, 92, 93, ! 1, 95, 3, 4, -1, -1, -1, -1, 9, 10, ! -1, 12, -1, -1, -1, -1, -1, -1, -1, -1, ! -1, -1, -1, -1, -1, -1, -1, -1, -1, 30, -1, 32, -1, 34, 35, 36, 37, 38, -1, -1, ! -1, 42, -1, -1, -1, -1, -1, 48, -1, -1, ! 51, -1, -1, -1, -1, 56, 57, 58, -1, -1, ! -1, 62, 63, -1, -1, 66, 67, 68, -1, -1, ! -1, 72, -1, 74, 75, 1, -1, 3, 79, 80, ! -1, -1, -1, 9, 10, -1, 12, 88, -1, -1, ! 91, 92, 93, -1, 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, 30, -1, 32, -1, 34, 35, ! 36, 37, 38, -1, -1, -1, 42, -1, 44, -1, ! -1, -1, 48, -1, -1, 51, -1, -1, -1, -1, ! 56, 57, 58, -1, -1, -1, 62, 63, -1, -1, ! 66, 67, 68, 1, -1, 3, 72, -1, 74, -1, ! -1, 9, 10, 79, 12, -1, -1, -1, -1, -1, ! -1, -1, 88, -1, -1, -1, 92, 93, -1, 95, ! -1, -1, 30, -1, 32, -1, 34, 35, 36, 37, ! 38, -1, -1, -1, 42, -1, -1, -1, -1, -1, ! 48, -1, -1, 51, -1, -1, -1, -1, 56, 57, ! 58, -1, -1, -1, 62, 63, -1, -1, -1, 67, ! 68, 1, -1, 3, 72, -1, 74, -1, -1, 9, ! 10, 79, 12, -1, -1, -1, -1, -1, -1, -1, ! 88, -1, -1, -1, 92, 93, -1, 95, -1, -1, ! 30, -1, 32, -1, 34, 35, 36, 37, 38, -1, ! -1, -1, 42, -1, -1, -1, -1, -1, 48, -1, ! -1, 51, -1, -1, -1, -1, 56, 57, 58, -1, ! -1, -1, 62, 63, -1, -1, -1, 67, 68, -1, ! -1, -1, 72, -1, 74, -1, -1, 1, -1, 79, ! 4, 5, 6, 7, 8, -1, -1, -1, 88, 13, ! 14, 15, 92, 93, -1, 95, -1, -1, -1, -1, ! -1, -1, -1, -1, 28, 29, -1, 31, -1, -1, ! -1, -1, 1, -1, 3, 4, 5, 6, 7, 8, ! 44, -1, -1, -1, 13, 14, 15, -1, 3, 53, ! -1, -1, -1, -1, 9, 10, -1, 12, -1, -1, ! 29, -1, 31, 67, 68, -1, -1, -1, -1, -1, ! -1, 75, -1, -1, -1, 30, 80, 32, -1, 34, ! 35, 36, 37, 38, 53, -1, 90, 42, -1, 58, ! 94, 95, -1, 48, -1, -1, 51, -1, 67, -1, ! -1, 56, 57, 58, -1, -1, 75, 62, 63, -1, ! -1, 80, 67, 68, -1, -1, 3, 72, -1, 74, ! -1, 90, 9, 10, 79, 12, -1, -1, -1, -1, ! -1, -1, -1, 88, -1, -1, -1, 92, 93, -1, ! -1, 96, -1, 30, -1, 32, -1, 34, 35, 36, ! 37, 38, -1, -1, -1, 42, -1, -1, -1, -1, ! -1, 48, -1, -1, 51, -1, -1, -1, -1, 56, ! 57, 58, -1, -1, -1, 62, 63, -1, -1, -1, ! 67, 68, -1, -1, -1, 72, -1, 74, -1, -1, ! -1, -1, 79, -1, -1, -1, -1, -1, -1, -1, ! -1, 88, -1, -1, -1, 92, 93, -1, -1, 96, ! 3, 4, 5, 6, 7, 8, 9, 10, -1, 12, ! 13, 14, 15, -1, -1, -1, -1, -1, -1, 22, ! 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, ! -1, 34, 35, 36, 37, 38, -1, -1, -1, 42, ! -1, -1, -1, -1, -1, 48, -1, -1, 51, -1, ! 53, -1, -1, 56, 57, 58, -1, -1, -1, 62, ! 63, -1, -1, -1, 67, 68, -1, -1, -1, 72, ! -1, 74, 75, -1, -1, -1, 79, 80, -1, -1, ! 83, 84, -1, -1, 87, 88, -1, 90, -1, 92, ! 93, -1, 95, 3, 4, -1, -1, -1, -1, 9, ! 10, -1, 12, -1, -1, -1, -1, -1, -1, -1, ! -1, -1, 22, 23, 24, 25, 26, 27, 28, -1, ! 30, -1, 32, -1, 34, 35, 36, 37, 38, -1, ! -1, -1, 42, -1, -1, -1, -1, -1, 48, -1, ! -1, 51, -1, -1, -1, -1, 56, 57, 58, -1, ! -1, -1, 62, 63, -1, -1, -1, 67, 68, -1, ! -1, -1, 72, -1, 74, 75, -1, -1, -1, 79, ! 80, -1, -1, 83, 84, -1, -1, 87, 88, -1, ! 90, 3, 92, 93, -1, 95, -1, 9, 10, -1, ! 12, -1, -1, 4, 5, 6, 7, 8, -1, -1, ! 11, -1, 13, 14, 15, -1, -1, -1, 30, -1, ! 32, -1, 34, 35, 36, 37, 38, -1, 29, -1, ! 42, -1, -1, -1, -1, -1, 48, -1, -1, 51, ! -1, -1, -1, -1, 56, 57, 58, -1, -1, -1, ! 62, 63, 53, -1, -1, 67, 68, -1, -1, -1, ! 72, -1, 74, -1, -1, -1, -1, 79, -1, -1, ! -1, -1, -1, -1, 75, -1, 88, -1, -1, 80, ! 92, 93, -1, 95, 3, 4, -1, -1, 7, 8, ! -1, -1, -1, 12, 13, 14, 15, 16, 17, 18, ! 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, ! 29, 30, 3, 4, 5, 6, 7, 8, 9, 10, ! -1, 12, 13, 14, 15, -1, -1, 46, -1, -1, ! -1, -1, -1, -1, -1, -1, -1, -1, 29, 30, ! 31, 32, -1, 34, 35, 36, 37, 38, -1, -1, ! -1, 42, -1, -1, -1, -1, 75, 48, -1, -1, ! 51, 80, 53, -1, -1, 56, 57, 58, -1, -1, ! -1, 62, 63, -1, -1, 94, 67, 68, -1, -1, ! -1, 72, -1, 74, 75, -1, -1, -1, 79, 80, ! -1, -1, -1, -1, -1, -1, -1, 88, -1, 3, ! 4, 92, 93, 7, 8, 9, 10, -1, 12, 13, ! 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, ! -1, -1, -1, -1, -1, 29, 30, 31, 32, -1, ! 34, 35, 36, 37, 38, -1, -1, -1, 42, -1, ! -1, -1, -1, -1, 48, -1, -1, 51, -1, 53, ! -1, -1, 56, 57, 58, -1, -1, -1, 62, 63, ! -1, -1, -1, 67, 68, -1, -1, -1, 72, -1, ! 74, 75, 3, 4, -1, 79, 80, -1, 9, 10, ! -1, 12, -1, -1, 88, -1, -1, -1, 92, 93, ! -1, -1, -1, -1, -1, -1, -1, -1, -1, 30, ! -1, 32, -1, 34, 35, 36, 37, 38, -1, -1, ! -1, 42, -1, -1, -1, -1, -1, 48, -1, -1, ! 51, -1, -1, -1, -1, 56, 57, 58, -1, -1, ! -1, 62, 63, -1, -1, -1, 67, 68, -1, -1, ! 3, 72, -1, 74, 75, -1, 9, 10, 79, 12, ! -1, -1, -1, -1, -1, -1, -1, 88, -1, -1, ! -1, 92, 93, -1, -1, -1, -1, 30, -1, 32, ! -1, 34, 35, 36, 37, 38, -1, -1, -1, 42, ! -1, -1, -1, -1, -1, 48, -1, -1, 51, -1, ! -1, -1, -1, 56, 57, 58, -1, -1, -1, 62, ! 63, -1, -1, -1, 67, 68, 3, -1, -1, 72, ! -1, 74, 9, 10, -1, 12, 79, -1, -1, -1, ! -1, -1, -1, -1, -1, 88, -1, 90, -1, 92, ! 93, -1, -1, 30, -1, 32, -1, 34, 35, 36, ! 37, 38, -1, -1, -1, 42, -1, -1, -1, -1, ! -1, 48, -1, -1, 51, -1, -1, -1, -1, 56, ! 57, 58, -1, -1, -1, 62, 63, -1, -1, -1, ! 67, 68, 3, -1, -1, 72, -1, 74, 9, 10, ! -1, 12, 79, -1, -1, -1, -1, -1, -1, -1, ! -1, 88, -1, 90, -1, 92, 93, -1, -1, 30, ! -1, 32, -1, 34, 35, 36, 37, 38, -1, -1, ! -1, 42, -1, -1, -1, -1, -1, 48, -1, -1, ! 51, -1, -1, -1, -1, 56, 57, 58, -1, -1, ! -1, 62, 63, -1, -1, -1, 67, 68, 3, -1, ! -1, 72, -1, 74, 9, 10, -1, 12, 79, -1, ! -1, -1, -1, -1, -1, -1, -1, 88, -1, -1, ! -1, 92, 93, -1, -1, 30, -1, 32, -1, 34, ! 35, 36, 37, 38, -1, -1, -1, 42, -1, -1, ! -1, -1, -1, 48, -1, -1, 51, -1, -1, -1, ! -1, 56, 57, 58, -1, -1, -1, 62, 63, -1, ! -1, -1, 67, 68, 3, -1, -1, 72, -1, 74, ! 9, 10, -1, 12, 79, -1, -1, -1, -1, -1, ! -1, -1, -1, 88, -1, -1, -1, 92, 93, -1, -1, 30, -1, 32, -1, 34, 35, 36, 37, 38, ! -1, -1, -1, 42, -1, -1, -1, -1, -1, 48, ! -1, -1, 51, -1, -1, -1, -1, 56, 57, 58, ! -1, -1, -1, 62, 63, -1, -1, -1, 67, 68, ! 3, -1, -1, 72, -1, 74, 9, 10, -1, 12, ! 79, -1, -1, -1, -1, -1, -1, -1, -1, 88, ! -1, -1, -1, 92, 93, -1, -1, 30, -1, 32, ! -1, 34, 35, 36, 37, 38, -1, -1, -1, 42, ! -1, -1, -1, -1, 1, 48, -1, 4, 51, -1, ! 7, 8, -1, 56, 57, 58, 13, 14, 15, 62, ! 63, -1, -1, -1, 67, 68, -1, -1, -1, 72, ! -1, 74, 29, -1, 31, -1, 79, -1, -1, -1, ! 1, -1, -1, 4, -1, 88, 7, 8, -1, 92, ! 93, -1, 13, 14, 15, -1, 53, -1, -1, 1, ! -1, -1, 4, -1, -1, 7, 8, -1, 29, -1, ! 31, 13, 14, 15, -1, -1, -1, -1, 75, 76, ! 77, 78, -1, 80, -1, -1, -1, 29, -1, 31, ! 32, -1, 53, 90, 91, 1, -1, 3, 4, 5, ! 6, 7, 8, -1, -1, -1, -1, 13, 14, 15, ! -1, 53, -1, -1, 75, 76, 77, 78, -1, 80, ! -1, -1, 28, 29, -1, 31, 32, -1, -1, 90, ! 91, -1, -1, 75, -1, -1, -1, -1, 80, -1, ! -1, -1, -1, -1, -1, -1, -1, 53, 90, 91, ! 56, 57, 58, -1, -1, -1, -1, -1, -1, -1, ! -1, 67, -1, 69, 70, 71, -1, -1, -1, 75, ! -1, -1, -1, 79, 80, 81, 82, -1, -1, -1, ! -1, -1, -1, 1, 90, 3, 4, 5, 6, 7, ! 8, -1, -1, 11, -1, 13, 14, 15, -1, -1, ! 1, -1, -1, 4, 5, 6, 7, 8, -1, -1, ! 11, 29, 13, 14, 15, 4, 5, 6, 7, 8, ! -1, -1, -1, -1, 13, 14, 15, -1, 29, -1, ! -1, -1, -1, -1, -1, 53, -1, -1, -1, -1, ! 29, -1, 31, -1, -1, 4, 5, 6, 7, 8, ! -1, -1, 53, -1, 13, 14, 15, 75, -1, -1, ! -1, -1, 80, -1, 53, -1, -1, -1, -1, -1, ! 29, 89, 31, -1, 75, -1, -1, -1, -1, 80, ! -1, -1, -1, -1, -1, -1, 75, -1, 89, -1, ! -1, 80, -1, -1, 53, 4, 5, 6, 7, 8, ! -1, 90, -1, -1, 13, 14, 15, -1, 4, 5, ! 6, 7, 8, -1, -1, -1, 75, 13, 14, 15, ! 29, 80, -1, -1, -1, 4, 5, 6, 7, 8, ! -1, 90, -1, 29, 13, 14, 15, -1, -1, -1, ! -1, -1, -1, -1, 53, -1, -1, -1, -1, -1, ! 29, -1, -1, -1, -1, -1, -1, 53, 4, 5, ! 6, 7, 8, -1, -1, -1, 75, 13, 14, 15, ! -1, 80, -1, -1, 53, -1, 11, -1, -1, 75, ! -1, 90, -1, 29, 80, 31, -1, -1, -1, -1, ! -1, -1, -1, -1, 90, -1, 75, -1, -1, -1, ! -1, 80, -1, -1, -1, -1, -1, 53, 43, 44, ! 45, 90, 47, 48, 49, 50, 51, 52, 53, 54, ! 55, 56, 57, 58, 59, 60, 3, 4, -1, 75, ! 7, 8, -1, -1, 80, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, ! 27, 28, 29, 30, -1, -1, -1, -1, -1, -1, ! -1, 96, 3, 4, -1, -1, 7, 8, -1, 46, ! -1, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, ! 67, -1, -1, -1, -1, -1, -1, -1, 75, -1, ! -1, -1, -1, 80, -1, 46, 3, 4, -1, -1, ! 7, 8, -1, -1, -1, 12, 13, 14, 15, 16, ! 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, ! 27, 28, 29, 30, 75, -1, -1, -1, -1, 80, ! -1, 4, 5, 6, 7, 8, -1, -1, -1, 46, ! 13, 14, 15, -1, 4, 5, 6, 7, 8, -1, ! -1, -1, -1, 13, 14, 15, 29, -1, 31, -1, ! -1, -1, -1, -1, -1, -1, -1, -1, 75, 29, ! -1, 31, -1, 80, 4, 5, 6, 7, 8, -1, ! 53, -1, -1, 13, 14, 15, 4, 5, 6, 7, ! 8, -1, -1, 53, -1, 13, 14, 15, -1, 29, ! -1, 31, 75, -1, -1, -1, -1, 80, -1, -1, ! -1, 29, -1, 31, -1, 75, -1, -1, -1, -1, ! 80, -1, -1, 53, -1, -1, -1, 4, 5, 6, ! 7, 8, -1, -1, -1, 53, 13, 14, 15, -1, ! -1, -1, -1, -1, -1, 75, -1, -1, -1, -1, ! 80, -1, 29, -1, -1, -1, -1, 75, -1, -1, ! -1, -1, 80, 4, 5, 6, 7, 8, -1, -1, ! -1, -1, 13, 14, 15, -1, 53, -1, -1, -1, ! 4, 5, 6, 7, 8, -1, -1, -1, 29, 13, ! 14, 15, -1, -1, -1, -1, -1, -1, 75, -1, ! -1, -1, -1, 80, -1, 29, 4, 5, 6, 7, ! 8, -1, 53, -1, -1, 13, 14, 15, -1, -1, ! -1, -1, -1, -1, -1, -1, -1, -1, -1, 53, ! -1, 29, -1, -1, 75, -1, -1, -1, -1, 80, ! -1, -1, -1, 4, 5, 6, 7, 8, -1, -1, ! -1, 75, 13, 14, 15, 53, 80, -1, -1, -1, ! 4, -1, -1, 7, 8, -1, -1, -1, 29, 13, ! 14, 15, -1, -1, -1, -1, -1, 75, -1, -1, ! 4, -1, 80, 7, 8, 29, -1, 31, -1, 13, ! 14, 15, 53, 4, -1, -1, 7, 8, -1, -1, ! -1, -1, 13, 14, 15, 29, -1, 31, -1, 53, ! -1, -1, 4, -1, 75, 7, 8, -1, 29, 80, ! -1, 13, 14, 15, -1, -1, -1, -1, -1, 53, ! -1, 75, -1, -1, -1, -1, 80, 29, -1, -1, ! -1, -1, 53, -1, -1, -1, -1, -1, -1, -1, ! -1, 75, -1, -1, -1, -1, 80, -1, -1, -1, ! -1, 53, -1, -1, 75, -1, -1, -1, -1, 80, ! -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, ! -1, -1, -1, 75, -1, 43, 44, 45, 80, 47, ! 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, ! 58, 59, 60, 43, 44, 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, ! 60, -1, -1, -1, -1, -1, -1, -1, -1, -1, ! -1, -1, -1, -1, -1, 43, 44, 45, 96, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, ! 58, 59, 60, 43, 44, 45, 96, 47, 48, 49, ! 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, ! 60, -1, -1, -1, -1, -1, -1, -1, -1, -1, ! -1, -1, -1, -1, -1, 43, 44, 45, 96, 47, ! 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, ! 58, 59, 60, 43, 44, 45, 96, 47, 48, 49, ! 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, ! 60, -1, -1, -1, -1, -1, -1, -1, -1, -1, ! -1, -1, -1, 43, 44, 45, 94, 47, 48, 49, ! 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, ! 60, 43, 44, 45, 94, 47, 48, 49, 50, 51, ! 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, ! -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, ! -1, -1, 31, -1, 94, -1, -1, -1, -1, -1, ! -1, -1, -1, -1, 43, 44, 45, 89, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, ! 59, 60, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, ! 43, 44, 45, -1, 47, 48, 49, 50, 51, 52, ! 53, 54, 55, 56, 57, 58, 59, 60 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/usr/share/bison/bison.simple" *************** static const short yycheck[] = *** 2266,2281 **** define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ - #ifdef __cplusplus - # define YYSTD(x) std::x - #else - # define YYSTD(x) x - #endif - - #ifndef YYPARSE_RETURN_TYPE - #define YYPARSE_RETURN_TYPE int - #endif - #if ! defined (yyoverflow) || defined (YYERROR_VERBOSE) /* The parser invokes alloca or malloc; define the necessary symbols. */ --- 2308,2313 ---- *************** static const short yycheck[] = *** 2298,2315 **** /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # else ! # ifdef __cplusplus ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYSIZE_T std::size_t ! # else ! # ifdef __STDC__ ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYSIZE_T size_t ! # endif # endif ! # define YYSTACK_ALLOC YYSTD (malloc) ! # define YYSTACK_FREE YYSTD (free) # endif /* A type that is properly aligned for any stack member. */ union yyalloc --- 2330,2348 ---- /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # else ! # if defined (__STDC__) || defined (__cplusplus) ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYSIZE_T size_t # endif ! # define YYSTACK_ALLOC malloc ! # define YYSTACK_FREE free # endif + #endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */ + + + #if (! defined (yyoverflow) \ + && (! defined (__cplusplus) \ + || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc *************** union yyalloc *** 2336,2359 **** + YYSTACK_GAP_MAX) # endif ! /* Relocate the TYPE 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(Type, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ ! yymemcpy ((char *) yyptr, (char *) (Stack), \ ! yysize * (YYSIZE_T) sizeof (Type)); \ Stack = &yyptr->Stack; \ ! yynewbytes = yystacksize * sizeof (Type) + YYSTACK_GAP_MAX; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (0) ! #endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */ #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) --- 2369,2409 ---- + YYSTACK_GAP_MAX) # endif ! /* Copy COUNT objects from FROM to TO. The source and destination do ! not overlap. */ ! # ifndef YYCOPY ! # if 1 < __GNUC__ ! # define YYCOPY(To, From, Count) \ ! __builtin_memcpy (To, From, (Count) * sizeof (*(From))) ! # else ! # define YYCOPY(To, From, Count) \ ! do \ ! { \ ! register YYSIZE_T yyi; \ ! for (yyi = 0; yyi < (Count); yyi++) \ ! (To)[yyi] = (From)[yyi]; \ ! } \ ! while (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) \ do \ { \ YYSIZE_T yynewbytes; \ ! YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ ! yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (0) ! #endif #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) *************** union yyalloc *** 2363,2376 **** # define YYSIZE_T size_t #endif #if ! defined (YYSIZE_T) ! # ifdef __cplusplus ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYSIZE_T std::size_t ! # else ! # ifdef __STDC__ ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYSIZE_T size_t ! # endif # endif #endif #if ! defined (YYSIZE_T) --- 2413,2421 ---- # define YYSIZE_T size_t #endif #if ! defined (YYSIZE_T) ! # if defined (__STDC__) || defined (__cplusplus) ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYSIZE_T size_t # endif #endif #if ! defined (YYSIZE_T) *************** while (0) *** 2449,2460 **** #if YYDEBUG # ifndef YYFPRINTF ! # ifdef __cplusplus ! # include /* INFRINGES ON USER NAME SPACE */ ! # else ! # include /* INFRINGES ON USER NAME SPACE */ ! # endif ! # define YYFPRINTF YYSTD (fprintf) # endif # define YYDPRINTF(Args) \ --- 2494,2501 ---- #if YYDEBUG # ifndef YYFPRINTF ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ *************** do { \ *** 2462,2471 **** if (yydebug) \ YYFPRINTF Args; \ } while (0) ! /* Nonzero means print parse trace. [The following comment makes no ! sense to me. Could someone clarify it? --akim] Since this is ! uninitialized, it does not stop multiple parsers from coexisting. ! */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) --- 2503,2510 ---- if (yydebug) \ YYFPRINTF Args; \ } while (0) ! /* Nonzero means print parse trace. It is left uninitialized so that ! multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) *************** int yydebug; *** 2491,2523 **** # define YYMAXDEPTH 10000 #endif - #if ! defined (yyoverflow) && ! defined (yymemcpy) - # if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ - # define yymemcpy __builtin_memcpy - # else /* not GNU C or C++ */ - - /* This is the most reliable way to avoid incompatibilities - in available built-in functions on various systems. */ - static void - # if defined (__STDC__) || defined (__cplusplus) - yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T yycount) - # else - yymemcpy (yyto, yyfrom, yycount) - char *yyto; - const char *yyfrom; - YYSIZE_T yycount; - # endif - { - register const char *yyf = yyfrom; - register char *yyt = yyto; - register YYSIZE_T yyi = yycount; - - while (yyi-- != 0) - *yyt++ = *yyf++; - } - # endif - #endif - #ifdef YYERROR_VERBOSE # ifndef yystrlen --- 2530,2535 ---- *************** yystpcpy (yydest, yysrc) *** 2570,2576 **** # endif #endif ! #line 345 "/usr/share/bison/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed --- 2582,2588 ---- # endif #endif ! #line 315 "/usr/share/bison/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed *************** yystpcpy (yydest, yysrc) *** 2580,2592 **** to the proper pointer type. */ #ifdef YYPARSE_PARAM ! # ifdef __cplusplus # define YYPARSE_PARAM_ARG void *YYPARSE_PARAM # define YYPARSE_PARAM_DECL ! # else /* !__cplusplus */ # define YYPARSE_PARAM_ARG YYPARSE_PARAM # define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; ! # endif /* !__cplusplus */ #else /* !YYPARSE_PARAM */ # define YYPARSE_PARAM_ARG # define YYPARSE_PARAM_DECL --- 2592,2604 ---- to the proper pointer type. */ #ifdef YYPARSE_PARAM ! # if defined (__STDC__) || defined (__cplusplus) # define YYPARSE_PARAM_ARG void *YYPARSE_PARAM # define YYPARSE_PARAM_DECL ! # else # define YYPARSE_PARAM_ARG YYPARSE_PARAM # define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; ! # endif #else /* !YYPARSE_PARAM */ # define YYPARSE_PARAM_ARG # define YYPARSE_PARAM_DECL *************** yystpcpy (yydest, yysrc) *** 2595,2603 **** /* Prevent warning if -Wstrict-prototypes. */ #ifdef __GNUC__ # ifdef YYPARSE_PARAM ! YYPARSE_RETURN_TYPE yyparse (void *); # else ! YYPARSE_RETURN_TYPE yyparse (void); # endif #endif --- 2607,2615 ---- /* Prevent warning if -Wstrict-prototypes. */ #ifdef __GNUC__ # ifdef YYPARSE_PARAM ! int yyparse (void *); # else ! int yyparse (void); # endif #endif *************** YY_DECL_NON_LSP_VARIABLES *** 2632,2638 **** YY_DECL_VARIABLES #endif /* !YYPURE */ ! YYPARSE_RETURN_TYPE yyparse (YYPARSE_PARAM_ARG) YYPARSE_PARAM_DECL { --- 2644,2650 ---- YY_DECL_VARIABLES #endif /* !YYPURE */ ! int yyparse (YYPARSE_PARAM_ARG) YYPARSE_PARAM_DECL { *************** yyparse (YYPARSE_PARAM_ARG) *** 2760,2765 **** --- 2772,2780 ---- yyvs = yyvs1; } #else /* no yyoverflow */ + # ifndef YYSTACK_RELOCATE + goto yyoverflowlab; + # else /* Extend the stack our own way. */ if (yystacksize >= YYMAXDEPTH) goto yyoverflowlab; *************** yyparse (YYPARSE_PARAM_ARG) *** 2773,2787 **** (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyoverflowlab; ! YYSTACK_RELOCATE (short, yyss); ! YYSTACK_RELOCATE (YYSTYPE, yyvs); # if YYLSP_NEEDED ! YYSTACK_RELOCATE (YYLTYPE, yyls); # endif # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; --- 2788,2803 ---- (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyoverflowlab; ! YYSTACK_RELOCATE (yyss); ! YYSTACK_RELOCATE (yyvs); # if YYLSP_NEEDED ! YYSTACK_RELOCATE (yyls); # endif # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } + # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; *************** yyreduce: *** 2960,2999 **** switch (yyn) { case 1: ! #line 345 "objc-parse.y" { if (pedantic) pedwarn ("ISO C forbids an empty source file"); - finish_file (); - ; - break;} - case 2: - #line 350 "objc-parse.y" - { - /* In case there were missing closebraces, - get us back to the global binding level. */ - while (! global_bindings_p ()) - poplevel (0, 0, 0); - /* __FUNCTION__ is defined at file scope (""). This - call may not be necessary as my tests indicate it - still works without it. */ - finish_fname_decls (); - finish_file (); ; break;} case 3: ! #line 368 "objc-parse.y" {yyval.ttype = NULL_TREE; ; break;} case 5: ! #line 369 "objc-parse.y" {yyval.ttype = NULL_TREE; ggc_collect(); ; break;} case 7: ! #line 374 "objc-parse.y" { parsing_iso_function_signature = false; ; break;} case 11: ! #line 382 "objc-parse.y" { STRIP_NOPS (yyvsp[-2].ttype); if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR && TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST) --- 2976,3000 ---- switch (yyn) { case 1: ! #line 343 "objc/objc-parse.y" { if (pedantic) pedwarn ("ISO C forbids an empty source file"); ; break;} case 3: ! #line 354 "objc/objc-parse.y" {yyval.ttype = NULL_TREE; ; break;} case 5: ! #line 355 "objc/objc-parse.y" {yyval.ttype = NULL_TREE; ggc_collect(); ; break;} case 7: ! #line 360 "objc/objc-parse.y" { parsing_iso_function_signature = false; ; break;} case 11: ! #line 368 "objc/objc-parse.y" { STRIP_NOPS (yyvsp[-2].ttype); if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR && TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST) *************** case 11: *** 3003,3013 **** error ("argument of `asm' is not a constant string"); ; break;} case 12: ! #line 390 "objc-parse.y" ! { RESTORE_EXT_FLAGS (yyvsp[-1].ttype); ; break;} case 13: ! #line 395 "objc-parse.y" { if (pedantic) error ("ISO C forbids data definition with no type or storage class"); else --- 3004,3014 ---- error ("argument of `asm' is not a constant string"); ; break;} case 12: ! #line 376 "objc/objc-parse.y" ! { RESTORE_EXT_FLAGS (yyvsp[-1].itype); ; break;} case 13: ! #line 381 "objc/objc-parse.y" { if (pedantic) error ("ISO C forbids data definition with no type or storage class"); else *************** case 13: *** 3016,3168 **** POP_DECLSPEC_STACK; ; break;} case 14: ! #line 402 "objc-parse.y" { POP_DECLSPEC_STACK; ; break;} case 15: ! #line 404 "objc-parse.y" { POP_DECLSPEC_STACK; ; break;} case 16: ! #line 406 "objc-parse.y" { shadow_tag (yyvsp[-1].ttype); ; break;} case 19: ! #line 410 "objc-parse.y" { if (pedantic) pedwarn ("ISO C does not allow extra `;' outside of a function"); ; break;} case 20: ! #line 416 "objc-parse.y" { if (! start_function (current_declspecs, yyvsp[0].ttype, all_prefix_attributes)) YYERROR1; ; break;} case 21: ! #line 421 "objc-parse.y" ! { store_parm_decls (); ; break;} case 22: ! #line 423 "objc-parse.y" ! { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename; ! DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno; ! finish_function (0, 1); POP_DECLSPEC_STACK; ; break;} case 23: ! #line 428 "objc-parse.y" { POP_DECLSPEC_STACK; ; break;} case 24: ! #line 430 "objc-parse.y" { if (! start_function (current_declspecs, yyvsp[0].ttype, all_prefix_attributes)) YYERROR1; ; break;} case 25: ! #line 435 "objc-parse.y" ! { store_parm_decls (); ; break;} case 26: ! #line 437 "objc-parse.y" ! { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename; ! DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno; ! finish_function (0, 1); POP_DECLSPEC_STACK; ; break;} case 27: ! #line 442 "objc-parse.y" { POP_DECLSPEC_STACK; ; break;} case 28: ! #line 444 "objc-parse.y" { if (! start_function (NULL_TREE, yyvsp[0].ttype, all_prefix_attributes)) YYERROR1; ; break;} case 29: ! #line 449 "objc-parse.y" ! { store_parm_decls (); ; break;} case 30: ! #line 451 "objc-parse.y" ! { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename; ! DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno; ! finish_function (0, 1); POP_DECLSPEC_STACK; ; break;} case 31: ! #line 456 "objc-parse.y" { POP_DECLSPEC_STACK; ; break;} case 36: ! #line 467 "objc-parse.y" { yyval.code = ADDR_EXPR; ; break;} case 37: ! #line 469 "objc-parse.y" { yyval.code = NEGATE_EXPR; ; break;} case 38: ! #line 471 "objc-parse.y" { yyval.code = CONVERT_EXPR; ; break;} case 39: ! #line 474 "objc-parse.y" { yyval.code = PREINCREMENT_EXPR; ; break;} case 40: ! #line 476 "objc-parse.y" { yyval.code = PREDECREMENT_EXPR; ; break;} case 41: ! #line 478 "objc-parse.y" { yyval.code = BIT_NOT_EXPR; ; break;} case 42: ! #line 480 "objc-parse.y" { yyval.code = TRUTH_NOT_EXPR; ; break;} case 43: ! #line 484 "objc-parse.y" { yyval.ttype = build_compound_expr (yyvsp[0].ttype); ; break;} case 44: ! #line 489 "objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 46: ! #line 495 "objc-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} case 47: ! #line 497 "objc-parse.y" { chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} case 49: ! #line 503 "objc-parse.y" { yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); ; break;} case 50: ! #line 506 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ! RESTORE_EXT_FLAGS (yyvsp[-1].ttype); ; break;} case 51: ! #line 509 "objc-parse.y" { yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0); overflow_warning (yyval.ttype); ; break;} case 52: ! #line 513 "objc-parse.y" { yyval.ttype = finish_label_address_expr (yyvsp[0].ttype); ; break;} case 53: ! #line 515 "objc-parse.y" { skip_evaluation--; if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[0].ttype, 1))) --- 3017,3166 ---- POP_DECLSPEC_STACK; ; break;} case 14: ! #line 388 "objc/objc-parse.y" { POP_DECLSPEC_STACK; ; break;} case 15: ! #line 390 "objc/objc-parse.y" { POP_DECLSPEC_STACK; ; break;} case 16: ! #line 392 "objc/objc-parse.y" { shadow_tag (yyvsp[-1].ttype); ; break;} case 19: ! #line 396 "objc/objc-parse.y" { if (pedantic) pedwarn ("ISO C does not allow extra `;' outside of a function"); ; break;} case 20: ! #line 402 "objc/objc-parse.y" { if (! start_function (current_declspecs, yyvsp[0].ttype, all_prefix_attributes)) YYERROR1; ; break;} case 21: ! #line 407 "objc/objc-parse.y" ! { DECL_SOURCE_LOCATION (current_function_decl) = yyvsp[0].location; ! store_parm_decls (); ; break;} case 22: ! #line 410 "objc/objc-parse.y" ! { finish_function (); POP_DECLSPEC_STACK; ; break;} case 23: ! #line 413 "objc/objc-parse.y" { POP_DECLSPEC_STACK; ; break;} case 24: ! #line 415 "objc/objc-parse.y" { if (! start_function (current_declspecs, yyvsp[0].ttype, all_prefix_attributes)) YYERROR1; ; break;} case 25: ! #line 420 "objc/objc-parse.y" ! { DECL_SOURCE_LOCATION (current_function_decl) = yyvsp[0].location; ! store_parm_decls (); ; break;} case 26: ! #line 423 "objc/objc-parse.y" ! { finish_function (); POP_DECLSPEC_STACK; ; break;} case 27: ! #line 426 "objc/objc-parse.y" { POP_DECLSPEC_STACK; ; break;} case 28: ! #line 428 "objc/objc-parse.y" { if (! start_function (NULL_TREE, yyvsp[0].ttype, all_prefix_attributes)) YYERROR1; ; break;} case 29: ! #line 433 "objc/objc-parse.y" ! { DECL_SOURCE_LOCATION (current_function_decl) = yyvsp[0].location; ! store_parm_decls (); ; break;} case 30: ! #line 436 "objc/objc-parse.y" ! { finish_function (); POP_DECLSPEC_STACK; ; break;} case 31: ! #line 439 "objc/objc-parse.y" { POP_DECLSPEC_STACK; ; break;} case 36: ! #line 450 "objc/objc-parse.y" { yyval.code = ADDR_EXPR; ; break;} case 37: ! #line 452 "objc/objc-parse.y" { yyval.code = NEGATE_EXPR; ; break;} case 38: ! #line 454 "objc/objc-parse.y" { yyval.code = CONVERT_EXPR; ; break;} case 39: ! #line 457 "objc/objc-parse.y" { yyval.code = PREINCREMENT_EXPR; ; break;} case 40: ! #line 459 "objc/objc-parse.y" { yyval.code = PREDECREMENT_EXPR; ; break;} case 41: ! #line 461 "objc/objc-parse.y" { yyval.code = BIT_NOT_EXPR; ; break;} case 42: ! #line 463 "objc/objc-parse.y" { yyval.code = TRUTH_NOT_EXPR; ; break;} case 43: ! #line 467 "objc/objc-parse.y" { yyval.ttype = build_compound_expr (yyvsp[0].ttype); ; break;} case 44: ! #line 472 "objc/objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 46: ! #line 478 "objc/objc-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} case 47: ! #line 480 "objc/objc-parse.y" { chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} case 49: ! #line 486 "objc/objc-parse.y" { yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); ; break;} case 50: ! #line 489 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ! RESTORE_EXT_FLAGS (yyvsp[-1].itype); ; break;} case 51: ! #line 492 "objc/objc-parse.y" { yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0); overflow_warning (yyval.ttype); ; break;} case 52: ! #line 496 "objc/objc-parse.y" { yyval.ttype = finish_label_address_expr (yyvsp[0].ttype); ; break;} case 53: ! #line 498 "objc/objc-parse.y" { skip_evaluation--; if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[0].ttype, 1))) *************** case 53: *** 3170,3316 **** yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); ; break;} case 54: ! #line 521 "objc-parse.y" { skip_evaluation--; yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); ; break;} case 55: ! #line 524 "objc-parse.y" { skip_evaluation--; yyval.ttype = c_alignof_expr (yyvsp[0].ttype); ; break;} case 56: ! #line 527 "objc-parse.y" { skip_evaluation--; yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); ; break;} case 57: ! #line 530 "objc-parse.y" { yyval.ttype = build_unary_op (REALPART_EXPR, yyvsp[0].ttype, 0); ; break;} case 58: ! #line 532 "objc-parse.y" { yyval.ttype = build_unary_op (IMAGPART_EXPR, yyvsp[0].ttype, 0); ; break;} case 59: ! #line 536 "objc-parse.y" { skip_evaluation++; ; break;} case 60: ! #line 540 "objc-parse.y" { skip_evaluation++; ; break;} case 61: ! #line 544 "objc-parse.y" { skip_evaluation++; ; break;} case 63: ! #line 550 "objc-parse.y" { yyval.ttype = c_cast_expr (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 65: ! #line 556 "objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 66: ! #line 558 "objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 67: ! #line 560 "objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 68: ! #line 562 "objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 69: ! #line 564 "objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 70: ! #line 566 "objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 71: ! #line 568 "objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 72: ! #line 570 "objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 73: ! #line 572 "objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 74: ! #line 574 "objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 75: ! #line 576 "objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 76: ! #line 578 "objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 77: ! #line 580 "objc-parse.y" { yyvsp[-1].ttype = c_common_truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); ! skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ; break;} case 78: ! #line 584 "objc-parse.y" ! { skip_evaluation -= yyvsp[-3].ttype == boolean_false_node; yyval.ttype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} case 79: ! #line 587 "objc-parse.y" { yyvsp[-1].ttype = c_common_truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); ! skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ; break;} case 80: ! #line 591 "objc-parse.y" ! { skip_evaluation -= yyvsp[-3].ttype == boolean_true_node; yyval.ttype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} case 81: ! #line 594 "objc-parse.y" { yyvsp[-1].ttype = c_common_truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); ! skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ; break;} case 82: ! #line 598 "objc-parse.y" ! { skip_evaluation += ((yyvsp[-4].ttype == boolean_true_node) ! - (yyvsp[-4].ttype == boolean_false_node)); ; break;} case 83: ! #line 601 "objc-parse.y" ! { skip_evaluation -= yyvsp[-6].ttype == boolean_true_node; yyval.ttype = build_conditional_expr (yyvsp[-6].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} case 84: ! #line 604 "objc-parse.y" { if (pedantic) pedwarn ("ISO C forbids omitting the middle term of a ?: expression"); /* Make sure first operand is calculated only once. */ yyvsp[0].ttype = save_expr (yyvsp[-1].ttype); yyvsp[-1].ttype = c_common_truthvalue_conversion (default_conversion (yyvsp[0].ttype)); ! skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ; break;} case 85: ! #line 612 "objc-parse.y" ! { skip_evaluation -= yyvsp[-4].ttype == boolean_true_node; yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} case 86: ! #line 615 "objc-parse.y" { char class; yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype); class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype)); --- 3168,3314 ---- yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); ; break;} case 54: ! #line 504 "objc/objc-parse.y" { skip_evaluation--; yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); ; break;} case 55: ! #line 507 "objc/objc-parse.y" { skip_evaluation--; yyval.ttype = c_alignof_expr (yyvsp[0].ttype); ; break;} case 56: ! #line 510 "objc/objc-parse.y" { skip_evaluation--; yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); ; break;} case 57: ! #line 513 "objc/objc-parse.y" { yyval.ttype = build_unary_op (REALPART_EXPR, yyvsp[0].ttype, 0); ; break;} case 58: ! #line 515 "objc/objc-parse.y" { yyval.ttype = build_unary_op (IMAGPART_EXPR, yyvsp[0].ttype, 0); ; break;} case 59: ! #line 519 "objc/objc-parse.y" { skip_evaluation++; ; break;} case 60: ! #line 523 "objc/objc-parse.y" { skip_evaluation++; ; break;} case 61: ! #line 527 "objc/objc-parse.y" { skip_evaluation++; ; break;} case 63: ! #line 533 "objc/objc-parse.y" { yyval.ttype = c_cast_expr (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 65: ! #line 539 "objc/objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 66: ! #line 541 "objc/objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 67: ! #line 543 "objc/objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 68: ! #line 545 "objc/objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 69: ! #line 547 "objc/objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 70: ! #line 549 "objc/objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 71: ! #line 551 "objc/objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 72: ! #line 553 "objc/objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 73: ! #line 555 "objc/objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 74: ! #line 557 "objc/objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 75: ! #line 559 "objc/objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 76: ! #line 561 "objc/objc-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 77: ! #line 563 "objc/objc-parse.y" { yyvsp[-1].ttype = c_common_truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); ! skip_evaluation += yyvsp[-1].ttype == truthvalue_false_node; ; break;} case 78: ! #line 567 "objc/objc-parse.y" ! { skip_evaluation -= yyvsp[-3].ttype == truthvalue_false_node; yyval.ttype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} case 79: ! #line 570 "objc/objc-parse.y" { yyvsp[-1].ttype = c_common_truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); ! skip_evaluation += yyvsp[-1].ttype == truthvalue_true_node; ; break;} case 80: ! #line 574 "objc/objc-parse.y" ! { skip_evaluation -= yyvsp[-3].ttype == truthvalue_true_node; yyval.ttype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} case 81: ! #line 577 "objc/objc-parse.y" { yyvsp[-1].ttype = c_common_truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); ! skip_evaluation += yyvsp[-1].ttype == truthvalue_false_node; ; break;} case 82: ! #line 581 "objc/objc-parse.y" ! { skip_evaluation += ((yyvsp[-4].ttype == truthvalue_true_node) ! - (yyvsp[-4].ttype == truthvalue_false_node)); ; break;} case 83: ! #line 584 "objc/objc-parse.y" ! { skip_evaluation -= yyvsp[-6].ttype == truthvalue_true_node; yyval.ttype = build_conditional_expr (yyvsp[-6].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} case 84: ! #line 587 "objc/objc-parse.y" { if (pedantic) pedwarn ("ISO C forbids omitting the middle term of a ?: expression"); /* Make sure first operand is calculated only once. */ yyvsp[0].ttype = save_expr (yyvsp[-1].ttype); yyvsp[-1].ttype = c_common_truthvalue_conversion (default_conversion (yyvsp[0].ttype)); ! skip_evaluation += yyvsp[-1].ttype == truthvalue_true_node; ; break;} case 85: ! #line 595 "objc/objc-parse.y" ! { skip_evaluation -= yyvsp[-4].ttype == truthvalue_true_node; yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} case 86: ! #line 598 "objc/objc-parse.y" { char class; yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype); class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype)); *************** case 86: *** 3319,3325 **** ; break;} case 87: ! #line 622 "objc-parse.y" { char class; yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype); /* This inhibits warnings in --- 3317,3323 ---- ; break;} case 87: ! #line 605 "objc/objc-parse.y" { char class; yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype); /* This inhibits warnings in *************** case 87: *** 3330,3386 **** ; break;} case 88: ! #line 634 "objc-parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; yyval.ttype = build_external_ref (yyvsp[0].ttype, yychar == '('); ; break;} - case 90: - #line 641 "objc-parse.y" - { yyval.ttype = fix_string_type (yyval.ttype); ; - break;} case 91: ! #line 643 "objc-parse.y" { yyval.ttype = fname_decl (C_RID_CODE (yyval.ttype), yyval.ttype); ; break;} case 92: ! #line 645 "objc-parse.y" { start_init (NULL_TREE, NULL, 0); yyvsp[-2].ttype = groktypename (yyvsp[-2].ttype); really_start_incremental_init (yyvsp[-2].ttype); ; break;} case 93: ! #line 649 "objc-parse.y" { tree constructor = pop_init_level (0); tree type = yyvsp[-5].ttype; finish_init (); if (pedantic && ! flag_isoc99) ! pedwarn ("ISO C89 forbids compound literals"); yyval.ttype = build_compound_literal (type, constructor); ; break;} case 94: ! #line 658 "objc-parse.y" { char class = TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)); if (IS_EXPR_CODE_CLASS (class)) C_SET_EXP_ORIGINAL_CODE (yyvsp[-1].ttype, ERROR_MARK); yyval.ttype = yyvsp[-1].ttype; ; break;} case 95: ! #line 663 "objc-parse.y" { yyval.ttype = error_mark_node; ; break;} case 96: ! #line 665 "objc-parse.y" { tree saved_last_tree; if (pedantic) pedwarn ("ISO C forbids braced-groups within expressions"); - pop_label_level (); - saved_last_tree = COMPOUND_BODY (yyvsp[-2].ttype); RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype)); last_tree = saved_last_tree; --- 3328,3378 ---- ; break;} case 88: ! #line 617 "objc/objc-parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; yyval.ttype = build_external_ref (yyvsp[0].ttype, yychar == '('); ; break;} case 91: ! #line 625 "objc/objc-parse.y" { yyval.ttype = fname_decl (C_RID_CODE (yyval.ttype), yyval.ttype); ; break;} case 92: ! #line 627 "objc/objc-parse.y" { start_init (NULL_TREE, NULL, 0); yyvsp[-2].ttype = groktypename (yyvsp[-2].ttype); really_start_incremental_init (yyvsp[-2].ttype); ; break;} case 93: ! #line 631 "objc/objc-parse.y" { tree constructor = pop_init_level (0); tree type = yyvsp[-5].ttype; finish_init (); if (pedantic && ! flag_isoc99) ! pedwarn ("ISO C90 forbids compound literals"); yyval.ttype = build_compound_literal (type, constructor); ; break;} case 94: ! #line 640 "objc/objc-parse.y" { char class = TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)); if (IS_EXPR_CODE_CLASS (class)) C_SET_EXP_ORIGINAL_CODE (yyvsp[-1].ttype, ERROR_MARK); yyval.ttype = yyvsp[-1].ttype; ; break;} case 95: ! #line 645 "objc/objc-parse.y" { yyval.ttype = error_mark_node; ; break;} case 96: ! #line 647 "objc/objc-parse.y" { tree saved_last_tree; if (pedantic) pedwarn ("ISO C forbids braced-groups within expressions"); saved_last_tree = COMPOUND_BODY (yyvsp[-2].ttype); RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype)); last_tree = saved_last_tree; *************** case 96: *** 3392,3415 **** ; break;} case 97: ! #line 681 "objc-parse.y" { - pop_label_level (); last_tree = COMPOUND_BODY (yyvsp[-2].ttype); TREE_CHAIN (last_tree) = NULL_TREE; yyval.ttype = error_mark_node; ; break;} case 98: ! #line 688 "objc-parse.y" { yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 99: ! #line 690 "objc-parse.y" { yyval.ttype = build_va_arg (yyvsp[-3].ttype, groktypename (yyvsp[-1].ttype)); ; break;} case 100: ! #line 693 "objc-parse.y" { tree c; --- 3384,3406 ---- ; break;} case 97: ! #line 661 "objc/objc-parse.y" { last_tree = COMPOUND_BODY (yyvsp[-2].ttype); TREE_CHAIN (last_tree) = NULL_TREE; yyval.ttype = error_mark_node; ; break;} case 98: ! #line 667 "objc/objc-parse.y" { yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 99: ! #line 669 "objc/objc-parse.y" { yyval.ttype = build_va_arg (yyvsp[-3].ttype, groktypename (yyvsp[-1].ttype)); ; break;} case 100: ! #line 672 "objc/objc-parse.y" { tree c; *************** case 100: *** 3421,3443 **** ; break;} case 101: ! #line 703 "objc-parse.y" { tree e1, e2; e1 = TYPE_MAIN_VARIANT (groktypename (yyvsp[-3].ttype)); e2 = TYPE_MAIN_VARIANT (groktypename (yyvsp[-1].ttype)); ! yyval.ttype = comptypes (e1, e2) ? build_int_2 (1, 0) : build_int_2 (0, 0); ; break;} case 102: ! #line 713 "objc-parse.y" { yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 103: ! #line 715 "objc-parse.y" { if (!is_public (yyvsp[-2].ttype, yyvsp[0].ttype)) yyval.ttype = error_mark_node; --- 3412,3434 ---- ; break;} case 101: ! #line 682 "objc/objc-parse.y" { tree e1, e2; e1 = TYPE_MAIN_VARIANT (groktypename (yyvsp[-3].ttype)); e2 = TYPE_MAIN_VARIANT (groktypename (yyvsp[-1].ttype)); ! yyval.ttype = comptypes (e1, e2, COMPARE_STRICT) ? build_int_2 (1, 0) : build_int_2 (0, 0); ; break;} case 102: ! #line 692 "objc/objc-parse.y" { yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 103: ! #line 694 "objc/objc-parse.y" { if (!is_public (yyvsp[-2].ttype, yyvsp[0].ttype)) yyval.ttype = error_mark_node; *************** case 103: *** 3446,3452 **** ; break;} case 104: ! #line 722 "objc-parse.y" { tree expr = build_indirect_ref (yyvsp[-2].ttype, "->"); --- 3437,3443 ---- ; break;} case 104: ! #line 701 "objc/objc-parse.y" { tree expr = build_indirect_ref (yyvsp[-2].ttype, "->"); *************** case 104: *** 3457,4200 **** ; break;} case 105: ! #line 731 "objc-parse.y" { yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ; break;} case 106: ! #line 733 "objc-parse.y" { yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ; break;} case 107: ! #line 735 "objc-parse.y" { yyval.ttype = build_message_expr (yyvsp[0].ttype); ; break;} case 108: ! #line 737 "objc-parse.y" { yyval.ttype = build_selector_expr (yyvsp[0].ttype); ; break;} case 109: ! #line 739 "objc-parse.y" { yyval.ttype = build_protocol_expr (yyvsp[0].ttype); ; break;} case 110: ! #line 741 "objc-parse.y" { yyval.ttype = build_encode_expr (yyvsp[0].ttype); ; break;} case 111: ! #line 743 "objc-parse.y" { yyval.ttype = build_objc_string_object (yyvsp[0].ttype); ; break;} case 112: ! #line 750 "objc-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ; ! break;} ! case 113: ! #line 752 "objc-parse.y" ! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ; ! break;} ! case 114: ! #line 757 "objc-parse.y" { parsing_iso_function_signature = false; /* Reset after decls. */ ; break;} ! case 115: ! #line 764 "objc-parse.y" { if (warn_traditional && !in_system_header && parsing_iso_function_signature) warning ("traditional C rejects ISO C style function definitions"); parsing_iso_function_signature = false; /* Reset after warning. */ ; break;} ! case 117: ! #line 778 "objc-parse.y" { ; break;} ! case 122: ! #line 794 "objc-parse.y" { POP_DECLSPEC_STACK; ; break;} ! case 123: ! #line 796 "objc-parse.y" { POP_DECLSPEC_STACK; ; break;} ! case 124: ! #line 798 "objc-parse.y" { shadow_tag_warned (yyvsp[-1].ttype, 1); pedwarn ("empty declaration"); ; break;} ! case 125: ! #line 801 "objc-parse.y" { pedwarn ("empty declaration"); ; break;} ! case 126: ! #line 810 "objc-parse.y" { ; break;} ! case 127: ! #line 818 "objc-parse.y" { pending_xref_error (); PUSH_DECLSPEC_STACK; split_specs_attrs (yyvsp[0].ttype, ¤t_declspecs, &prefix_attributes); all_prefix_attributes = prefix_attributes; ; break;} ! case 128: ! #line 829 "objc-parse.y" { all_prefix_attributes = chainon (yyvsp[0].ttype, prefix_attributes); ; break;} ! case 129: ! #line 834 "objc-parse.y" { POP_DECLSPEC_STACK; ; break;} ! case 130: ! #line 836 "objc-parse.y" { POP_DECLSPEC_STACK; ; break;} ! case 131: ! #line 838 "objc-parse.y" { POP_DECLSPEC_STACK; ; break;} ! case 132: ! #line 840 "objc-parse.y" { POP_DECLSPEC_STACK; ; break;} ! case 133: ! #line 842 "objc-parse.y" { shadow_tag (yyvsp[-1].ttype); ; break;} ! case 134: ! #line 844 "objc-parse.y" ! { RESTORE_EXT_FLAGS (yyvsp[-1].ttype); ; break;} ! case 135: ! #line 901 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 136: ! #line 904 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 137: ! #line 907 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 138: ! #line 913 "objc-parse.y" { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 139: ! #line 919 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 140: ! #line 922 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 141: ! #line 928 "objc-parse.y" { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); TREE_STATIC (yyval.ttype) = 0; ; break;} ! case 142: ! #line 931 "objc-parse.y" { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 143: ! #line 937 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); TREE_STATIC (yyval.ttype) = 1; ; break;} case 144: ! #line 940 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 145: ! #line 943 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 146: ! #line 946 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 147: ! #line 949 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 148: ! #line 952 "objc-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 149: ! #line 955 "objc-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; break;} case 150: ! #line 961 "objc-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); TREE_STATIC (yyval.ttype) = 1; ; break;} case 151: ! #line 964 "objc-parse.y" ! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} case 152: ! #line 967 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 153: ! #line 970 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 154: ! #line 973 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 155: ! #line 976 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 156: ! #line 982 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 157: ! #line 985 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 158: ! #line 988 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 159: ! #line 991 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 160: ! #line 994 "objc-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; break;} case 161: ! #line 997 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 162: ! #line 1003 "objc-parse.y" ! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} case 163: ! #line 1006 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 164: ! #line 1009 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 165: ! #line 1012 "objc-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 166: ! #line 1015 "objc-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 167: ! #line 1021 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); TREE_STATIC (yyval.ttype) = 0; ; break;} ! case 168: ! #line 1024 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 169: ! #line 1027 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 170: ! #line 1030 "objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 171: ! #line 1036 "objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 172: ! #line 1042 "objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 173: ! #line 1048 "objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 174: ! #line 1057 "objc-parse.y" { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 175: ! #line 1063 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 176: ! #line 1066 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 177: ! #line 1069 "objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 178: ! #line 1075 "objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 179: ! #line 1081 "objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 180: ! #line 1087 "objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 181: ! #line 1096 "objc-parse.y" { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 182: ! #line 1102 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 183: ! #line 1105 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 184: ! #line 1108 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 185: ! #line 1111 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 186: ! #line 1114 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 187: ! #line 1117 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 188: ! #line 1120 "objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 189: ! #line 1126 "objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 190: ! #line 1132 "objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 191: ! #line 1138 "objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 192: ! #line 1147 "objc-parse.y" { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} case 193: ! #line 1150 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 194: ! #line 1153 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 195: ! #line 1156 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 196: ! #line 1159 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 197: ! #line 1165 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 198: ! #line 1168 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 199: ! #line 1171 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 200: ! #line 1174 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 201: ! #line 1177 "objc-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 202: ! #line 1180 "objc-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 203: ! #line 1183 "objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 204: ! #line 1189 "objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 205: ! #line 1195 "objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 206: ! #line 1201 "objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 207: ! #line 1210 "objc-parse.y" { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 208: ! #line 1213 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 209: ! #line 1216 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 210: ! #line 1219 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 211: ! #line 1222 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 268: ! #line 1310 "objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 269: ! #line 1312 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 273: ! #line 1347 "objc-parse.y" { OBJC_NEED_RAW_IDENTIFIER (1); ; break;} ! case 276: ! #line 1357 "objc-parse.y" { /* For a typedef name, record the meaning, not the name. In case of `foo foo, bar;'. */ yyval.ttype = lookup_name (yyvsp[0].ttype); ; break;} ! case 277: ! #line 1361 "objc-parse.y" { yyval.ttype = get_static_reference (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 278: ! #line 1363 "objc-parse.y" { yyval.ttype = get_object_reference (yyvsp[0].ttype); ; break;} ! case 279: ! #line 1368 "objc-parse.y" { yyval.ttype = get_object_reference (yyvsp[0].ttype); ; break;} ! case 280: ! #line 1370 "objc-parse.y" ! { skip_evaluation--; yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); ; break;} ! case 281: ! #line 1372 "objc-parse.y" { skip_evaluation--; yyval.ttype = groktypename (yyvsp[-1].ttype); ; break;} ! case 286: ! #line 1389 "objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 287: ! #line 1391 "objc-parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} ! case 288: ! #line 1396 "objc-parse.y" { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1, chainon (yyvsp[-1].ttype, all_prefix_attributes)); start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ; break;} ! case 289: ! #line 1401 "objc-parse.y" { finish_init (); finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ; break;} ! case 290: ! #line 1404 "objc-parse.y" { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0, chainon (yyvsp[0].ttype, all_prefix_attributes)); finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ; break;} ! case 291: ! #line 1412 "objc-parse.y" { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1, chainon (yyvsp[-1].ttype, all_prefix_attributes)); start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ; break;} ! case 292: ! #line 1417 "objc-parse.y" { finish_init (); finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ; break;} ! case 293: ! #line 1420 "objc-parse.y" { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0, chainon (yyvsp[0].ttype, all_prefix_attributes)); finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ; break;} ! case 294: ! #line 1428 "objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 295: ! #line 1430 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 296: ! #line 1435 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 297: ! #line 1437 "objc-parse.y" { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 298: ! #line 1442 "objc-parse.y" { yyval.ttype = yyvsp[-2].ttype; ; break;} ! case 299: ! #line 1447 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 300: ! #line 1449 "objc-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} ! case 301: ! #line 1454 "objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 302: ! #line 1456 "objc-parse.y" { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ; break;} ! case 303: ! #line 1458 "objc-parse.y" { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ; break;} ! case 304: ! #line 1460 "objc-parse.y" { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ; break;} ! case 305: ! #line 1462 "objc-parse.y" { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} ! case 313: ! #line 1485 "objc-parse.y" { really_start_incremental_init (NULL_TREE); ; break;} ! case 314: ! #line 1487 "objc-parse.y" { yyval.ttype = pop_init_level (0); ; break;} ! case 315: ! #line 1489 "objc-parse.y" { yyval.ttype = error_mark_node; ; break;} ! case 316: ! #line 1495 "objc-parse.y" { if (pedantic) pedwarn ("ISO C forbids empty initializer braces"); ; break;} ! case 320: ! #line 1509 "objc-parse.y" { if (pedantic && ! flag_isoc99) ! pedwarn ("ISO C89 forbids specifying subobject to initialize"); ; break;} ! case 321: ! #line 1512 "objc-parse.y" { if (pedantic) pedwarn ("obsolete use of designated initializer without `='"); ; break;} ! case 322: ! #line 1515 "objc-parse.y" { set_init_label (yyvsp[-1].ttype); if (pedantic) pedwarn ("obsolete use of designated initializer with `:'"); ; break;} ! case 323: ! #line 1519 "objc-parse.y" {; break;} ! case 325: ! #line 1525 "objc-parse.y" { push_init_level (0); ; break;} ! case 326: ! #line 1527 "objc-parse.y" { process_init_element (pop_init_level (0)); ; break;} ! case 327: ! #line 1529 "objc-parse.y" { process_init_element (yyvsp[0].ttype); ; break;} ! case 331: ! #line 1540 "objc-parse.y" { set_init_label (yyvsp[0].ttype); ; break;} ! case 332: ! #line 1542 "objc-parse.y" { set_init_index (yyvsp[-3].ttype, yyvsp[-1].ttype); if (pedantic) pedwarn ("ISO C forbids specifying range of elements to initialize"); ; break;} ! case 333: ! #line 1546 "objc-parse.y" { set_init_index (yyvsp[-1].ttype, NULL_TREE); ; break;} ! case 334: ! #line 1551 "objc-parse.y" { if (pedantic) pedwarn ("ISO C forbids nested functions"); --- 3448,4197 ---- ; break;} case 105: ! #line 710 "objc/objc-parse.y" { yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ; break;} case 106: ! #line 712 "objc/objc-parse.y" { yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ; break;} case 107: ! #line 714 "objc/objc-parse.y" { yyval.ttype = build_message_expr (yyvsp[0].ttype); ; break;} case 108: ! #line 716 "objc/objc-parse.y" { yyval.ttype = build_selector_expr (yyvsp[0].ttype); ; break;} case 109: ! #line 718 "objc/objc-parse.y" { yyval.ttype = build_protocol_expr (yyvsp[0].ttype); ; break;} case 110: ! #line 720 "objc/objc-parse.y" { yyval.ttype = build_encode_expr (yyvsp[0].ttype); ; break;} case 111: ! #line 722 "objc/objc-parse.y" { yyval.ttype = build_objc_string_object (yyvsp[0].ttype); ; break;} case 112: ! #line 727 "objc/objc-parse.y" { parsing_iso_function_signature = false; /* Reset after decls. */ ; break;} ! case 113: ! #line 734 "objc/objc-parse.y" { if (warn_traditional && !in_system_header && parsing_iso_function_signature) warning ("traditional C rejects ISO C style function definitions"); + if (warn_old_style_definition && !in_system_header + && !parsing_iso_function_signature) + warning ("old-style parameter declaration"); parsing_iso_function_signature = false; /* Reset after warning. */ ; break;} ! case 114: ! #line 744 "objc/objc-parse.y" ! { ! if (warn_old_style_definition && !in_system_header) ! warning ("old-style parameter declaration"); ! ; ! break;} ! case 115: ! #line 755 "objc/objc-parse.y" { ; break;} ! case 120: ! #line 771 "objc/objc-parse.y" { POP_DECLSPEC_STACK; ; break;} ! case 121: ! #line 773 "objc/objc-parse.y" { POP_DECLSPEC_STACK; ; break;} ! case 122: ! #line 775 "objc/objc-parse.y" { shadow_tag_warned (yyvsp[-1].ttype, 1); pedwarn ("empty declaration"); ; break;} ! case 123: ! #line 778 "objc/objc-parse.y" { pedwarn ("empty declaration"); ; break;} ! case 124: ! #line 787 "objc/objc-parse.y" { ; break;} ! case 125: ! #line 795 "objc/objc-parse.y" { pending_xref_error (); PUSH_DECLSPEC_STACK; split_specs_attrs (yyvsp[0].ttype, ¤t_declspecs, &prefix_attributes); all_prefix_attributes = prefix_attributes; ; break;} ! case 126: ! #line 806 "objc/objc-parse.y" { all_prefix_attributes = chainon (yyvsp[0].ttype, prefix_attributes); ; break;} ! case 127: ! #line 811 "objc/objc-parse.y" { POP_DECLSPEC_STACK; ; break;} ! case 128: ! #line 813 "objc/objc-parse.y" { POP_DECLSPEC_STACK; ; break;} ! case 129: ! #line 815 "objc/objc-parse.y" { POP_DECLSPEC_STACK; ; break;} ! case 130: ! #line 817 "objc/objc-parse.y" { POP_DECLSPEC_STACK; ; break;} ! case 131: ! #line 819 "objc/objc-parse.y" { shadow_tag (yyvsp[-1].ttype); ; break;} ! case 132: ! #line 821 "objc/objc-parse.y" ! { RESTORE_EXT_FLAGS (yyvsp[-1].itype); ; break;} ! case 133: ! #line 878 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 134: ! #line 881 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 135: ! #line 884 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 136: ! #line 890 "objc/objc-parse.y" { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 137: ! #line 896 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 138: ! #line 899 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 139: ! #line 905 "objc/objc-parse.y" { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); TREE_STATIC (yyval.ttype) = 0; ; break;} ! case 140: ! #line 908 "objc/objc-parse.y" { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 141: ! #line 914 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); TREE_STATIC (yyval.ttype) = 1; ; break;} + case 142: + #line 917 "objc/objc-parse.y" + { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); + TREE_STATIC (yyval.ttype) = 1; ; + break;} + case 143: + #line 920 "objc/objc-parse.y" + { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); + TREE_STATIC (yyval.ttype) = 1; ; + break;} case 144: ! #line 923 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 145: ! #line 926 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 146: ! #line 929 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 147: ! #line 932 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 148: ! #line 938 "objc/objc-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); TREE_STATIC (yyval.ttype) = 1; ; break;} case 149: ! #line 941 "objc/objc-parse.y" ! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} case 150: ! #line 944 "objc/objc-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 151: ! #line 947 "objc/objc-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; break;} case 152: ! #line 950 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 153: ! #line 953 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 154: ! #line 959 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 155: ! #line 962 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 156: ! #line 965 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 157: ! #line 968 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 158: ! #line 971 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 159: ! #line 974 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 160: ! #line 980 "objc/objc-parse.y" ! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} case 161: ! #line 983 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 162: ! #line 986 "objc/objc-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; break;} case 163: ! #line 989 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 164: ! #line 992 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 165: ! #line 998 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); TREE_STATIC (yyval.ttype) = 0; ; break;} ! case 166: ! #line 1001 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 167: ! #line 1004 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 168: ! #line 1007 "objc/objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 169: ! #line 1013 "objc/objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 170: ! #line 1019 "objc/objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 171: ! #line 1025 "objc/objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 172: ! #line 1034 "objc/objc-parse.y" { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 173: ! #line 1040 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 174: ! #line 1043 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 175: ! #line 1046 "objc/objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 176: ! #line 1052 "objc/objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 177: ! #line 1058 "objc/objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 178: ! #line 1064 "objc/objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 179: ! #line 1073 "objc/objc-parse.y" { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 180: ! #line 1079 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 181: ! #line 1082 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 182: ! #line 1085 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 183: ! #line 1088 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 184: ! #line 1091 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 185: ! #line 1094 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 186: ! #line 1097 "objc/objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 187: ! #line 1103 "objc/objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 188: ! #line 1109 "objc/objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 189: ! #line 1115 "objc/objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 190: ! #line 1124 "objc/objc-parse.y" { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} + case 191: + #line 1127 "objc/objc-parse.y" + { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); + TREE_STATIC (yyval.ttype) = 1; ; + break;} + case 192: + #line 1130 "objc/objc-parse.y" + { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); + TREE_STATIC (yyval.ttype) = 1; ; + break;} case 193: ! #line 1133 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 194: ! #line 1136 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 195: ! #line 1142 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 196: ! #line 1145 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 197: ! #line 1148 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 198: ! #line 1151 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 199: ! #line 1154 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 200: ! #line 1157 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 201: ! #line 1160 "objc/objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 202: ! #line 1166 "objc/objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 203: ! #line 1172 "objc/objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 204: ! #line 1178 "objc/objc-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 205: ! #line 1187 "objc/objc-parse.y" { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 206: ! #line 1190 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 207: ! #line 1193 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 208: ! #line 1196 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 209: ! #line 1199 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 266: ! #line 1287 "objc/objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 267: ! #line 1289 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 271: ! #line 1324 "objc/objc-parse.y" { OBJC_NEED_RAW_IDENTIFIER (1); ; break;} ! case 274: ! #line 1334 "objc/objc-parse.y" { /* For a typedef name, record the meaning, not the name. In case of `foo foo, bar;'. */ yyval.ttype = lookup_name (yyvsp[0].ttype); ; break;} ! case 275: ! #line 1338 "objc/objc-parse.y" { yyval.ttype = get_static_reference (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 276: ! #line 1340 "objc/objc-parse.y" { yyval.ttype = get_object_reference (yyvsp[0].ttype); ; break;} ! case 277: ! #line 1345 "objc/objc-parse.y" { yyval.ttype = get_object_reference (yyvsp[0].ttype); ; break;} ! case 278: ! #line 1347 "objc/objc-parse.y" ! { skip_evaluation--; ! if (TREE_CODE (yyvsp[-1].ttype) == COMPONENT_REF ! && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[-1].ttype, 1))) ! error ("`typeof' applied to a bit-field"); ! yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); ; break;} ! case 279: ! #line 1353 "objc/objc-parse.y" { skip_evaluation--; yyval.ttype = groktypename (yyvsp[-1].ttype); ; break;} ! case 284: ! #line 1370 "objc/objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 285: ! #line 1372 "objc/objc-parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} ! case 286: ! #line 1377 "objc/objc-parse.y" { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1, chainon (yyvsp[-1].ttype, all_prefix_attributes)); start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ; break;} ! case 287: ! #line 1382 "objc/objc-parse.y" { finish_init (); finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ; break;} ! case 288: ! #line 1385 "objc/objc-parse.y" { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0, chainon (yyvsp[0].ttype, all_prefix_attributes)); finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ; break;} ! case 289: ! #line 1393 "objc/objc-parse.y" { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1, chainon (yyvsp[-1].ttype, all_prefix_attributes)); start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ; break;} ! case 290: ! #line 1398 "objc/objc-parse.y" { finish_init (); finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ; break;} ! case 291: ! #line 1401 "objc/objc-parse.y" { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0, chainon (yyvsp[0].ttype, all_prefix_attributes)); finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ; break;} ! case 292: ! #line 1409 "objc/objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 293: ! #line 1411 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 294: ! #line 1416 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 295: ! #line 1418 "objc/objc-parse.y" { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 296: ! #line 1423 "objc/objc-parse.y" { yyval.ttype = yyvsp[-2].ttype; ; break;} ! case 297: ! #line 1428 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 298: ! #line 1430 "objc/objc-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} ! case 299: ! #line 1435 "objc/objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 300: ! #line 1437 "objc/objc-parse.y" { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ; break;} ! case 301: ! #line 1439 "objc/objc-parse.y" { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ; break;} ! case 302: ! #line 1441 "objc/objc-parse.y" { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ; break;} ! case 303: ! #line 1443 "objc/objc-parse.y" { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} ! case 311: ! #line 1466 "objc/objc-parse.y" { really_start_incremental_init (NULL_TREE); ; break;} ! case 312: ! #line 1468 "objc/objc-parse.y" { yyval.ttype = pop_init_level (0); ; break;} ! case 313: ! #line 1470 "objc/objc-parse.y" { yyval.ttype = error_mark_node; ; break;} ! case 314: ! #line 1476 "objc/objc-parse.y" { if (pedantic) pedwarn ("ISO C forbids empty initializer braces"); ; break;} ! case 318: ! #line 1490 "objc/objc-parse.y" { if (pedantic && ! flag_isoc99) ! pedwarn ("ISO C90 forbids specifying subobject to initialize"); ; break;} ! case 319: ! #line 1493 "objc/objc-parse.y" { if (pedantic) pedwarn ("obsolete use of designated initializer without `='"); ; break;} ! case 320: ! #line 1496 "objc/objc-parse.y" { set_init_label (yyvsp[-1].ttype); if (pedantic) pedwarn ("obsolete use of designated initializer with `:'"); ; break;} ! case 321: ! #line 1500 "objc/objc-parse.y" {; break;} ! case 323: ! #line 1506 "objc/objc-parse.y" { push_init_level (0); ; break;} ! case 324: ! #line 1508 "objc/objc-parse.y" { process_init_element (pop_init_level (0)); ; break;} ! case 325: ! #line 1510 "objc/objc-parse.y" { process_init_element (yyvsp[0].ttype); ; break;} ! case 329: ! #line 1521 "objc/objc-parse.y" { set_init_label (yyvsp[0].ttype); ; break;} ! case 330: ! #line 1523 "objc/objc-parse.y" { set_init_index (yyvsp[-3].ttype, yyvsp[-1].ttype); if (pedantic) pedwarn ("ISO C forbids specifying range of elements to initialize"); ; break;} ! case 331: ! #line 1527 "objc/objc-parse.y" { set_init_index (yyvsp[-1].ttype, NULL_TREE); ; break;} ! case 332: ! #line 1532 "objc/objc-parse.y" { if (pedantic) pedwarn ("ISO C forbids nested functions"); *************** case 334: *** 4208,4228 **** parsing_iso_function_signature = false; /* Don't warn about nested functions. */ ; break;} ! case 335: ! #line 1564 "objc-parse.y" ! { store_parm_decls (); ; break;} ! case 336: ! #line 1572 "objc-parse.y" { tree decl = current_function_decl; ! DECL_SOURCE_FILE (decl) = yyvsp[-2].filename; ! DECL_SOURCE_LINE (decl) = yyvsp[-1].lineno; ! finish_function (1, 1); pop_function_context (); add_decl_stmt (decl); ; break;} ! case 337: ! #line 1582 "objc-parse.y" { if (pedantic) pedwarn ("ISO C forbids nested functions"); --- 4205,4225 ---- parsing_iso_function_signature = false; /* Don't warn about nested functions. */ ; break;} ! case 333: ! #line 1545 "objc/objc-parse.y" ! { tree decl = current_function_decl; ! DECL_SOURCE_LOCATION (decl) = yyvsp[0].location; ! store_parm_decls (); ; break;} ! case 334: ! #line 1555 "objc/objc-parse.y" { tree decl = current_function_decl; ! finish_function (); pop_function_context (); add_decl_stmt (decl); ; break;} ! case 335: ! #line 1563 "objc/objc-parse.y" { if (pedantic) pedwarn ("ISO C forbids nested functions"); *************** case 337: *** 4236,4451 **** parsing_iso_function_signature = false; /* Don't warn about nested functions. */ ; break;} ! case 338: ! #line 1595 "objc-parse.y" ! { store_parm_decls (); ; break;} ! case 339: ! #line 1603 "objc-parse.y" { tree decl = current_function_decl; ! DECL_SOURCE_FILE (decl) = yyvsp[-2].filename; ! DECL_SOURCE_LINE (decl) = yyvsp[-1].lineno; ! finish_function (1, 1); pop_function_context (); add_decl_stmt (decl); ; break;} ! case 342: ! #line 1623 "objc-parse.y" { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ; break;} ! case 343: ! #line 1625 "objc-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 344: ! #line 1630 "objc-parse.y" { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ; break;} ! case 345: ! #line 1632 "objc-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 350: ! #line 1648 "objc-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 351: ! #line 1653 "objc-parse.y" { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ; break;} ! case 354: ! #line 1660 "objc-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 355: ! #line 1665 "objc-parse.y" { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ; break;} ! case 356: ! #line 1667 "objc-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 357: ! #line 1669 "objc-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 358: ! #line 1671 "objc-parse.y" { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ; break;} ! case 359: ! #line 1679 "objc-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 360: ! #line 1684 "objc-parse.y" { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ; break;} ! case 361: ! #line 1686 "objc-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 362: ! #line 1688 "objc-parse.y" { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ; break;} case 364: ! #line 1694 "objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 365: ! #line 1696 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 366: ! #line 1701 "objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 367: ! #line 1703 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 368: ! #line 1708 "objc-parse.y" ! { yyval.ttype = NULL_TREE; ; ! break;} ! case 369: ! #line 1710 "objc-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ; ! break;} ! case 370: ! #line 1721 "objc-parse.y" { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype); /* Start scope of tag before parsing components. */ ; break;} ! case 371: ! #line 1725 "objc-parse.y" ! { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ; break;} ! case 372: ! #line 1727 "objc-parse.y" { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE), ! yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype)); ; break;} ! case 373: ! #line 1731 "objc-parse.y" { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ; break;} ! case 374: ! #line 1733 "objc-parse.y" ! { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ; break;} ! case 375: ! #line 1735 "objc-parse.y" { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE), ! yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype)); ; break;} ! case 376: ! #line 1739 "objc-parse.y" { yyval.ttype = start_enum (yyvsp[-1].ttype); ; break;} ! case 377: ! #line 1741 "objc-parse.y" { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), chainon (yyvsp[-7].ttype, yyvsp[0].ttype)); ; break;} ! case 378: ! #line 1744 "objc-parse.y" { yyval.ttype = start_enum (NULL_TREE); ; break;} ! case 379: ! #line 1746 "objc-parse.y" { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ; break;} ! case 380: ! #line 1752 "objc-parse.y" { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ; break;} ! case 381: ! #line 1754 "objc-parse.y" { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ; break;} ! case 382: ! #line 1756 "objc-parse.y" { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); /* In ISO C, enumerated types can be referred to only if already defined. */ if (pedantic && !COMPLETE_TYPE_P (yyval.ttype)) pedwarn ("ISO C forbids forward references to `enum' types"); ; break;} ! case 386: ! #line 1771 "objc-parse.y" { if (pedantic && ! flag_isoc99) pedwarn ("comma at end of enumerator list"); ; break;} ! case 387: ! #line 1777 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 388: ! #line 1779 "objc-parse.y" ! { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); pedwarn ("no semicolon at end of struct or union"); ; break;} ! case 389: ! #line 1784 "objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 390: ! #line 1786 "objc-parse.y" ! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ; break;} ! case 391: ! #line 1788 "objc-parse.y" { if (pedantic) pedwarn ("extra semicolon in struct or union specified"); ; break;} ! case 392: ! #line 1792 "objc-parse.y" ! { ! tree interface = lookup_interface (yyvsp[-1].ttype); ! ! if (interface) ! yyval.ttype = get_class_ivars (interface); ! else ! { ! error ("cannot find interface declaration for `%s'", ! IDENTIFIER_POINTER (yyvsp[-1].ttype)); ! yyval.ttype = NULL_TREE; ! } ! ; break;} ! case 393: ! #line 1808 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; POP_DECLSPEC_STACK; ; break;} ! case 394: ! #line 1811 "objc-parse.y" { /* Support for unnamed structs or unions as members of structs or unions (which is [a] useful and [b] supports --- 4233,4439 ---- parsing_iso_function_signature = false; /* Don't warn about nested functions. */ ; break;} ! case 336: ! #line 1576 "objc/objc-parse.y" ! { tree decl = current_function_decl; ! DECL_SOURCE_LOCATION (decl) = yyvsp[0].location; ! store_parm_decls (); ; break;} ! case 337: ! #line 1586 "objc/objc-parse.y" { tree decl = current_function_decl; ! finish_function (); pop_function_context (); add_decl_stmt (decl); ; break;} ! case 340: ! #line 1604 "objc/objc-parse.y" { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ; break;} ! case 341: ! #line 1606 "objc/objc-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 342: ! #line 1611 "objc/objc-parse.y" { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ; break;} ! case 343: ! #line 1613 "objc/objc-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 348: ! #line 1629 "objc/objc-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 349: ! #line 1634 "objc/objc-parse.y" { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ; break;} ! case 352: ! #line 1641 "objc/objc-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 353: ! #line 1646 "objc/objc-parse.y" { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ; break;} ! case 354: ! #line 1648 "objc/objc-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 355: ! #line 1650 "objc/objc-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 356: ! #line 1652 "objc/objc-parse.y" { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ; break;} ! case 357: ! #line 1660 "objc/objc-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 358: ! #line 1665 "objc/objc-parse.y" { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ; break;} ! case 359: ! #line 1667 "objc/objc-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 360: ! #line 1669 "objc/objc-parse.y" { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ; break;} + case 362: + #line 1675 "objc/objc-parse.y" + { yyval.ttype = NULL_TREE; ; + break;} + case 363: + #line 1677 "objc/objc-parse.y" + { yyval.ttype = yyvsp[0].ttype; ; + break;} case 364: ! #line 1682 "objc/objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 365: ! #line 1684 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 366: ! #line 1689 "objc/objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 367: ! #line 1691 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 368: ! #line 1702 "objc/objc-parse.y" { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype); /* Start scope of tag before parsing components. */ ; break;} ! case 369: ! #line 1706 "objc/objc-parse.y" ! { yyval.ttype = finish_struct (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype), ! chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ; break;} ! case 370: ! #line 1709 "objc/objc-parse.y" { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE), ! nreverse (yyvsp[-2].ttype), chainon (yyvsp[-4].ttype, yyvsp[0].ttype)); ; break;} ! case 371: ! #line 1713 "objc/objc-parse.y" { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ; break;} ! case 372: ! #line 1715 "objc/objc-parse.y" ! { yyval.ttype = finish_struct (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype), ! chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ; break;} ! case 373: ! #line 1718 "objc/objc-parse.y" { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE), ! nreverse (yyvsp[-2].ttype), chainon (yyvsp[-4].ttype, yyvsp[0].ttype)); ; break;} ! case 374: ! #line 1722 "objc/objc-parse.y" { yyval.ttype = start_enum (yyvsp[-1].ttype); ; break;} ! case 375: ! #line 1724 "objc/objc-parse.y" { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), chainon (yyvsp[-7].ttype, yyvsp[0].ttype)); ; break;} ! case 376: ! #line 1727 "objc/objc-parse.y" { yyval.ttype = start_enum (NULL_TREE); ; break;} ! case 377: ! #line 1729 "objc/objc-parse.y" { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ; break;} ! case 378: ! #line 1735 "objc/objc-parse.y" { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ; break;} ! case 379: ! #line 1737 "objc/objc-parse.y" { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ; break;} ! case 380: ! #line 1739 "objc/objc-parse.y" { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); /* In ISO C, enumerated types can be referred to only if already defined. */ if (pedantic && !COMPLETE_TYPE_P (yyval.ttype)) pedwarn ("ISO C forbids forward references to `enum' types"); ; break;} ! case 384: ! #line 1754 "objc/objc-parse.y" { if (pedantic && ! flag_isoc99) pedwarn ("comma at end of enumerator list"); ; break;} ! case 385: ! #line 1772 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 386: ! #line 1774 "objc/objc-parse.y" ! { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-1].ttype); pedwarn ("no semicolon at end of struct or union"); ; break;} ! case 387: ! #line 1779 "objc/objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 388: ! #line 1781 "objc/objc-parse.y" ! { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[-2].ttype); ; break;} ! case 389: ! #line 1783 "objc/objc-parse.y" { if (pedantic) pedwarn ("extra semicolon in struct or union specified"); ; break;} ! case 390: ! #line 1787 "objc/objc-parse.y" ! { yyval.ttype = nreverse (get_class_ivars_from_name (yyvsp[-1].ttype)); ; break;} ! case 391: ! #line 1792 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; POP_DECLSPEC_STACK; ; break;} ! case 392: ! #line 1795 "objc/objc-parse.y" { /* Support for unnamed structs or unions as members of structs or unions (which is [a] useful and [b] supports *************** case 394: *** 4453,4667 **** if (pedantic) pedwarn ("ISO C doesn't support unnamed structs/unions"); ! yyval.ttype = grokfield(yyvsp[-1].filename, yyvsp[0].lineno, NULL, current_declspecs, NULL_TREE); POP_DECLSPEC_STACK; ; break;} ! case 395: ! #line 1821 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; POP_DECLSPEC_STACK; ; break;} ! case 396: ! #line 1824 "objc-parse.y" { if (pedantic) pedwarn ("ISO C forbids member declarations with no members"); ! shadow_tag(yyvsp[0].ttype); yyval.ttype = NULL_TREE; ; break;} ! case 397: ! #line 1829 "objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 398: ! #line 1831 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ! RESTORE_EXT_FLAGS (yyvsp[-1].ttype); ; break;} case 400: ! #line 1838 "objc-parse.y" ! { yyval.ttype = chainon (yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} case 402: ! #line 1844 "objc-parse.y" ! { yyval.ttype = chainon (yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} case 403: ! #line 1849 "objc-parse.y" ! { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE); ! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ; break;} case 404: ! #line 1853 "objc-parse.y" ! { yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype); ! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ; break;} case 405: ! #line 1856 "objc-parse.y" ! { yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype); ! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ; break;} case 406: ! #line 1862 "objc-parse.y" ! { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE); ! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ; ! break;} ! case 407: ! #line 1866 "objc-parse.y" ! { yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype); ! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ; break;} case 408: ! #line 1869 "objc-parse.y" ! { yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype); ! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ; ! break;} ! case 410: ! #line 1881 "objc-parse.y" { if (yyvsp[-2].ttype == error_mark_node) yyval.ttype = yyvsp[-2].ttype; else ! yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ; break;} ! case 411: ! #line 1886 "objc-parse.y" { yyval.ttype = error_mark_node; ; break;} ! case 412: ! #line 1892 "objc-parse.y" { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ; break;} ! case 413: ! #line 1894 "objc-parse.y" { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} ! case 414: ! #line 1899 "objc-parse.y" { pending_xref_error (); yyval.ttype = yyvsp[0].ttype; ; break;} ! case 415: ! #line 1902 "objc-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 416: ! #line 1907 "objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 418: ! #line 1913 "objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, NULL_TREE), all_prefix_attributes); ; break;} ! case 419: ! #line 1917 "objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[0].ttype), all_prefix_attributes); ; break;} ! case 420: ! #line 1921 "objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), chainon (yyvsp[0].ttype, all_prefix_attributes)); ; break;} ! case 424: ! #line 1934 "objc-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 425: ! #line 1939 "objc-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ; break;} ! case 426: ! #line 1941 "objc-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 427: ! #line 1946 "objc-parse.y" { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ; break;} ! case 428: ! #line 1948 "objc-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 429: ! #line 1950 "objc-parse.y" { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 1); ; break;} ! case 430: ! #line 1952 "objc-parse.y" { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 431: ! #line 1954 "objc-parse.y" { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, NULL_TREE, 1); ; break;} ! case 432: ! #line 1961 "objc-parse.y" { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 0, 0); ; break;} ! case 433: ! #line 1963 "objc-parse.y" { yyval.ttype = build_array_declarator (NULL_TREE, yyvsp[-1].ttype, 0, 0); ; break;} ! case 434: ! #line 1965 "objc-parse.y" { yyval.ttype = build_array_declarator (NULL_TREE, yyvsp[-2].ttype, 0, 1); ; break;} ! case 435: ! #line 1967 "objc-parse.y" { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 1, 0); ; break;} ! case 436: ! #line 1970 "objc-parse.y" { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-3].ttype, 1, 0); ; break;} ! case 439: ! #line 1983 "objc-parse.y" { ! pedwarn ("deprecated use of label at end of compound statement"); ; break;} ! case 447: ! #line 2000 "objc-parse.y" ! { if (pedantic && !flag_isoc99) ! pedwarn ("ISO C89 forbids mixed declarations and code"); ; break;} ! case 462: ! #line 2030 "objc-parse.y" { pushlevel (0); clear_last_expr (); add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0); - if (objc_method_context) - add_objc_decls (); ; break;} ! case 463: ! #line 2039 "objc-parse.y" ! { yyval.ttype = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); ; break;} ! case 464: ! #line 2044 "objc-parse.y" { if (flag_isoc99) { yyval.ttype = c_begin_compound_stmt (); pushlevel (0); clear_last_expr (); add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0); - if (objc_method_context) - add_objc_decls (); } else yyval.ttype = NULL_TREE; ; break;} ! case 465: ! #line 2062 "objc-parse.y" { if (flag_isoc99) { tree scope_stmt = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); ! yyval.ttype = poplevel (kept_level_p (), 0, 0); SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmt)) = SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmt)) = yyval.ttype; --- 4441,4664 ---- if (pedantic) pedwarn ("ISO C doesn't support unnamed structs/unions"); ! yyval.ttype = grokfield(NULL, current_declspecs, NULL_TREE); POP_DECLSPEC_STACK; ; break;} ! case 393: ! #line 1805 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; POP_DECLSPEC_STACK; ; break;} ! case 394: ! #line 1808 "objc/objc-parse.y" { if (pedantic) pedwarn ("ISO C forbids member declarations with no members"); ! shadow_tag_warned (yyvsp[0].ttype, pedantic); yyval.ttype = NULL_TREE; ; break;} ! case 395: ! #line 1813 "objc/objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 396: ! #line 1815 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ! RESTORE_EXT_FLAGS (yyvsp[-1].itype); ; ! break;} ! case 398: ! #line 1822 "objc/objc-parse.y" ! { TREE_CHAIN (yyvsp[0].ttype) = yyvsp[-3].ttype; yyval.ttype = yyvsp[0].ttype; ; break;} case 400: ! #line 1828 "objc/objc-parse.y" ! { TREE_CHAIN (yyvsp[0].ttype) = yyvsp[-3].ttype; yyval.ttype = yyvsp[0].ttype; ; ! break;} ! case 401: ! #line 1833 "objc/objc-parse.y" ! { yyval.ttype = grokfield (yyvsp[-1].ttype, current_declspecs, NULL_TREE); ! decl_attributes (&yyval.ttype, ! chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ; break;} case 402: ! #line 1837 "objc/objc-parse.y" ! { yyval.ttype = grokfield (yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype); ! decl_attributes (&yyval.ttype, ! chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ; break;} case 403: ! #line 1841 "objc/objc-parse.y" ! { yyval.ttype = grokfield (NULL_TREE, current_declspecs, yyvsp[-1].ttype); ! decl_attributes (&yyval.ttype, ! chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ; break;} case 404: ! #line 1848 "objc/objc-parse.y" ! { yyval.ttype = grokfield (yyvsp[-1].ttype, current_declspecs, NULL_TREE); ! decl_attributes (&yyval.ttype, ! chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ; break;} case 405: ! #line 1852 "objc/objc-parse.y" ! { yyval.ttype = grokfield (yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype); ! decl_attributes (&yyval.ttype, ! chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ; break;} case 406: ! #line 1856 "objc/objc-parse.y" ! { yyval.ttype = grokfield (NULL_TREE, current_declspecs, yyvsp[-1].ttype); ! decl_attributes (&yyval.ttype, ! chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ; break;} case 408: ! #line 1867 "objc/objc-parse.y" { if (yyvsp[-2].ttype == error_mark_node) yyval.ttype = yyvsp[-2].ttype; else ! TREE_CHAIN (yyvsp[0].ttype) = yyvsp[-2].ttype, yyval.ttype = yyvsp[0].ttype; ; break;} ! case 409: ! #line 1872 "objc/objc-parse.y" { yyval.ttype = error_mark_node; ; break;} ! case 410: ! #line 1878 "objc/objc-parse.y" { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ; break;} ! case 411: ! #line 1880 "objc/objc-parse.y" { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} ! case 412: ! #line 1885 "objc/objc-parse.y" { pending_xref_error (); yyval.ttype = yyvsp[0].ttype; ; break;} ! case 413: ! #line 1888 "objc/objc-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 414: ! #line 1893 "objc/objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 416: ! #line 1899 "objc/objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, NULL_TREE), all_prefix_attributes); ; break;} ! case 417: ! #line 1903 "objc/objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[0].ttype), all_prefix_attributes); ; break;} ! case 418: ! #line 1907 "objc/objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), chainon (yyvsp[0].ttype, all_prefix_attributes)); ; break;} ! case 422: ! #line 1920 "objc/objc-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 423: ! #line 1925 "objc/objc-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ; break;} ! case 424: ! #line 1927 "objc/objc-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 425: ! #line 1932 "objc/objc-parse.y" { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ; break;} ! case 426: ! #line 1934 "objc/objc-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 427: ! #line 1936 "objc/objc-parse.y" { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 1); ; break;} ! case 428: ! #line 1938 "objc/objc-parse.y" { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 429: ! #line 1940 "objc/objc-parse.y" { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, NULL_TREE, 1); ; break;} ! case 430: ! #line 1947 "objc/objc-parse.y" { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 0, 0); ; break;} ! case 431: ! #line 1949 "objc/objc-parse.y" { yyval.ttype = build_array_declarator (NULL_TREE, yyvsp[-1].ttype, 0, 0); ; break;} ! case 432: ! #line 1951 "objc/objc-parse.y" { yyval.ttype = build_array_declarator (NULL_TREE, yyvsp[-2].ttype, 0, 1); ; break;} ! case 433: ! #line 1953 "objc/objc-parse.y" { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 1, 0); ; break;} ! case 434: ! #line 1956 "objc/objc-parse.y" { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-3].ttype, 1, 0); ; break;} ! case 437: ! #line 1969 "objc/objc-parse.y" { ! error ("label at end of compound statement"); ; break;} ! case 445: ! #line 1986 "objc/objc-parse.y" ! { ! if ((pedantic && !flag_isoc99) ! || warn_declaration_after_statement) ! pedwarn_c90 ("ISO C90 forbids mixed declarations and code"); ! ; break;} ! case 460: ! #line 2019 "objc/objc-parse.y" { pushlevel (0); clear_last_expr (); add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0); ; break;} ! case 461: ! #line 2026 "objc/objc-parse.y" ! { ! if (c_dialect_objc ()) ! objc_clear_super_receiver (); ! yyval.ttype = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); ! ; break;} ! case 462: ! #line 2035 "objc/objc-parse.y" { if (flag_isoc99) { yyval.ttype = c_begin_compound_stmt (); pushlevel (0); clear_last_expr (); add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0); } else yyval.ttype = NULL_TREE; ; break;} ! case 463: ! #line 2051 "objc/objc-parse.y" { if (flag_isoc99) { tree scope_stmt = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); ! yyval.ttype = poplevel (KEEP_MAYBE, 0, 0); SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmt)) = SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmt)) = yyval.ttype; *************** case 465: *** 4669,4712 **** else yyval.ttype = NULL_TREE; ; break;} ! case 467: ! #line 2079 "objc-parse.y" { if (pedantic) pedwarn ("ISO C forbids label declarations"); ; break;} ! case 470: ! #line 2090 "objc-parse.y" { tree link; for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link)) { ! tree label = shadow_label (TREE_VALUE (link)); C_DECLARED_LABEL_FLAG (label) = 1; add_decl_stmt (label); } ; break;} ! case 471: ! #line 2104 "objc-parse.y" {; break;} ! case 473: ! #line 2108 "objc-parse.y" { compstmt_count++; yyval.ttype = c_begin_compound_stmt (); ; break;} ! case 474: ! #line 2113 "objc-parse.y" { yyval.ttype = convert (void_type_node, integer_zero_node); ; break;} ! case 475: ! #line 2115 "objc-parse.y" ! { yyval.ttype = poplevel (kept_level_p (), 1, 0); SCOPE_STMT_BLOCK (TREE_PURPOSE (yyvsp[0].ttype)) = SCOPE_STMT_BLOCK (TREE_VALUE (yyvsp[0].ttype)) = yyval.ttype; ; break;} ! case 478: ! #line 2128 "objc-parse.y" { if (current_function_decl == 0) { error ("braced-group within expression allowed only inside a function"); --- 4666,4709 ---- else yyval.ttype = NULL_TREE; ; break;} ! case 465: ! #line 2068 "objc/objc-parse.y" { if (pedantic) pedwarn ("ISO C forbids label declarations"); ; break;} ! case 468: ! #line 2079 "objc/objc-parse.y" { tree link; for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link)) { ! tree label = declare_label (TREE_VALUE (link)); C_DECLARED_LABEL_FLAG (label) = 1; add_decl_stmt (label); } ; break;} ! case 469: ! #line 2093 "objc/objc-parse.y" {; break;} ! case 471: ! #line 2097 "objc/objc-parse.y" { compstmt_count++; yyval.ttype = c_begin_compound_stmt (); ; break;} ! case 472: ! #line 2102 "objc/objc-parse.y" { yyval.ttype = convert (void_type_node, integer_zero_node); ; break;} ! case 473: ! #line 2104 "objc/objc-parse.y" ! { yyval.ttype = poplevel (KEEP_MAYBE, 0, 0); SCOPE_STMT_BLOCK (TREE_PURPOSE (yyvsp[0].ttype)) = SCOPE_STMT_BLOCK (TREE_VALUE (yyvsp[0].ttype)) = yyval.ttype; ; break;} ! case 476: ! #line 2117 "objc/objc-parse.y" { if (current_function_decl == 0) { error ("braced-group within expression allowed only inside a function"); *************** case 478: *** 4717,4753 **** there is a way to turn off the entire subtree of blocks that are contained in it. */ keep_next_level (); - push_label_level (); compstmt_count++; yyval.ttype = add_stmt (build_stmt (COMPOUND_STMT, last_tree)); ; break;} ! case 479: ! #line 2145 "objc-parse.y" { RECHAIN_STMTS (yyvsp[-1].ttype, COMPOUND_BODY (yyvsp[-1].ttype)); last_expr_type = NULL_TREE; yyval.ttype = yyvsp[-1].ttype; ; break;} ! case 480: ! #line 2153 "objc-parse.y" { c_finish_then (); ; break;} ! case 482: ! #line 2170 "objc-parse.y" { yyval.ttype = c_begin_if_stmt (); ; break;} ! case 483: ! #line 2172 "objc-parse.y" { c_expand_start_cond (c_common_truthvalue_conversion (yyvsp[-1].ttype), compstmt_count,yyvsp[-3].ttype); yyval.itype = stmt_count; ! if_stmt_file = yyvsp[-7].filename; ! if_stmt_line = yyvsp[-6].lineno; ; break;} ! case 484: ! #line 2184 "objc-parse.y" { stmt_count++; compstmt_count++; yyval.ttype = add_stmt (build_stmt (DO_STMT, NULL_TREE, NULL_TREE)); --- 4714,4749 ---- there is a way to turn off the entire subtree of blocks that are contained in it. */ keep_next_level (); compstmt_count++; yyval.ttype = add_stmt (build_stmt (COMPOUND_STMT, last_tree)); ; break;} ! case 477: ! #line 2133 "objc/objc-parse.y" { RECHAIN_STMTS (yyvsp[-1].ttype, COMPOUND_BODY (yyvsp[-1].ttype)); last_expr_type = NULL_TREE; yyval.ttype = yyvsp[-1].ttype; ; break;} ! case 478: ! #line 2141 "objc/objc-parse.y" { c_finish_then (); ; break;} ! case 480: ! #line 2158 "objc/objc-parse.y" { yyval.ttype = c_begin_if_stmt (); ; break;} ! case 481: ! #line 2160 "objc/objc-parse.y" { c_expand_start_cond (c_common_truthvalue_conversion (yyvsp[-1].ttype), compstmt_count,yyvsp[-3].ttype); yyval.itype = stmt_count; ! if_stmt_locus = yyvsp[-6].location; ; break;} ! case 482: ! #line 2171 "objc/objc-parse.y" { stmt_count++; compstmt_count++; + c_in_iteration_stmt++; yyval.ttype = add_stmt (build_stmt (DO_STMT, NULL_TREE, NULL_TREE)); *************** case 484: *** 4757,4789 **** RTL-generation time. */ DO_COND (yyval.ttype) = error_mark_node; ; break;} ! case 485: ! #line 2195 "objc-parse.y" { yyval.ttype = yyvsp[-2].ttype; ! RECHAIN_STMTS (yyval.ttype, DO_BODY (yyval.ttype)); ; break;} ! case 486: ! #line 2203 "objc-parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; ! yyval.filename = input_filename; ; break;} case 487: ! #line 2209 "objc-parse.y" ! { if (yychar == YYEMPTY) ! yychar = YYLEX; ! yyval.lineno = lineno; ; ! break;} ! case 490: ! #line 2222 "objc-parse.y" { if (flag_isoc99) RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype)); ; break;} ! case 491: ! #line 2228 "objc-parse.y" { if (yyvsp[0].ttype) { ! STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].lineno; /* ??? We currently have no way of recording the filename for a statement. This probably matters little in practice at the moment, --- 4753,4780 ---- RTL-generation time. */ DO_COND (yyval.ttype) = error_mark_node; ; break;} ! case 483: ! #line 2183 "objc/objc-parse.y" { yyval.ttype = yyvsp[-2].ttype; ! RECHAIN_STMTS (yyval.ttype, DO_BODY (yyval.ttype)); ! c_in_iteration_stmt--; ; break;} ! case 484: ! #line 2193 "objc/objc-parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; ! yyval.location = input_location; ; break;} case 487: ! #line 2206 "objc/objc-parse.y" { if (flag_isoc99) RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype)); ; break;} ! case 488: ! #line 2212 "objc/objc-parse.y" { if (yyvsp[0].ttype) { ! STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].location.line; /* ??? We currently have no way of recording the filename for a statement. This probably matters little in practice at the moment, *************** case 491: *** 4792,4955 **** } ; break;} ! case 492: ! #line 2242 "objc-parse.y" { if (yyvsp[0].ttype) { ! STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].lineno; } ; break;} ! case 493: ! #line 2251 "objc-parse.y" { c_expand_start_else (); yyvsp[-1].itype = stmt_count; ; break;} ! case 494: ! #line 2254 "objc-parse.y" { c_finish_else (); c_expand_end_cond (); if (extra_warnings && stmt_count == yyvsp[-3].itype) warning ("empty body in an else-statement"); ; break;} ! case 495: ! #line 2259 "objc-parse.y" { c_expand_end_cond (); /* 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[0].itype) ! warning_with_file_and_line (if_stmt_file, if_stmt_line, ! "empty body in an if-statement"); ; break;} ! case 496: ! #line 2271 "objc-parse.y" { c_expand_end_cond (); ; break;} ! case 497: ! #line 2281 "objc-parse.y" { stmt_count++; yyval.ttype = c_begin_while_stmt (); ; break;} ! case 498: ! #line 2284 "objc-parse.y" ! { yyvsp[-1].ttype = c_common_truthvalue_conversion (yyvsp[-1].ttype); c_finish_while_stmt_cond (c_common_truthvalue_conversion (yyvsp[-1].ttype), yyvsp[-3].ttype); yyval.ttype = add_stmt (yyvsp[-3].ttype); ; break;} ! case 499: ! #line 2289 "objc-parse.y" ! { RECHAIN_STMTS (yyvsp[-1].ttype, WHILE_BODY (yyvsp[-1].ttype)); ; break;} ! case 500: ! #line 2292 "objc-parse.y" { DO_COND (yyvsp[-4].ttype) = c_common_truthvalue_conversion (yyvsp[-2].ttype); ; break;} ! case 501: ! #line 2294 "objc-parse.y" { ; break;} ! case 502: ! #line 2296 "objc-parse.y" { yyval.ttype = build_stmt (FOR_STMT, NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE); add_stmt (yyval.ttype); ; break;} ! case 503: ! #line 2300 "objc-parse.y" { stmt_count++; RECHAIN_STMTS (yyvsp[-2].ttype, FOR_INIT_STMT (yyvsp[-2].ttype)); ; break;} ! case 504: ! #line 2303 "objc-parse.y" { if (yyvsp[-1].ttype) FOR_COND (yyvsp[-5].ttype) = c_common_truthvalue_conversion (yyvsp[-1].ttype); ; break;} ! case 505: ! #line 2307 "objc-parse.y" ! { FOR_EXPR (yyvsp[-8].ttype) = yyvsp[-1].ttype; ; break;} ! case 506: ! #line 2309 "objc-parse.y" ! { RECHAIN_STMTS (yyvsp[-10].ttype, FOR_BODY (yyvsp[-10].ttype)); ; break;} ! case 507: ! #line 2311 "objc-parse.y" { stmt_count++; ! yyval.ttype = c_start_case (yyvsp[-1].ttype); ; break;} ! case 508: ! #line 2314 "objc-parse.y" ! { c_finish_case (); ; break;} ! case 509: ! #line 2319 "objc-parse.y" { add_stmt (build_stmt (EXPR_STMT, yyvsp[-1].ttype)); ; break;} ! case 510: ! #line 2321 "objc-parse.y" { check_for_loop_decls (); ; break;} ! case 511: ! #line 2327 "objc-parse.y" { stmt_count++; yyval.ttype = yyvsp[0].ttype; ; break;} ! case 512: ! #line 2329 "objc-parse.y" { stmt_count++; yyval.ttype = c_expand_expr_stmt (yyvsp[-1].ttype); ; break;} ! case 513: ! #line 2332 "objc-parse.y" { if (flag_isoc99) RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype)); yyval.ttype = NULL_TREE; ; break;} ! case 514: ! #line 2336 "objc-parse.y" { stmt_count++; yyval.ttype = add_stmt (build_break_stmt ()); ; break;} ! case 515: ! #line 2339 "objc-parse.y" { stmt_count++; yyval.ttype = add_stmt (build_continue_stmt ()); ; break;} ! case 516: ! #line 2342 "objc-parse.y" { stmt_count++; yyval.ttype = c_expand_return (NULL_TREE); ; break;} ! case 517: ! #line 2345 "objc-parse.y" { stmt_count++; yyval.ttype = c_expand_return (yyvsp[-1].ttype); ; break;} ! case 518: ! #line 2348 "objc-parse.y" { stmt_count++; yyval.ttype = simple_asm_stmt (yyvsp[-2].ttype); ; break;} ! case 519: ! #line 2352 "objc-parse.y" { stmt_count++; yyval.ttype = build_asm_stmt (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE); ; break;} ! case 520: ! #line 2357 "objc-parse.y" { stmt_count++; yyval.ttype = build_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE); ; break;} ! case 521: ! #line 2362 "objc-parse.y" { stmt_count++; yyval.ttype = build_asm_stmt (yyvsp[-10].ttype, yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype); ; break;} ! case 522: ! #line 2365 "objc-parse.y" { tree decl; stmt_count++; decl = lookup_label (yyvsp[-1].ttype); --- 4783,4964 ---- } ; break;} ! case 489: ! #line 2226 "objc/objc-parse.y" { if (yyvsp[0].ttype) { ! STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].location.line; } ; break;} ! case 490: ! #line 2235 "objc/objc-parse.y" { c_expand_start_else (); yyvsp[-1].itype = stmt_count; ; break;} ! case 491: ! #line 2238 "objc/objc-parse.y" { c_finish_else (); c_expand_end_cond (); if (extra_warnings && stmt_count == yyvsp[-3].itype) warning ("empty body in an else-statement"); ; break;} ! case 492: ! #line 2243 "objc/objc-parse.y" { c_expand_end_cond (); /* 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[0].itype) ! warning ("%Hempty body in an if-statement", ! &if_stmt_locus); ; break;} ! case 493: ! #line 2255 "objc/objc-parse.y" { c_expand_end_cond (); ; break;} ! case 494: ! #line 2265 "objc/objc-parse.y" { stmt_count++; yyval.ttype = c_begin_while_stmt (); ; break;} ! case 495: ! #line 2268 "objc/objc-parse.y" ! { c_in_iteration_stmt++; ! yyvsp[-1].ttype = c_common_truthvalue_conversion (yyvsp[-1].ttype); c_finish_while_stmt_cond (c_common_truthvalue_conversion (yyvsp[-1].ttype), yyvsp[-3].ttype); yyval.ttype = add_stmt (yyvsp[-3].ttype); ; break;} ! case 496: ! #line 2274 "objc/objc-parse.y" ! { c_in_iteration_stmt--; ! RECHAIN_STMTS (yyvsp[-1].ttype, WHILE_BODY (yyvsp[-1].ttype)); ; break;} ! case 497: ! #line 2278 "objc/objc-parse.y" { DO_COND (yyvsp[-4].ttype) = c_common_truthvalue_conversion (yyvsp[-2].ttype); ; break;} ! case 498: ! #line 2280 "objc/objc-parse.y" { ; break;} ! case 499: ! #line 2282 "objc/objc-parse.y" { yyval.ttype = build_stmt (FOR_STMT, NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE); add_stmt (yyval.ttype); ; break;} ! case 500: ! #line 2286 "objc/objc-parse.y" { stmt_count++; RECHAIN_STMTS (yyvsp[-2].ttype, FOR_INIT_STMT (yyvsp[-2].ttype)); ; break;} ! case 501: ! #line 2289 "objc/objc-parse.y" { if (yyvsp[-1].ttype) FOR_COND (yyvsp[-5].ttype) = c_common_truthvalue_conversion (yyvsp[-1].ttype); ; break;} ! case 502: ! #line 2293 "objc/objc-parse.y" ! { c_in_iteration_stmt++; ! FOR_EXPR (yyvsp[-8].ttype) = yyvsp[-1].ttype; ; break;} ! case 503: ! #line 2296 "objc/objc-parse.y" ! { RECHAIN_STMTS (yyvsp[-10].ttype, FOR_BODY (yyvsp[-10].ttype)); ! c_in_iteration_stmt--;; break;} ! case 504: ! #line 2299 "objc/objc-parse.y" { stmt_count++; ! yyval.ttype = c_start_case (yyvsp[-1].ttype); ! c_in_case_stmt++; ; break;} ! case 505: ! #line 2303 "objc/objc-parse.y" ! { c_finish_case (); ! c_in_case_stmt--; ; break;} ! case 506: ! #line 2309 "objc/objc-parse.y" { add_stmt (build_stmt (EXPR_STMT, yyvsp[-1].ttype)); ; break;} ! case 507: ! #line 2311 "objc/objc-parse.y" { check_for_loop_decls (); ; break;} ! case 508: ! #line 2317 "objc/objc-parse.y" { stmt_count++; yyval.ttype = yyvsp[0].ttype; ; break;} ! case 509: ! #line 2319 "objc/objc-parse.y" { stmt_count++; yyval.ttype = c_expand_expr_stmt (yyvsp[-1].ttype); ; break;} ! case 510: ! #line 2322 "objc/objc-parse.y" { if (flag_isoc99) RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype)); yyval.ttype = NULL_TREE; ; break;} ! case 511: ! #line 2326 "objc/objc-parse.y" { stmt_count++; + if (!(c_in_iteration_stmt || c_in_case_stmt)) + { + error ("break statement not within loop or switch"); + yyval.ttype = NULL_TREE; + } + else yyval.ttype = add_stmt (build_break_stmt ()); ; break;} ! case 512: ! #line 2335 "objc/objc-parse.y" { stmt_count++; + if (!c_in_iteration_stmt) + { + error ("continue statement not within a loop"); + yyval.ttype = NULL_TREE; + } + else yyval.ttype = add_stmt (build_continue_stmt ()); ; break;} ! case 513: ! #line 2344 "objc/objc-parse.y" { stmt_count++; yyval.ttype = c_expand_return (NULL_TREE); ; break;} ! case 514: ! #line 2347 "objc/objc-parse.y" { stmt_count++; yyval.ttype = c_expand_return (yyvsp[-1].ttype); ; break;} ! case 515: ! #line 2350 "objc/objc-parse.y" { stmt_count++; yyval.ttype = simple_asm_stmt (yyvsp[-2].ttype); ; break;} ! case 516: ! #line 2354 "objc/objc-parse.y" { stmt_count++; yyval.ttype = build_asm_stmt (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE); ; break;} ! case 517: ! #line 2359 "objc/objc-parse.y" { stmt_count++; yyval.ttype = build_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE); ; break;} ! case 518: ! #line 2364 "objc/objc-parse.y" { stmt_count++; yyval.ttype = build_asm_stmt (yyvsp[-10].ttype, yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype); ; break;} ! case 519: ! #line 2367 "objc/objc-parse.y" { tree decl; stmt_count++; decl = lookup_label (yyvsp[-1].ttype); *************** case 522: *** 4962,4997 **** yyval.ttype = NULL_TREE; ; break;} ! case 523: ! #line 2377 "objc-parse.y" { if (pedantic) pedwarn ("ISO C forbids `goto *expr;'"); stmt_count++; yyvsp[-1].ttype = convert (ptr_type_node, yyvsp[-1].ttype); yyval.ttype = add_stmt (build_stmt (GOTO_STMT, yyvsp[-1].ttype)); ; break;} ! case 524: ! #line 2383 "objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} case 525: ! #line 2391 "objc-parse.y" { stmt_count++; yyval.ttype = do_case (yyvsp[-1].ttype, NULL_TREE); ; break;} ! case 526: ! #line 2394 "objc-parse.y" { stmt_count++; yyval.ttype = do_case (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} ! case 527: ! #line 2397 "objc-parse.y" { stmt_count++; yyval.ttype = do_case (NULL_TREE, NULL_TREE); ; break;} ! case 528: ! #line 2400 "objc-parse.y" ! { tree label = define_label (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-4].ttype); stmt_count++; if (label) { --- 4971,5066 ---- yyval.ttype = NULL_TREE; ; break;} ! case 520: ! #line 2379 "objc/objc-parse.y" { if (pedantic) pedwarn ("ISO C forbids `goto *expr;'"); stmt_count++; yyvsp[-1].ttype = convert (ptr_type_node, yyvsp[-1].ttype); yyval.ttype = add_stmt (build_stmt (GOTO_STMT, yyvsp[-1].ttype)); ; break;} ! case 521: ! #line 2385 "objc/objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} + case 522: + #line 2387 "objc/objc-parse.y" + { stmt_count++; + yyval.ttype = objc_build_throw_stmt (yyvsp[-1].ttype); + ; + break;} + case 523: + #line 2391 "objc/objc-parse.y" + { stmt_count++; + yyval.ttype = objc_build_throw_stmt (NULL_TREE); + ; + break;} + case 524: + #line 2395 "objc/objc-parse.y" + { objc_build_finally_prologue (); ; + break;} case 525: ! #line 2397 "objc/objc-parse.y" ! { yyval.ttype = objc_build_try_catch_finally_stmt (yyvsp[-2].itype, yyvsp[0].itype); ; ! break;} ! case 526: ! #line 2399 "objc/objc-parse.y" ! { objc_build_synchronized_prologue (yyvsp[-1].ttype); ; ! break;} ! case 527: ! #line 2401 "objc/objc-parse.y" ! { yyval.ttype = objc_build_synchronized_epilogue (); ; ! break;} ! case 528: ! #line 2406 "objc/objc-parse.y" ! { objc_build_try_epilogue (1); ; ! break;} ! case 529: ! #line 2408 "objc/objc-parse.y" ! { objc_build_catch_epilogue (); yyval.itype = 1; ; ! break;} ! case 530: ! #line 2410 "objc/objc-parse.y" ! { objc_build_try_epilogue (0); yyval.itype = 0; ; ! break;} ! case 531: ! #line 2416 "objc/objc-parse.y" ! { objc_build_try_prologue (); ; ! break;} ! case 535: ! #line 2427 "objc/objc-parse.y" ! { objc_build_catch_stmt (yyvsp[-1].ttype); ; ! break;} ! case 536: ! #line 2429 "objc/objc-parse.y" ! { stmt_count++; ; ! break;} ! case 537: ! #line 2434 "objc/objc-parse.y" ! { yyval.itype = 1; ; ! break;} ! case 538: ! #line 2436 "objc/objc-parse.y" ! { yyval.itype = 0; ; ! break;} ! case 539: ! #line 2444 "objc/objc-parse.y" { stmt_count++; yyval.ttype = do_case (yyvsp[-1].ttype, NULL_TREE); ; break;} ! case 540: ! #line 2447 "objc/objc-parse.y" { stmt_count++; yyval.ttype = do_case (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} ! case 541: ! #line 2450 "objc/objc-parse.y" { stmt_count++; yyval.ttype = do_case (NULL_TREE, NULL_TREE); ; break;} ! case 542: ! #line 2453 "objc/objc-parse.y" ! { tree label = define_label (yyvsp[-2].location, yyvsp[-3].ttype); stmt_count++; if (label) { *************** case 528: *** 5002,5087 **** yyval.ttype = NULL_TREE; ; break;} ! case 529: ! #line 2416 "objc-parse.y" ! { emit_line_note (input_filename, lineno); ! yyval.ttype = NULL_TREE; ; break;} ! case 530: ! #line 2419 "objc-parse.y" ! { emit_line_note (input_filename, lineno); ; break;} ! case 531: ! #line 2424 "objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 533: ! #line 2431 "objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 536: ! #line 2438 "objc-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} ! case 537: ! #line 2443 "objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (NULL_TREE, yyvsp[-3].ttype), yyvsp[-1].ttype); ; break;} ! case 538: ! #line 2445 "objc-parse.y" { yyvsp[-5].ttype = build_string (IDENTIFIER_LENGTH (yyvsp[-5].ttype), IDENTIFIER_POINTER (yyvsp[-5].ttype)); yyval.ttype = build_tree_list (build_tree_list (yyvsp[-5].ttype, yyvsp[-3].ttype), yyvsp[-1].ttype); ; break;} ! case 539: ! #line 2452 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 540: ! #line 2454 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ; break;} ! case 541: ! #line 2464 "objc-parse.y" { pushlevel (0); ! clear_parm_order (); ! declare_parm_level (0); ; break;} ! case 542: ! #line 2468 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; - parmlist_tags_warning (); poplevel (0, 0, 0); ; break;} ! case 544: ! #line 2476 "objc-parse.y" ! { tree parm; ! if (pedantic) ! pedwarn ("ISO C forbids forward parameter declarations"); ! /* Mark the forward decls as such. */ ! for (parm = getdecls (); parm; parm = TREE_CHAIN (parm)) ! TREE_ASM_WRITTEN (parm) = 1; ! clear_parm_order (); ; break;} ! case 545: ! #line 2484 "objc-parse.y" { /* Dummy action so attributes are in known place on parser stack. */ ; break;} ! case 546: ! #line 2487 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 547: ! #line 2489 "objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ; break;} ! case 548: ! #line 2495 "objc-parse.y" { yyval.ttype = get_parm_info (0); ; break;} ! case 549: ! #line 2497 "objc-parse.y" { yyval.ttype = get_parm_info (0); /* Gcc used to allow this as an extension. However, it does not work for all targets, and thus has been disabled. --- 5071,5147 ---- yyval.ttype = NULL_TREE; ; break;} ! case 543: ! #line 2469 "objc/objc-parse.y" ! { yyval.ttype = NULL_TREE; ; break;} ! case 544: ! #line 2471 "objc/objc-parse.y" ! { ; break;} ! case 545: ! #line 2476 "objc/objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 547: ! #line 2483 "objc/objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 550: ! #line 2490 "objc/objc-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} ! case 551: ! #line 2495 "objc/objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (NULL_TREE, yyvsp[-3].ttype), yyvsp[-1].ttype); ; break;} ! case 552: ! #line 2497 "objc/objc-parse.y" { yyvsp[-5].ttype = build_string (IDENTIFIER_LENGTH (yyvsp[-5].ttype), IDENTIFIER_POINTER (yyvsp[-5].ttype)); yyval.ttype = build_tree_list (build_tree_list (yyvsp[-5].ttype, yyvsp[-3].ttype), yyvsp[-1].ttype); ; break;} ! case 553: ! #line 2504 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 554: ! #line 2506 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ; break;} ! case 555: ! #line 2516 "objc/objc-parse.y" { pushlevel (0); ! declare_parm_level (); ; break;} ! case 556: ! #line 2519 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; poplevel (0, 0, 0); ; break;} ! case 558: ! #line 2526 "objc/objc-parse.y" ! { mark_forward_parm_decls (); ; break;} ! case 559: ! #line 2528 "objc/objc-parse.y" { /* Dummy action so attributes are in known place on parser stack. */ ; break;} ! case 560: ! #line 2531 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 561: ! #line 2533 "objc/objc-parse.y" { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ; break;} ! case 562: ! #line 2539 "objc/objc-parse.y" { yyval.ttype = get_parm_info (0); ; break;} ! case 563: ! #line 2541 "objc/objc-parse.y" { yyval.ttype = get_parm_info (0); /* Gcc used to allow this as an extension. However, it does not work for all targets, and thus has been disabled. *************** case 549: *** 5090,5196 **** tries to verify that BUILT_IN_NEXT_ARG is being used correctly. */ error ("ISO C requires a named argument before `...'"); ; break;} ! case 550: ! #line 2507 "objc-parse.y" { yyval.ttype = get_parm_info (1); parsing_iso_function_signature = true; ; break;} ! case 551: ! #line 2511 "objc-parse.y" ! { yyval.ttype = get_parm_info (0); ; break;} ! case 552: ! #line 2516 "objc-parse.y" { push_parm_decl (yyvsp[0].ttype); ; break;} ! case 553: ! #line 2518 "objc-parse.y" { push_parm_decl (yyvsp[0].ttype); ; break;} ! case 554: ! #line 2525 "objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), chainon (yyvsp[0].ttype, all_prefix_attributes)); POP_DECLSPEC_STACK; ; break;} ! case 555: ! #line 2530 "objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), chainon (yyvsp[0].ttype, all_prefix_attributes)); POP_DECLSPEC_STACK; ; break;} ! case 556: ! #line 2535 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; POP_DECLSPEC_STACK; ; break;} ! case 557: ! #line 2538 "objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), chainon (yyvsp[0].ttype, all_prefix_attributes)); POP_DECLSPEC_STACK; ; break;} ! case 558: ! #line 2544 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; POP_DECLSPEC_STACK; ; break;} ! case 559: ! #line 2552 "objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), chainon (yyvsp[0].ttype, all_prefix_attributes)); POP_DECLSPEC_STACK; ; break;} ! case 560: ! #line 2557 "objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), chainon (yyvsp[0].ttype, all_prefix_attributes)); POP_DECLSPEC_STACK; ; break;} ! case 561: ! #line 2562 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; POP_DECLSPEC_STACK; ; break;} ! case 562: ! #line 2565 "objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), chainon (yyvsp[0].ttype, all_prefix_attributes)); POP_DECLSPEC_STACK; ; break;} ! case 563: ! #line 2571 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; POP_DECLSPEC_STACK; ; break;} ! case 564: ! #line 2577 "objc-parse.y" { prefix_attributes = chainon (prefix_attributes, yyvsp[-3].ttype); all_prefix_attributes = prefix_attributes; ; break;} ! case 565: ! #line 2586 "objc-parse.y" { pushlevel (0); ! clear_parm_order (); ! declare_parm_level (1); ; break;} ! case 566: ! #line 2590 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; - parmlist_tags_warning (); poplevel (0, 0, 0); ; break;} ! case 568: ! #line 2598 "objc-parse.y" { tree t; for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t)) if (TREE_VALUE (t) == NULL_TREE) --- 5150,5257 ---- tries to verify that BUILT_IN_NEXT_ARG is being used correctly. */ error ("ISO C requires a named argument before `...'"); + parsing_iso_function_signature = true; ; break;} ! case 564: ! #line 2552 "objc/objc-parse.y" { yyval.ttype = get_parm_info (1); parsing_iso_function_signature = true; ; break;} ! case 565: ! #line 2556 "objc/objc-parse.y" ! { yyval.ttype = get_parm_info (0); ! parsing_iso_function_signature = true; ! ; break;} ! case 566: ! #line 2563 "objc/objc-parse.y" { push_parm_decl (yyvsp[0].ttype); ; break;} ! case 567: ! #line 2565 "objc/objc-parse.y" { push_parm_decl (yyvsp[0].ttype); ; break;} ! case 568: ! #line 2572 "objc/objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), chainon (yyvsp[0].ttype, all_prefix_attributes)); POP_DECLSPEC_STACK; ; break;} ! case 569: ! #line 2577 "objc/objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), chainon (yyvsp[0].ttype, all_prefix_attributes)); POP_DECLSPEC_STACK; ; break;} ! case 570: ! #line 2582 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; POP_DECLSPEC_STACK; ; break;} ! case 571: ! #line 2585 "objc/objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), chainon (yyvsp[0].ttype, all_prefix_attributes)); POP_DECLSPEC_STACK; ; break;} ! case 572: ! #line 2591 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; POP_DECLSPEC_STACK; ; break;} ! case 573: ! #line 2599 "objc/objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), chainon (yyvsp[0].ttype, all_prefix_attributes)); POP_DECLSPEC_STACK; ; break;} ! case 574: ! #line 2604 "objc/objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), chainon (yyvsp[0].ttype, all_prefix_attributes)); POP_DECLSPEC_STACK; ; break;} ! case 575: ! #line 2609 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; POP_DECLSPEC_STACK; ; break;} ! case 576: ! #line 2612 "objc/objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), chainon (yyvsp[0].ttype, all_prefix_attributes)); POP_DECLSPEC_STACK; ; break;} ! case 577: ! #line 2618 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; POP_DECLSPEC_STACK; ; break;} ! case 578: ! #line 2624 "objc/objc-parse.y" { prefix_attributes = chainon (prefix_attributes, yyvsp[-3].ttype); all_prefix_attributes = prefix_attributes; ; break;} ! case 579: ! #line 2633 "objc/objc-parse.y" { pushlevel (0); ! declare_parm_level (); ; break;} ! case 580: ! #line 2636 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; poplevel (0, 0, 0); ; break;} ! case 582: ! #line 2643 "objc/objc-parse.y" { tree t; for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t)) if (TREE_VALUE (t) == NULL_TREE) *************** case 568: *** 5205,5236 **** YYERROR1; ; break;} ! case 569: ! #line 2616 "objc-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} ! case 570: ! #line 2618 "objc-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} ! case 571: ! #line 2624 "objc-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} ! case 572: ! #line 2626 "objc-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} ! case 573: ! #line 2631 "objc-parse.y" ! { yyval.ttype = SAVE_EXT_FLAGS(); pedantic = 0; warn_pointer_arith = 0; warn_traditional = 0; flag_iso = 0; ; break;} ! case 579: ! #line 2647 "objc-parse.y" { if (objc_implementation_context) { --- 5266,5297 ---- YYERROR1; ; break;} ! case 583: ! #line 2661 "objc/objc-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} ! case 584: ! #line 2663 "objc/objc-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} ! case 585: ! #line 2669 "objc/objc-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} ! case 586: ! #line 2671 "objc/objc-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} ! case 587: ! #line 2676 "objc/objc-parse.y" ! { yyval.itype = SAVE_EXT_FLAGS(); pedantic = 0; warn_pointer_arith = 0; warn_traditional = 0; flag_iso = 0; ; break;} ! case 593: ! #line 2692 "objc/objc-parse.y" { if (objc_implementation_context) { *************** case 579: *** 5242,5404 **** warning ("`@end' must appear in an implementation context"); ; break;} ! case 580: ! #line 2662 "objc-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} ! case 581: ! #line 2664 "objc-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} ! case 582: ! #line 2669 "objc-parse.y" { objc_declare_class (yyvsp[-1].ttype); ; break;} ! case 583: ! #line 2676 "objc-parse.y" { objc_declare_alias (yyvsp[-2].ttype, yyvsp[-1].ttype); ; break;} ! case 584: ! #line 2683 "objc-parse.y" ! { ! objc_interface_context = objc_ivar_context ! = start_class (CLASS_INTERFACE_TYPE, yyvsp[-2].ttype, NULL_TREE, yyvsp[-1].ttype); ! objc_public_flag = 0; ! ; ! break;} ! case 585: ! #line 2689 "objc-parse.y" ! { ! continue_class (objc_interface_context); ! ; ! break;} ! case 586: ! #line 2694 "objc-parse.y" ! { ! finish_class (objc_interface_context); ! objc_interface_context = NULL_TREE; ! ; ! break;} ! case 587: ! #line 2700 "objc-parse.y" ! { ! objc_interface_context ! = start_class (CLASS_INTERFACE_TYPE, yyvsp[-1].ttype, NULL_TREE, yyvsp[0].ttype); ! continue_class (objc_interface_context); ! ; break;} ! case 588: ! #line 2707 "objc-parse.y" ! { ! finish_class (objc_interface_context); ! objc_interface_context = NULL_TREE; ! ; break;} ! case 589: ! #line 2713 "objc-parse.y" { objc_interface_context = objc_ivar_context ! = start_class (CLASS_INTERFACE_TYPE, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[-1].ttype); objc_public_flag = 0; ; break;} ! case 590: ! #line 2719 "objc-parse.y" ! { ! continue_class (objc_interface_context); ! ; ! break;} ! case 591: ! #line 2724 "objc-parse.y" ! { ! finish_class (objc_interface_context); ! objc_interface_context = NULL_TREE; ! ; ! break;} ! case 592: ! #line 2730 "objc-parse.y" { - objc_interface_context - = start_class (CLASS_INTERFACE_TYPE, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); continue_class (objc_interface_context); ; break;} ! case 593: ! #line 2737 "objc-parse.y" { finish_class (objc_interface_context); objc_interface_context = NULL_TREE; ; break;} ! case 594: ! #line 2743 "objc-parse.y" ! { ! objc_implementation_context = objc_ivar_context ! = start_class (CLASS_IMPLEMENTATION_TYPE, yyvsp[-1].ttype, NULL_TREE, NULL_TREE); ! objc_public_flag = 0; ! ; ! break;} ! case 595: ! #line 2749 "objc-parse.y" ! { ! objc_ivar_chain ! = continue_class (objc_implementation_context); ! ; ! break;} ! case 596: ! #line 2755 "objc-parse.y" ! { ! objc_implementation_context ! = start_class (CLASS_IMPLEMENTATION_TYPE, yyvsp[0].ttype, NULL_TREE, NULL_TREE); ! objc_ivar_chain ! = continue_class (objc_implementation_context); ! ; ! break;} ! case 597: ! #line 2763 "objc-parse.y" { objc_implementation_context = objc_ivar_context ! = start_class (CLASS_IMPLEMENTATION_TYPE, yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); objc_public_flag = 0; ; break;} ! case 598: ! #line 2769 "objc-parse.y" ! { ! objc_ivar_chain ! = continue_class (objc_implementation_context); ! ; ! break;} ! case 599: ! #line 2775 "objc-parse.y" { - objc_implementation_context - = start_class (CLASS_IMPLEMENTATION_TYPE, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); objc_ivar_chain = continue_class (objc_implementation_context); ; break;} ! case 600: ! #line 2783 "objc-parse.y" { objc_interface_context = start_class (CATEGORY_INTERFACE_TYPE, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); continue_class (objc_interface_context); ; break;} ! case 601: ! #line 2790 "objc-parse.y" { finish_class (objc_interface_context); objc_interface_context = NULL_TREE; ; break;} ! case 602: ! #line 2796 "objc-parse.y" { objc_implementation_context = start_class (CATEGORY_IMPLEMENTATION_TYPE, yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); --- 5303,5389 ---- warning ("`@end' must appear in an implementation context"); ; break;} ! case 594: ! #line 2707 "objc/objc-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} ! case 595: ! #line 2709 "objc/objc-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} ! case 596: ! #line 2714 "objc/objc-parse.y" { objc_declare_class (yyvsp[-1].ttype); ; break;} ! case 597: ! #line 2721 "objc/objc-parse.y" { objc_declare_alias (yyvsp[-2].ttype, yyvsp[-1].ttype); ; break;} ! case 598: ! #line 2727 "objc/objc-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 599: ! #line 2728 "objc/objc-parse.y" ! { yyval.ttype = NULL_TREE; ; break;} ! case 602: ! #line 2738 "objc/objc-parse.y" { objc_interface_context = objc_ivar_context ! = start_class (CLASS_INTERFACE_TYPE, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); objc_public_flag = 0; ; break;} ! case 603: ! #line 2744 "objc/objc-parse.y" { continue_class (objc_interface_context); ; break;} ! case 604: ! #line 2748 "objc/objc-parse.y" { finish_class (objc_interface_context); objc_interface_context = NULL_TREE; ; break;} ! case 605: ! #line 2754 "objc/objc-parse.y" { objc_implementation_context = objc_ivar_context ! = start_class (CLASS_IMPLEMENTATION_TYPE, yyvsp[-1].ttype, yyvsp[0].ttype, NULL_TREE); objc_public_flag = 0; ; break;} ! case 606: ! #line 2760 "objc/objc-parse.y" { objc_ivar_chain = continue_class (objc_implementation_context); ; break;} ! case 607: ! #line 2766 "objc/objc-parse.y" { objc_interface_context = start_class (CATEGORY_INTERFACE_TYPE, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); continue_class (objc_interface_context); ; break;} ! case 608: ! #line 2772 "objc/objc-parse.y" { finish_class (objc_interface_context); objc_interface_context = NULL_TREE; ; break;} ! case 609: ! #line 2778 "objc/objc-parse.y" { objc_implementation_context = start_class (CATEGORY_IMPLEMENTATION_TYPE, yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); *************** case 602: *** 5406,5441 **** = continue_class (objc_implementation_context); ; break;} ! case 603: ! #line 2806 "objc-parse.y" { objc_pq_context = 1; objc_interface_context = start_protocol(PROTOCOL_INTERFACE_TYPE, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 604: ! #line 2812 "objc-parse.y" { objc_pq_context = 0; finish_protocol(objc_interface_context); objc_interface_context = NULL_TREE; ; break;} ! case 605: ! #line 2821 "objc-parse.y" { objc_declare_protocols (yyvsp[-1].ttype); ; break;} ! case 606: ! #line 2828 "objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 608: ! #line 2836 "objc-parse.y" { if (yyvsp[-2].code == LT_EXPR && yyvsp[0].code == GT_EXPR) yyval.ttype = yyvsp[-1].ttype; --- 5391,5426 ---- = continue_class (objc_implementation_context); ; break;} ! case 610: ! #line 2788 "objc/objc-parse.y" { objc_pq_context = 1; objc_interface_context = start_protocol(PROTOCOL_INTERFACE_TYPE, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 611: ! #line 2794 "objc/objc-parse.y" { objc_pq_context = 0; finish_protocol(objc_interface_context); objc_interface_context = NULL_TREE; ; break;} ! case 612: ! #line 2803 "objc/objc-parse.y" { objc_declare_protocols (yyvsp[-1].ttype); ; break;} ! case 613: ! #line 2810 "objc/objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 615: ! #line 2818 "objc/objc-parse.y" { if (yyvsp[-2].code == LT_EXPR && yyvsp[0].code == GT_EXPR) yyval.ttype = yyvsp[-1].ttype; *************** case 608: *** 5443,5493 **** YYERROR1; ; break;} ! case 611: ! #line 2850 "objc-parse.y" { objc_public_flag = 2; ; break;} ! case 612: ! #line 2851 "objc-parse.y" { objc_public_flag = 0; ; break;} ! case 613: ! #line 2852 "objc-parse.y" { objc_public_flag = 1; ; break;} ! case 614: ! #line 2857 "objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 616: ! #line 2862 "objc-parse.y" { if (pedantic) pedwarn ("extra semicolon in struct or union specified"); ; break;} ! case 617: ! #line 2880 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; POP_DECLSPEC_STACK; ; break;} ! case 618: ! #line 2883 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; POP_DECLSPEC_STACK; ; break;} ! case 619: ! #line 2886 "objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 620: ! #line 2891 "objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 623: ! #line 2898 "objc-parse.y" { yyval.ttype = add_instance_variable (objc_ivar_context, objc_public_flag, --- 5428,5478 ---- YYERROR1; ; break;} ! case 618: ! #line 2832 "objc/objc-parse.y" { objc_public_flag = 2; ; break;} ! case 619: ! #line 2833 "objc/objc-parse.y" { objc_public_flag = 0; ; break;} ! case 620: ! #line 2834 "objc/objc-parse.y" { objc_public_flag = 1; ; break;} ! case 621: ! #line 2839 "objc/objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 623: ! #line 2844 "objc/objc-parse.y" { if (pedantic) pedwarn ("extra semicolon in struct or union specified"); ; break;} ! case 624: ! #line 2862 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; POP_DECLSPEC_STACK; ; break;} ! case 625: ! #line 2865 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; POP_DECLSPEC_STACK; ; break;} ! case 626: ! #line 2868 "objc/objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 627: ! #line 2873 "objc/objc-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 630: ! #line 2880 "objc/objc-parse.y" { yyval.ttype = add_instance_variable (objc_ivar_context, objc_public_flag, *************** case 623: *** 5495,5510 **** NULL_TREE); ; break;} ! case 624: ! #line 2905 "objc-parse.y" { yyval.ttype = add_instance_variable (objc_ivar_context, objc_public_flag, yyvsp[-2].ttype, current_declspecs, yyvsp[0].ttype); ; break;} ! case 625: ! #line 2911 "objc-parse.y" { yyval.ttype = add_instance_variable (objc_ivar_context, objc_public_flag, --- 5480,5495 ---- NULL_TREE); ; break;} ! case 631: ! #line 2887 "objc/objc-parse.y" { yyval.ttype = add_instance_variable (objc_ivar_context, objc_public_flag, yyvsp[-2].ttype, current_declspecs, yyvsp[0].ttype); ; break;} ! case 632: ! #line 2893 "objc/objc-parse.y" { yyval.ttype = add_instance_variable (objc_ivar_context, objc_public_flag, *************** case 625: *** 5512,5707 **** current_declspecs, yyvsp[0].ttype); ; break;} ! case 626: ! #line 2921 "objc-parse.y" { objc_inherit_code = CLASS_METHOD_DECL; ; break;} ! case 627: ! #line 2923 "objc-parse.y" { objc_inherit_code = INSTANCE_METHOD_DECL; ; break;} ! case 628: ! #line 2928 "objc-parse.y" { objc_pq_context = 1; if (!objc_implementation_context) fatal_error ("method definition not in class context"); ; break;} ! case 629: ! #line 2934 "objc-parse.y" { objc_pq_context = 0; ! if (objc_inherit_code == CLASS_METHOD_DECL) ! add_class_method (objc_implementation_context, yyvsp[0].ttype); ! else ! add_instance_method (objc_implementation_context, yyvsp[0].ttype); start_method_def (yyvsp[0].ttype); ; break;} ! case 630: ! #line 2943 "objc-parse.y" { continue_method_def (); ; break;} ! case 631: ! #line 2947 "objc-parse.y" { finish_method_def (); ; break;} ! case 633: ! #line 2958 "objc-parse.y" ! {yyval.ttype = NULL_TREE; ; ! break;} ! case 638: ! #line 2965 "objc-parse.y" ! {yyval.ttype = NULL_TREE; ; break;} ! case 642: ! #line 2975 "objc-parse.y" { /* Remember protocol qualifiers in prototypes. */ objc_pq_context = 1; ; break;} ! case 643: ! #line 2980 "objc-parse.y" { /* Forget protocol qualifiers here. */ objc_pq_context = 0; ! if (objc_inherit_code == CLASS_METHOD_DECL) ! add_class_method (objc_interface_context, yyvsp[0].ttype); ! else ! add_instance_method (objc_interface_context, yyvsp[0].ttype); ; break;} ! case 645: ! #line 2993 "objc-parse.y" { yyval.ttype = build_method_decl (objc_inherit_code, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 646: ! #line 2998 "objc-parse.y" { yyval.ttype = build_method_decl (objc_inherit_code, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 647: ! #line 3003 "objc-parse.y" { yyval.ttype = build_method_decl (objc_inherit_code, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 648: ! #line 3008 "objc-parse.y" { yyval.ttype = build_method_decl (objc_inherit_code, NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 657: ! #line 3038 "objc-parse.y" { POP_DECLSPEC_STACK; ; break;} ! case 658: ! #line 3040 "objc-parse.y" { shadow_tag (yyvsp[-1].ttype); ; break;} ! case 659: ! #line 3042 "objc-parse.y" { pedwarn ("empty declaration"); ; break;} ! case 660: ! #line 3047 "objc-parse.y" { push_parm_decl (yyvsp[0].ttype); ; break;} ! case 661: ! #line 3049 "objc-parse.y" { push_parm_decl (yyvsp[0].ttype); ; break;} ! case 662: ! #line 3057 "objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), chainon (yyvsp[0].ttype, all_prefix_attributes)); ; break;} ! case 663: ! #line 3061 "objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), chainon (yyvsp[0].ttype, all_prefix_attributes)); ; break;} ! case 664: ! #line 3065 "objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 665: ! #line 3070 "objc-parse.y" { ! yyval.ttype = NULL_TREE; ; break;} ! case 666: ! #line 3074 "objc-parse.y" { /* oh what a kludge! */ yyval.ttype = objc_ellipsis_node; ; break;} ! case 667: ! #line 3079 "objc-parse.y" { pushlevel (0); ; break;} ! case 668: ! #line 3083 "objc-parse.y" { ! /* returns a tree list node generated by get_parm_info */ yyval.ttype = yyvsp[0].ttype; poplevel (0, 0, 0); ; break;} ! case 671: ! #line 3098 "objc-parse.y" { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 698: ! #line 3120 "objc-parse.y" { yyval.ttype = build_keyword_decl (yyvsp[-5].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} ! case 699: ! #line 3125 "objc-parse.y" { yyval.ttype = build_keyword_decl (yyvsp[-2].ttype, NULL_TREE, yyvsp[0].ttype); ; break;} ! case 700: ! #line 3130 "objc-parse.y" { yyval.ttype = build_keyword_decl (NULL_TREE, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} ! case 701: ! #line 3135 "objc-parse.y" { yyval.ttype = build_keyword_decl (NULL_TREE, NULL_TREE, yyvsp[0].ttype); ; break;} ! case 705: ! #line 3148 "objc-parse.y" { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 706: ! #line 3156 "objc-parse.y" { if (TREE_CHAIN (yyvsp[0].ttype) == NULL_TREE) /* just return the expr., remove a level of indirection */ --- 5497,5686 ---- current_declspecs, yyvsp[0].ttype); ; break;} ! case 633: ! #line 2903 "objc/objc-parse.y" { objc_inherit_code = CLASS_METHOD_DECL; ; break;} ! case 634: ! #line 2905 "objc/objc-parse.y" { objc_inherit_code = INSTANCE_METHOD_DECL; ; break;} ! case 635: ! #line 2910 "objc/objc-parse.y" { objc_pq_context = 1; if (!objc_implementation_context) fatal_error ("method definition not in class context"); ; break;} ! case 636: ! #line 2916 "objc/objc-parse.y" { objc_pq_context = 0; ! objc_add_method (objc_implementation_context, ! yyvsp[0].ttype, ! objc_inherit_code == CLASS_METHOD_DECL); start_method_def (yyvsp[0].ttype); ; break;} ! case 637: ! #line 2924 "objc/objc-parse.y" { continue_method_def (); ; break;} ! case 638: ! #line 2928 "objc/objc-parse.y" { finish_method_def (); ; break;} ! case 641: ! #line 2940 "objc/objc-parse.y" ! { yyval.ttype = NULL_TREE; ; break;} ! case 645: ! #line 2950 "objc/objc-parse.y" { /* Remember protocol qualifiers in prototypes. */ objc_pq_context = 1; ; break;} ! case 646: ! #line 2955 "objc/objc-parse.y" { /* Forget protocol qualifiers here. */ objc_pq_context = 0; ! objc_add_method (objc_interface_context, ! yyvsp[0].ttype, ! objc_inherit_code == CLASS_METHOD_DECL); ; break;} ! case 648: ! #line 2967 "objc/objc-parse.y" { yyval.ttype = build_method_decl (objc_inherit_code, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 649: ! #line 2972 "objc/objc-parse.y" { yyval.ttype = build_method_decl (objc_inherit_code, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 650: ! #line 2977 "objc/objc-parse.y" { yyval.ttype = build_method_decl (objc_inherit_code, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 651: ! #line 2982 "objc/objc-parse.y" { yyval.ttype = build_method_decl (objc_inherit_code, NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 660: ! #line 3012 "objc/objc-parse.y" { POP_DECLSPEC_STACK; ; break;} ! case 661: ! #line 3014 "objc/objc-parse.y" { shadow_tag (yyvsp[-1].ttype); ; break;} ! case 662: ! #line 3016 "objc/objc-parse.y" { pedwarn ("empty declaration"); ; break;} ! case 663: ! #line 3021 "objc/objc-parse.y" { push_parm_decl (yyvsp[0].ttype); ; break;} ! case 664: ! #line 3023 "objc/objc-parse.y" { push_parm_decl (yyvsp[0].ttype); ; break;} ! case 665: ! #line 3031 "objc/objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), chainon (yyvsp[0].ttype, all_prefix_attributes)); ; break;} ! case 666: ! #line 3035 "objc/objc-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), chainon (yyvsp[0].ttype, all_prefix_attributes)); ; break;} ! case 667: ! #line 3039 "objc/objc-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 668: ! #line 3044 "objc/objc-parse.y" { ! yyval.ttype = NULL_TREE; ; break;} ! case 669: ! #line 3048 "objc/objc-parse.y" { /* oh what a kludge! */ yyval.ttype = objc_ellipsis_node; ; break;} ! case 670: ! #line 3053 "objc/objc-parse.y" { pushlevel (0); ; break;} ! case 671: ! #line 3057 "objc/objc-parse.y" { ! /* returns a tree list node generated by get_parm_info */ yyval.ttype = yyvsp[0].ttype; poplevel (0, 0, 0); ; break;} ! case 674: ! #line 3072 "objc/objc-parse.y" { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 701: ! #line 3094 "objc/objc-parse.y" { yyval.ttype = build_keyword_decl (yyvsp[-5].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} ! case 702: ! #line 3099 "objc/objc-parse.y" { yyval.ttype = build_keyword_decl (yyvsp[-2].ttype, NULL_TREE, yyvsp[0].ttype); ; break;} ! case 703: ! #line 3104 "objc/objc-parse.y" { yyval.ttype = build_keyword_decl (NULL_TREE, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} ! case 704: ! #line 3109 "objc/objc-parse.y" { yyval.ttype = build_keyword_decl (NULL_TREE, NULL_TREE, yyvsp[0].ttype); ; break;} ! case 708: ! #line 3122 "objc/objc-parse.y" { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 709: ! #line 3130 "objc/objc-parse.y" { if (TREE_CHAIN (yyvsp[0].ttype) == NULL_TREE) /* just return the expr., remove a level of indirection */ *************** case 706: *** 5711,5777 **** yyval.ttype = yyvsp[0].ttype; ; break;} ! case 707: ! #line 3168 "objc-parse.y" { yyval.ttype = build_tree_list (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} ! case 708: ! #line 3172 "objc-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} ! case 710: ! #line 3180 "objc-parse.y" { yyval.ttype = get_class_reference (yyvsp[0].ttype); ; break;} ! case 711: ! #line 3187 "objc-parse.y" ! { yyval.ttype = build_tree_list (yyvsp[-2].ttype, yyvsp[-1].ttype); ; break;} case 715: ! #line 3198 "objc-parse.y" { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 716: ! #line 3205 "objc-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, NULL_TREE); ; break;} ! case 717: ! #line 3209 "objc-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, NULL_TREE); ; break;} ! case 718: ! #line 3216 "objc-parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} ! case 719: ! #line 3223 "objc-parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} ! case 720: ! #line 3232 "objc-parse.y" { yyval.ttype = groktypename (yyvsp[-1].ttype); ; break;} } ! #line 731 "/usr/share/bison/bison.simple" yyvsp -= yylen; --- 5690,5762 ---- yyval.ttype = yyvsp[0].ttype; ; break;} ! case 710: ! #line 3142 "objc/objc-parse.y" { yyval.ttype = build_tree_list (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} ! case 711: ! #line 3146 "objc/objc-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} ! case 713: ! #line 3154 "objc/objc-parse.y" { yyval.ttype = get_class_reference (yyvsp[0].ttype); ; break;} ! case 714: ! #line 3158 "objc/objc-parse.y" ! { ! yyval.ttype = get_class_reference (yyvsp[0].ttype); ! ; break;} case 715: ! #line 3165 "objc/objc-parse.y" ! { yyval.ttype = build_tree_list (yyvsp[-2].ttype, yyvsp[-1].ttype); ; ! break;} ! case 719: ! #line 3176 "objc/objc-parse.y" { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 720: ! #line 3183 "objc/objc-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, NULL_TREE); ; break;} ! case 721: ! #line 3187 "objc/objc-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, NULL_TREE); ; break;} ! case 722: ! #line 3194 "objc/objc-parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} ! case 723: ! #line 3201 "objc/objc-parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} ! case 724: ! #line 3210 "objc/objc-parse.y" { yyval.ttype = groktypename (yyvsp[-1].ttype); ; break;} } ! #line 705 "/usr/share/bison/bison.simple" yyvsp -= yylen; *************** yyreturn: *** 6002,6008 **** #endif return yyresult; } ! #line 3237 "objc-parse.y" /* yylex() is a thin wrapper around c_lex(), all it does is translate --- 5987,5993 ---- #endif return yyresult; } ! #line 3215 "objc/objc-parse.y" /* yylex() is a thin wrapper around c_lex(), all it does is translate *************** static const struct resword reswords[] = *** 6037,6044 **** { "__asm__", RID_ASM, 0 }, { "__attribute", RID_ATTRIBUTE, 0 }, { "__attribute__", RID_ATTRIBUTE, 0 }, - { "__bounded", RID_BOUNDED, 0 }, - { "__bounded__", RID_BOUNDED, 0 }, { "__builtin_choose_expr", RID_CHOOSE_EXPR, 0 }, { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, 0 }, { "__builtin_va_arg", RID_VA_ARG, 0 }, --- 6022,6027 ---- *************** static const struct resword reswords[] = *** 6068,6075 **** { "__thread", RID_THREAD, 0 }, { "__typeof", RID_TYPEOF, 0 }, { "__typeof__", RID_TYPEOF, 0 }, - { "__unbounded", RID_UNBOUNDED, 0 }, - { "__unbounded__", RID_UNBOUNDED, 0 }, { "__volatile", RID_VOLATILE, 0 }, { "__volatile__", RID_VOLATILE, 0 }, { "asm", RID_ASM, D_EXT }, --- 6051,6056 ---- *************** static const struct resword reswords[] = *** 6124,6130 **** { "protocol", RID_AT_PROTOCOL, D_OBJC }, { "public", RID_AT_PUBLIC, D_OBJC }, { "selector", RID_AT_SELECTOR, D_OBJC }, ! /* These are recognized only in protocol-qualifier context (see above) */ { "bycopy", RID_BYCOPY, D_OBJC }, --- 6105,6115 ---- { "protocol", RID_AT_PROTOCOL, D_OBJC }, { "public", RID_AT_PUBLIC, D_OBJC }, { "selector", RID_AT_SELECTOR, D_OBJC }, ! { "throw", RID_AT_THROW, D_OBJC }, ! { "try", RID_AT_TRY, D_OBJC }, ! { "catch", RID_AT_CATCH, D_OBJC }, ! { "finally", RID_AT_FINALLY, D_OBJC }, ! { "synchronized", RID_AT_SYNCHRONIZED, D_OBJC }, /* These are recognized only in protocol-qualifier context (see above) */ { "bycopy", RID_BYCOPY, D_OBJC }, *************** static const short rid_to_yy[RID_MAX] = *** 6156,6163 **** /* RID_RESTRICT */ TYPE_QUAL, /* C extensions */ - /* RID_BOUNDED */ TYPE_QUAL, - /* RID_UNBOUNDED */ TYPE_QUAL, /* RID_COMPLEX */ TYPESPEC, /* RID_THREAD */ SCSPEC, --- 6141,6146 ---- *************** static const short rid_to_yy[RID_MAX] = *** 6216,6224 **** /* RID_CHOOSE_EXPR */ CHOOSE_EXPR, /* RID_TYPES_COMPATIBLE_P */ TYPES_COMPATIBLE_P, ! /* RID_FUNCTION_NAME */ STRING_FUNC_NAME, ! /* RID_PRETTY_FUNCTION_NAME */ STRING_FUNC_NAME, ! /* RID_C99_FUNCTION_NAME */ VAR_FUNC_NAME, /* C++ */ /* RID_BOOL */ TYPESPEC, --- 6199,6207 ---- /* RID_CHOOSE_EXPR */ CHOOSE_EXPR, /* RID_TYPES_COMPATIBLE_P */ TYPES_COMPATIBLE_P, ! /* RID_FUNCTION_NAME */ FUNC_NAME, ! /* RID_PRETTY_FUNCTION_NAME */ FUNC_NAME, ! /* RID_C99_FUNCTION_NAME */ FUNC_NAME, /* C++ */ /* RID_BOOL */ TYPESPEC, *************** static const short rid_to_yy[RID_MAX] = *** 6234,6239 **** --- 6217,6223 ---- /* RID_FALSE */ 0, /* RID_NAMESPACE */ 0, /* RID_NEW */ 0, + /* RID_OFFSETOF */ 0, /* RID_OPERATOR */ 0, /* RID_THIS */ 0, /* RID_THROW */ 0, *************** static const short rid_to_yy[RID_MAX] = *** 6261,6285 **** /* RID_AT_PUBLIC */ PUBLIC, /* RID_AT_PROTOCOL */ PROTOCOL, /* RID_AT_SELECTOR */ SELECTOR, /* RID_AT_INTERFACE */ INTERFACE, /* RID_AT_IMPLEMENTATION */ IMPLEMENTATION }; static void ! init_reswords () { unsigned int i; tree id; int mask = (flag_isoc99 ? 0 : D_C89) | (flag_no_asm ? (flag_isoc99 ? D_EXT : D_EXT|D_EXT89) : 0); ! if (!flag_objc) mask |= D_OBJC; ! /* It is not necessary to register ridpointers as a GC root, because ! all the trees it points to are permanently interned in the ! get_identifier hash anyway. */ ! ridpointers = (tree *) xcalloc ((int) RID_MAX, sizeof (tree)); for (i = 0; i < N_reswords; i++) { /* If a keyword is disabled, do not enter it into the table --- 6245,6271 ---- /* RID_AT_PUBLIC */ PUBLIC, /* RID_AT_PROTOCOL */ PROTOCOL, /* RID_AT_SELECTOR */ SELECTOR, + /* RID_AT_THROW */ AT_THROW, + /* RID_AT_TRY */ AT_TRY, + /* RID_AT_CATCH */ AT_CATCH, + /* RID_AT_FINALLY */ AT_FINALLY, + /* RID_AT_SYNCHRONIZED */ AT_SYNCHRONIZED, /* RID_AT_INTERFACE */ INTERFACE, /* RID_AT_IMPLEMENTATION */ IMPLEMENTATION }; static void ! init_reswords (void) { unsigned int i; tree id; int mask = (flag_isoc99 ? 0 : D_C89) | (flag_no_asm ? (flag_isoc99 ? D_EXT : D_EXT|D_EXT89) : 0); ! if (!c_dialect_objc ()) mask |= D_OBJC; ! ridpointers = ggc_calloc ((int) RID_MAX, sizeof (tree)); for (i = 0; i < N_reswords; i++) { /* If a keyword is disabled, do not enter it into the table *************** init_reswords () *** 6297,6331 **** #define NAME(type) cpp_type2name (type) static void ! yyerror (msgid) ! const char *msgid; { ! const char *string = _(msgid); ! ! if (last_token == CPP_EOF) ! error ("%s at end of input", string); ! else if (last_token == CPP_CHAR || last_token == CPP_WCHAR) ! { ! unsigned int val = TREE_INT_CST_LOW (yylval.ttype); ! const char *const ell = (last_token == CPP_CHAR) ? "" : "L"; ! if (val <= UCHAR_MAX && ISGRAPH (val)) ! error ("%s before %s'%c'", string, ell, val); ! else ! error ("%s before %s'\\x%x'", string, ell, val); ! } ! else if (last_token == CPP_STRING ! || last_token == CPP_WSTRING) ! error ("%s before string constant", string); ! else if (last_token == CPP_NUMBER) ! error ("%s before numeric constant", string); ! else if (last_token == CPP_NAME) ! error ("%s before \"%s\"", string, IDENTIFIER_POINTER (yylval.ttype)); ! else ! error ("%s before '%s' token", string, NAME(last_token)); } static int ! yylexname () { tree decl; --- 6283,6295 ---- #define NAME(type) cpp_type2name (type) static void ! yyerror (const char *msgid) { ! c_parse_error (msgid, last_token, yylval.ttype); } static int ! yylexname (void) { tree decl; *************** yylexname () *** 6348,6369 **** if (!OBJC_IS_AT_KEYWORD (rid_code) && (!OBJC_IS_PQ_KEYWORD (rid_code) || objc_pq_context)) { - int yycode = rid_to_yy[(int) rid_code]; - if (yycode == STRING_FUNC_NAME) - { - /* __FUNCTION__ and __PRETTY_FUNCTION__ get converted - to string constants. */ - const char *name = fname_string (rid_code); - - yylval.ttype = build_string (strlen (name) + 1, name); - C_ARTIFICIAL_STRING_P (yylval.ttype) = 1; - last_token = CPP_STRING; /* so yyerror won't choke */ - return STRING; - } - /* Return the canonical spelling for this keyword. */ yylval.ttype = ridpointers[(int) rid_code]; ! return yycode; } } --- 6312,6320 ---- if (!OBJC_IS_AT_KEYWORD (rid_code) && (!OBJC_IS_PQ_KEYWORD (rid_code) || objc_pq_context)) { /* Return the canonical spelling for this keyword. */ yylval.ttype = ridpointers[(int) rid_code]; ! return rid_to_yy[(int) rid_code]; } } *************** yylexname () *** 6390,6437 **** return IDENTIFIER; } - /* Concatenate strings before returning them to the parser. This isn't quite - as good as having it done in the lexer, but it's better than nothing. */ - - static int - yylexstring () - { - enum cpp_ttype next_type; - tree orig = yylval.ttype; - - next_type = c_lex (&yylval.ttype); - if (next_type == CPP_STRING - || next_type == CPP_WSTRING - || (next_type == CPP_NAME && yylexname () == STRING)) - { - varray_type strings; - - - VARRAY_TREE_INIT (strings, 32, "strings"); - VARRAY_PUSH_TREE (strings, orig); - - do - { - VARRAY_PUSH_TREE (strings, yylval.ttype); - next_type = c_lex (&yylval.ttype); - } - while (next_type == CPP_STRING - || next_type == CPP_WSTRING - || (next_type == CPP_NAME && yylexname () == STRING)); - - yylval.ttype = combine_strings (strings); - } - else - yylval.ttype = orig; - - /* We will have always read one token too many. */ - _cpp_backup_tokens (parse_in, 1); - - return STRING; - } - static inline int ! _yylex () { get_next: last_token = c_lex (&yylval.ttype); --- 6341,6348 ---- return IDENTIFIER; } static inline int ! _yylex (void) { get_next: last_token = c_lex (&yylval.ttype); *************** _yylex () *** 6495,6507 **** return 0; case CPP_NAME: ! { ! int ret = yylexname (); ! if (ret == STRING) ! return yylexstring (); ! else ! return ret; ! } case CPP_NUMBER: case CPP_CHAR: --- 6406,6416 ---- return 0; case CPP_NAME: ! return yylexname (); ! ! case CPP_AT_NAME: ! /* This only happens in Objective-C; it must be a keyword. */ ! return rid_to_yy [(int) C_RID_CODE (yylval.ttype)]; case CPP_NUMBER: case CPP_CHAR: *************** _yylex () *** 6510,6537 **** case CPP_STRING: case CPP_WSTRING: ! return yylexstring (); ! ! /* This token is Objective-C specific. It gives the next token ! special significance. */ ! case CPP_ATSIGN: ! { ! tree after_at; ! enum cpp_ttype after_at_type; ! ! after_at_type = c_lex (&after_at); ! if (after_at_type == CPP_NAME ! && C_IS_RESERVED_WORD (after_at) ! && OBJC_IS_AT_KEYWORD (C_RID_CODE (after_at))) ! { ! yylval.ttype = after_at; ! last_token = after_at_type; ! return rid_to_yy [(int) C_RID_CODE (after_at)]; ! } ! _cpp_backup_tokens (parse_in, 1); ! return '@'; ! } /* These tokens are C++ specific (and will not be generated in C mode, but let's be cautious). */ --- 6419,6428 ---- case CPP_STRING: case CPP_WSTRING: ! return STRING; ! case CPP_OBJC_STRING: ! return OBJC_STRING; /* These tokens are C++ specific (and will not be generated in C mode, but let's be cautious). */ *************** _yylex () *** 6555,6561 **** } static int ! yylex() { int r; timevar_push (TV_LEX); --- 6446,6452 ---- } static int ! yylex (void) { int r; timevar_push (TV_LEX); *************** yylex() *** 6567,6576 **** /* Function used when yydebug is set, to print a token in more detail. */ static void ! yyprint (file, yychar, yyl) ! FILE *file; ! int yychar; ! YYSTYPE yyl; { tree t = yyl.ttype; --- 6458,6464 ---- /* Function used when yydebug is set, to print a token in more detail. */ static void ! yyprint (FILE *file, int yychar, YYSTYPE yyl) { tree t = yyl.ttype; *************** yyprint (file, yychar, yyl) *** 6592,6616 **** case CONSTANT: fprintf (file, " %s", GET_MODE_NAME (TYPE_MODE (TREE_TYPE (t)))); if (TREE_CODE (t) == INTEGER_CST) ! fprintf (file, ! #if HOST_BITS_PER_WIDE_INT == 64 ! #if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT ! " 0x%x%016x", ! #else ! #if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG ! " 0x%lx%016lx", ! #else ! " 0x%llx%016llx", ! #endif ! #endif ! #else ! #if HOST_BITS_PER_WIDE_INT != HOST_BITS_PER_INT ! " 0x%lx%08lx", ! #else ! " 0x%x%08x", ! #endif ! #endif ! TREE_INT_CST_HIGH (t), TREE_INT_CST_LOW (t)); break; } } --- 6480,6490 ---- case CONSTANT: fprintf (file, " %s", GET_MODE_NAME (TYPE_MODE (TREE_TYPE (t)))); if (TREE_CODE (t) == INTEGER_CST) ! { ! fputs (" ", file); ! fprintf (file, HOST_WIDE_INT_PRINT_DOUBLE_HEX, ! TREE_INT_CST_HIGH (t), TREE_INT_CST_LOW (t)); ! } break; } } *************** yyprint (file, yychar, yyl) *** 6618,6632 **** /* This is not the ideal place to put these, but we have to get them out of c-lex.c because cp/lex.c has its own versions. */ ! /* Free malloced parser stacks if necessary. */ ! void ! free_parser_stacks () { if (malloced_yyss) { free (malloced_yyss); free (malloced_yyvs); } } --- 6492,6516 ---- /* This is not the ideal place to put these, but we have to get them out of c-lex.c because cp/lex.c has its own versions. */ ! /* Parse the file. */ void ! c_parse_file (void) { + yyparse (); + /* In case there were missing closebraces, get us back to the global + binding level. */ + while (! global_bindings_p ()) + poplevel (0, 0, 0); + /* __FUNCTION__ is defined at file scope (""). This + call may not be necessary as my tests indicate it + still works without it. */ + finish_fname_decls (); + if (malloced_yyss) { free (malloced_yyss); free (malloced_yyvs); + malloced_yyss = 0; } } diff -Nrc3pad gcc-3.3.3/gcc/objc/objc-parse.y gcc-3.4.0/gcc/objc/objc-parse.y *** gcc-3.3.3/gcc/objc/objc-parse.y 2004-02-14 20:46:56.000000000 +0000 --- gcc-3.4.0/gcc/objc/objc-parse.y 2004-04-19 02:26:21.000000000 +0000 *************** *** 1,7 **** /*WARNING: This file is automatically generated!*/ /* YACC parser for C syntax and for Objective C. -*-c-*- ! Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, ! 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GCC. --- 1,7 ---- /*WARNING: This file is automatically generated!*/ /* YACC parser for C syntax and for Objective C. -*-c-*- ! Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, ! 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of GCC. *************** Software Foundation, 59 Temple Place - S *** 21,28 **** 02111-1307, USA. */ /* This file defines the grammar of C and that of Objective C. ! ifobjc ... end ifobjc conditionals contain code for Objective C only. ! ifc ... end ifc conditionals contain code for C only. Sed commands in Makefile.in are used to convert this file into c-parse.y and into objc-parse.y. */ --- 21,28 ---- 02111-1307, USA. */ /* This file defines the grammar of C and that of Objective C. ! @@ifobjc ... @@end_ifobjc conditionals contain code for Objective C only. ! @@ifc ... @@end_ifc conditionals contain code for C only. Sed commands in Makefile.in are used to convert this file into c-parse.y and into objc-parse.y. */ *************** Software Foundation, 59 Temple Place - S *** 33,38 **** --- 33,40 ---- %{ #include "config.h" #include "system.h" + #include "coretypes.h" + #include "tm.h" #include "tree.h" #include "input.h" #include "cpplib.h" *************** Software Foundation, 59 Temple Place - S *** 41,54 **** #include "c-pragma.h" /* For YYDEBUG definition, and parse_in. */ #include "c-tree.h" #include "flags.h" #include "output.h" #include "toplev.h" #include "ggc.h" - #ifdef MULTIBYTE_CHARS - #include - #endif - #include "objc-act.h" /* Like YYERROR but do call yyerror. */ --- 43,53 ---- #include "c-pragma.h" /* For YYDEBUG definition, and parse_in. */ #include "c-tree.h" #include "flags.h" + #include "varray.h" #include "output.h" #include "toplev.h" #include "ggc.h" #include "objc-act.h" /* Like YYERROR but do call yyerror. */ *************** do { \ *** 72,86 **** newsize = *(YYSSZ) *= 2; \ if (malloced_yyss) \ { \ ! newss = (short *) \ ! really_call_realloc (*(SS), newsize * sizeof (short)); \ ! newvs = (YYSTYPE *) \ ! really_call_realloc (*(VS), newsize * sizeof (YYSTYPE)); \ } \ else \ { \ ! newss = (short *) really_call_malloc (newsize * sizeof (short)); \ ! newvs = (YYSTYPE *) really_call_malloc (newsize * sizeof (YYSTYPE)); \ if (newss) \ memcpy (newss, *(SS), (SSSIZE)); \ if (newvs) \ --- 71,83 ---- newsize = *(YYSSZ) *= 2; \ if (malloced_yyss) \ { \ ! newss = really_call_realloc (*(SS), newsize * sizeof (short)); \ ! newvs = really_call_realloc (*(VS), newsize * sizeof (YYSTYPE)); \ } \ else \ { \ ! newss = really_call_malloc (newsize * sizeof (short)); \ ! newvs = really_call_malloc (newsize * sizeof (YYSTYPE)); \ if (newss) \ memcpy (newss, *(SS), (SSSIZE)); \ if (newvs) \ *************** do { \ *** 101,107 **** %start program %union {long itype; tree ttype; enum tree_code code; ! const char *filename; int lineno; } /* All identifiers that are not reserved words and are not declared typedefs in the current block */ --- 98,104 ---- %start program %union {long itype; tree ttype; enum tree_code code; ! location_t location; } /* All identifiers that are not reserved words and are not declared typedefs in the current block */ *************** do { \ *** 131,136 **** --- 128,134 ---- /* String constants in raw form. yylval is a STRING_CST node. */ + %token STRING /* "...", used for functions with variable arglists. */ *************** do { \ *** 143,151 **** %token ATTRIBUTE EXTENSION LABEL %token REALPART IMAGPART VA_ARG CHOOSE_EXPR TYPES_COMPATIBLE_P %token PTR_VALUE PTR_BASE PTR_EXTENT ! ! /* function name can be a string const or a var decl. */ ! %token STRING_FUNC_NAME VAR_FUNC_NAME /* Add precedence rules to solve dangling else s/r conflict */ %nonassoc IF --- 141,147 ---- %token ATTRIBUTE EXTENSION LABEL %token REALPART IMAGPART VA_ARG CHOOSE_EXPR TYPES_COMPATIBLE_P %token PTR_VALUE PTR_BASE PTR_EXTENT ! %token FUNC_NAME /* Add precedence rules to solve dangling else s/r conflict */ %nonassoc IF *************** do { \ *** 175,180 **** --- 171,178 ---- Objective C, so that the token codes are the same in both. */ %token INTERFACE IMPLEMENTATION END SELECTOR DEFS ENCODE %token CLASSNAME PUBLIC PRIVATE PROTECTED PROTOCOL OBJECTNAME CLASS ALIAS + %token AT_THROW AT_TRY AT_CATCH AT_FINALLY AT_SYNCHRONIZED + %token OBJC_STRING %type unop %type ENUM STRUCT UNION IF ELSE WHILE DO FOR SWITCH CASE DEFAULT *************** do { \ *** 202,208 **** %type init maybeasm %type asm_operands nonnull_asm_operands asm_operand asm_clobbers %type maybe_attribute attributes attribute attribute_list attrib ! %type any_word extension %type compstmt compstmt_start compstmt_nostart compstmt_primary_start %type do_stmt_start poplevel stmt label --- 200,206 ---- %type init maybeasm %type asm_operands nonnull_asm_operands asm_operand asm_clobbers %type maybe_attribute attributes attribute attribute_list attrib ! %type any_word %type compstmt compstmt_start compstmt_nostart compstmt_primary_start %type do_stmt_start poplevel stmt label *************** do { \ *** 228,237 **** %type parmlist_or_identifiers parmlist_or_identifiers_1 %type identifiers_or_typenames ! %type setspecs setspecs_fp ! %type save_filename ! %type save_lineno /* the Objective-C nonterminals */ --- 226,234 ---- %type parmlist_or_identifiers parmlist_or_identifiers_1 %type identifiers_or_typenames ! %type setspecs setspecs_fp extension ! %type save_location /* the Objective-C nonterminals */ *************** do { \ *** 241,249 **** %type keywordexpr keywordarglist keywordarg %type myparms myparm optparmlist reservedwords objcselectorexpr %type selectorarg keywordnamelist keywordname objcencodeexpr ! %type objc_string non_empty_protocolrefs protocolrefs identifier_list objcprotocolexpr ! %type CLASSNAME OBJECTNAME %{ /* Number of statements (loosely speaking) and compound statements --- 238,249 ---- %type keywordexpr keywordarglist keywordarg %type myparms myparm optparmlist reservedwords objcselectorexpr %type selectorarg keywordnamelist keywordname objcencodeexpr ! %type non_empty_protocolrefs protocolrefs identifier_list objcprotocolexpr ! %type CLASSNAME OBJECTNAME OBJC_STRING ! ! %type superclass ! %type objc_try_catch_stmt objc_finally_block %{ /* Number of statements (loosely speaking) and compound statements *************** do { \ *** 251,260 **** static int stmt_count; static int compstmt_count; ! /* Input file and line number of the end of the body of last simple_if; used by the stmt-rule immediately after simple_if returns. */ ! static const char *if_stmt_file; ! static int if_stmt_line; /* List of types and structure classes of the current declaration. */ static GTY(()) tree current_declspecs; --- 251,260 ---- static int stmt_count; static int compstmt_count; ! /* Input location of the end of the body of last simple_if; used by the stmt-rule immediately after simple_if returns. */ ! static location_t if_stmt_locus; ! /* List of types and structure classes of the current declaration. */ static GTY(()) tree current_declspecs; *************** static GTY(()) tree declspec_stack; *** 289,303 **** /* For __extension__, save/restore the warning flags which are controlled by __extension__. */ ! #define SAVE_EXT_FLAGS() \ ! size_int (pedantic \ ! | (warn_pointer_arith << 1) \ ! | (warn_traditional << 2) \ ! | (flag_iso << 3)) ! #define RESTORE_EXT_FLAGS(tval) \ do { \ - int val = tree_low_cst (tval, 0); \ pedantic = val & 1; \ warn_pointer_arith = (val >> 1) & 1; \ warn_traditional = (val >> 2) & 1; \ --- 289,302 ---- /* For __extension__, save/restore the warning flags which are controlled by __extension__. */ ! #define SAVE_EXT_FLAGS() \ ! (pedantic \ ! | (warn_pointer_arith << 1) \ ! | (warn_traditional << 2) \ ! | (flag_iso << 3)) ! #define RESTORE_EXT_FLAGS(val) \ do { \ pedantic = val & 1; \ warn_pointer_arith = (val >> 1) & 1; \ warn_traditional = (val >> 2) & 1; \ *************** static bool parsing_iso_function_signatu *** 323,339 **** #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL) ! static void yyprint PARAMS ((FILE *, int, YYSTYPE)); ! static void yyerror PARAMS ((const char *)); ! static int yylexname PARAMS ((void)); ! static int yylexstring PARAMS ((void)); ! static inline int _yylex PARAMS ((void)); ! static int yylex PARAMS ((void)); ! static void init_reswords PARAMS ((void)); /* Initialisation routine for this file. */ void ! c_parse_init () { init_reswords (); } --- 322,337 ---- #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL) ! static void yyprint (FILE *, int, YYSTYPE); ! static void yyerror (const char *); ! static int yylexname (void); ! static inline int _yylex (void); ! static int yylex (void); ! static void init_reswords (void); /* Initialisation routine for this file. */ void ! c_parse_init (void) { init_reswords (); } *************** c_parse_init () *** 344,363 **** program: /* empty */ { if (pedantic) pedwarn ("ISO C forbids an empty source file"); - finish_file (); } | extdefs - { - /* In case there were missing closebraces, - get us back to the global binding level. */ - while (! global_bindings_p ()) - poplevel (0, 0, 0); - /* __FUNCTION__ is defined at file scope (""). This - call may not be necessary as my tests indicate it - still works without it. */ - finish_fname_decls (); - finish_file (); - } ; /* the reason for the strange actions in this rule --- 342,349 ---- *************** fndef: *** 417,428 **** all_prefix_attributes)) YYERROR1; } ! old_style_parm_decls ! { store_parm_decls (); } ! save_filename save_lineno compstmt_or_error ! { DECL_SOURCE_FILE (current_function_decl) = $7; ! DECL_SOURCE_LINE (current_function_decl) = $8; ! finish_function (0, 1); POP_DECLSPEC_STACK; } | declspecs_ts setspecs declarator error { POP_DECLSPEC_STACK; } --- 403,413 ---- all_prefix_attributes)) YYERROR1; } ! old_style_parm_decls save_location ! { DECL_SOURCE_LOCATION (current_function_decl) = $6; ! store_parm_decls (); } ! compstmt_or_error ! { finish_function (); POP_DECLSPEC_STACK; } | declspecs_ts setspecs declarator error { POP_DECLSPEC_STACK; } *************** fndef: *** 431,442 **** all_prefix_attributes)) YYERROR1; } ! old_style_parm_decls ! { store_parm_decls (); } ! save_filename save_lineno compstmt_or_error ! { DECL_SOURCE_FILE (current_function_decl) = $7; ! DECL_SOURCE_LINE (current_function_decl) = $8; ! finish_function (0, 1); POP_DECLSPEC_STACK; } | declspecs_nots setspecs notype_declarator error { POP_DECLSPEC_STACK; } --- 416,426 ---- all_prefix_attributes)) YYERROR1; } ! old_style_parm_decls save_location ! { DECL_SOURCE_LOCATION (current_function_decl) = $6; ! store_parm_decls (); } ! compstmt_or_error ! { finish_function (); POP_DECLSPEC_STACK; } | declspecs_nots setspecs notype_declarator error { POP_DECLSPEC_STACK; } *************** fndef: *** 445,456 **** all_prefix_attributes)) YYERROR1; } ! old_style_parm_decls ! { store_parm_decls (); } ! save_filename save_lineno compstmt_or_error ! { DECL_SOURCE_FILE (current_function_decl) = $6; ! DECL_SOURCE_LINE (current_function_decl) = $7; ! finish_function (0, 1); POP_DECLSPEC_STACK; } | setspecs notype_declarator error { POP_DECLSPEC_STACK; } --- 429,439 ---- all_prefix_attributes)) YYERROR1; } ! old_style_parm_decls save_location ! { DECL_SOURCE_LOCATION (current_function_decl) = $5; ! store_parm_decls (); } ! compstmt_or_error ! { finish_function (); POP_DECLSPEC_STACK; } | setspecs notype_declarator error { POP_DECLSPEC_STACK; } *************** expr_no_commas: *** 579,604 **** | expr_no_commas ANDAND { $1 = c_common_truthvalue_conversion (default_conversion ($1)); ! skip_evaluation += $1 == boolean_false_node; } expr_no_commas ! { skip_evaluation -= $1 == boolean_false_node; $$ = parser_build_binary_op (TRUTH_ANDIF_EXPR, $1, $4); } | expr_no_commas OROR { $1 = c_common_truthvalue_conversion (default_conversion ($1)); ! skip_evaluation += $1 == boolean_true_node; } expr_no_commas ! { skip_evaluation -= $1 == boolean_true_node; $$ = parser_build_binary_op (TRUTH_ORIF_EXPR, $1, $4); } | expr_no_commas '?' { $1 = c_common_truthvalue_conversion (default_conversion ($1)); ! skip_evaluation += $1 == boolean_false_node; } expr ':' ! { skip_evaluation += (($1 == boolean_true_node) ! - ($1 == boolean_false_node)); } expr_no_commas ! { skip_evaluation -= $1 == boolean_true_node; $$ = build_conditional_expr ($1, $4, $7); } | expr_no_commas '?' { if (pedantic) --- 562,587 ---- | expr_no_commas ANDAND { $1 = c_common_truthvalue_conversion (default_conversion ($1)); ! skip_evaluation += $1 == truthvalue_false_node; } expr_no_commas ! { skip_evaluation -= $1 == truthvalue_false_node; $$ = parser_build_binary_op (TRUTH_ANDIF_EXPR, $1, $4); } | expr_no_commas OROR { $1 = c_common_truthvalue_conversion (default_conversion ($1)); ! skip_evaluation += $1 == truthvalue_true_node; } expr_no_commas ! { skip_evaluation -= $1 == truthvalue_true_node; $$ = parser_build_binary_op (TRUTH_ORIF_EXPR, $1, $4); } | expr_no_commas '?' { $1 = c_common_truthvalue_conversion (default_conversion ($1)); ! skip_evaluation += $1 == truthvalue_false_node; } expr ':' ! { skip_evaluation += (($1 == truthvalue_true_node) ! - ($1 == truthvalue_false_node)); } expr_no_commas ! { skip_evaluation -= $1 == truthvalue_true_node; $$ = build_conditional_expr ($1, $4, $7); } | expr_no_commas '?' { if (pedantic) *************** expr_no_commas: *** 607,615 **** $2 = save_expr ($1); $1 = c_common_truthvalue_conversion (default_conversion ($2)); ! skip_evaluation += $1 == boolean_true_node; } ':' expr_no_commas ! { skip_evaluation -= $1 == boolean_true_node; $$ = build_conditional_expr ($1, $2, $5); } | expr_no_commas '=' expr_no_commas { char class; --- 590,598 ---- $2 = save_expr ($1); $1 = c_common_truthvalue_conversion (default_conversion ($2)); ! skip_evaluation += $1 == truthvalue_true_node; } ':' expr_no_commas ! { skip_evaluation -= $1 == truthvalue_true_node; $$ = build_conditional_expr ($1, $2, $5); } | expr_no_commas '=' expr_no_commas { char class; *************** primary: *** 638,645 **** } | CONSTANT | STRING ! { $$ = fix_string_type ($$); } ! | VAR_FUNC_NAME { $$ = fname_decl (C_RID_CODE ($$), $$); } | '(' typename ')' '{' { start_init (NULL_TREE, NULL, 0); --- 621,627 ---- } | CONSTANT | STRING ! | FUNC_NAME { $$ = fname_decl (C_RID_CODE ($$), $$); } | '(' typename ')' '{' { start_init (NULL_TREE, NULL, 0); *************** primary: *** 651,657 **** finish_init (); if (pedantic && ! flag_isoc99) ! pedwarn ("ISO C89 forbids compound literals"); $$ = build_compound_literal (type, constructor); } | '(' expr ')' --- 633,639 ---- finish_init (); if (pedantic && ! flag_isoc99) ! pedwarn ("ISO C90 forbids compound literals"); $$ = build_compound_literal (type, constructor); } | '(' expr ')' *************** primary: *** 666,673 **** if (pedantic) pedwarn ("ISO C forbids braced-groups within expressions"); - pop_label_level (); - saved_last_tree = COMPOUND_BODY ($1); RECHAIN_STMTS ($1, COMPOUND_BODY ($1)); last_tree = saved_last_tree; --- 648,653 ---- *************** primary: *** 679,685 **** } | compstmt_primary_start error ')' { - pop_label_level (); last_tree = COMPOUND_BODY ($1); TREE_CHAIN (last_tree) = NULL_TREE; $$ = error_mark_node; --- 659,664 ---- *************** primary: *** 706,712 **** e1 = TYPE_MAIN_VARIANT (groktypename ($3)); e2 = TYPE_MAIN_VARIANT (groktypename ($5)); ! $$ = comptypes (e1, e2) ? build_int_2 (1, 0) : build_int_2 (0, 0); } | primary '[' expr ']' %prec '.' --- 685,691 ---- e1 = TYPE_MAIN_VARIANT (groktypename ($3)); e2 = TYPE_MAIN_VARIANT (groktypename ($5)); ! $$ = comptypes (e1, e2, COMPARE_STRICT) ? build_int_2 (1, 0) : build_int_2 (0, 0); } | primary '[' expr ']' %prec '.' *************** primary: *** 739,757 **** { $$ = build_protocol_expr ($1); } | objcencodeexpr { $$ = build_encode_expr ($1); } ! | objc_string { $$ = build_objc_string_object ($1); } ; - /* Produces an STRING_CST with perhaps more STRING_CSTs chained - onto it, which is to be read as an ObjC string object. */ - objc_string: - '@' STRING - { $$ = $2; } - | objc_string '@' STRING - { $$ = chainon ($1, $3); } - ; - old_style_parm_decls: old_style_parm_decls_1 { --- 718,727 ---- { $$ = build_protocol_expr ($1); } | objcencodeexpr { $$ = build_encode_expr ($1); } ! | OBJC_STRING { $$ = build_objc_string_object ($1); } ; old_style_parm_decls: old_style_parm_decls_1 { *************** old_style_parm_decls_1: *** 765,780 **** if (warn_traditional && !in_system_header && parsing_iso_function_signature) warning ("traditional C rejects ISO C style function definitions"); parsing_iso_function_signature = false; /* Reset after warning. */ } | datadecls ; /* The following are analogous to lineno_decl, decls and decl except that they do not allow nested functions. They are used for old-style parm decls. */ lineno_datadecl: ! save_filename save_lineno datadecl { } ; --- 735,757 ---- if (warn_traditional && !in_system_header && parsing_iso_function_signature) warning ("traditional C rejects ISO C style function definitions"); + if (warn_old_style_definition && !in_system_header + && !parsing_iso_function_signature) + warning ("old-style parameter declaration"); parsing_iso_function_signature = false; /* Reset after warning. */ } | datadecls + { + if (warn_old_style_definition && !in_system_header) + warning ("old-style parameter declaration"); + } ; /* The following are analogous to lineno_decl, decls and decl except that they do not allow nested functions. They are used for old-style parm decls. */ lineno_datadecl: ! save_location datadecl { } ; *************** datadecl: *** 806,812 **** This is to avoid shift/reduce conflicts in contexts where statement labels are allowed. */ lineno_decl: ! save_filename save_lineno decl { } ; --- 783,789 ---- This is to avoid shift/reduce conflicts in contexts where statement labels are allowed. */ lineno_decl: ! save_location decl { } ; *************** typespec_nonreserved_nonattr: *** 1367,1373 **** | non_empty_protocolrefs { $$ = get_object_reference ($1); } | typeof '(' expr ')' ! { skip_evaluation--; $$ = TREE_TYPE ($3); } | typeof '(' typename ')' { skip_evaluation--; $$ = groktypename ($3); } ; --- 1344,1354 ---- | non_empty_protocolrefs { $$ = get_object_reference ($1); } | typeof '(' expr ')' ! { skip_evaluation--; ! if (TREE_CODE ($3) == COMPONENT_REF ! && DECL_C_BIT_FIELD (TREE_OPERAND ($3, 1))) ! error ("`typeof' applied to a bit-field"); ! $$ = TREE_TYPE ($3); } | typeof '(' typename ')' { skip_evaluation--; $$ = groktypename ($3); } ; *************** notype_initdcl: *** 1425,1431 **** so that the header files compile. */ maybe_attribute: /* empty */ ! { $$ = NULL_TREE; } | attributes { $$ = $1; } ; --- 1406,1412 ---- so that the header files compile. */ maybe_attribute: /* empty */ ! { $$ = NULL_TREE; } | attributes { $$ = $1; } ; *************** initlist1: *** 1507,1513 **** initelt: designator_list '=' initval { if (pedantic && ! flag_isoc99) ! pedwarn ("ISO C89 forbids specifying subobject to initialize"); } | designator initval { if (pedantic) pedwarn ("obsolete use of designated initializer without `='"); } --- 1488,1494 ---- initelt: designator_list '=' initval { if (pedantic && ! flag_isoc99) ! pedwarn ("ISO C90 forbids specifying subobject to initialize"); } | designator initval { if (pedantic) pedwarn ("obsolete use of designated initializer without `='"); } *************** nested_function: *** 1560,1578 **** } parsing_iso_function_signature = false; /* Don't warn about nested functions. */ } ! old_style_parm_decls ! { store_parm_decls (); } /* 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. */ ! save_filename save_lineno compstmt { tree decl = current_function_decl; ! DECL_SOURCE_FILE (decl) = $5; ! DECL_SOURCE_LINE (decl) = $6; ! finish_function (1, 1); pop_function_context (); add_decl_stmt (decl); } ; --- 1541,1559 ---- } parsing_iso_function_signature = false; /* Don't warn about nested functions. */ } ! old_style_parm_decls save_location ! { tree decl = current_function_decl; ! DECL_SOURCE_LOCATION (decl) = $4; ! store_parm_decls (); } /* 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 { tree decl = current_function_decl; ! finish_function (); pop_function_context (); add_decl_stmt (decl); } ; *************** notype_nested_function: *** 1591,1609 **** } parsing_iso_function_signature = false; /* Don't warn about nested functions. */ } ! old_style_parm_decls ! { store_parm_decls (); } /* 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. */ ! save_filename save_lineno compstmt { tree decl = current_function_decl; ! DECL_SOURCE_FILE (decl) = $5; ! DECL_SOURCE_LINE (decl) = $6; ! finish_function (1, 1); pop_function_context (); add_decl_stmt (decl); } ; --- 1572,1590 ---- } parsing_iso_function_signature = false; /* Don't warn about nested functions. */ } ! old_style_parm_decls save_location ! { tree decl = current_function_decl; ! DECL_SOURCE_LOCATION (decl) = $4; ! store_parm_decls (); } /* 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 { tree decl = current_function_decl; ! finish_function (); pop_function_context (); add_decl_stmt (decl); } ; *************** structsp_attr: *** 1722,1739 **** /* Start scope of tag before parsing components. */ } component_decl_list '}' maybe_attribute ! { $$ = finish_struct ($4, $5, chainon ($1, $7)); } | struct_head '{' component_decl_list '}' maybe_attribute { $$ = finish_struct (start_struct (RECORD_TYPE, NULL_TREE), ! $3, chainon ($1, $5)); } | union_head identifier '{' { $$ = start_struct (UNION_TYPE, $2); } component_decl_list '}' maybe_attribute ! { $$ = finish_struct ($4, $5, chainon ($1, $7)); } | union_head '{' component_decl_list '}' maybe_attribute { $$ = finish_struct (start_struct (UNION_TYPE, NULL_TREE), ! $3, chainon ($1, $5)); } | enum_head identifier '{' { $$ = start_enum ($2); } --- 1703,1722 ---- /* Start scope of tag before parsing components. */ } component_decl_list '}' maybe_attribute ! { $$ = finish_struct ($4, nreverse ($5), ! chainon ($1, $7)); } | struct_head '{' component_decl_list '}' maybe_attribute { $$ = finish_struct (start_struct (RECORD_TYPE, NULL_TREE), ! nreverse ($3), chainon ($1, $5)); } | union_head identifier '{' { $$ = start_struct (UNION_TYPE, $2); } component_decl_list '}' maybe_attribute ! { $$ = finish_struct ($4, nreverse ($5), ! chainon ($1, $7)); } | union_head '{' component_decl_list '}' maybe_attribute { $$ = finish_struct (start_struct (UNION_TYPE, NULL_TREE), ! nreverse ($3), chainon ($1, $5)); } | enum_head identifier '{' { $$ = start_enum ($2); } *************** maybecomma_warn: *** 1772,1813 **** pedwarn ("comma at end of enumerator list"); } ; component_decl_list: component_decl_list2 { $$ = $1; } | component_decl_list2 component_decl ! { $$ = chainon ($1, $2); pedwarn ("no semicolon at end of struct or union"); } ; component_decl_list2: /* empty */ { $$ = NULL_TREE; } | component_decl_list2 component_decl ';' ! { $$ = chainon ($1, $2); } | component_decl_list2 ';' { if (pedantic) pedwarn ("extra semicolon in struct or union specified"); } /* foo(sizeof(struct{ @defs(ClassName)})); */ | DEFS '(' CLASSNAME ')' ! { ! tree interface = lookup_interface ($3); ! ! if (interface) ! $$ = get_class_ivars (interface); ! else ! { ! error ("cannot find interface declaration for `%s'", ! IDENTIFIER_POINTER ($3)); ! $$ = NULL_TREE; ! } ! } ; component_decl: declspecs_nosc_ts setspecs components { $$ = $3; POP_DECLSPEC_STACK; } ! | declspecs_nosc_ts setspecs save_filename save_lineno { /* Support for unnamed structs or unions as members of structs or unions (which is [a] useful and [b] supports --- 1755,1797 ---- pedwarn ("comma at end of enumerator list"); } ; + /* We chain the components in reverse order. They are put in forward + order in structsp_attr. + + Note that component_declarator returns single decls, so components + and components_notype can use TREE_CHAIN directly, wheras components + and components_notype return lists (of comma separated decls), so + component_decl_list and component_decl_list2 must use chainon. + + The theory behind all this is that there will be more semicolon + separated fields than comma separated fields, and so we'll be + minimizing the number of node traversals required by chainon. */ + component_decl_list: component_decl_list2 { $$ = $1; } | component_decl_list2 component_decl ! { $$ = chainon ($2, $1); pedwarn ("no semicolon at end of struct or union"); } ; component_decl_list2: /* empty */ { $$ = NULL_TREE; } | component_decl_list2 component_decl ';' ! { $$ = chainon ($2, $1); } | component_decl_list2 ';' { if (pedantic) pedwarn ("extra semicolon in struct or union specified"); } /* foo(sizeof(struct{ @defs(ClassName)})); */ | DEFS '(' CLASSNAME ')' ! { $$ = nreverse (get_class_ivars_from_name ($3)); } ; component_decl: declspecs_nosc_ts setspecs components { $$ = $3; POP_DECLSPEC_STACK; } ! | declspecs_nosc_ts setspecs { /* Support for unnamed structs or unions as members of structs or unions (which is [a] useful and [b] supports *************** component_decl: *** 1815,1821 **** if (pedantic) pedwarn ("ISO C doesn't support unnamed structs/unions"); ! $$ = grokfield($3, $4, NULL, current_declspecs, NULL_TREE); POP_DECLSPEC_STACK; } | declspecs_nosc_nots setspecs components_notype { $$ = $3; --- 1799,1805 ---- if (pedantic) pedwarn ("ISO C doesn't support unnamed structs/unions"); ! $$ = grokfield(NULL, current_declspecs, NULL_TREE); POP_DECLSPEC_STACK; } | declspecs_nosc_nots setspecs components_notype { $$ = $3; *************** component_decl: *** 1823,1829 **** | declspecs_nosc_nots { if (pedantic) pedwarn ("ISO C forbids member declarations with no members"); ! shadow_tag($1); $$ = NULL_TREE; } | error { $$ = NULL_TREE; } --- 1807,1813 ---- | declspecs_nosc_nots { if (pedantic) pedwarn ("ISO C forbids member declarations with no members"); ! shadow_tag_warned ($1, pedantic); $$ = NULL_TREE; } | error { $$ = NULL_TREE; } *************** component_decl: *** 1835,1879 **** components: component_declarator | components ',' maybe_resetattrs component_declarator ! { $$ = chainon ($1, $4); } ; components_notype: component_notype_declarator | components_notype ',' maybe_resetattrs component_notype_declarator ! { $$ = chainon ($1, $4); } ; component_declarator: ! save_filename save_lineno declarator maybe_attribute ! { $$ = grokfield ($1, $2, $3, current_declspecs, NULL_TREE); ! decl_attributes (&$$, chainon ($4, all_prefix_attributes), 0); } ! | save_filename save_lineno ! declarator ':' expr_no_commas maybe_attribute ! { $$ = grokfield ($1, $2, $3, current_declspecs, $5); ! decl_attributes (&$$, chainon ($6, all_prefix_attributes), 0); } ! | save_filename save_lineno ':' expr_no_commas maybe_attribute ! { $$ = grokfield ($1, $2, NULL_TREE, current_declspecs, $4); ! decl_attributes (&$$, chainon ($5, all_prefix_attributes), 0); } ; component_notype_declarator: ! save_filename save_lineno notype_declarator maybe_attribute ! { $$ = grokfield ($1, $2, $3, current_declspecs, NULL_TREE); ! decl_attributes (&$$, chainon ($4, all_prefix_attributes), 0); } ! | save_filename save_lineno ! notype_declarator ':' expr_no_commas maybe_attribute ! { $$ = grokfield ($1, $2, $3, current_declspecs, $5); ! decl_attributes (&$$, chainon ($6, all_prefix_attributes), 0); } ! | save_filename save_lineno ':' expr_no_commas maybe_attribute ! { $$ = grokfield ($1, $2, NULL_TREE, current_declspecs, $4); ! decl_attributes (&$$, chainon ($5, all_prefix_attributes), 0); } ; /* We chain the enumerators in reverse order. ! They are put in forward order where enumlist is used. ! (The order used to be significant, but no longer is so. ! However, we still maintain the order, just to be clean.) */ enumlist: enumerator --- 1819,1865 ---- components: component_declarator | components ',' maybe_resetattrs component_declarator ! { TREE_CHAIN ($4) = $1; $$ = $4; } ; components_notype: component_notype_declarator | components_notype ',' maybe_resetattrs component_notype_declarator ! { TREE_CHAIN ($4) = $1; $$ = $4; } ; component_declarator: ! declarator maybe_attribute ! { $$ = grokfield ($1, current_declspecs, NULL_TREE); ! decl_attributes (&$$, ! chainon ($2, all_prefix_attributes), 0); } ! | declarator ':' expr_no_commas maybe_attribute ! { $$ = grokfield ($1, current_declspecs, $3); ! decl_attributes (&$$, ! chainon ($4, all_prefix_attributes), 0); } ! | ':' expr_no_commas maybe_attribute ! { $$ = grokfield (NULL_TREE, current_declspecs, $2); ! decl_attributes (&$$, ! chainon ($3, all_prefix_attributes), 0); } ; component_notype_declarator: ! notype_declarator maybe_attribute ! { $$ = grokfield ($1, current_declspecs, NULL_TREE); ! decl_attributes (&$$, ! chainon ($2, all_prefix_attributes), 0); } ! | notype_declarator ':' expr_no_commas maybe_attribute ! { $$ = grokfield ($1, current_declspecs, $3); ! decl_attributes (&$$, ! chainon ($4, all_prefix_attributes), 0); } ! | ':' expr_no_commas maybe_attribute ! { $$ = grokfield (NULL_TREE, current_declspecs, $2); ! decl_attributes (&$$, ! chainon ($3, all_prefix_attributes), 0); } ; /* We chain the enumerators in reverse order. ! They are put in forward order in structsp_attr. */ enumlist: enumerator *************** enumlist: *** 1881,1887 **** { if ($1 == error_mark_node) $$ = $1; else ! $$ = chainon ($3, $1); } | error { $$ = error_mark_node; } ; --- 1867,1873 ---- { if ($1 == error_mark_node) $$ = $1; else ! TREE_CHAIN ($3) = $1, $$ = $3; } | error { $$ = error_mark_node; } ; *************** direct_absdcl1: *** 1957,1972 **** /* The [...] part of a declarator for an array type. */ array_declarator: ! '[' maybe_type_quals_attrs expr ']' { $$ = build_array_declarator ($3, $2, 0, 0); } | '[' maybe_type_quals_attrs ']' { $$ = build_array_declarator (NULL_TREE, $2, 0, 0); } | '[' maybe_type_quals_attrs '*' ']' { $$ = build_array_declarator (NULL_TREE, $2, 0, 1); } ! | '[' STATIC maybe_type_quals_attrs expr ']' { $$ = build_array_declarator ($4, $3, 1, 0); } /* declspecs_nosc_nots is a synonym for type_quals_attrs. */ ! | '[' declspecs_nosc_nots STATIC expr ']' { $$ = build_array_declarator ($4, $2, 1, 0); } ; --- 1943,1958 ---- /* The [...] part of a declarator for an array type. */ array_declarator: ! '[' maybe_type_quals_attrs expr_no_commas ']' { $$ = build_array_declarator ($3, $2, 0, 0); } | '[' maybe_type_quals_attrs ']' { $$ = build_array_declarator (NULL_TREE, $2, 0, 0); } | '[' maybe_type_quals_attrs '*' ']' { $$ = build_array_declarator (NULL_TREE, $2, 0, 1); } ! | '[' STATIC maybe_type_quals_attrs expr_no_commas ']' { $$ = build_array_declarator ($4, $3, 1, 0); } /* declspecs_nosc_nots is a synonym for type_quals_attrs. */ ! | '[' declspecs_nosc_nots STATIC expr_no_commas ']' { $$ = build_array_declarator ($4, $2, 1, 0); } ; *************** stmts_and_decls: *** 1981,1987 **** | lineno_stmt_decl_or_labels_ending_decl | lineno_stmt_decl_or_labels_ending_label { ! pedwarn ("deprecated use of label at end of compound statement"); } | lineno_stmt_decl_or_labels_ending_error ; --- 1967,1973 ---- | lineno_stmt_decl_or_labels_ending_decl | lineno_stmt_decl_or_labels_ending_label { ! error ("label at end of compound statement"); } | lineno_stmt_decl_or_labels_ending_error ; *************** lineno_stmt_decl_or_labels_ending_stmt: *** 1997,2004 **** lineno_stmt_decl_or_labels_ending_decl: lineno_decl | lineno_stmt_decl_or_labels_ending_stmt lineno_decl ! { if (pedantic && !flag_isoc99) ! pedwarn ("ISO C89 forbids mixed declarations and code"); } | lineno_stmt_decl_or_labels_ending_decl lineno_decl | lineno_stmt_decl_or_labels_ending_error lineno_decl ; --- 1983,1993 ---- lineno_stmt_decl_or_labels_ending_decl: lineno_decl | lineno_stmt_decl_or_labels_ending_stmt lineno_decl ! { ! if ((pedantic && !flag_isoc99) ! || warn_declaration_after_statement) ! pedwarn_c90 ("ISO C90 forbids mixed declarations and code"); ! } | lineno_stmt_decl_or_labels_ending_decl lineno_decl | lineno_stmt_decl_or_labels_ending_error lineno_decl ; *************** pushlevel: /* empty */ *** 2030,2042 **** { pushlevel (0); clear_last_expr (); add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0); - if (objc_method_context) - add_objc_decls (); } ; poplevel: /* empty */ ! { $$ = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); } ; /* Start and end blocks created for the new scopes of C99. */ --- 2019,2033 ---- { pushlevel (0); clear_last_expr (); add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0); } ; poplevel: /* empty */ ! { ! if (c_dialect_objc ()) ! objc_clear_super_receiver (); ! $$ = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); ! } ; /* Start and end blocks created for the new scopes of C99. */ *************** c99_block_start: /* empty */ *** 2047,2054 **** pushlevel (0); clear_last_expr (); add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0); - if (objc_method_context) - add_objc_decls (); } else $$ = NULL_TREE; --- 2038,2043 ---- *************** c99_block_end: /* empty */ *** 2062,2068 **** { if (flag_isoc99) { tree scope_stmt = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); ! $$ = poplevel (kept_level_p (), 0, 0); SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmt)) = SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmt)) = $$; --- 2051,2057 ---- { if (flag_isoc99) { tree scope_stmt = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); ! $$ = poplevel (KEEP_MAYBE, 0, 0); SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmt)) = SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmt)) = $$; *************** label_decl: *** 2090,2096 **** { tree link; for (link = $2; link; link = TREE_CHAIN (link)) { ! tree label = shadow_label (TREE_VALUE (link)); C_DECLARED_LABEL_FLAG (label) = 1; add_decl_stmt (label); } --- 2079,2085 ---- { tree link; for (link = $2; link; link = TREE_CHAIN (link)) { ! tree label = declare_label (TREE_VALUE (link)); C_DECLARED_LABEL_FLAG (label) = 1; add_decl_stmt (label); } *************** compstmt_start: '{' { compstmt_count++; *** 2112,2118 **** compstmt_nostart: '}' { $$ = convert (void_type_node, integer_zero_node); } | pushlevel maybe_label_decls compstmt_contents_nonempty '}' poplevel ! { $$ = poplevel (kept_level_p (), 1, 0); SCOPE_STMT_BLOCK (TREE_PURPOSE ($5)) = SCOPE_STMT_BLOCK (TREE_VALUE ($5)) = $$; } --- 2101,2107 ---- compstmt_nostart: '}' { $$ = convert (void_type_node, integer_zero_node); } | pushlevel maybe_label_decls compstmt_contents_nonempty '}' poplevel ! { $$ = poplevel (KEEP_MAYBE, 0, 0); SCOPE_STMT_BLOCK (TREE_PURPOSE ($5)) = SCOPE_STMT_BLOCK (TREE_VALUE ($5)) = $$; } *************** compstmt_primary_start: *** 2135,2141 **** there is a way to turn off the entire subtree of blocks that are contained in it. */ keep_next_level (); - push_label_level (); compstmt_count++; $$ = add_stmt (build_stmt (COMPOUND_STMT, last_tree)); } --- 2124,2129 ---- *************** if_prefix: *** 2172,2179 **** { c_expand_start_cond (c_common_truthvalue_conversion ($4), compstmt_count,$2); $$ = stmt_count; ! if_stmt_file = $-2; ! if_stmt_line = $-1; } ; /* This is a subroutine of stmt. --- 2160,2166 ---- { c_expand_start_cond (c_common_truthvalue_conversion ($4), compstmt_count,$2); $$ = stmt_count; ! if_stmt_locus = $-1; } ; /* This is a subroutine of stmt. *************** do_stmt_start: *** 2183,2188 **** --- 2170,2176 ---- DO { stmt_count++; compstmt_count++; + c_in_iteration_stmt++; $$ = add_stmt (build_stmt (DO_STMT, NULL_TREE, NULL_TREE)); *************** do_stmt_start: *** 2193,2214 **** DO_COND ($$) = error_mark_node; } c99_block_lineno_labeled_stmt WHILE { $$ = $2; ! RECHAIN_STMTS ($$, DO_BODY ($$)); } ; /* The forced readahead in here is because we might be at the end of a line, and the line and file won't be bumped until yylex absorbs the first token on the next line. */ - save_filename: - { if (yychar == YYEMPTY) - yychar = YYLEX; - $$ = input_filename; } - ; ! save_lineno: { if (yychar == YYEMPTY) yychar = YYLEX; ! $$ = lineno; } ; lineno_labeled_stmt: --- 2181,2198 ---- DO_COND ($$) = error_mark_node; } c99_block_lineno_labeled_stmt WHILE { $$ = $2; ! RECHAIN_STMTS ($$, DO_BODY ($$)); ! c_in_iteration_stmt--; } ; /* The forced readahead in here is because we might be at the end of a line, and the line and file won't be bumped until yylex absorbs the first token on the next line. */ ! save_location: { if (yychar == YYEMPTY) yychar = YYLEX; ! $$ = input_location; } ; lineno_labeled_stmt: *************** c99_block_lineno_labeled_stmt: *** 2224,2233 **** ; lineno_stmt: ! save_filename save_lineno stmt ! { if ($3) { ! STMT_LINENO ($3) = $2; /* ??? We currently have no way of recording the filename for a statement. This probably matters little in practice at the moment, --- 2208,2217 ---- ; lineno_stmt: ! save_location stmt ! { if ($2) { ! STMT_LINENO ($2) = $1.line; /* ??? We currently have no way of recording the filename for a statement. This probably matters little in practice at the moment, *************** lineno_stmt: *** 2238,2247 **** ; lineno_label: ! save_filename save_lineno label ! { if ($3) { ! STMT_LINENO ($3) = $2; } } ; --- 2222,2231 ---- ; lineno_label: ! save_location label ! { if ($2) { ! STMT_LINENO ($2) = $1.line; } } ; *************** select_or_iter_stmt: *** 2262,2269 **** 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) ! warning_with_file_and_line (if_stmt_file, if_stmt_line, ! "empty body in an if-statement"); } /* Make sure c_expand_end_cond is run once for each call to c_expand_start_cond. Otherwise a crash is likely. */ --- 2246,2253 ---- 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) ! warning ("%Hempty body in an if-statement", ! &if_stmt_locus); } /* Make sure c_expand_end_cond is run once for each call to c_expand_start_cond. Otherwise a crash is likely. */ *************** select_or_iter_stmt: *** 2281,2297 **** { stmt_count++; $$ = c_begin_while_stmt (); } '(' expr ')' ! { $4 = c_common_truthvalue_conversion ($4); c_finish_while_stmt_cond (c_common_truthvalue_conversion ($4), $2); $$ = add_stmt ($2); } c99_block_lineno_labeled_stmt ! { RECHAIN_STMTS ($6, WHILE_BODY ($6)); } | do_stmt_start '(' expr ')' ';' { DO_COND ($1) = c_common_truthvalue_conversion ($3); } | do_stmt_start error ! { } | FOR { $$ = build_stmt (FOR_STMT, NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE); --- 2265,2283 ---- { stmt_count++; $$ = c_begin_while_stmt (); } '(' expr ')' ! { c_in_iteration_stmt++; ! $4 = c_common_truthvalue_conversion ($4); c_finish_while_stmt_cond (c_common_truthvalue_conversion ($4), $2); $$ = add_stmt ($2); } c99_block_lineno_labeled_stmt ! { c_in_iteration_stmt--; ! RECHAIN_STMTS ($6, WHILE_BODY ($6)); } | do_stmt_start '(' expr ')' ';' { DO_COND ($1) = c_common_truthvalue_conversion ($3); } | do_stmt_start error ! { } | FOR { $$ = build_stmt (FOR_STMT, NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE); *************** select_or_iter_stmt: *** 2304,2317 **** FOR_COND ($2) = c_common_truthvalue_conversion ($6); } xexpr ')' ! { FOR_EXPR ($2) = $9; } c99_block_lineno_labeled_stmt ! { RECHAIN_STMTS ($2, FOR_BODY ($2)); } | SWITCH '(' expr ')' { stmt_count++; ! $$ = c_start_case ($3); } c99_block_lineno_labeled_stmt ! { c_finish_case (); } ; for_init_stmt: --- 2290,2307 ---- FOR_COND ($2) = c_common_truthvalue_conversion ($6); } xexpr ')' ! { c_in_iteration_stmt++; ! FOR_EXPR ($2) = $9; } c99_block_lineno_labeled_stmt ! { RECHAIN_STMTS ($2, FOR_BODY ($2)); ! c_in_iteration_stmt--;} | SWITCH '(' expr ')' { stmt_count++; ! $$ = c_start_case ($3); ! c_in_case_stmt++; } c99_block_lineno_labeled_stmt ! { c_finish_case (); ! c_in_case_stmt--; } ; for_init_stmt: *************** stmt: *** 2334,2342 **** --- 2324,2344 ---- $$ = NULL_TREE; } | BREAK ';' { stmt_count++; + if (!(c_in_iteration_stmt || c_in_case_stmt)) + { + error ("break statement not within loop or switch"); + $$ = NULL_TREE; + } + else $$ = add_stmt (build_break_stmt ()); } | CONTINUE ';' { stmt_count++; + if (!c_in_iteration_stmt) + { + error ("continue statement not within a loop"); + $$ = NULL_TREE; + } + else $$ = add_stmt (build_continue_stmt ()); } | RETURN ';' { stmt_count++; *************** stmt: *** 2358,2364 **** $$ = build_asm_stmt ($2, $4, $6, $8, NULL_TREE); } /* This is the case with clobbered registers as well. */ | ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ':' ! asm_operands ':' asm_clobbers ')' ';' { stmt_count++; $$ = build_asm_stmt ($2, $4, $6, $8, $10); } | GOTO identifier ';' --- 2360,2366 ---- $$ = build_asm_stmt ($2, $4, $6, $8, NULL_TREE); } /* This is the case with clobbered registers as well. */ | ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ':' ! asm_operands ':' asm_clobbers ')' ';' { stmt_count++; $$ = build_asm_stmt ($2, $4, $6, $8, $10); } | GOTO identifier ';' *************** stmt: *** 2381,2386 **** --- 2383,2439 ---- $$ = add_stmt (build_stmt (GOTO_STMT, $3)); } | ';' { $$ = NULL_TREE; } + | AT_THROW expr ';' + { stmt_count++; + $$ = objc_build_throw_stmt ($2); + } + | AT_THROW ';' + { stmt_count++; + $$ = objc_build_throw_stmt (NULL_TREE); + } + | objc_try_catch_stmt + { objc_build_finally_prologue (); } + objc_finally_block + { $$ = objc_build_try_catch_finally_stmt ($1, $3); } + | AT_SYNCHRONIZED '(' expr ')' + { objc_build_synchronized_prologue ($3); } + compstmt + { $$ = objc_build_synchronized_epilogue (); } + ; + + objc_try_catch_stmt: + objc_try_stmt + { objc_build_try_epilogue (1); } + objc_catch_list + { objc_build_catch_epilogue (); $$ = 1; } + | objc_try_stmt + { objc_build_try_epilogue (0); $$ = 0; } + ; + + + objc_try_stmt: + AT_TRY + { objc_build_try_prologue (); } + compstmt + ; + + objc_catch_list: + objc_catch_list objc_catch_block + | objc_catch_block + ; + + objc_catch_block: + AT_CATCH '(' parm ')' + { objc_build_catch_stmt ($3); } + compstmt + { stmt_count++; } + ; + + objc_finally_block: + AT_FINALLY compstmt + { $$ = 1; } + | /* NULL */ + { $$ = 0; } ; /* Any kind of label, including jump labels and case labels. *************** label: CASE expr_no_commas ':' *** 2396,2407 **** | DEFAULT ':' { stmt_count++; $$ = do_case (NULL_TREE, NULL_TREE); } ! | identifier save_filename save_lineno ':' maybe_attribute ! { tree label = define_label ($2, $3, $1); stmt_count++; if (label) { ! decl_attributes (&label, $5, 0); $$ = add_stmt (build_stmt (LABEL_STMT, label)); } else --- 2449,2460 ---- | DEFAULT ':' { stmt_count++; $$ = do_case (NULL_TREE, NULL_TREE); } ! | identifier save_location ':' maybe_attribute ! { tree label = define_label ($2, $1); stmt_count++; if (label) { ! decl_attributes (&label, $4, 0); $$ = add_stmt (build_stmt (LABEL_STMT, label)); } else *************** label: CASE expr_no_commas ':' *** 2413,2422 **** maybe_type_qual: /* empty */ ! { emit_line_note (input_filename, lineno); ! $$ = NULL_TREE; } | TYPE_QUAL ! { emit_line_note (input_filename, lineno); } ; xexpr: --- 2466,2474 ---- maybe_type_qual: /* empty */ ! { $$ = NULL_TREE; } | TYPE_QUAL ! { } ; xexpr: *************** asm_clobbers: *** 2462,2485 **** parmlist: maybe_attribute { pushlevel (0); ! clear_parm_order (); ! declare_parm_level (0); } parmlist_1 { $$ = $3; - parmlist_tags_warning (); poplevel (0, 0, 0); } ; parmlist_1: parmlist_2 ')' | parms ';' ! { tree parm; ! if (pedantic) ! pedwarn ("ISO C forbids forward parameter declarations"); ! /* Mark the forward decls as such. */ ! for (parm = getdecls (); parm; parm = TREE_CHAIN (parm)) ! TREE_ASM_WRITTEN (parm) = 1; ! clear_parm_order (); } maybe_attribute { /* Dummy action so attributes are in known place on parser stack. */ } --- 2514,2529 ---- parmlist: maybe_attribute { pushlevel (0); ! declare_parm_level (); } parmlist_1 { $$ = $3; poplevel (0, 0, 0); } ; parmlist_1: parmlist_2 ')' | parms ';' ! { mark_forward_parm_decls (); } maybe_attribute { /* Dummy action so attributes are in known place on parser stack. */ } *************** parmlist_2: /* empty */ *** 2502,2514 **** tries to verify that BUILT_IN_NEXT_ARG is being used correctly. */ error ("ISO C requires a named argument before `...'"); } | parms { $$ = get_parm_info (1); parsing_iso_function_signature = true; } | parms ',' ELLIPSIS ! { $$ = get_parm_info (0); } ; parms: --- 2546,2561 ---- tries to verify that BUILT_IN_NEXT_ARG is being used correctly. */ error ("ISO C requires a named argument before `...'"); + parsing_iso_function_signature = true; } | parms { $$ = get_parm_info (1); parsing_iso_function_signature = true; } | parms ',' ELLIPSIS ! { $$ = get_parm_info (0); ! parsing_iso_function_signature = true; ! } ; parms: *************** setspecs_fp: *** 2584,2594 **** parmlist_or_identifiers: maybe_attribute { pushlevel (0); ! clear_parm_order (); ! declare_parm_level (1); } parmlist_or_identifiers_1 { $$ = $3; - parmlist_tags_warning (); poplevel (0, 0, 0); } ; --- 2631,2639 ---- parmlist_or_identifiers: maybe_attribute { pushlevel (0); ! declare_parm_level (); } parmlist_or_identifiers_1 { $$ = $3; poplevel (0, 0, 0); } ; *************** aliasdecl: *** 2678,2780 **** } ; ! classdef: ! INTERFACE identifier protocolrefs '{' ! { ! objc_interface_context = objc_ivar_context ! = start_class (CLASS_INTERFACE_TYPE, $2, NULL_TREE, $3); ! objc_public_flag = 0; ! } ! ivar_decl_list '}' ! { ! continue_class (objc_interface_context); ! } ! methodprotolist ! END ! { ! finish_class (objc_interface_context); ! objc_interface_context = NULL_TREE; ! } ! | INTERFACE identifier protocolrefs ! { ! objc_interface_context ! = start_class (CLASS_INTERFACE_TYPE, $2, NULL_TREE, $3); ! continue_class (objc_interface_context); ! } ! methodprotolist ! END ! { ! finish_class (objc_interface_context); ! objc_interface_context = NULL_TREE; ! } ! | INTERFACE identifier ':' identifier protocolrefs '{' { objc_interface_context = objc_ivar_context ! = start_class (CLASS_INTERFACE_TYPE, $2, $4, $5); objc_public_flag = 0; } ! ivar_decl_list '}' ! { ! continue_class (objc_interface_context); ! } ! methodprotolist ! END ! { ! finish_class (objc_interface_context); ! objc_interface_context = NULL_TREE; ! } ! ! | INTERFACE identifier ':' identifier protocolrefs { - objc_interface_context - = start_class (CLASS_INTERFACE_TYPE, $2, $4, $5); continue_class (objc_interface_context); } ! methodprotolist ! END { finish_class (objc_interface_context); objc_interface_context = NULL_TREE; } ! | IMPLEMENTATION identifier '{' ! { ! objc_implementation_context = objc_ivar_context ! = start_class (CLASS_IMPLEMENTATION_TYPE, $2, NULL_TREE, NULL_TREE); ! objc_public_flag = 0; ! } ! ivar_decl_list '}' ! { ! objc_ivar_chain ! = continue_class (objc_implementation_context); ! } ! ! | IMPLEMENTATION identifier ! { ! objc_implementation_context ! = start_class (CLASS_IMPLEMENTATION_TYPE, $2, NULL_TREE, NULL_TREE); ! objc_ivar_chain ! = continue_class (objc_implementation_context); ! } ! ! | IMPLEMENTATION identifier ':' identifier '{' { objc_implementation_context = objc_ivar_context ! = start_class (CLASS_IMPLEMENTATION_TYPE, $2, $4, NULL_TREE); objc_public_flag = 0; } ! ivar_decl_list '}' ! { ! objc_ivar_chain ! = continue_class (objc_implementation_context); ! } ! ! | IMPLEMENTATION identifier ':' identifier { - objc_implementation_context - = start_class (CLASS_IMPLEMENTATION_TYPE, $2, $4, NULL_TREE); objc_ivar_chain = continue_class (objc_implementation_context); } --- 2723,2763 ---- } ; ! superclass: ! ':' identifier { $$ = $2; } ! | /* NULL */ %prec HYPERUNARY { $$ = NULL_TREE; } ! ; ! class_ivars: ! '{' ivar_decl_list '}' ! | /* NULL */ ! ; ! classdef: ! INTERFACE identifier superclass protocolrefs { objc_interface_context = objc_ivar_context ! = start_class (CLASS_INTERFACE_TYPE, $2, $3, $4); objc_public_flag = 0; } ! class_ivars { continue_class (objc_interface_context); } ! methodprotolist END { finish_class (objc_interface_context); objc_interface_context = NULL_TREE; } ! | IMPLEMENTATION identifier superclass { objc_implementation_context = objc_ivar_context ! = start_class (CLASS_IMPLEMENTATION_TYPE, $2, $3, NULL_TREE); objc_public_flag = 0; } ! class_ivars { objc_ivar_chain = continue_class (objc_implementation_context); } *************** classdef: *** 2785,2792 **** = start_class (CATEGORY_INTERFACE_TYPE, $2, $4, $6); continue_class (objc_interface_context); } ! methodprotolist ! END { finish_class (objc_interface_context); objc_interface_context = NULL_TREE; --- 2768,2774 ---- = start_class (CATEGORY_INTERFACE_TYPE, $2, $4, $6); continue_class (objc_interface_context); } ! methodprotolist END { finish_class (objc_interface_context); objc_interface_context = NULL_TREE; *************** methoddef: *** 2933,2942 **** methoddecl { objc_pq_context = 0; ! if (objc_inherit_code == CLASS_METHOD_DECL) ! add_class_method (objc_implementation_context, $3); ! else ! add_instance_method (objc_implementation_context, $3); start_method_def ($3); } optarglist --- 2915,2923 ---- methoddecl { objc_pq_context = 0; ! objc_add_method (objc_implementation_context, ! $3, ! objc_inherit_code == CLASS_METHOD_DECL); start_method_def ($3); } optarglist *************** methoddef: *** 2955,2968 **** methodprotolist: /* empty */ ! | {$$ = NULL_TREE; } methodprotolist2 ! ; ! ! methodprotolist2: /* eliminates a shift/reduce conflict */ ! methodproto ! | datadef ! | methodprotolist2 methodproto ! | methodprotolist2 {$$ = NULL_TREE; } datadef ; semi_or_error: --- 2936,2943 ---- methodprotolist: /* empty */ ! | methodprotolist methodproto ! | methodprotolist { $$ = NULL_TREE; } datadef ; semi_or_error: *************** methodproto: *** 2980,2989 **** { /* Forget protocol qualifiers here. */ objc_pq_context = 0; ! if (objc_inherit_code == CLASS_METHOD_DECL) ! add_class_method (objc_interface_context, $3); ! else ! add_instance_method (objc_interface_context, $3); } semi_or_error ; --- 2955,2963 ---- { /* Forget protocol qualifiers here. */ objc_pq_context = 0; ! objc_add_method (objc_interface_context, ! $3, ! objc_inherit_code == CLASS_METHOD_DECL); } semi_or_error ; *************** myparm: *** 3068,3074 **** optparmlist: /* empty */ { ! $$ = NULL_TREE; } | ',' ELLIPSIS { --- 3042,3048 ---- optparmlist: /* empty */ { ! $$ = NULL_TREE; } | ',' ELLIPSIS { *************** optparmlist: *** 3081,3087 **** } parmlist_2 { ! /* returns a tree list node generated by get_parm_info */ $$ = $3; poplevel (0, 0, 0); } --- 3055,3061 ---- } parmlist_2 { ! /* returns a tree list node generated by get_parm_info */ $$ = $3; poplevel (0, 0, 0); } *************** receiver: *** 3180,3185 **** --- 3154,3163 ---- { $$ = get_class_reference ($1); } + | TYPENAME + { + $$ = get_class_reference ($1); + } ; objcmessageexpr: *************** static const struct resword reswords[] = *** 3268,3275 **** { "__asm__", RID_ASM, 0 }, { "__attribute", RID_ATTRIBUTE, 0 }, { "__attribute__", RID_ATTRIBUTE, 0 }, - { "__bounded", RID_BOUNDED, 0 }, - { "__bounded__", RID_BOUNDED, 0 }, { "__builtin_choose_expr", RID_CHOOSE_EXPR, 0 }, { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, 0 }, { "__builtin_va_arg", RID_VA_ARG, 0 }, --- 3246,3251 ---- *************** static const struct resword reswords[] = *** 3299,3306 **** { "__thread", RID_THREAD, 0 }, { "__typeof", RID_TYPEOF, 0 }, { "__typeof__", RID_TYPEOF, 0 }, - { "__unbounded", RID_UNBOUNDED, 0 }, - { "__unbounded__", RID_UNBOUNDED, 0 }, { "__volatile", RID_VOLATILE, 0 }, { "__volatile__", RID_VOLATILE, 0 }, { "asm", RID_ASM, D_EXT }, --- 3275,3280 ---- *************** static const struct resword reswords[] = *** 3355,3361 **** { "protocol", RID_AT_PROTOCOL, D_OBJC }, { "public", RID_AT_PUBLIC, D_OBJC }, { "selector", RID_AT_SELECTOR, D_OBJC }, ! /* These are recognized only in protocol-qualifier context (see above) */ { "bycopy", RID_BYCOPY, D_OBJC }, --- 3329,3339 ---- { "protocol", RID_AT_PROTOCOL, D_OBJC }, { "public", RID_AT_PUBLIC, D_OBJC }, { "selector", RID_AT_SELECTOR, D_OBJC }, ! { "throw", RID_AT_THROW, D_OBJC }, ! { "try", RID_AT_TRY, D_OBJC }, ! { "catch", RID_AT_CATCH, D_OBJC }, ! { "finally", RID_AT_FINALLY, D_OBJC }, ! { "synchronized", RID_AT_SYNCHRONIZED, D_OBJC }, /* These are recognized only in protocol-qualifier context (see above) */ { "bycopy", RID_BYCOPY, D_OBJC }, *************** static const short rid_to_yy[RID_MAX] = *** 3387,3394 **** /* RID_RESTRICT */ TYPE_QUAL, /* C extensions */ - /* RID_BOUNDED */ TYPE_QUAL, - /* RID_UNBOUNDED */ TYPE_QUAL, /* RID_COMPLEX */ TYPESPEC, /* RID_THREAD */ SCSPEC, --- 3365,3370 ---- *************** static const short rid_to_yy[RID_MAX] = *** 3447,3455 **** /* RID_CHOOSE_EXPR */ CHOOSE_EXPR, /* RID_TYPES_COMPATIBLE_P */ TYPES_COMPATIBLE_P, ! /* RID_FUNCTION_NAME */ STRING_FUNC_NAME, ! /* RID_PRETTY_FUNCTION_NAME */ STRING_FUNC_NAME, ! /* RID_C99_FUNCTION_NAME */ VAR_FUNC_NAME, /* C++ */ /* RID_BOOL */ TYPESPEC, --- 3423,3431 ---- /* RID_CHOOSE_EXPR */ CHOOSE_EXPR, /* RID_TYPES_COMPATIBLE_P */ TYPES_COMPATIBLE_P, ! /* RID_FUNCTION_NAME */ FUNC_NAME, ! /* RID_PRETTY_FUNCTION_NAME */ FUNC_NAME, ! /* RID_C99_FUNCTION_NAME */ FUNC_NAME, /* C++ */ /* RID_BOOL */ TYPESPEC, *************** static const short rid_to_yy[RID_MAX] = *** 3465,3470 **** --- 3441,3447 ---- /* RID_FALSE */ 0, /* RID_NAMESPACE */ 0, /* RID_NEW */ 0, + /* RID_OFFSETOF */ 0, /* RID_OPERATOR */ 0, /* RID_THIS */ 0, /* RID_THROW */ 0, *************** static const short rid_to_yy[RID_MAX] = *** 3492,3516 **** /* RID_AT_PUBLIC */ PUBLIC, /* RID_AT_PROTOCOL */ PROTOCOL, /* RID_AT_SELECTOR */ SELECTOR, /* RID_AT_INTERFACE */ INTERFACE, /* RID_AT_IMPLEMENTATION */ IMPLEMENTATION }; static void ! init_reswords () { unsigned int i; tree id; int mask = (flag_isoc99 ? 0 : D_C89) | (flag_no_asm ? (flag_isoc99 ? D_EXT : D_EXT|D_EXT89) : 0); ! if (!flag_objc) mask |= D_OBJC; ! /* It is not necessary to register ridpointers as a GC root, because ! all the trees it points to are permanently interned in the ! get_identifier hash anyway. */ ! ridpointers = (tree *) xcalloc ((int) RID_MAX, sizeof (tree)); for (i = 0; i < N_reswords; i++) { /* If a keyword is disabled, do not enter it into the table --- 3469,3495 ---- /* RID_AT_PUBLIC */ PUBLIC, /* RID_AT_PROTOCOL */ PROTOCOL, /* RID_AT_SELECTOR */ SELECTOR, + /* RID_AT_THROW */ AT_THROW, + /* RID_AT_TRY */ AT_TRY, + /* RID_AT_CATCH */ AT_CATCH, + /* RID_AT_FINALLY */ AT_FINALLY, + /* RID_AT_SYNCHRONIZED */ AT_SYNCHRONIZED, /* RID_AT_INTERFACE */ INTERFACE, /* RID_AT_IMPLEMENTATION */ IMPLEMENTATION }; static void ! init_reswords (void) { unsigned int i; tree id; int mask = (flag_isoc99 ? 0 : D_C89) | (flag_no_asm ? (flag_isoc99 ? D_EXT : D_EXT|D_EXT89) : 0); ! if (!c_dialect_objc ()) mask |= D_OBJC; ! ridpointers = ggc_calloc ((int) RID_MAX, sizeof (tree)); for (i = 0; i < N_reswords; i++) { /* If a keyword is disabled, do not enter it into the table *************** init_reswords () *** 3528,3562 **** #define NAME(type) cpp_type2name (type) static void ! yyerror (msgid) ! const char *msgid; { ! const char *string = _(msgid); ! ! if (last_token == CPP_EOF) ! error ("%s at end of input", string); ! else if (last_token == CPP_CHAR || last_token == CPP_WCHAR) ! { ! unsigned int val = TREE_INT_CST_LOW (yylval.ttype); ! const char *const ell = (last_token == CPP_CHAR) ? "" : "L"; ! if (val <= UCHAR_MAX && ISGRAPH (val)) ! error ("%s before %s'%c'", string, ell, val); ! else ! error ("%s before %s'\\x%x'", string, ell, val); ! } ! else if (last_token == CPP_STRING ! || last_token == CPP_WSTRING) ! error ("%s before string constant", string); ! else if (last_token == CPP_NUMBER) ! error ("%s before numeric constant", string); ! else if (last_token == CPP_NAME) ! error ("%s before \"%s\"", string, IDENTIFIER_POINTER (yylval.ttype)); ! else ! error ("%s before '%s' token", string, NAME(last_token)); } static int ! yylexname () { tree decl; --- 3507,3519 ---- #define NAME(type) cpp_type2name (type) static void ! yyerror (const char *msgid) { ! c_parse_error (msgid, last_token, yylval.ttype); } static int ! yylexname (void) { tree decl; *************** yylexname () *** 3579,3600 **** if (!OBJC_IS_AT_KEYWORD (rid_code) && (!OBJC_IS_PQ_KEYWORD (rid_code) || objc_pq_context)) { - int yycode = rid_to_yy[(int) rid_code]; - if (yycode == STRING_FUNC_NAME) - { - /* __FUNCTION__ and __PRETTY_FUNCTION__ get converted - to string constants. */ - const char *name = fname_string (rid_code); - - yylval.ttype = build_string (strlen (name) + 1, name); - C_ARTIFICIAL_STRING_P (yylval.ttype) = 1; - last_token = CPP_STRING; /* so yyerror won't choke */ - return STRING; - } - /* Return the canonical spelling for this keyword. */ yylval.ttype = ridpointers[(int) rid_code]; ! return yycode; } } --- 3536,3544 ---- if (!OBJC_IS_AT_KEYWORD (rid_code) && (!OBJC_IS_PQ_KEYWORD (rid_code) || objc_pq_context)) { /* Return the canonical spelling for this keyword. */ yylval.ttype = ridpointers[(int) rid_code]; ! return rid_to_yy[(int) rid_code]; } } *************** yylexname () *** 3621,3668 **** return IDENTIFIER; } - /* Concatenate strings before returning them to the parser. This isn't quite - as good as having it done in the lexer, but it's better than nothing. */ - - static int - yylexstring () - { - enum cpp_ttype next_type; - tree orig = yylval.ttype; - - next_type = c_lex (&yylval.ttype); - if (next_type == CPP_STRING - || next_type == CPP_WSTRING - || (next_type == CPP_NAME && yylexname () == STRING)) - { - varray_type strings; - - - VARRAY_TREE_INIT (strings, 32, "strings"); - VARRAY_PUSH_TREE (strings, orig); - - do - { - VARRAY_PUSH_TREE (strings, yylval.ttype); - next_type = c_lex (&yylval.ttype); - } - while (next_type == CPP_STRING - || next_type == CPP_WSTRING - || (next_type == CPP_NAME && yylexname () == STRING)); - - yylval.ttype = combine_strings (strings); - } - else - yylval.ttype = orig; - - /* We will have always read one token too many. */ - _cpp_backup_tokens (parse_in, 1); - - return STRING; - } - static inline int ! _yylex () { get_next: last_token = c_lex (&yylval.ttype); --- 3565,3572 ---- return IDENTIFIER; } static inline int ! _yylex (void) { get_next: last_token = c_lex (&yylval.ttype); *************** _yylex () *** 3726,3738 **** return 0; case CPP_NAME: ! { ! int ret = yylexname (); ! if (ret == STRING) ! return yylexstring (); ! else ! return ret; ! } case CPP_NUMBER: case CPP_CHAR: --- 3630,3640 ---- return 0; case CPP_NAME: ! return yylexname (); ! ! case CPP_AT_NAME: ! /* This only happens in Objective-C; it must be a keyword. */ ! return rid_to_yy [(int) C_RID_CODE (yylval.ttype)]; case CPP_NUMBER: case CPP_CHAR: *************** _yylex () *** 3741,3768 **** case CPP_STRING: case CPP_WSTRING: ! return yylexstring (); ! ! /* This token is Objective-C specific. It gives the next token ! special significance. */ ! case CPP_ATSIGN: ! { ! tree after_at; ! enum cpp_ttype after_at_type; ! ! after_at_type = c_lex (&after_at); ! if (after_at_type == CPP_NAME ! && C_IS_RESERVED_WORD (after_at) ! && OBJC_IS_AT_KEYWORD (C_RID_CODE (after_at))) ! { ! yylval.ttype = after_at; ! last_token = after_at_type; ! return rid_to_yy [(int) C_RID_CODE (after_at)]; ! } ! _cpp_backup_tokens (parse_in, 1); ! return '@'; ! } /* These tokens are C++ specific (and will not be generated in C mode, but let's be cautious). */ --- 3643,3652 ---- case CPP_STRING: case CPP_WSTRING: ! return STRING; ! case CPP_OBJC_STRING: ! return OBJC_STRING; /* These tokens are C++ specific (and will not be generated in C mode, but let's be cautious). */ *************** _yylex () *** 3786,3792 **** } static int ! yylex() { int r; timevar_push (TV_LEX); --- 3670,3676 ---- } static int ! yylex (void) { int r; timevar_push (TV_LEX); *************** yylex() *** 3798,3807 **** /* Function used when yydebug is set, to print a token in more detail. */ static void ! yyprint (file, yychar, yyl) ! FILE *file; ! int yychar; ! YYSTYPE yyl; { tree t = yyl.ttype; --- 3682,3688 ---- /* Function used when yydebug is set, to print a token in more detail. */ static void ! yyprint (FILE *file, int yychar, YYSTYPE yyl) { tree t = yyl.ttype; *************** yyprint (file, yychar, yyl) *** 3823,3847 **** case CONSTANT: fprintf (file, " %s", GET_MODE_NAME (TYPE_MODE (TREE_TYPE (t)))); if (TREE_CODE (t) == INTEGER_CST) ! fprintf (file, ! #if HOST_BITS_PER_WIDE_INT == 64 ! #if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT ! " 0x%x%016x", ! #else ! #if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG ! " 0x%lx%016lx", ! #else ! " 0x%llx%016llx", ! #endif ! #endif ! #else ! #if HOST_BITS_PER_WIDE_INT != HOST_BITS_PER_INT ! " 0x%lx%08lx", ! #else ! " 0x%x%08x", ! #endif ! #endif ! TREE_INT_CST_HIGH (t), TREE_INT_CST_LOW (t)); break; } } --- 3704,3714 ---- case CONSTANT: fprintf (file, " %s", GET_MODE_NAME (TYPE_MODE (TREE_TYPE (t)))); if (TREE_CODE (t) == INTEGER_CST) ! { ! fputs (" ", file); ! fprintf (file, HOST_WIDE_INT_PRINT_DOUBLE_HEX, ! TREE_INT_CST_HIGH (t), TREE_INT_CST_LOW (t)); ! } break; } } *************** yyprint (file, yychar, yyl) *** 3849,3863 **** /* This is not the ideal place to put these, but we have to get them out of c-lex.c because cp/lex.c has its own versions. */ ! /* Free malloced parser stacks if necessary. */ ! void ! free_parser_stacks () { if (malloced_yyss) { free (malloced_yyss); free (malloced_yyvs); } } --- 3716,3740 ---- /* This is not the ideal place to put these, but we have to get them out of c-lex.c because cp/lex.c has its own versions. */ ! /* Parse the file. */ void ! c_parse_file (void) { + yyparse (); + /* In case there were missing closebraces, get us back to the global + binding level. */ + while (! global_bindings_p ()) + poplevel (0, 0, 0); + /* __FUNCTION__ is defined at file scope (""). This + call may not be necessary as my tests indicate it + still works without it. */ + finish_fname_decls (); + if (malloced_yyss) { free (malloced_yyss); free (malloced_yyvs); + malloced_yyss = 0; } } diff -Nrc3pad gcc-3.3.3/gcc/objc/objc-tree.def gcc-3.4.0/gcc/objc/objc-tree.def *** gcc-3.3.3/gcc/objc/objc-tree.def 2001-10-03 22:05:57.000000000 +0000 --- gcc-3.4.0/gcc/objc/objc-tree.def 2003-09-25 01:25:53.000000000 +0000 *************** *** 1,23 **** /* This file contains the definitions and documentation for the additional tree codes used in the Objective C front end (see tree.def for the standard codes). ! Copyright (C) 1990, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,23 ---- /* This file contains the definitions and documentation for the additional tree codes used in the Objective C front end (see tree.def for the standard codes). ! Copyright (C) 1990, 1997, 1998, 1999, 2000, 2001, 2003 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ *************** DEFTREECODE (PROTOCOL_INTERFACE_TYPE, "p *** 33,35 **** --- 33,39 ---- DEFTREECODE (KEYWORD_DECL, "keyword_decl", 'd', 0) DEFTREECODE (INSTANCE_METHOD_DECL, "instance_method_decl", 'd', 0) DEFTREECODE (CLASS_METHOD_DECL, "class_method_decl", 'd', 0) + + /* Objective-C expressions. */ + DEFTREECODE (MESSAGE_SEND_EXPR, "message_send_expr", 'e', 3) + DEFTREECODE (CLASS_REFERENCE_EXPR, "class_reference_expr", 'e', 1) diff -Nrc3pad gcc-3.3.3/libobjc/aclocal.m4 gcc-3.4.0/libobjc/aclocal.m4 *** gcc-3.3.3/libobjc/aclocal.m4 2003-01-28 01:45:01.000000000 +0000 --- gcc-3.4.0/libobjc/aclocal.m4 2003-08-28 01:15:06.000000000 +0000 *************** if test $version_specific_libs = yes; th *** 196,202 **** # and header files if --enable-version-specific-runtime-libs option # is selected. changequote(,)dnl ! glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)' glibcpp_toolexeclibdir='$(toolexecdir)/'${gcc_version}'$(MULTISUBDIR)' changequote([,])dnl fi --- 196,202 ---- # and header files if --enable-version-specific-runtime-libs option # is selected. changequote(,)dnl ! glibcpp_toolexecdir='$(libdir)/gcc/$(target_alias)' glibcpp_toolexeclibdir='$(toolexecdir)/'${gcc_version}'$(MULTISUBDIR)' changequote([,])dnl fi *************** if test x"$glibcpp_toolexecdir" = x"no"; *** 212,218 **** glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)' glibcpp_toolexeclibdir='$(libdir)' fi ! glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/`$CC -print-multi-os-directory` fi AC_SUBST(glibcpp_prefixdir) --- 212,222 ---- glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)' glibcpp_toolexeclibdir='$(libdir)' fi ! multi_os_directory=`$CC -print-multi-os-directory` ! case $multi_os_directory in ! .) ;; # Avoid trailing /. ! *) glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/$multi_os_directory ;; ! esac fi AC_SUBST(glibcpp_prefixdir) diff -Nrc3pad gcc-3.3.3/libobjc/archive.c gcc-3.4.0/libobjc/archive.c *** gcc-3.3.3/libobjc/archive.c 2002-07-02 19:41:56.000000000 +0000 --- gcc-3.4.0/libobjc/archive.c 2003-05-23 20:04:58.000000000 +0000 *************** *** 2,20 **** Copyright (C) 1993, 1995, 1996, 1997, 2002 Free Software Foundation, Inc. Contributed by Kresten Krab Thorup ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,20 ---- Copyright (C) 1993, 1995, 1996, 1997, 2002 Free Software Foundation, Inc. Contributed by Kresten Krab Thorup ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/ChangeLog gcc-3.4.0/libobjc/ChangeLog *** gcc-3.3.3/libobjc/ChangeLog 2004-02-14 20:20:25.000000000 +0000 --- gcc-3.4.0/libobjc/ChangeLog 2004-04-19 01:59:58.000000000 +0000 *************** *** 1,6 **** ! 2004-02-14 Release Manager ! * GCC 3.3.3 Released. 2003-12-01 Zack Weinberg --- 1,26 ---- ! 2004-04-18 Release Manager ! * GCC 3.4.0 released. ! ! 2004-03-01 Michael Matz ! ! * Makefile.in (ALL_CFLAGS): Add -fno-strict-aliasing. ! ! 2004-01-17 Andrew Pinski ! ! PR target/10781 ! * encoding.c (rs6000_special_round_type_align): Define. ! ! 2004-01-14 Adam Fedor ! ! PR libobjc/12155 ! * selector.c (__objc_register_instance_methods_to_class): Free ! new_list if not used. ! ! 2004-01-09 Andrew Ruder ! ! PR libobjc/11904 ! * sarray.c (sarray_free): Free array->is_copy_of latter. 2003-12-01 Zack Weinberg *************** *** 9,41 **** instance_methods if it's NULL. (descriptionForClassMethod): Likewise for class_methods. ! 2003-10-16 Release Manager ! * GCC 3.3.2 Released. 2003-09-09 Alan Modra * configure: Regenerate. ! 2003-08-04 Release Manager ! * GCC 3.3.1 Released. ! 2003-08-04 Release Manager ! * GCC 3.3.1 Released. ! 2003-05-13 Release Manager ! * GCC 3.3 Released. ! 2003-05-13 Release Manager ! * GCC 3.3 Released. ! 2003-05-13 Release Manager ! * GCC 3.3 Released. 2003-02-20 Alexandre Oliva --- 29,110 ---- instance_methods if it's NULL. (descriptionForClassMethod): Likewise for class_methods. ! 2003-10-24 Rainer Orth ! * Makefile.in (runtime-info.h): Remove -Wp. ! ! 2003-10-21 Rainer Orth ! ! * Makefile.in (CC1OBJ): Remove. ! (runtime-info.h): Invoke $(CC) so all MULTIFLAGS are handled ! correctly. ! Use .m extension for temporary file. ! Remove assembler temp file. ! ! 2003-10-20 Joseph S. Myers ! ! * objc/hash.h (hash_string): Don't use a cast as an lvalue. ! ! 2003-10-17 Rainer Orth ! ! * Makefile.in (runtime-info.h): Use MULTIFLAGS. 2003-09-09 Alan Modra * configure: Regenerate. ! 2003-08-27 Alexander Malmberg ! * Makefile.in, aclocal.m4: Update to $(libdir)/gcc/ instead of ! (libdir)/gcc-lib/ when installing. ! * configure: Regenerate. ! Thu Jul 10 10:27:43 2003 Nicola Pero ! libobjc/9969 ! * sendmsg.c (get_imp): Fixed rare threading problem. ! (__objc_responds_to): Similar fixes. ! (objc_msg_lookup): Similar fixes. ! (__objc_init_install_dtable): Lock the runtime before checking if the ! table is installed. ! 2003-05-23 Nathanael Nerode ! * hash.c, init.c, libobjc.def, libobjc_entry.c, linking.m, ! makefile.dos, misc.c, nil_method.c, objects.c, sarray.c, ! selector.c, sendmsg.c, thr-dce.c, thr-decosf1.c, thr-irix.c, ! thr-mach.c, thr-objc.c, thr-os2.c, thr-posix.c, thr-pthreads.c, ! thr-rtems.c, thr-single.c, thr-solaris.c, thr-vxworks.c, ! thr-win32.c, thr.c: Replace "GNU CC" with "GCC". ! * Makefile.in, NXConstStr.m, Object.m, Protocol.m, archive.c, ! class.c, encoding.c, gc.c, objc/NXConstStr.h, objc/Object.h, ! objc/Protocol.h, objc/encoding.h, objc/hash.h, objc/objc-api.h, ! objc/objc-list.h, objc/objc.h, ocjc/runtime.h, objc/sarray.h, ! objc/thr.h, objc/typedstream.h: Replace "GNU CC" with "GCC". ! Tue May 13 14:56:03 2003 Richard Frith-Macdonald ! Nicola Pero ! libobjc/10742 ! * init.c (class_superclass_of_class): New function. ! (create_tree_of_subclasses_inherited_from): Use it. ! (__objc_tree_insert_class): Likewise. ! (class_is_subclass_of_class): Likewise. ! 2003-04-11 David Chad ! Loren J. Rittle ! libobjc/8562 ! * objc/hash.h (hash_string): Constify correctly. ! (compare_ptrs): Use direct compare. ! * objc/objc-list.h (list_nth): Rename index to indx to avoid shadow. ! * objc/sarray.h: Global rename index to indx to avoid shadow. ! ! 2003-03-12 Andreas Schwab ! ! * aclocal.m4 (GLIBCPP_EXPORT_INSTALL_INFO): Avoid trailing /. in ! glibcpp_toolexeclibdir. ! * configure: Rebuilt. 2003-02-20 Alexandre Oliva *************** *** 50,61 **** version_specific_libs is enabled. * configure: Rebuilt. ! 2003-01-26 Christian Cornelssen * Makefile.in (FLAGS_TO_PASS): Also pass DESTDIR. (install-libs, install-headers): Prepend $(DESTDIR) to destination paths in all (un)installation commands. 2002-09-22 Kaveh R. Ghazi * Makefile.in (all): Fix multilib parallel build. --- 119,143 ---- version_specific_libs is enabled. * configure: Rebuilt. ! 2003-01-09 Christian Cornelssen * Makefile.in (FLAGS_TO_PASS): Also pass DESTDIR. (install-libs, install-headers): Prepend $(DESTDIR) to destination paths in all (un)installation commands. + 2002-12-02 Zack Weinberg + + * thr-objc.c: Include coretypes.h and tm.h. + + 2002-12-01 Zack Weinberg + + * encoding.c, sendmsg.c: Include coretypes.h and tm.h. + + 2002-11-26 Nathanael Nerode + + * configure.in: Remove skip-this-dir support. + * configure: Regenerate. + 2002-09-22 Kaveh R. Ghazi * Makefile.in (all): Fix multilib parallel build. diff -Nrc3pad gcc-3.3.3/libobjc/class.c gcc-3.4.0/libobjc/class.c *** gcc-3.3.3/libobjc/class.c 2002-07-02 19:42:03.000000000 +0000 --- gcc-3.4.0/libobjc/class.c 2003-05-23 20:04:58.000000000 +0000 *************** *** 6,24 **** Lock-free class table code designed and written from scratch by Nicola Pero, 2001. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* As a special exception, if you link this library with files compiled with --- 6,24 ---- Lock-free class table code designed and written from scratch by Nicola Pero, 2001. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* As a special exception, if you link this library with files compiled with diff -Nrc3pad gcc-3.3.3/libobjc/configure gcc-3.4.0/libobjc/configure *** gcc-3.3.3/libobjc/configure 2003-09-09 08:04:21.000000000 +0000 --- gcc-3.4.0/libobjc/configure 2003-09-09 06:24:21.000000000 +0000 *************** if test $version_specific_libs = yes; th *** 1255,1261 **** # Need the gcc compiler version to know where to install libraries # and header files if --enable-version-specific-runtime-libs option # is selected. ! glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)' glibcpp_toolexeclibdir='$(toolexecdir)/'${gcc_version}'$(MULTISUBDIR)' fi --- 1255,1261 ---- # Need the gcc compiler version to know where to install libraries # and header files if --enable-version-specific-runtime-libs option # is selected. ! glibcpp_toolexecdir='$(libdir)/gcc/$(target_alias)' glibcpp_toolexeclibdir='$(toolexecdir)/'${gcc_version}'$(MULTISUBDIR)' fi *************** if test x"$glibcpp_toolexecdir" = x"no"; *** 1270,1276 **** glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)' glibcpp_toolexeclibdir='$(libdir)' fi ! glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/`$CC -print-multi-os-directory` fi --- 1270,1280 ---- glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)' glibcpp_toolexeclibdir='$(libdir)' fi ! multi_os_directory=`$CC -print-multi-os-directory` ! case $multi_os_directory in ! .) ;; # Avoid trailing /. ! *) glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/$multi_os_directory ;; ! esac fi *************** fi *** 1278,1316 **** - # If the language specific compiler does not exist, but the "gcc" directory - # does, we do not build anything. Note, $r is set by the top-level Makefile. - # Note that when we look for the compiler, we search both with and without - # extension to handle cross and canadian cross builds. - compiler_name=cc1obj - rm -f skip-this-dir - echo $ac_n "checking if compiler $compiler_name has been built""... $ac_c" 1>&6 - echo "configure:1289: checking if compiler $compiler_name has been built" >&5 - if eval "test \"`echo '$''{'objc_cv_compiler_exists'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - objc_cv_compiler_exists=yes - if test -n "$r"; then - if test -d "$r"/gcc; then - if test -f "$r"/gcc/$compiler_name \ - || test -f "$r"/gcc/$compiler_name.exe; then - true - else - objc_cv_compiler_exists=no - echo "rm -f config.cache config.log multilib.out" > skip-this-dir - fi - fi - fi - - fi - - echo "$ac_t""$objc_cv_compiler_exists" 1>&6 - if test x$objc_cv_compiler_exists = xno - then - rm -f Makefile conftest* confdefs* core - exit 0 - fi - # Disable shared libs by default # Check whether --enable-shared or --disable-shared was given. --- 1282,1287 ---- *************** ac_prog=ld *** 1397,1403 **** if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 ! echo "configure:1401: checking for ld used by GCC" >&5 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw --- 1368,1374 ---- if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 ! echo "configure:1372: checking for ld used by GCC" >&5 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw *************** echo "configure:1401: checking for ld us *** 1427,1436 **** esac elif test "$with_gnu_ld" = yes; then echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 ! echo "configure:1431: checking for GNU ld" >&5 else echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 ! echo "configure:1434: checking for non-GNU ld" >&5 fi if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 1398,1407 ---- esac elif test "$with_gnu_ld" = yes; then echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 ! echo "configure:1402: checking for GNU ld" >&5 else echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 ! echo "configure:1405: checking for non-GNU ld" >&5 fi if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** else *** 1465,1471 **** fi test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; } echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 ! echo "configure:1469: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1436,1442 ---- fi test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; } echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 ! echo "configure:1440: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** with_gnu_ld=$lt_cv_prog_gnu_ld *** 1482,1488 **** echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6 ! echo "configure:1486: checking for $LD option to reload object files" >&5 if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1453,1459 ---- echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6 ! echo "configure:1457: checking for $LD option to reload object files" >&5 if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** reload_flag=$lt_cv_ld_reload_flag *** 1494,1500 **** test -n "$reload_flag" && reload_flag=" $reload_flag" echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6 ! echo "configure:1498: checking for BSD-compatible nm" >&5 if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1465,1471 ---- test -n "$reload_flag" && reload_flag=" $reload_flag" echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6 ! echo "configure:1469: checking for BSD-compatible nm" >&5 if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** NM="$lt_cv_path_NM" *** 1532,1538 **** echo "$ac_t""$NM" 1>&6 echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6 ! echo "configure:1536: checking how to recognise dependant libraries" >&5 if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1503,1509 ---- echo "$ac_t""$NM" 1>&6 echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6 ! echo "configure:1507: checking how to recognise dependant libraries" >&5 if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** irix5* | irix6*) *** 1642,1648 **** # This must be Linux ELF. linux-gnu*) case $host_cpu in ! alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* ) lt_cv_deplibs_check_method=pass_all ;; *) # glibc up to 2.1.1 does not perform some relocations on ARM --- 1613,1619 ---- # This must be Linux ELF. linux-gnu*) case $host_cpu in ! alpha* | mips* | hppa* | i*86 | powerpc* | sparc* | ia64* ) lt_cv_deplibs_check_method=pass_all ;; *) # glibc up to 2.1.1 does not perform some relocations on ARM *************** file_magic_cmd=$lt_cv_file_magic_cmd *** 1705,1717 **** deplibs_check_method=$lt_cv_deplibs_check_method echo $ac_n "checking for object suffix""... $ac_c" 1>&6 ! echo "configure:1709: checking for object suffix" >&5 if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else rm -f conftest* echo 'int i = 1;' > conftest.$ac_ext ! if { (eval echo configure:1715: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then for ac_file in conftest.*; do case $ac_file in *.c) ;; --- 1676,1688 ---- deplibs_check_method=$lt_cv_deplibs_check_method echo $ac_n "checking for object suffix""... $ac_c" 1>&6 ! echo "configure:1680: checking for object suffix" >&5 if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else rm -f conftest* echo 'int i = 1;' > conftest.$ac_ext ! if { (eval echo configure:1686: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then for ac_file in conftest.*; do case $ac_file in *.c) ;; *************** case $deplibs_check_method in *** 1735,1741 **** file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6 ! echo "configure:1739: checking for ${ac_tool_prefix}file" >&5 if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1706,1712 ---- file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6 ! echo "configure:1710: checking for ${ac_tool_prefix}file" >&5 if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 1797,1803 **** if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo $ac_n "checking for file""... $ac_c" 1>&6 ! echo "configure:1801: checking for file" >&5 if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1768,1774 ---- if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo $ac_n "checking for file""... $ac_c" 1>&6 ! echo "configure:1772: checking for file" >&5 if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** esac *** 1868,1874 **** # 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 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1872: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1839,1845 ---- # 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 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1843: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** if test -n "$ac_tool_prefix"; then *** 1900,1906 **** # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1904: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1871,1877 ---- # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1875: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 1935,1941 **** # 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 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1939: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1906,1912 ---- # 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 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1910: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** if test -n "$ac_tool_prefix"; then *** 1967,1973 **** # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1971: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1938,1944 ---- # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1942: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** test x"$pic_mode" = xno && libtool_flags *** 2034,2041 **** case $host in *-*-irix6*) # Find out which ABI we are using. ! echo '#line 2038 "configure"' > conftest.$ac_ext ! if { (eval echo configure:2039: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) --- 2005,2012 ---- case $host in *-*-irix6*) # Find out which ABI we are using. ! echo '#line 2009 "configure"' > conftest.$ac_ext ! if { (eval echo configure:2010: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) *************** case $host in *** 2068,2074 **** ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext ! if { (eval echo configure:2072: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then case "`/usr/bin/file conftest.o`" in *ELF-32*) HPUX_IA64_MODE="32" --- 2039,2045 ---- ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext ! if { (eval echo configure:2043: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then case "`/usr/bin/file conftest.o`" in *ELF-32*) HPUX_IA64_MODE="32" *************** ia64-*-hpux*) *** 2084,2090 **** x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext ! if { (eval echo configure:2088: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then case "`/usr/bin/file conftest.o`" in *32-bit*) case $host in --- 2055,2061 ---- x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext ! if { (eval echo configure:2059: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then case "`/usr/bin/file conftest.o`" in *32-bit*) case $host in *************** x86_64-*linux*|ppc*-*linux*|powerpc*-*li *** 2128,2134 **** SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6 ! echo "configure:2132: checking whether the C compiler needs -belf" >&5 if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2099,2105 ---- SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6 ! echo "configure:2103: checking whether the C compiler needs -belf" >&5 if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** ac_link='${CC-cc} -o conftest${ac_exeext *** 2141,2154 **** cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* lt_cv_cc_needs_belf=yes else --- 2112,2125 ---- cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* lt_cv_cc_needs_belf=yes else *************** echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6 *** 2178,2184 **** # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2182: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2149,2155 ---- # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2153: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** if test -n "$ac_tool_prefix"; then *** 2210,2216 **** # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2214: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2181,2187 ---- # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2185: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 2245,2251 **** # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2249: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2216,2222 ---- # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2220: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** if test -n "$ac_tool_prefix"; then *** 2277,2283 **** # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2281: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2248,2254 ---- # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2252: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 2312,2318 **** # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2316: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2283,2289 ---- # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2287: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** if test -n "$ac_tool_prefix"; then *** 2344,2350 **** # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2348: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2315,2321 ---- # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2319: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 2380,2391 **** # recent cygwin and mingw systems supply a stub DllMain which the user # can override, but on older systems we have to supply one echo $ac_n "checking if libtool should supply DllMain function""... $ac_c" 1>&6 ! echo "configure:2384: checking if libtool should supply DllMain function" >&5 if eval "test \"`echo '$''{'lt_cv_need_dllmain'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:2355: checking if libtool should supply DllMain function" >&5 if eval "test \"`echo '$''{'lt_cv_need_dllmain'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* lt_cv_need_dllmain=no else --- 2364,2370 ---- DllMain (0, 0, 0); ; return 0; } EOF ! if { (eval echo configure:2368: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* lt_cv_need_dllmain=no else *************** echo "$ac_t""$lt_cv_need_dllmain" 1>&6 *** 2414,2432 **** SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -mdll" echo $ac_n "checking how to link DLLs""... $ac_c" 1>&6 ! echo "configure:2418: checking how to link DLLs" >&5 if eval "test \"`echo '$''{'lt_cv_cc_dll_switch'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* lt_cv_cc_dll_switch=-mdll else --- 2385,2403 ---- SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -mdll" echo $ac_n "checking how to link DLLs""... $ac_c" 1>&6 ! echo "configure:2389: checking how to link DLLs" >&5 if eval "test \"`echo '$''{'lt_cv_cc_dll_switch'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* lt_cv_cc_dll_switch=-mdll else *************** else *** 2544,2550 **** # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2548: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2515,2521 ---- # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2519: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 2584,2590 **** # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 ! echo "configure:2588: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 2555,2561 ---- # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 ! echo "configure:2559: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** test -z "$INSTALL_SCRIPT" && INSTALL_SCR *** 2637,2643 **** test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 ! echo "configure:2641: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 2608,2614 ---- test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 ! echo "configure:2612: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** fi *** 2666,2672 **** # Sanity check for the cross-compilation case: echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 ! echo "configure:2670: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= --- 2637,2643 ---- # Sanity check for the cross-compilation case: echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 ! echo "configure:2641: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= *************** else *** 2681,2693 **** # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2691: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 2652,2664 ---- # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2662: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** else *** 2698,2710 **** rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2708: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 2669,2681 ---- rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2679: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** else *** 2715,2727 **** rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2725: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 2686,2698 ---- rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2696: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** echo "$ac_t""$CPP" 1>&6 *** 2747,2763 **** ac_safe=`echo "stdio.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for stdio.h""... $ac_c" 1>&6 ! echo "configure:2751: checking for stdio.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2761: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 2718,2734 ---- ac_safe=`echo "stdio.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for stdio.h""... $ac_c" 1>&6 ! echo "configure:2722: checking for stdio.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2732: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** fi *** 2785,2796 **** echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 ! echo "configure:2789: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include --- 2756,2767 ---- echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 ! echo "configure:2760: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include *************** else *** 2798,2804 **** #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2802: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 2769,2775 ---- #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2773: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** rm -f conftest* *** 2815,2821 **** if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF --- 2786,2792 ---- if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF *************** fi *** 2833,2839 **** if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF --- 2804,2810 ---- if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF *************** if test "$cross_compiling" = yes; then *** 2854,2860 **** : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') --- 2825,2831 ---- : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') *************** if (XOR (islower (i), ISLOWER (i)) || to *** 2865,2871 **** exit (0); } EOF ! if { (eval echo configure:2869: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else --- 2836,2842 ---- exit (0); } EOF ! if { (eval echo configure:2840: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else *************** for ac_hdr in sched.h *** 2893,2909 **** do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:2897: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2907: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 2864,2880 ---- do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:2868: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2878: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** done *** 2933,2939 **** # Determine CFLAGS for gthread. echo $ac_n "checking for gthread cflags""... $ac_c" 1>&6 ! echo "configure:2937: checking for gthread cflags" >&5 if eval "test \"`echo '$''{'objc_cv_gthread_flags'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2904,2910 ---- # Determine CFLAGS for gthread. echo $ac_n "checking for gthread cflags""... $ac_c" 1>&6 ! echo "configure:2908: checking for gthread cflags" >&5 if eval "test \"`echo '$''{'objc_cv_gthread_flags'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else diff -Nrc3pad gcc-3.3.3/libobjc/configure.in gcc-3.4.0/libobjc/configure.in *** gcc-3.3.3/libobjc/configure.in 2003-02-20 09:12:04.000000000 +0000 --- gcc-3.4.0/libobjc/configure.in 2003-02-20 09:08:24.000000000 +0000 *************** AC_SUBST(target_alias) *** 39,72 **** GLIBCPP_CONFIGURE(.) GLIBCPP_EXPORT_INSTALL_INFO - # If the language specific compiler does not exist, but the "gcc" directory - # does, we do not build anything. Note, $r is set by the top-level Makefile. - # Note that when we look for the compiler, we search both with and without - # extension to handle cross and canadian cross builds. - compiler_name=cc1obj - rm -f skip-this-dir - AC_MSG_CHECKING(if compiler $compiler_name has been built) - AC_CACHE_VAL(objc_cv_compiler_exists, - [objc_cv_compiler_exists=yes - if test -n "$r"; then - if test -d "$r"/gcc; then - if test -f "$r"/gcc/$compiler_name \ - || test -f "$r"/gcc/$compiler_name.exe; then - true - else - objc_cv_compiler_exists=no - echo "rm -f config.cache config.log multilib.out" > skip-this-dir - fi - fi - fi - ]) - AC_MSG_RESULT($objc_cv_compiler_exists) - if test x$objc_cv_compiler_exists = xno - then - rm -f Makefile conftest* confdefs* core - exit 0 - fi - dnl Checks for programs. # Disable shared libs by default --- 39,44 ---- diff -Nrc3pad gcc-3.3.3/libobjc/encoding.c gcc-3.4.0/libobjc/encoding.c *** gcc-3.3.3/libobjc/encoding.c 2002-07-02 19:42:06.000000000 +0000 --- gcc-3.4.0/libobjc/encoding.c 2004-01-17 19:51:59.000000000 +0000 *************** *** 4,23 **** Contributed by Kresten Krab Thorup Bitfield support by Ovidiu Predescu ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 4,23 ---- Contributed by Kresten Krab Thorup Bitfield support by Ovidiu Predescu ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ *************** Boston, MA 02111-1307, USA. */ *** 27,33 **** --- 27,37 ---- This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ + /* FIXME: This file has no business including tm.h. */ + #include "tconfig.h" + #include "coretypes.h" + #include "tm.h" #include "objc-api.h" #include "encoding.h" #include *************** Boston, MA 02111-1307, USA. */ *** 84,89 **** --- 88,104 ---- eliminate the warning. */ static int __attribute__ ((__unused__)) target_flags = 0; + + /* FIXME: while this file has no business including tm.h, this + definitely has no business defining this macro but it + is only way around without really rewritting this file, + should look after the branch of 3.4 to fix this. */ + #define rs6000_special_round_type_align(STRUCT, COMPUTED, SPECIFIED) \ + ((TYPE_FIELDS (STRUCT) != 0 \ + && DECL_MODE (TYPE_FIELDS (STRUCT)) == DFmode) \ + ? MAX (MAX (COMPUTED, SPECIFIED), 64) \ + : MAX (COMPUTED, SPECIFIED)) + /* return the size of an object specified by type */ diff -Nrc3pad gcc-3.3.3/libobjc/gc.c gcc-3.4.0/libobjc/gc.c *** gcc-3.3.3/libobjc/gc.c 2002-07-02 19:42:23.000000000 +0000 --- gcc-3.4.0/libobjc/gc.c 2003-05-23 20:04:58.000000000 +0000 *************** *** 2,21 **** Copyright (C) 1998, 2002 Free Software Foundation, Inc. Contributed by Ovidiu Predescu. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,21 ---- Copyright (C) 1998, 2002 Free Software Foundation, Inc. Contributed by Ovidiu Predescu. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/hash.c gcc-3.4.0/libobjc/hash.c *** gcc-3.3.3/libobjc/hash.c 2002-07-02 19:42:26.000000000 +0000 --- gcc-3.4.0/libobjc/hash.c 2003-05-23 20:25:39.000000000 +0000 *************** *** 1,20 **** /* Hash tables for Objective C internal structures Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,20 ---- /* Hash tables for Objective C internal structures Copyright (C) 1993, 1996, 1997 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/init.c gcc-3.4.0/libobjc/init.c *** gcc-3.3.3/libobjc/init.c 2002-07-02 19:42:27.000000000 +0000 --- gcc-3.4.0/libobjc/init.c 2003-05-23 20:25:39.000000000 +0000 *************** *** 3,21 **** Contributed by Kresten Krab Thorup +load support contributed by Ovidiu Predescu ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* As a special exception, if you link this library with files compiled with --- 3,21 ---- Contributed by Kresten Krab Thorup +load support contributed by Ovidiu Predescu ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* As a special exception, if you link this library with files compiled with *************** static struct objc_list *__objc_class_tr *** 99,104 **** --- 99,148 ---- should not be destroyed during the execution of the program. */ static cache_ptr __objc_load_methods = NULL; + /* This function is used when building the class tree used to send + ordinately the +load message to all classes needing it. The tree + is really needed so that superclasses will get the message before + subclasses. + + This tree will contain classes which are being loaded (or have just + being loaded), and whose super_class pointers have not yet been + resolved. This implies that their super_class pointers point to a + string with the name of the superclass; when the first message is + sent to the class (/an object of that class) the class links will + be resolved, which will replace the super_class pointers with + pointers to the actual superclasses. + + Unfortunately, the tree might also contain classes which had been + loaded previously, and whose class links have already been + resolved. + + This function returns the superclass of a class in both cases, and + can be used to build the determine the class relationships while + building the tree. + */ + static Class class_superclass_of_class (Class class) + { + char *super_class_name; + + /* If the class links have been resolved, use the resolved + * links. */ + if (CLS_ISRESOLV (class)) + return class->super_class; + + /* Else, 'class' has not yet been resolved. This means that its + * super_class pointer is really the name of the super class (rather + * than a pointer to the actual superclass). */ + super_class_name = (char *)class->super_class; + + /* Return Nil for a root class. */ + if (super_class_name == NULL) + return Nil; + + /* Lookup the superclass of non-root classes. */ + return objc_lookup_class (super_class_name); + } + + /* Creates a tree of classes whose topmost class is directly inherited from `upper' and the bottom class in this tree is `bottom_class'. The classes in this tree are super classes of *************** create_tree_of_subclasses_inherited_from *** 127,135 **** tree = objc_calloc (1, sizeof (objc_class_tree)); tree->class = superclass; tree->subclasses = list_cons (prev, tree->subclasses); ! superclass = (superclass->super_class ? ! objc_lookup_class ((char *) superclass->super_class) ! : Nil); prev = tree; } --- 171,177 ---- tree = objc_calloc (1, sizeof (objc_class_tree)); tree->class = superclass; tree->subclasses = list_cons (prev, tree->subclasses); ! superclass = class_superclass_of_class (superclass); prev = tree; } *************** __objc_tree_insert_class (objc_class_tre *** 157,166 **** DEBUG_PRINTF ("1. class %s was previously inserted\n", class->name); return tree; } ! else if ((class->super_class ? ! objc_lookup_class ((char *) class->super_class) ! : Nil) ! == tree->class) { /* If class is a direct subclass of tree->class then add class to the list of subclasses. First check to see if it wasn't already --- 199,205 ---- DEBUG_PRINTF ("1. class %s was previously inserted\n", class->name); return tree; } ! else if (class_superclass_of_class (class) == tree->class) { /* If class is a direct subclass of tree->class then add class to the list of subclasses. First check to see if it wasn't already *************** class_is_subclass_of_class (Class class, *** 370,378 **** { if (class == superclass) return YES; ! class = (class->super_class ? ! objc_lookup_class ((char *) class->super_class) ! : Nil); } return NO; --- 409,415 ---- { if (class == superclass) return YES; ! class = class_superclass_of_class (class); } return NO; diff -Nrc3pad gcc-3.3.3/libobjc/libobjc.def gcc-3.4.0/libobjc/libobjc.def *** gcc-3.3.3/libobjc/libobjc.def 2001-03-15 02:18:09.000000000 +0000 --- gcc-3.4.0/libobjc/libobjc.def 2003-05-23 20:25:39.000000000 +0000 *************** *** 2,20 **** ; Copyright (C) 1997 Free Software Foundation, Inc. ; Contributed by Scott Christley ; ! ; 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, 59 Temple Place - Suite 330, ; Boston, MA 02111-1307, USA. --- 2,20 ---- ; Copyright (C) 1997 Free Software Foundation, Inc. ; Contributed by Scott Christley ; ! ; 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, 59 Temple Place - Suite 330, ; Boston, MA 02111-1307, USA. diff -Nrc3pad gcc-3.3.3/libobjc/libobjc_entry.c gcc-3.4.0/libobjc/libobjc_entry.c *** gcc-3.3.3/libobjc/libobjc_entry.c 1999-09-04 15:09:19.000000000 +0000 --- gcc-3.4.0/libobjc/libobjc_entry.c 2003-05-23 20:25:39.000000000 +0000 *************** *** 2,21 **** Copyright (C) 1997 Free Software Foundation, Inc. Contributed by Scott Christley ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,21 ---- Copyright (C) 1997 Free Software Foundation, Inc. Contributed by Scott Christley ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/linking.m gcc-3.4.0/libobjc/linking.m *** gcc-3.3.3/libobjc/linking.m 1999-09-04 15:09:19.000000000 +0000 --- gcc-3.4.0/libobjc/linking.m 2003-05-23 20:25:39.000000000 +0000 *************** *** 2,21 **** Copyright (C) 1997 Free Software Foundation, Inc. Contributed by Ovidiu Predescu (ovidiu@net-community.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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,21 ---- Copyright (C) 1997 Free Software Foundation, Inc. Contributed by Ovidiu Predescu (ovidiu@net-community.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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/makefile.dos gcc-3.4.0/libobjc/makefile.dos *** gcc-3.3.3/libobjc/makefile.dos 1999-09-04 15:09:19.000000000 +0000 --- gcc-3.4.0/libobjc/makefile.dos 2003-05-23 20:25:39.000000000 +0000 *************** *** 1,19 **** # GNU Objective C Runtime Makefile for compiling with djgpp # Copyright (C) 1993, 1994, 1996 Free Software Foundation, Inc. # ! # 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, 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. --- 1,19 ---- # GNU Objective C Runtime Makefile for compiling with djgpp # Copyright (C) 1993, 1994, 1996 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, 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. diff -Nrc3pad gcc-3.3.3/libobjc/Makefile.in gcc-3.4.0/libobjc/Makefile.in *** gcc-3.3.3/libobjc/Makefile.in 2003-01-26 11:29:56.000000000 +0000 --- gcc-3.4.0/libobjc/Makefile.in 2004-03-01 15:33:48.000000000 +0000 *************** *** 1,20 **** ! #Makefile for GNU Objective C runtime library. ! #Copyright (C) 1993, 95-98, 1999, 2001 Free Software Foundation, Inc. ! #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, 59 Temple Place - Suite 330, #Boston, MA 02111-1307, USA. */ --- 1,21 ---- ! # Makefile for GNU Objective C runtime library. ! # Copyright (C) 1993, 95-98, 1999, 2001, 2002, 2003 ! # 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, 59 Temple Place - Suite 330, #Boston, MA 02111-1307, USA. */ *************** glibcpp_toolexeclibdir = @glibcpp_toolex *** 43,49 **** top_builddir = . libdir = $(exec_prefix)/lib ! libsubdir = $(libdir)/gcc-lib/$(target_alias)/$(gcc_version) # Multilib support variables. MULTISRCTOP = --- 44,50 ---- top_builddir = . libdir = $(exec_prefix)/lib ! libsubdir = $(libdir)/gcc/$(target_alias)/$(gcc_version) # Multilib support variables. MULTISRCTOP = *************** CFLAGS = @CFLAGS@ *** 70,76 **** WARN_CFLAGS = -W -Wall -Wwrite-strings -Wstrict-prototypes GTHREAD_FLAGS=@GTHREAD_FLAGS@ ALL_CFLAGS = -I. -I$(srcdir) $(CPPFLAGS) $(DEFS) $(CFLAGS) $(WARN_CFLAGS) \ ! $(GTHREAD_FLAGS) -DIN_GCC -DIN_TARGET_LIBS # Libtool # The following strings describe the version of the obj-C library --- 71,77 ---- WARN_CFLAGS = -W -Wall -Wwrite-strings -Wstrict-prototypes GTHREAD_FLAGS=@GTHREAD_FLAGS@ ALL_CFLAGS = -I. -I$(srcdir) $(CPPFLAGS) $(DEFS) $(CFLAGS) $(WARN_CFLAGS) \ ! $(GTHREAD_FLAGS) -DIN_GCC -DIN_TARGET_LIBS -fno-strict-aliasing # Libtool # The following strings describe the version of the obj-C library *************** LIBTOOL_INSTALL = $(LIBTOOL) --mode=inst *** 87,100 **** LIBTOOL_CLEAN = $(LIBTOOL) --mode=clean #LIBTOOL_UNINSTALL = $(LIBTOOL) --mode=uninstall - # - # Define the cc1obj in terms of the CC that is passed on from higher - # level make. This is needed to make sure we can create runtime-info.h - # when doing canadian cross builds where running ../../gcc/cc1obj - # does not make any sense. - # - CC1OBJ = `$(CC) -print-prog-name=cc1obj` - INCLUDES = -I$(srcdir)/objc -I$(srcdir)/$(MULTISRCTOP)../gcc \ -I$(srcdir)/$(MULTISRCTOP)../gcc/config -I$(MULTIBUILDTOP)../../gcc \ -I$(srcdir)/$(MULTISRCTOP)../include --- 88,93 ---- *************** OBJS_GC = archive_gc.lo class_gc.lo enco *** 160,169 **** $(OBJC_THREAD_FILE)_gc.lo runtime-info.h: ! echo "" > tmp-runtime echo "/* This file is automatically generated */" > $@ ! $(CC1OBJ) -print-objc-runtime-info tmp-runtime >> $@ ! rm -f tmp-runtime archive_gc.lo: archive.c $(LIBTOOL_COMPILE) $(CC) -c -o $@ $(ALL_CFLAGS) $(OBJC_GCFLAGS) \ --- 153,162 ---- $(OBJC_THREAD_FILE)_gc.lo runtime-info.h: ! echo "" > tmp-runtime.m echo "/* This file is automatically generated */" > $@ ! $(CC) $(MULTIFLAGS) -print-objc-runtime-info -S tmp-runtime.m >> $@ ! rm -f tmp-runtime.m tmp-runtime.s archive_gc.lo: archive.c $(LIBTOOL_COMPILE) $(CC) -c -o $@ $(ALL_CFLAGS) $(OBJC_GCFLAGS) \ diff -Nrc3pad gcc-3.3.3/libobjc/misc.c gcc-3.4.0/libobjc/misc.c *** gcc-3.3.3/libobjc/misc.c 2002-07-02 19:42:34.000000000 +0000 --- gcc-3.4.0/libobjc/misc.c 2003-05-23 20:25:39.000000000 +0000 *************** *** 3,22 **** Free Software Foundation, Inc. Contributed by Kresten Krab Thorup ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 3,22 ---- Free Software Foundation, Inc. Contributed by Kresten Krab Thorup ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/nil_method.c gcc-3.4.0/libobjc/nil_method.c *** gcc-3.3.3/libobjc/nil_method.c 2002-09-12 17:29:26.000000000 +0000 --- gcc-3.4.0/libobjc/nil_method.c 2003-05-23 20:25:39.000000000 +0000 *************** *** 2,20 **** Copyright (C) 1993, 1995, 1996, 2002 Free Software Foundation, Inc. Contributed by Kresten Krab Thorup ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,20 ---- Copyright (C) 1993, 1995, 1996, 2002 Free Software Foundation, Inc. Contributed by Kresten Krab Thorup ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/NXConstStr.m gcc-3.4.0/libobjc/NXConstStr.m *** gcc-3.3.3/libobjc/NXConstStr.m 1999-09-04 15:09:19.000000000 +0000 --- gcc-3.4.0/libobjc/NXConstStr.m 2003-05-23 20:04:58.000000000 +0000 *************** *** 2,21 **** Copyright (C) 1995 Free Software Foundation, Inc. Contributed by Pieter J. Schoenmakers ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,21 ---- Copyright (C) 1995 Free Software Foundation, Inc. Contributed by Pieter J. Schoenmakers ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/objc/encoding.h gcc-3.4.0/libobjc/objc/encoding.h *** gcc-3.3.3/libobjc/objc/encoding.h 2002-07-02 19:43:00.000000000 +0000 --- gcc-3.4.0/libobjc/objc/encoding.h 2003-05-23 20:04:58.000000000 +0000 *************** *** 3,22 **** Author: Kresten Krab Thorup ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 3,22 ---- Author: Kresten Krab Thorup ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/objc/hash.h gcc-3.4.0/libobjc/objc/hash.h *** gcc-3.3.3/libobjc/objc/hash.h 2002-07-02 19:43:02.000000000 +0000 --- gcc-3.4.0/libobjc/objc/hash.h 2003-10-20 21:50:13.000000000 +0000 *************** *** 1,20 **** /* Hash tables for Objective C method dispatch. Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,20 ---- /* Hash tables for Objective C method dispatch. Copyright (C) 1993, 1995, 1996 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ *************** hash_string (cache_ptr cache, const void *** 172,181 **** { unsigned int ret = 0; unsigned int ctr = 0; ! ! while (*(char *) key) { ! ret ^= *(char *) key++ << ctr; ctr = (ctr + 1) % sizeof (void *); } --- 172,181 ---- { unsigned int ret = 0; unsigned int ctr = 0; + const char *ckey = key; ! while (*ckey) { ! ret ^= *ckey++ << ctr; ctr = (ctr + 1) % sizeof (void *); } *************** hash_string (cache_ptr cache, const void *** 187,193 **** static inline int compare_ptrs (const void *k1, const void *k2) { ! return ! (k1 - k2); } --- 187,193 ---- static inline int compare_ptrs (const void *k1, const void *k2) { ! return (k1 == k2); } diff -Nrc3pad gcc-3.3.3/libobjc/objc/NXConstStr.h gcc-3.4.0/libobjc/objc/NXConstStr.h *** gcc-3.3.3/libobjc/objc/NXConstStr.h 1999-09-04 15:09:20.000000000 +0000 --- gcc-3.4.0/libobjc/objc/NXConstStr.h 2003-05-23 20:04:58.000000000 +0000 *************** *** 2,21 **** Copyright (C) 1995 Free Software Foundation, Inc. Contributed by Pieter J. Schoenmakers ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,21 ---- Copyright (C) 1995 Free Software Foundation, Inc. Contributed by Pieter J. Schoenmakers ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/objc/objc-api.h gcc-3.4.0/libobjc/objc/objc-api.h *** gcc-3.3.3/libobjc/objc/objc-api.h 2002-04-09 07:06:18.000000000 +0000 --- gcc-3.4.0/libobjc/objc/objc-api.h 2003-05-23 20:04:58.000000000 +0000 *************** *** 1,20 **** /* GNU Objective-C Runtime API. Copyright (C) 1993, 1995, 1996, 1997, 2002 Free Software Foundation, Inc. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,20 ---- /* GNU Objective-C Runtime API. Copyright (C) 1993, 1995, 1996, 1997, 2002 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/objc/objc.h gcc-3.4.0/libobjc/objc/objc.h *** gcc-3.3.3/libobjc/objc/objc.h 2002-09-12 17:28:47.000000000 +0000 --- gcc-3.4.0/libobjc/objc/objc.h 2003-05-23 20:04:58.000000000 +0000 *************** *** 1,20 **** /* Basic data types for Objective C. Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,20 ---- /* Basic data types for Objective C. Copyright (C) 1993, 1995, 1996 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/objc/objc-list.h gcc-3.4.0/libobjc/objc/objc-list.h *** gcc-3.3.3/libobjc/objc/objc-list.h 2000-03-29 20:19:06.000000000 +0000 --- gcc-3.4.0/libobjc/objc/objc-list.h 2003-05-23 20:04:58.000000000 +0000 *************** *** 2,21 **** Copyright (C) 1993, 1994, 1996 Free Software Foundation, Inc. Contributed by Kresten Krab Thorup. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,21 ---- Copyright (C) 1993, 1994, 1996 Free Software Foundation, Inc. Contributed by Kresten Krab Thorup. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ *************** list_length(struct objc_list* list) *** 64,72 **** larger than the list length, NULL is returned */ static inline void* ! list_nth(int index, struct objc_list* list) { ! while(index-- != 0) { if(list->tail) list = list->tail; --- 64,72 ---- larger than the list length, NULL is returned */ static inline void* ! list_nth(int indx, struct objc_list* list) { ! while(indx-- != 0) { if(list->tail) list = list->tail; diff -Nrc3pad gcc-3.3.3/libobjc/objc/Object.h gcc-3.4.0/libobjc/objc/Object.h *** gcc-3.3.3/libobjc/objc/Object.h 1999-09-04 15:09:20.000000000 +0000 --- gcc-3.4.0/libobjc/objc/Object.h 2003-05-23 20:04:58.000000000 +0000 *************** *** 1,20 **** /* Interface for the Object class for Objective-C. Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,20 ---- /* Interface for the Object class for Objective-C. Copyright (C) 1993, 1994, 1995 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/objc/Protocol.h gcc-3.4.0/libobjc/objc/Protocol.h *** gcc-3.3.3/libobjc/objc/Protocol.h 2000-03-29 20:19:06.000000000 +0000 --- gcc-3.4.0/libobjc/objc/Protocol.h 2003-05-23 20:04:58.000000000 +0000 *************** *** 1,20 **** /* Declare the class Protocol for Objective C programs. Copyright (C) 1993 Free Software Foundation, Inc. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,20 ---- /* Declare the class Protocol for Objective C programs. Copyright (C) 1993 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/objc/runtime.h gcc-3.4.0/libobjc/objc/runtime.h *** gcc-3.3.3/libobjc/objc/runtime.h 2002-06-21 14:36:37.000000000 +0000 --- gcc-3.4.0/libobjc/objc/runtime.h 2003-05-23 20:04:58.000000000 +0000 *************** *** 2,20 **** Copyright (C) 1993, 1995, 1996, 1997, 2002 Free Software Foundation, Inc. Contributed by Kresten Krab Thorup ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* As a special exception, if you link this library with files compiled with --- 2,20 ---- Copyright (C) 1993, 1995, 1996, 1997, 2002 Free Software Foundation, Inc. Contributed by Kresten Krab Thorup ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* As a special exception, if you link this library with files compiled with diff -Nrc3pad gcc-3.3.3/libobjc/objc/sarray.h gcc-3.4.0/libobjc/objc/sarray.h *** gcc-3.3.3/libobjc/objc/sarray.h 1998-10-07 02:21:54.000000000 +0000 --- gcc-3.4.0/libobjc/objc/sarray.h 2003-05-23 20:04:58.000000000 +0000 *************** *** 2,21 **** Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc. Contributed by Kresten Krab Thorup. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,21 ---- Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc. Contributed by Kresten Krab Thorup. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ *************** struct sarray* sarray_new(int, void* def *** 146,153 **** void sarray_free(struct sarray*); struct sarray* sarray_lazy_copy(struct sarray*); void sarray_realloc(struct sarray*, int new_size); ! void sarray_at_put(struct sarray*, sidx index, void* elem); ! void sarray_at_put_safe(struct sarray*, sidx index, void* elem); struct sarray* sarray_hard_copy(struct sarray*); /* ... like the name? */ void sarray_remove_garbage(void); --- 146,153 ---- void sarray_free(struct sarray*); struct sarray* sarray_lazy_copy(struct sarray*); void sarray_realloc(struct sarray*, int new_size); ! void sarray_at_put(struct sarray*, sidx indx, void* elem); ! void sarray_at_put_safe(struct sarray*, sidx indx, void* elem); struct sarray* sarray_hard_copy(struct sarray*); /* ... like the name? */ void sarray_remove_garbage(void); *************** void sarray_remove_garbage(void); *** 156,165 **** #ifdef PRECOMPUTE_SELECTORS /* Transform soffset values to ints and vica verca */ static inline unsigned int ! soffset_decode(sidx index) { union sofftype x; ! x.idx = index; #ifdef OBJC_SPARSE3 return x.off.eoffset + (x.off.boffset*BUCKET_SIZE) --- 156,165 ---- #ifdef PRECOMPUTE_SELECTORS /* Transform soffset values to ints and vica verca */ static inline unsigned int ! soffset_decode(sidx indx) { union sofftype x; ! x.idx = indx; #ifdef OBJC_SPARSE3 return x.off.eoffset + (x.off.boffset*BUCKET_SIZE) *************** soffset_encode(size_t offset) *** 186,194 **** #else /* not PRECOMPUTE_SELECTORS */ static inline size_t ! soffset_decode(sidx index) { ! return index; } static inline sidx --- 186,194 ---- #else /* not PRECOMPUTE_SELECTORS */ static inline size_t ! soffset_decode(sidx indx) { ! return indx; } static inline sidx *************** soffset_encode(size_t offset) *** 198,210 **** } #endif /* not PRECOMPUTE_SELECTORS */ ! /* Get element from the Sparse array `array' at offset `index' */ ! static inline void* sarray_get(struct sarray* array, sidx index) { #ifdef PRECOMPUTE_SELECTORS union sofftype x; ! x.idx = index; #ifdef OBJC_SPARSE3 return array-> --- 198,210 ---- } #endif /* not PRECOMPUTE_SELECTORS */ ! /* Get element from the Sparse array `array' at offset `indx' */ ! static inline void* sarray_get(struct sarray* array, sidx indx) { #ifdef PRECOMPUTE_SELECTORS union sofftype x; ! x.idx = indx; #ifdef OBJC_SPARSE3 return array-> *************** static inline void* sarray_get(struct sa *** 217,235 **** #else /* not PRECOMPUTE_SELECTORS */ #ifdef OBJC_SPARSE3 return array-> ! indices[index/INDEX_CAPACITY]-> ! buckets[(index/BUCKET_SIZE)%INDEX_SIZE]-> ! elems[index%BUCKET_SIZE]; #else /* OBJC_SPARSE2 */ ! return array->buckets[index/BUCKET_SIZE]->elems[index%BUCKET_SIZE]; #endif /* not OBJC_SPARSE3 */ #endif /* not PRECOMPUTE_SELECTORS */ } ! static inline void* sarray_get_safe(struct sarray* array, sidx index) { ! if(soffset_decode(index) < array->capacity) ! return sarray_get(array, index); else return (array->empty_bucket->elems[0]); } --- 217,235 ---- #else /* not PRECOMPUTE_SELECTORS */ #ifdef OBJC_SPARSE3 return array-> ! indices[indx/INDEX_CAPACITY]-> ! buckets[(indx/BUCKET_SIZE)%INDEX_SIZE]-> ! elems[indx%BUCKET_SIZE]; #else /* OBJC_SPARSE2 */ ! return array->buckets[indx/BUCKET_SIZE]->elems[indx%BUCKET_SIZE]; #endif /* not OBJC_SPARSE3 */ #endif /* not PRECOMPUTE_SELECTORS */ } ! static inline void* sarray_get_safe(struct sarray* array, sidx indx) { ! if(soffset_decode(indx) < array->capacity) ! return sarray_get(array, indx); else return (array->empty_bucket->elems[0]); } diff -Nrc3pad gcc-3.3.3/libobjc/objc/thr.h gcc-3.4.0/libobjc/objc/thr.h *** gcc-3.3.3/libobjc/objc/thr.h 2002-07-02 19:43:03.000000000 +0000 --- gcc-3.4.0/libobjc/objc/thr.h 2003-05-23 20:04:58.000000000 +0000 *************** *** 2,30 **** Copyright (C) 1996, 1997, 2002 Free Software Foundation, Inc. Contributed by Galen C. Hunt (gchunt@cs.rochester.edu) ! 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. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,30 ---- Copyright (C) 1996, 1997, 2002 Free Software Foundation, Inc. Contributed by Galen C. Hunt (gchunt@cs.rochester.edu) ! 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. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/objc/typedstream.h gcc-3.4.0/libobjc/objc/typedstream.h *** gcc-3.3.3/libobjc/objc/typedstream.h 1999-09-04 15:09:20.000000000 +0000 --- gcc-3.4.0/libobjc/objc/typedstream.h 2003-05-23 20:04:58.000000000 +0000 *************** *** 1,20 **** /* GNU Objective-C Typed Streams interface. Copyright (C) 1993, 1995 Free Software Foundation, Inc. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,20 ---- /* GNU Objective-C Typed Streams interface. Copyright (C) 1993, 1995 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/Object.m gcc-3.4.0/libobjc/Object.m *** gcc-3.3.3/libobjc/Object.m 2002-06-21 14:36:36.000000000 +0000 --- gcc-3.4.0/libobjc/Object.m 2003-05-23 20:04:58.000000000 +0000 *************** *** 1,20 **** /* The implementation of class Object for Objective-C. Copyright (C) 1993, 1994, 1995, 1997, 2002 Free Software Foundation, Inc. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,20 ---- /* The implementation of class Object for Objective-C. Copyright (C) 1993, 1994, 1995, 1997, 2002 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/objects.c gcc-3.4.0/libobjc/objects.c *** gcc-3.3.3/libobjc/objects.c 2002-07-02 19:42:43.000000000 +0000 --- gcc-3.4.0/libobjc/objects.c 2003-05-23 20:25:39.000000000 +0000 *************** *** 2,20 **** Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc. Contributed by Kresten Krab Thorup ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,20 ---- Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc. Contributed by Kresten Krab Thorup ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/Protocol.m gcc-3.4.0/libobjc/Protocol.m *** gcc-3.3.3/libobjc/Protocol.m 2003-12-02 01:59:37.000000000 +0000 --- gcc-3.4.0/libobjc/Protocol.m 2003-12-01 23:29:59.000000000 +0000 *************** *** 1,20 **** /* This file contains the implementation of class Protocol. Copyright (C) 1993 Free Software Foundation, Inc. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,20 ---- /* This file contains the implementation of class Protocol. Copyright (C) 1993 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/sarray.c gcc-3.4.0/libobjc/sarray.c *** gcc-3.3.3/libobjc/sarray.c 2002-07-02 19:42:44.000000000 +0000 --- gcc-3.4.0/libobjc/sarray.c 2004-01-10 05:47:42.000000000 +0000 *************** *** 1,20 **** /* Sparse Arrays for Objective C dispatch tables Copyright (C) 1993, 1995, 1996, 2002 Free Software Foundation, Inc. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,20 ---- /* Sparse Arrays for Objective C dispatch tables Copyright (C) 1993, 1995, 1996, 2002 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ *************** sarray_free (struct sarray *array) { *** 402,410 **** #else old_buckets = array->buckets; #endif - - if ((array->is_copy_of) && ((array->is_copy_of->ref_count - 1) == 0)) - sarray_free (array->is_copy_of); /* Free all entries that do not point to empty_bucket */ for (counter = 0; counter <= old_max_index; counter++ ) { --- 402,407 ---- *************** sarray_free (struct sarray *array) { *** 462,467 **** --- 459,468 ---- #endif + /* If this is a copy, go ahead and decrement/deallocate the original */ + if (array->is_copy_of) + sarray_free (array->is_copy_of); + /* free array */ sarray_free_garbage (array); } diff -Nrc3pad gcc-3.3.3/libobjc/selector.c gcc-3.4.0/libobjc/selector.c *** gcc-3.3.3/libobjc/selector.c 2002-07-02 19:42:44.000000000 +0000 --- gcc-3.4.0/libobjc/selector.c 2004-01-15 01:49:41.000000000 +0000 *************** *** 2,20 **** Copyright (C) 1993, 1995, 1996, 1997, 2002 Free Software Foundation, Inc. Contributed by Kresten Krab Thorup ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* As a special exception, if you link this library with files compiled with --- 2,20 ---- Copyright (C) 1993, 1995, 1996, 1997, 2002 Free Software Foundation, Inc. Contributed by Kresten Krab Thorup ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* As a special exception, if you link this library with files compiled with *************** void __objc_register_instance_methods_to *** 148,153 **** --- 148,155 ---- new_list->method_next = class->class_pointer->methods; class->class_pointer->methods = new_list; } + else + objc_free(new_list); __objc_update_dispatch_table_for_class (class->class_pointer); } diff -Nrc3pad gcc-3.3.3/libobjc/sendmsg.c gcc-3.4.0/libobjc/sendmsg.c *** gcc-3.3.3/libobjc/sendmsg.c 2002-09-12 17:29:58.000000000 +0000 --- gcc-3.4.0/libobjc/sendmsg.c 2003-07-10 09:24:51.000000000 +0000 *************** *** 3,21 **** 2001, 2002 Free Software Foundation, Inc. Contributed by Kresten Krab Thorup ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 3,21 ---- 2001, 2002 Free Software Foundation, Inc. Contributed by Kresten Krab Thorup ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ *************** Boston, MA 02111-1307, USA. */ *** 25,31 **** --- 25,35 ---- however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ + /* FIXME: This file has no business including tm.h. */ + #include "tconfig.h" + #include "coretypes.h" + #include "tm.h" #include "runtime.h" #include "sarray.h" #include "encoding.h" *************** __inline__ *** 115,120 **** --- 119,132 ---- IMP get_imp (Class class, SEL sel) { + /* In a vanilla implementation we would first check if the dispatch + table is installed. Here instead, to get more speed in the + standard case (that the dispatch table is installed) we first try + to get the imp using brute force. Only if that fails, we do what + we should have been doing from the very beginning, that is, check + if the dispatch table needs to be installed, install it if it's + not installed, and retrieve the imp from the table if it's + installed. */ void *res = sarray_get_safe (class->dtable, (size_t) sel->sel_id); if (res == 0) { *************** get_imp (Class class, SEL sel) *** 123,129 **** { /* The dispatch table needs to be installed. */ objc_mutex_lock (__objc_runtime_mutex); ! __objc_install_dispatch_table_for_class (class); objc_mutex_unlock (__objc_runtime_mutex); /* Call ourselves with the installed dispatch table and get the real method */ --- 135,150 ---- { /* The dispatch table needs to be installed. */ objc_mutex_lock (__objc_runtime_mutex); ! ! /* Double-checked locking pattern: Check ! __objc_uninstalled_dtable again in case another thread ! installed the dtable while we were waiting for the lock ! to be released. */ ! if (class->dtable == __objc_uninstalled_dtable) ! { ! __objc_install_dispatch_table_for_class (class); ! } ! objc_mutex_unlock (__objc_runtime_mutex); /* Call ourselves with the installed dispatch table and get the real method */ *************** get_imp (Class class, SEL sel) *** 131,140 **** } else { ! /* The dispatch table has been installed so the ! method just doesn't exist for the class. ! Return the forwarding implementation. */ ! res = __objc_get_forward_imp (sel); } } return res; --- 152,173 ---- } else { ! /* The dispatch table has been installed. */ ! ! /* Get the method from the dispatch table (we try to get it ! again in case another thread has installed the dtable just ! after we invoked sarray_get_safe, but before we checked ! class->dtable == __objc_uninstalled_dtable). ! */ ! res = sarray_get_safe (class->dtable, (size_t) sel->sel_id); ! if (res == 0) ! { ! /* The dispatch table has been installed, and the method ! is not in the dispatch table. So the method just ! doesn't exist for the class. Return the forwarding ! implementation. */ ! res = __objc_get_forward_imp (sel); ! } } } return res; *************** __objc_responds_to (id object, SEL sel) *** 153,159 **** if (object->class_pointer->dtable == __objc_uninstalled_dtable) { objc_mutex_lock (__objc_runtime_mutex); ! __objc_install_dispatch_table_for_class (object->class_pointer); objc_mutex_unlock (__objc_runtime_mutex); } --- 186,195 ---- if (object->class_pointer->dtable == __objc_uninstalled_dtable) { objc_mutex_lock (__objc_runtime_mutex); ! if (object->class_pointer->dtable == __objc_uninstalled_dtable) ! { ! __objc_install_dispatch_table_for_class (object->class_pointer); ! } objc_mutex_unlock (__objc_runtime_mutex); } *************** objc_msg_lookup (id receiver, SEL op) *** 188,197 **** } else { ! /* The dispatch table has been installed so the ! method just doesn't exist for the class. ! Attempt to forward the method. */ ! result = __objc_get_forward_imp (op); } } return result; --- 224,242 ---- } else { ! /* The dispatch table has been installed. Check again ! if the method exists (just in case the dispatch table ! has been installed by another thread after we did the ! previous check that the method exists). ! */ ! result = sarray_get_safe (receiver->class_pointer->dtable, ! (sidx)op->sel_id); ! if (result == 0) ! { ! /* If the method still just doesn't exist for the ! class, attempt to forward the method. */ ! result = __objc_get_forward_imp (op); ! } } } return result; *************** __objc_init_dispatch_tables () *** 235,247 **** static void __objc_init_install_dtable (id receiver, SEL op __attribute__ ((__unused__))) { /* This may happen, if the programmer has taken the address of a method before the dtable was initialized... too bad for him! */ if (receiver->class_pointer->dtable != __objc_uninstalled_dtable) ! return; ! ! objc_mutex_lock (__objc_runtime_mutex); ! if (CLS_ISCLASS (receiver->class_pointer)) { /* receiver is an ordinary object */ --- 280,295 ---- static void __objc_init_install_dtable (id receiver, SEL op __attribute__ ((__unused__))) { + objc_mutex_lock (__objc_runtime_mutex); + /* This may happen, if the programmer has taken the address of a method before the dtable was initialized... too bad for him! */ if (receiver->class_pointer->dtable != __objc_uninstalled_dtable) ! { ! objc_mutex_unlock (__objc_runtime_mutex); ! return; ! } ! if (CLS_ISCLASS (receiver->class_pointer)) { /* receiver is an ordinary object */ diff -Nrc3pad gcc-3.3.3/libobjc/thr.c gcc-3.4.0/libobjc/thr.c *** gcc-3.3.3/libobjc/thr.c 2002-07-02 19:42:53.000000000 +0000 --- gcc-3.4.0/libobjc/thr.c 2003-05-23 20:25:39.000000000 +0000 *************** *** 2,20 **** Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Galen C. Hunt (gchunt@cs.rochester.edu) ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,20 ---- Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Galen C. Hunt (gchunt@cs.rochester.edu) ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/thr-dce.c gcc-3.4.0/libobjc/thr-dce.c *** gcc-3.3.3/libobjc/thr-dce.c 1998-09-30 02:13:15.000000000 +0000 --- gcc-3.4.0/libobjc/thr-dce.c 2003-05-23 20:25:39.000000000 +0000 *************** *** 2,20 **** Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Galen C. Hunt (gchunt@cs.rochester.edu) ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,20 ---- Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Galen C. Hunt (gchunt@cs.rochester.edu) ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/thr-decosf1.c gcc-3.4.0/libobjc/thr-decosf1.c *** gcc-3.3.3/libobjc/thr-decosf1.c 1999-09-04 15:09:19.000000000 +0000 --- gcc-3.4.0/libobjc/thr-decosf1.c 2003-05-23 20:25:39.000000000 +0000 *************** *** 2,20 **** Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Galen C. Hunt (gchunt@cs.rochester.edu) ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,20 ---- Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Galen C. Hunt (gchunt@cs.rochester.edu) ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/thr-irix.c gcc-3.4.0/libobjc/thr-irix.c *** gcc-3.3.3/libobjc/thr-irix.c 1999-09-04 15:09:20.000000000 +0000 --- gcc-3.4.0/libobjc/thr-irix.c 2003-05-23 20:25:39.000000000 +0000 *************** *** 2,20 **** Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Galen C. Hunt (gchunt@cs.rochester.edu) ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,20 ---- Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Galen C. Hunt (gchunt@cs.rochester.edu) ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/thr-mach.c gcc-3.4.0/libobjc/thr-mach.c *** gcc-3.3.3/libobjc/thr-mach.c 2002-07-02 19:42:47.000000000 +0000 --- gcc-3.4.0/libobjc/thr-mach.c 2003-05-23 20:25:39.000000000 +0000 *************** *** 4,22 **** Modified for Mach threads by Bill Bumgarner Condition functions added by Mircea Oancea ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 4,22 ---- Modified for Mach threads by Bill Bumgarner Condition functions added by Mircea Oancea ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/thr-objc.c gcc-3.4.0/libobjc/thr-objc.c *** gcc-3.3.3/libobjc/thr-objc.c 2000-07-20 07:27:26.000000000 +0000 --- gcc-3.4.0/libobjc/thr-objc.c 2003-05-23 20:25:39.000000000 +0000 *************** *** 1,19 **** /* GNU Objective C Runtime Thread Interface. Copyright (C) 1999 Free Software Foundation, Inc. ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,19 ---- /* GNU Objective C Runtime Thread Interface. Copyright (C) 1999 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ *************** Boston, MA 02111-1307, USA. */ *** 25,30 **** --- 25,32 ---- #define _LIBOBJC #include "tconfig.h" + #include "coretypes.h" + #include "tm.h" #include "defaults.h" #include #include "runtime.h" diff -Nrc3pad gcc-3.3.3/libobjc/thr-os2.c gcc-3.4.0/libobjc/thr-os2.c *** gcc-3.3.3/libobjc/thr-os2.c 1999-09-04 15:09:20.000000000 +0000 --- gcc-3.4.0/libobjc/thr-os2.c 2003-05-23 20:25:39.000000000 +0000 *************** *** 2,20 **** Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Thomas Baier (baier@ci.tuwien.ac.at) ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,20 ---- Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Thomas Baier (baier@ci.tuwien.ac.at) ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/thr-posix.c gcc-3.4.0/libobjc/thr-posix.c *** gcc-3.3.3/libobjc/thr-posix.c 2000-08-07 05:51:14.000000000 +0000 --- gcc-3.4.0/libobjc/thr-posix.c 2003-05-23 20:25:39.000000000 +0000 *************** *** 4,22 **** Modified for Linux/Pthreads by Kai-Uwe Sattler (kus@iti.cs.uni-magdeburg.de) Modified for posix compliance by Chris Ball (cball@fmco.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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 4,22 ---- Modified for Linux/Pthreads by Kai-Uwe Sattler (kus@iti.cs.uni-magdeburg.de) Modified for posix compliance by Chris Ball (cball@fmco.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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/thr-pthreads.c gcc-3.4.0/libobjc/thr-pthreads.c *** gcc-3.3.3/libobjc/thr-pthreads.c 1999-09-04 15:09:20.000000000 +0000 --- gcc-3.4.0/libobjc/thr-pthreads.c 2003-05-23 20:25:39.000000000 +0000 *************** *** 3,21 **** Contributed by Scott Christley Condition functions added by: Mircea Oancea ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 3,21 ---- Contributed by Scott Christley Condition functions added by: Mircea Oancea ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/thr-rtems.c gcc-3.4.0/libobjc/thr-rtems.c *** gcc-3.3.3/libobjc/thr-rtems.c 2000-12-07 01:40:42.000000000 +0000 --- gcc-3.4.0/libobjc/thr-rtems.c 2003-05-23 20:25:39.000000000 +0000 *************** *** 4,22 **** Renamed from thr-vxworks.c to thr-rtems.c by Ralf Corsepius (corsepiu@faw.uni-ulm.de) ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 4,22 ---- Renamed from thr-vxworks.c to thr-rtems.c by Ralf Corsepius (corsepiu@faw.uni-ulm.de) ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/thr-single.c gcc-3.4.0/libobjc/thr-single.c *** gcc-3.3.3/libobjc/thr-single.c 1999-09-04 15:09:20.000000000 +0000 --- gcc-3.4.0/libobjc/thr-single.c 2003-05-23 20:25:39.000000000 +0000 *************** *** 2,20 **** Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Galen C. Hunt (gchunt@cs.rochester.edu) ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,20 ---- Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Galen C. Hunt (gchunt@cs.rochester.edu) ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/thr-solaris.c gcc-3.4.0/libobjc/thr-solaris.c *** gcc-3.3.3/libobjc/thr-solaris.c 1999-09-04 15:09:20.000000000 +0000 --- gcc-3.4.0/libobjc/thr-solaris.c 2003-05-23 20:25:39.000000000 +0000 *************** *** 3,21 **** Contributed by Galen C. Hunt (gchunt@cs.rochester.edu) Conditions added by Mircea Oancea (mircea@first.elcom.pub.ro) ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 3,21 ---- Contributed by Galen C. Hunt (gchunt@cs.rochester.edu) Conditions added by Mircea Oancea (mircea@first.elcom.pub.ro) ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/thr-vxworks.c gcc-3.4.0/libobjc/thr-vxworks.c *** gcc-3.3.3/libobjc/thr-vxworks.c 1999-09-04 15:09:20.000000000 +0000 --- gcc-3.4.0/libobjc/thr-vxworks.c 2003-05-23 20:25:39.000000000 +0000 *************** *** 2,20 **** Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Galen C. Hunt (gchunt@cs.rochester.edu) ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,20 ---- Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Galen C. Hunt (gchunt@cs.rochester.edu) ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.3.3/libobjc/thr-win32.c gcc-3.4.0/libobjc/thr-win32.c *** gcc-3.3.3/libobjc/thr-win32.c 1999-09-04 15:09:20.000000000 +0000 --- gcc-3.4.0/libobjc/thr-win32.c 2003-05-23 20:25:39.000000000 +0000 *************** *** 2,20 **** Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Galen C. Hunt (gchunt@cs.rochester.edu) ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,20 ---- Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Galen C. Hunt (gchunt@cs.rochester.edu) ! 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */