Index: gcc/p/ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/p/ChangeLog,v retrieving revision 1.1.111.3 retrieving revision 1.2 diff -u -p -r1.1.111.3 -r1.2 --- gcc/p/ChangeLog 27 Mar 2006 11:51:04 -0000 1.1.111.3 +++ gcc/p/ChangeLog 7 Aug 2017 20:11:22 -0000 1.2 @@ -1027,7 +1027,7 @@ ChangeLog -- Edit History for GPC, the G the identifiers; gpc.h: IDENTIFIER_IMPORT_VALUE: removed * test: made sure all module names are not longer than 7 - chars, so "8+3" file systems can handle + chars, so "8+3" filesystems can handle `modulename-all.gpi' * module.c: start_module_interface (): new function: set up Index: gcc/p/Make-lang.in =================================================================== RCS file: /cvs/gcc/gcc/p/Make-lang.in,v retrieving revision 1.1.111.3 retrieving revision 1.20 diff -u -p -r1.1.111.3 -r1.20 --- gcc/p/Make-lang.in 27 Mar 2006 11:51:05 -0000 1.1.111.3 +++ gcc/p/Make-lang.in 3 Apr 2017 12:14:35 -0000 1.20 @@ -1,3 +1,4 @@ +# $MirOS: gcc/gcc/p/Make-lang.in,v 1.20 2017/04/03 12:14:35 tg Exp $ # Top level Makefile fragment for GNU Pascal. # # Copyright (C) 1987-2005 Free Software Foundation, Inc. @@ -77,16 +78,16 @@ GPC_GCC_VERSION_OBJS_=intl.o GPC_GCC_VERSION_OBJS=$(GPC_GCC_VERSION_OBJS_$(GCC_VERSION_FOR_GPC)) GPC_OBJS_FOR_40=p/gimplify.o GPC_OBJS_40=$(GPC_OBJS_FOR_$(GCC_VERSION_FOR_GPC40)) -GPC_GCC_VERSION_LINK_=p/diagnostic.o attribs.o main.o libbackend.a ../libiberty/libiberty.a +GPC_GCC_VERSION_LINK_=p/diagnostic.o attribs.o main.o libbackend.a $(LIBERTY) GPC_GCC_VERSION_LINK_2=`cat p/stamp-gbe` GPC_GCC_VERSION_LINK_28=`cat p/stamp-gbe` choose-temp.o pexecute.o GPC_GCC_VERSION_LINK=$(GPC_GCC_VERSION_LINK_$(GCC_VERSION_FOR_GPC)) GPC_GCC_VERSION_DEPS_=$(GPC_GCC_VERSION_LINK) -GPC_GCC_VERSION_DEPS_2=p/stamp-gbe ../libiberty/libiberty.a +GPC_GCC_VERSION_DEPS_2=p/stamp-gbe $(LIBERTY) GPC_GCC_VERSION_DEPS_28=p/stamp-gbe choose-temp.o pexecute.o GPC_GCC_VERSION_DEPS=$(GPC_GCC_VERSION_DEPS_$(GCC_VERSION_FOR_GPC)) -GPC_GCC_VERSION_H_=target.h dbxout.h ../include/libiberty.h -GPC_GCC_VERSION_H_2=gansidecl.h dbxout.h ../include/libiberty.h +GPC_GCC_VERSION_H_=target.h dbxout.h $(LIBIBERTY_HDRS)/libiberty.h +GPC_GCC_VERSION_H_2=gansidecl.h dbxout.h $(LIBIBERTY_HDRS)/libiberty.h GPC_GCC_VERSION_H_28=gansidecl.h GPC_GCC_VERSION_H=$(GPC_GCC_VERSION_H_$(GCC_VERSION_FOR_GPC)) GPC_ALL_WARNINGS_=$(WARN_CFLAGS) $(STRICT_WARN) -Wno-traditional @@ -135,9 +136,11 @@ gpc_version=`sed -ne 's/"[^"]*$$//;s/^\# rts_version=`cat $(RTS_VERSION_FILENAME)` GPCSOLIBSHORTNAME=libgpc.so -GPCSOLIBNAME=$(GPCSOLIBSHORTNAME).$(gpc_major).$(gpc_minor).$(rts_version) -GPCSOLIBDIR=lib -WITH_SHARED=@with_shared@ +GPCSOLIBNAME=$(GPCSOLIBSHORTNAME).$(gpc_major).$(gpc_minor) +GPCSOLIBDIR=$(slibdir) + +#GPCALIBDIR=$(libsubdir) +GPCALIBDIR=$(GPCSOLIBDIR) BISON=bison BISONFLAGS= @@ -158,22 +161,6 @@ SYMLINK=ln -s # Can be overwritten to install additional libraries GPC_EXTRA_INSTALL_LIBS= -# Can be overwritten (empty) to avoid installing the documentation -PASCAL_INSTALL_DOC=pascal.real-install-doc - -# Where to install the documentation and demos (relative to the prefix) -P_DOC_DIR=doc/gpc -p_inst_docdir=$(prefix)/$(P_DOC_DIR) -p_inst_demodir=$(p_inst_docdir)/demos -p_inst_docdemodir=$(p_inst_docdir)/docdemos - -# How to create the GPC binary distribution archive. tar can be given extra -# flags (e.g. `--owner=root --group=root' with newer versions of GNU tar), -# and for Dos hosts, MAKEGPCBINDIST needs to be overwritten completely ... -GPC_TARFLAGS=czf -MAKEGPCBINDIST=tar $(GPC_TARFLAGS) ../gpc-$$version.$(target).tar.gz -MAKEGPCWITHGCCBINDIST=tar $(GPC_TARFLAGS) ../gpc-$$version-with-gcc.$(target).tar.gz - # Actual names to use when installing a native compiler. GPC_INSTALL_NAME=`t='$(program_transform_name)'; echo gpc | sed $$t` @@ -206,6 +193,7 @@ GPC_INSTALL_FLAGS_TO_PASS=\ "GPC_FOR_TARGET=$(GPC_FOR_TARGET)" \ "GPCSOLIBSHORTNAME=$(GPCSOLIBSHORTNAME)" \ "GPCSOLIBDIR=$(GPCSOLIBDIR)" \ + "GPCALIBDIR=$(GPCALIBDIR)" \ "GPC_EXTRA_INSTALL_LIBS=$(GPC_EXTRA_INSTALL_LIBS)" \ "WITH_SHARED=$(WITH_SHARED)" \ "FLOAT_H=$(FLOAT_H)" \ @@ -249,319 +237,19 @@ RTS_FLAGS_TO_PASS_2=$(RTS_FLAGS_TO_PASS_ RTS_FLAGS_TO_PASS=$(RTS_FLAGS_TO_PASS_ALL) \ $(RTS_FLAGS_TO_PASS_$(GCC_VERSION_FOR_GPC)) -# Flags to pass when running the test suite. -TEST_FLAGS_TO_PASS=\ - MASK="$(MASK)" \ - EXTRA_TEST_PFLAGS="$(PFLAGS) $(EXTRA_TEST_PFLAGS)" \ - TEST_RUN_FLAGS="$(TEST_RUN_FLAGS)" - -GPC_GENERAL_TEXI=\ - $(srcdir)/p/doc/macros.texi \ - $(srcdir)/p/doc/generated/version.texi - -GPC_GENERATED_TEXI=\ - $(srcdir)/p/doc/generated/version.texi \ - $(srcdir)/p/doc/generated/lang-options.texi \ - $(srcdir)/p/doc/generated/keyword.texi \ - $(srcdir)/p/doc/generated/gpcpas.texi \ - $(srcdir)/p/doc/generated/crt.texi \ - $(srcdir)/p/doc/generated/dos.texi \ - $(srcdir)/p/doc/generated/dosunix.texi \ - $(srcdir)/p/doc/generated/fileutils.texi \ - $(srcdir)/p/doc/generated/gmp.texi \ - $(srcdir)/p/doc/generated/gpcutil.texi \ - $(srcdir)/p/doc/generated/heapmon.texi \ - $(srcdir)/p/doc/generated/intl.texi \ - $(srcdir)/p/doc/generated/md5.texi \ - $(srcdir)/p/doc/generated/overlay.texi \ - $(srcdir)/p/doc/generated/pipes.texi \ - $(srcdir)/p/doc/generated/ports.texi \ - $(srcdir)/p/doc/generated/printer.texi \ - $(srcdir)/p/doc/generated/regex.texi \ - $(srcdir)/p/doc/generated/strings.texi \ - $(srcdir)/p/doc/generated/stringutils.texi \ - $(srcdir)/p/doc/generated/system.texi \ - $(srcdir)/p/doc/generated/tfdd.texi \ - $(srcdir)/p/doc/generated/trap.texi \ - $(srcdir)/p/doc/generated/turbo3.texi \ - $(srcdir)/p/doc/generated/windos.texi - -GPC_COMMON_TEXI=\ - $(srcdir)/p/doc/macros.texi \ - $(srcdir)/p/doc/contributors.texi \ - $(GPC_GENERATED_TEXI) - -GPC_TEXI_EN=\ - $(GPC_COMMON_TEXI) \ - $(srcdir)/p/doc/en/gpc.texi \ - $(srcdir)/p/doc/en/welcome.texi \ - $(srcdir)/p/doc/en/purpose.texi \ - $(srcdir)/p/doc/en/about.texi \ - $(srcdir)/p/doc/en/news.texi \ - $(srcdir)/p/doc/en/faq.texi \ - $(srcdir)/p/doc/en/libs.texi \ - $(srcdir)/p/doc/en/install.texi \ - $(srcdir)/p/doc/en/bpqstart.texi \ - $(srcdir)/p/doc/en/invoke.texi \ - $(srcdir)/p/doc/en/programming.texi \ - $(srcdir)/p/doc/en/reference.texi \ - $(srcdir)/p/doc/en/keywords.texi \ - $(srcdir)/p/doc/en/support.texi \ - $(srcdir)/p/doc/en/todo.texi \ - $(srcdir)/p/doc/en/internals.texi \ - $(srcdir)/p/doc/en/resources.texi \ - $(srcdir)/p/doc/en/authors.texi \ - $(srcdir)/p/doc/en/copying.texi \ - $(srcdir)/p/doc/en/copying-lib.texi \ - $(srcdir)/p/doc/en/copying-demo.texi \ - $(srcdir)/p/doc/en/gnu.texi \ - $(srcdir)/p/doc/en/gpcs.texi - -GPC_TEXI_DE=\ - $(GPC_COMMON_TEXI) \ - $(srcdir)/p/doc/de/gpcs.texi - -# @@ Some files are not translated yet -- use the English versions for now -GPC_TEXI_HR=\ - $(GPC_COMMON_TEXI) \ - $(srcdir)/p/doc/hr/gpc.texi \ - $(srcdir)/p/doc/hr/welcome.texi \ - $(srcdir)/p/doc/hr/purpose.texi \ - $(srcdir)/p/doc/hr/about.texi \ - $(srcdir)/p/doc/en/news.texi \ - $(srcdir)/p/doc/hr/faq.texi \ - $(srcdir)/p/doc/hr/libs.texi \ - $(srcdir)/p/doc/en/install.texi \ - $(srcdir)/p/doc/en/bpqstart.texi \ - $(srcdir)/p/doc/hr/invoke.texi \ - $(srcdir)/p/doc/en/programming.texi \ - $(srcdir)/p/doc/en/reference.texi \ - $(srcdir)/p/doc/hr/keywords.texi \ - $(srcdir)/p/doc/hr/support.texi \ - $(srcdir)/p/doc/en/todo.texi \ - $(srcdir)/p/doc/en/internals.texi \ - $(srcdir)/p/doc/hr/resources.texi \ - $(srcdir)/p/doc/hr/authors.texi \ - $(srcdir)/p/doc/en/copying.texi \ - $(srcdir)/p/doc/en/copying-lib.texi \ - $(srcdir)/p/doc/en/copying-demo.texi \ - $(srcdir)/p/doc/en/gnu.texi \ - $(srcdir)/p/doc/hr/gpcs.texi - -# @@ Some files are not translated yet -- use the English versions for now -GPC_TEXI_ES=\ - $(GPC_COMMON_TEXI) \ - $(srcdir)/p/doc/en/gpc.texi \ - $(srcdir)/p/doc/en/welcome.texi \ - $(srcdir)/p/doc/en/purpose.texi \ - $(srcdir)/p/doc/en/about.texi \ - $(srcdir)/p/doc/en/news.texi \ - $(srcdir)/p/doc/en/faq.texi \ - $(srcdir)/p/doc/en/libs.texi \ - $(srcdir)/p/doc/en/install.texi \ - $(srcdir)/p/doc/en/bpqstart.texi \ - $(srcdir)/p/doc/en/invoke.texi \ - $(srcdir)/p/doc/en/programming.texi \ - $(srcdir)/p/doc/en/reference.texi \ - $(srcdir)/p/doc/en/keywords.texi \ - $(srcdir)/p/doc/en/support.texi \ - $(srcdir)/p/doc/en/todo.texi \ - $(srcdir)/p/doc/en/internals.texi \ - $(srcdir)/p/doc/en/resources.texi \ - $(srcdir)/p/doc/en/authors.texi \ - $(srcdir)/p/doc/en/copying.texi \ - $(srcdir)/p/doc/en/copying-lib.texi \ - $(srcdir)/p/doc/en/copying-demo.texi \ - $(srcdir)/p/doc/en/gnu.texi \ - $(srcdir)/p/doc/es/gpcs.texi - -RTS_GENERATED_FILES=\ - $(RTSSRCDIR)/acconfig.h \ - $(RTSSRCDIR)/configure \ - $(RTSSRCDIR)/rts-config.in \ - $(RTSSRCDIR)/rtsc.pas \ - $(RTSSRCDIR)/gpc.pas - -GPC_GENERATED_FILES=\ - $(GPC_GENERATED_TEXI) \ - $(srcdir)/p/INSTALL \ - $(srcdir)/p/README \ - $(srcdir)/p/NEWS \ - $(srcdir)/p/FAQ \ - $(srcdir)/p/AUTHORS \ - $(srcdir)/p/COPYING \ - $(srcdir)/p/COPYING.LIB \ - $(srcdir)/p/COPYING.DEMO \ - $(srcdir)/p/lang.opt \ - $(srcdir)/p/pascal-lex.c \ - $(srcdir)/p/parse.c \ - $(srcdir)/p/parse.h \ - $(srcdir)/p/units/crtc.h \ - $(srcdir)/p/test/README \ - $(srcdir)/p/doc/generated/gpc-run.1 \ - $(RTS_GENERATED_FILES) - -GPC_DOC_DIRS_EN=-I $(srcdir)/p/doc -I $(srcdir)/p/doc/en -I $(srcdir)/p/doc/generated -GPC_DOC_DIRS_DE=-I $(srcdir)/p/doc -I $(srcdir)/p/doc/de -I $(srcdir)/p/doc/generated -GPC_DOC_DIRS_HR=-I $(srcdir)/p/doc -I $(srcdir)/p/doc/hr -I $(srcdir)/p/doc/generated -I $(srcdir)/p/doc/en -GPC_DOC_DIRS_ES=-I $(srcdir)/p/doc -I $(srcdir)/p/doc/es -I $(srcdir)/p/doc/generated -I $(srcdir)/p/doc/en -MAKEINFO_EN=LANG=en_GB LC_ALL=en_GB $(MAKEINFO) $(MAKEINFOFLAGS) $(GPC_DOC_DIRS_EN) -MAKEINFO_DE=LANG=de_DE LC_ALL=de_DE $(MAKEINFO) $(MAKEINFOFLAGS) $(GPC_DOC_DIRS_DE) -MAKEINFO_HR=LANG=hr_HR LC_ALL=hr_HR $(MAKEINFO) $(MAKEINFOFLAGS) $(GPC_DOC_DIRS_HR) -MAKEINFO_ES=LANG=es_ES LC_ALL=es_ES $(MAKEINFO) $(MAKEINFOFLAGS) $(GPC_DOC_DIRS_ES) - # Define the names for selecting Pascal in LANGUAGES. # @@ Removing "pascal.rts pascal.utils" here fails for a cross-built compiler +# (needed though, to break up a dependency cycle) Pascal pascal: xgpc$(exeext) gpc1$(exeext) gpc-run \ - specs pascal.generated-files pascal.docdemos \ - pascal.rts pascal.utils + specs #pascal.rts pascal.utils # Tell GNU make to ignore these if they exist. .PHONY: Pascal pascal -# Create all files in the source directory that can be created automatically -pascal.generated-files: $(GPC_GENERATED_FILES) pascal.info - -pascal.cvsfiles: $(srcdir)/p/INSTALL - -pascal.update-release: - if [ -r "$(VERSION_FILENAME)" ] && [ $(gpc_version) -ge "`date '+%Y%m%d'`" ]; then \ - echo "GPC release version is already "$(gpc_version); \ - exit 1; \ - fi - ( \ - echo '/* Generated automatically by the Makefile.' && \ - echo ' DO NOT CHANGE THIS FILE MANUALLY! */' && \ - echo '' && \ - echo '#define GPC_MAJOR "$(gpc_major)"' && \ - echo '#define GPC_MINOR "$(gpc_minor)"' && \ - echo '#define GPC_VERSION_STRING "'`date '+%Y%m%d'`'"' && \ - echo '#define GPC_RELEASE_STRING GPC_VERSION_STRING' \ - ) > $(VERSION_FILENAME) || \ - { rm -f $(VERSION_FILENAME); false; } - @echo "New GPC release version is "$(gpc_version) - touch $(srcdir)/p/lang-specs.h # because GCC's Makefile doesn't know about p/p-version.h - cd $(RTSSRCDIR) && $(MAKE) -f Makefile.in srcdir=. rts.update-release - -$(srcdir)/p/units/crtc.h: $(srcdir)/p/units/crt.inc - $(srcdir)/p/script/crtinc2h $(srcdir)/p/units/crt.inc $(srcdir)/p/units/crtc.h - -# Derive parts of the documentation directly from the source. - -$(srcdir)/p/doc/generated/version.texi: $(VERSION_FILENAME) - ( \ - release=$(gpc_version) && \ - echo "@c Generated automatically from `echo $(VERSION_FILENAME) | sed -e 's,.*/,,'`" && \ - echo '@c DO NOT CHANGE THIS FILE MANUALLY!' && \ - echo '' && \ - echo "@set GPCMajor $(gpc_major)" && \ - echo "@set GPCMinor $(gpc_minor)" && \ - echo "@set GPCVersion $$release" && \ - echo "@set GCCVersion 2.8.1, 2.95.x, 3.2.x, 3.3.x or 3.4.x" \ - ) > $(srcdir)/p/doc/generated/version.texi || \ - { rm -f $(srcdir)/p/doc/generated/version.texi; false; } - -$(srcdir)/p/doc/generated/lang-options.texi: $(srcdir)/p/lang-options.h - $(srcdir)/p/script/lang-options2texi $(srcdir)/p/lang-options.h $(srcdir)/p/doc/generated/lang-options.texi - -$(srcdir)/p/doc/generated/keyword.texi: $(srcdir)/p/predef.def - $(srcdir)/p/script/keywords2texi $(srcdir)/p/predef.def $(srcdir)/p/doc/generated/keyword.texi - -$(srcdir)/p/doc/generated/gpcpas.texi: $(RTSSRCDIR)/gpc.pas - $(srcdir)/p/script/pas2texi $(RTSSRCDIR)/gpc.pas $(srcdir)/p/doc/generated/gpcpas.texi - -# This is stupid, but some stupid makes don't support nice pattern rules ... -# $(srcdir)/p/doc/generated/%.texi: $(srcdir)/p/units/%.pas -# $(srcdir)/p/script/pas2texi "$<" "$@" -$(srcdir)/p/doc/generated/crt.texi: $(srcdir)/p/units/crt.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/crt.pas $(srcdir)/p/doc/generated/crt.texi -$(srcdir)/p/doc/generated/dos.texi: $(srcdir)/p/units/dos.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/dos.pas $(srcdir)/p/doc/generated/dos.texi -$(srcdir)/p/doc/generated/dosunix.texi: $(srcdir)/p/units/dosunix.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/dosunix.pas $(srcdir)/p/doc/generated/dosunix.texi -$(srcdir)/p/doc/generated/fileutils.texi: $(srcdir)/p/units/fileutils.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/fileutils.pas $(srcdir)/p/doc/generated/fileutils.texi -$(srcdir)/p/doc/generated/gmp.texi: $(srcdir)/p/units/gmp.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/gmp.pas $(srcdir)/p/doc/generated/gmp.texi -$(srcdir)/p/doc/generated/gpcutil.texi: $(srcdir)/p/units/gpcutil.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/gpcutil.pas $(srcdir)/p/doc/generated/gpcutil.texi -$(srcdir)/p/doc/generated/heapmon.texi: $(srcdir)/p/units/heapmon.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/heapmon.pas $(srcdir)/p/doc/generated/heapmon.texi -$(srcdir)/p/doc/generated/intl.texi: $(srcdir)/p/units/intl.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/intl.pas $(srcdir)/p/doc/generated/intl.texi -$(srcdir)/p/doc/generated/md5.texi: $(srcdir)/p/units/md5.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/md5.pas $(srcdir)/p/doc/generated/md5.texi -$(srcdir)/p/doc/generated/overlay.texi: $(srcdir)/p/units/overlay.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/overlay.pas $(srcdir)/p/doc/generated/overlay.texi -$(srcdir)/p/doc/generated/pipes.texi: $(srcdir)/p/units/pipes.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/pipes.pas $(srcdir)/p/doc/generated/pipes.texi -$(srcdir)/p/doc/generated/ports.texi: $(srcdir)/p/units/ports.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/ports.pas $(srcdir)/p/doc/generated/ports.texi -$(srcdir)/p/doc/generated/printer.texi: $(srcdir)/p/units/printer.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/printer.pas $(srcdir)/p/doc/generated/printer.texi -$(srcdir)/p/doc/generated/regex.texi: $(srcdir)/p/units/regex.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/regex.pas $(srcdir)/p/doc/generated/regex.texi -$(srcdir)/p/doc/generated/strings.texi: $(srcdir)/p/units/strings.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/strings.pas $(srcdir)/p/doc/generated/strings.texi -$(srcdir)/p/doc/generated/stringutils.texi: $(srcdir)/p/units/stringutils.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/stringutils.pas $(srcdir)/p/doc/generated/stringutils.texi -$(srcdir)/p/doc/generated/system.texi: $(srcdir)/p/units/system.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/system.pas $(srcdir)/p/doc/generated/system.texi -$(srcdir)/p/doc/generated/tfdd.texi: $(srcdir)/p/units/tfdd.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/tfdd.pas $(srcdir)/p/doc/generated/tfdd.texi -$(srcdir)/p/doc/generated/trap.texi: $(srcdir)/p/units/trap.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/trap.pas $(srcdir)/p/doc/generated/trap.texi -$(srcdir)/p/doc/generated/turbo3.texi: $(srcdir)/p/units/turbo3.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/turbo3.pas $(srcdir)/p/doc/generated/turbo3.texi -$(srcdir)/p/doc/generated/windos.texi: $(srcdir)/p/units/windos.pas - $(srcdir)/p/script/pas2texi $(srcdir)/p/units/windos.pas $(srcdir)/p/doc/generated/windos.texi - -$(srcdir)/p/INSTALL: $(srcdir)/p/doc/en/install.texi $(GPC_GENERAL_TEXI) - $(MAKEINFO_EN) -DINSTALLONLY --no-header --no-split install.texi -o "$@" - -$(srcdir)/p/README: $(srcdir)/p/doc/en/welcome.texi $(srcdir)/p/doc/en/purpose.texi $(GPC_GENERAL_TEXI) - $(MAKEINFO_EN) -DREADMEONLY --no-header --no-split welcome.texi -o "$@" - -$(srcdir)/p/NEWS: $(srcdir)/p/doc/en/news.texi $(srcdir)/p/doc/en/welcome.texi \ - $(srcdir)/p/doc/en/purpose.texi $(GPC_GENERAL_TEXI) - $(MAKEINFO_EN) -DNEWSONLY --no-header --no-split news.texi -o "$@" - -$(srcdir)/p/FAQ: $(srcdir)/p/doc/en/faq.texi $(srcdir)/p/doc/en/purpose.texi \ - $(srcdir)/p/doc/en/libs.texi $(srcdir)/p/doc/en/support.texi $(GPC_GENERAL_TEXI) - $(MAKEINFO_EN) -DFAQONLY --no-header --no-split --number-sections faq.texi -o "$@" - -$(srcdir)/p/AUTHORS: $(srcdir)/p/doc/en/authors.texi $(srcdir)/p/doc/contributors.texi $(GPC_GENERAL_TEXI) - $(MAKEINFO_EN) -DAUTHORSONLY --no-header --no-split authors.texi -o "$@" - -$(srcdir)/p/COPYING: $(srcdir)/p/doc/en/copying.texi $(GPC_GENERAL_TEXI) - $(MAKEINFO_EN) -DCOPYINGONLY --no-header --no-split copying.texi -o "$@" - -$(srcdir)/p/COPYING.LIB: $(srcdir)/p/doc/en/copying-lib.texi $(GPC_GENERAL_TEXI) - $(MAKEINFO_EN) -DCOPYINGONLY --no-header --no-split copying-lib.texi -o "$@" - -$(srcdir)/p/COPYING.DEMO: $(srcdir)/p/doc/en/copying-demo.texi $(GPC_GENERAL_TEXI) - $(MAKEINFO_EN) -DCOPYINGONLY --no-header --no-split copying-demo.texi -o "$@" - -$(srcdir)/p/test/README: $(srcdir)/p/doc/en/support.texi $(GPC_GENERAL_TEXI) - $(MAKEINFO_EN) -DTESTREADMEONLY --no-header --no-split support.texi -o "$@" - -pascal.generated-manpages: - -pascal.man: - -pascal.srcman: - -pascal.docdemos: p/stamp-docdemos -p/stamp-docdemos: $(GPC_TEXI_EN) - rm -rf p/docdemos - $(srcdir)/p/script/mkdir-p p/docdemos - $(srcdir)/p/script/extract-doc-demos -o p/docdemos $(srcdir)/p/doc/*.texi $(srcdir)/p/doc/generated/*.texi $(srcdir)/p/doc/en/*.texi - $(STAMP) "$@" - p/gpc.o: $(srcdir)/p/gpc.c $(CONFIG_H) multilib.h Makefile \ $(lang_specs_files) $(srcdir)/p/p-version.h specs.h $(CC) -DGPC $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(GPC_ALL_WARNINGS) $(INCLUDES) \ - $(DRIVER_DEFINES) -c `echo $(srcdir)/p/gpc.c | sed 's,^\./,,'` -o $@ + $(DRIVER_DEFINES) -Wno-error -c `echo $(srcdir)/p/gpc.c | sed 's,^\./,,'` -o $@ # We call this executable `xgpc' rather than `gpc' # to avoid confusion if the current directory is in the path @@ -576,12 +264,9 @@ gpc-cross$(exeext): xgpc$(exeext) cp xgpc$(exeext) gpc-cross$(exeext) gpc-run: $(srcdir)/p/script/gpc-run $(VERSION_FILENAME) - sed -e s/@version@/$(gpc_version)/ "$<" > "$@" || { rm -f "$@"; false; } + sed -e s/@version@/$(gpc_version)/ "$(srcdir)/p/script/gpc-run" > "$@" || { rm -f "$@"; false; } chmod a+x "$@" -$(srcdir)/p/doc/generated/gpc-run.1: $(srcdir)/p/script/gpc-run $(VERSION_FILENAME) - help2man -N "$<" | sed -e s/@version@/$(gpc_version)/ > "$@" || { rm -f "$@"; false; } - # Headers and flags for GPC specific files. GPC_GBE_H=$(CONFIG_H) system.h tree.h input.h rtl.h flags.h output.h expr.h \ except.h function.h convert.h toplev.h $(GPC_GCC_VERSION_H) @@ -598,7 +283,7 @@ ALL_GPC_GBE_FLAGS=$(ALL_CFLAGS) $(ALL_CP p/gpcpp.o: p/gpcpp.c p/p-version.h p/gpc-options.h p/lang-options.h \ $(CONFIG_H) system.h p/gpcpp.h - $(CC) -o $@ -c $(ALL_GPC_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_FLAGS) ${.ALLSRC:M*/gpcpp.c} # Language-specific object files for GPC and patched GNU Back End (GBE) # files (mostly language independent, but some parts require GPC specific @@ -610,26 +295,6 @@ GPC_OBJS=p/parse.o p/declarations.o p/ex p/stor-layout.o p/toplev.o p/tree.o p/stmt.o p/emit-rtl.o \ p/varasm.o p/version.o p/gpcpp.o p/plant.o $(GPC_OBJS_40) -# Exclude patched files from language-independent object file list. -# Not necessary for gcc-3 since for a library (libbackend.a), the linker does this automatically. -p/stamp-gbe: stamp-objlist Makefile - sed -e 's: ../: :g;\ - s: convert.o::g;\ - s: dbxout.o::g;\ - s: dwarf2out.o::g;\ - s: emit-rtl.o::g;\ - s: expr.o::g;\ - s: fold-const.o::g;\ - s: function.o::g;\ - s: integrate.o::g;\ - s: optabs.o::g;\ - s: stmt.o::g;\ - s: stor-layout.o::g;\ - s: toplev.o::g;\ - s: tree.o::g;\ - s: varasm.o::g;\ - s: version.o::g;' "$<" > "$@" || { rm -f "$@"; false; } - gpc1$(exeext): $(P) $(GPC_GCC_VERSION_DEPS) $(GPC_OBJS) $(LIBDEPS) @grep "@@ PATCHED FOR GPC 20060322 @@" $(srcdir)/stor-layout.c > /dev/null || \ { echo "*** There have been changes in the patch for GCC. Please start with a fresh"; \ @@ -639,131 +304,103 @@ gpc1$(exeext): $(P) $(GPC_GCC_VERSION_DE $(CC) $(ALL_GPC_FLAGS) $(LDFLAGS) -o $@ $(GPC_OBJS) $(GPC_GCC_VERSION_LINK) $(LIBS) $(EXTRA_LIBS) p/declarations.o: p/declarations.c $(P_H) - $(CC) -o $@ -c $(ALL_GPC_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_FLAGS) ${.ALLSRC:M*/declarations.c} p/expressions.o: p/expressions.c $(P_H) - $(CC) -o $@ -c $(ALL_GPC_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_FLAGS) ${.ALLSRC:M*/expressions.c} p/gpc-lex.o: p/gpc-lex.c $(srcdir)/p/pascal-lex.c p/gpcpp.h $(P_H) - $(CC) -o $@ -c $(ALL_GPC_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_FLAGS) ${.ALLSRC:M*/gpc-lex.c} p/handle-opts.c: $(srcdir)/p/opts.sum $(srcdir)/p/script/mk-handle-opts-c - $(srcdir)/p/script/mk-handle-opts-c $(srcdir)/p/opts.sum "$@" - -$(srcdir)/p/lang.opt: $(srcdir)/p/opts.sum $(srcdir)/p/script/mk-lang_opt - $(srcdir)/p/script/mk-lang_opt $(srcdir)/p/opts.sum "$@" + $(SHELL) $(srcdir)/p/script/mk-handle-opts-c $(srcdir)/p/opts.sum "$@" p/lang.o: p/lang.c $(P_H) p/handle-opts.c p/gpcpp.h - $(CC) -o $@ -c $(ALL_GPC_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_FLAGS) ${.ALLSRC:M*/lang.c} p/module.o: p/module.c $(P_H) p/p-version.h - $(CC) -o $@ -c $(ALL_GPC_FLAGS) -DTARGET_NAME=\"$(target_alias)\" $< + $(CC) -o $@ -c $(ALL_GPC_FLAGS) -DTARGET_NAME=\"$(target_alias)\" ${.ALLSRC:M*/module.c} p/objects.o: p/objects.c $(P_H) - $(CC) -o $@ -c $(ALL_GPC_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_FLAGS) ${.ALLSRC:M*/objects.c} p/options.o: p/options.c $(P_H) p/lang-options.h p/gpc-options.h p/p-version.h - $(CC) -o $@ -c $(ALL_GPC_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_FLAGS) ${.ALLSRC:M*/options.c} p/parse.o: $(srcdir)/p/parse.c $(P_H) - $(CC) -o $@ -c $(ALL_GPC_FLAGS) $(BIG_SWITCHFLAG) $< + $(CC) -o $@ -c $(ALL_GPC_FLAGS) $(BIG_SWITCHFLAG) $(srcdir)/p/parse.c p/plant.o: $(srcdir)/p/plant.c $(P_H) - $(CC) -o $@ -c $(ALL_GPC_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_FLAGS) $(srcdir)/p/plant.c p/predef.o: p/predef.c $(P_H) $(RTSSRCDIR)/constants.def - $(CC) -o $@ -c $(ALL_GPC_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_FLAGS) -std=gnu99 ${.ALLSRC:M*/predef.c} p/statements.o: p/statements.c $(P_H) $(RTSSRCDIR)/constants.def $(RTS_VERSION_FILENAME) - $(CC) -o $@ -c $(ALL_GPC_FLAGS) -DRTS_VERSION_CHECK="\"_p_GPC_RTS_VERSION_`cat $(RTSSRCDIR)/rts-version`\"" $< + $(CC) -o $@ -c $(ALL_GPC_FLAGS) -std=gnu99 -DRTS_VERSION_CHECK="\"_p_GPC_RTS_VERSION_`cat $(RTSSRCDIR)/rts-version`\"" ${.ALLSRC:M*/statements.c} p/typecheck.o: p/typecheck.c $(P_H) - $(CC) -o $@ -c $(ALL_GPC_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_FLAGS) ${.ALLSRC:M*/typecheck.c} p/types.o: p/types.c $(P_H) - $(CC) -o $@ -c $(ALL_GPC_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_FLAGS) ${.ALLSRC:M*/types.c} p/convert.o: convert.c $(GPC_BE_H) - $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) ${.ALLSRC:M*/convert.c} p/dbxout.o: dbxout.c $(GPC_BE_H) - $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) ${.ALLSRC:M*/dbxout.c} p/dwarf2out.o: dwarf2out.c $(GPC_BE_H) - $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) ${.ALLSRC:M*/dwarf2out.c} p/diagnostic.o: diagnostic.c $(GPC_BE_H) - $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) ${.ALLSRC:M*/diagnostic.c} p/emit-rtl.o: emit-rtl.c $(GPC_BE_H) - $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) ${.ALLSRC:M*/emit-rtl.c} p/expr.o: expr.c $(GPC_BE_H) - $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) ${.ALLSRC:M*/expr.c} p/fold-const.o: fold-const.c $(GPC_BE_H) - $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) ${.ALLSRC:M*/fold-const.c} p/function.o: function.c $(GPC_BE_H) - $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) ${.ALLSRC:M*/function.c} p/gimplify.o: gimplify.c $(GPC_BE_H) - $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) ${.ALLSRC:M*/gimplify.c} p/integrate.o: integrate.c $(GPC_BE_H) - $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) ${.ALLSRC:M*/integrate.c} p/optabs.o: optabs.c $(GPC_BE_H) - $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) ${.ALLSRC:M*/optabs.c} p/stmt.o: stmt.c $(GPC_BE_H) - $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) ${.ALLSRC:M*/stmt.c} p/stor-layout.o: stor-layout.c $(GPC_BE_H) - $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) ${.ALLSRC:M*/stor-layout.c} p/toplev.o: toplev.c $(GPC_BE_H) p/lang-options.h $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $(MAYBE_TARGET_DEFAULT) \ - $(MAYBE_USE_COLLECT2) -DTARGET_NAME=\"$(target_alias)\" $< + $(MAYBE_USE_COLLECT2) -DTARGET_NAME=\"$(target_alias)\" ${.ALLSRC:M*/toplev.c} p/tree.o: tree.c tree.def $(GPC_BE_H) - $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) ${.ALLSRC:M*/tree.c} p/varasm.o: varasm.c $(GPC_BE_H) - $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< + $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) ${.ALLSRC:M*/varasm.c} p/version.o: version.c $(GPC_BE_H) - $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< - -$(srcdir)/p/pascal-lex.c: $(srcdir)/p/pascal-lex.l - if $(GPC_LEX) --version | grep -q '2\.5\.4'; then \ - echo "GPC: flex 2.5.4 is very old, working around it" >&2; \ - grep -v '^%option noyy[arf]' "$<" | $(GPC_LEX) $(GPC_LEXFLAGS) -t - | \ - sed '/^typedef .* yy_size_t;$$/d;s/malloc/xmalloc/g;s/realloc/xrealloc/g' > "$@" || { rm -f "$@"; false; }; \ - else \ - cd $(srcdir)/p && $(GPC_LEX) $(GPC_LEXFLAGS) -opascal-lex.c pascal-lex.l; \ - fi - -$(srcdir)/p/parse.c $(srcdir)/p/parse.h: $(srcdir)/p/parse.y - cd $(srcdir)/p && $(BISON) $(BISONFLAGS) -o parse.c parse.y + $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) ${.ALLSRC:M*/version.c} pascal.utils: xgpc$(exeext) gpc1$(exeext) pascal.rts force - $(srcdir)/p/script/mkdir-p p/utils + mkdir -p p/utils srcdir=`cd $(srcdir) && pwd` && cd ./p/utils && $(MAKE) -f "$$srcdir/p/utils/Makefile" $(UTILS_FLAGS_TO_PASS) GCC_DIR="$$srcdir" all -# Let the RTS Makefile make its generated files. Use `force' here -# because we don't know their dependencies here. Use Makefile.in in -# RTS source directory, so this can be run from the GPC source directory. -# -# @@ I tried the following (so the RTS make is invoked only once, not once per -# RTS generated file), but it doesn't work -- when, e.g. rts/files.pas is -# modified, rts/gpc.pas is rebuilt, but doc/generated/gpcpas.texi (which -# depends on the latter) is not. Strange make ... :-( -- Frank -# $(RTS_GENERATED_FILES): rts-generated-files -# rts-generated-files: force -$(RTS_GENERATED_FILES): force - cd $(RTSSRCDIR) && $(MAKE) -f Makefile.in srcdir=. $(RTS_FLAGS_TO_PASS) generated-files - # The configuration of the Run Time System relies on an autoconf-type # configure, not a Cygnus-type one. It needs to be run *after* the # appropriate (cross-)compiler has been built, thus depend on GCC_PARTS. @@ -775,11 +412,11 @@ $(RTS_GENERATED_FILES): force # now it's only needed by rts/configure, hope that's not so important. p/rts/Makefile: $(GCC_PARTS) \ $(RTSSRCDIR)/Makefile.in $(RTSSRCDIR)/configure $(RTSSRCDIR)/rts-config.in - $(srcdir)/p/script/mkdir-p p/rts + mkdir -p p/rts src=`cd $(srcdir) && pwd` && \ cd ./p/rts && \ - $(RTS_COMPILERS) CONFIG_SITE=nonexisting-file \ - $$src/p/rts/configure --silent > /dev/null --srcdir=$$src/p/rts \ + $(RTS_COMPILERS) CONFIG_SITE=nonexisting-file GCC_NO_WERROR=1 \ + $(SHELL) $$src/p/rts/configure --srcdir=$$src/p/rts \ `if [ x$(WITH_SHARED) = xyes ]; then echo '--with-shared'; fi` pascal.rts: p/rts/Makefile xgpc$(exeext) gpc1$(exeext) @@ -792,142 +429,18 @@ pascal.all.cross: gpc-cross$(exeext) pas pascal.start.encap: pascal.rest.encap: pascal.rts pascal.utils -pascal.info: $(srcdir)/p/doc/info/gpc.info \ - $(srcdir)/p/doc/info/gpcs.info \ - $(srcdir)/p/doc/info/gpcs-de.info \ - $(srcdir)/p/doc/info/gpc-hr.info \ - $(srcdir)/p/doc/info/gpcs-hr.info \ - $(srcdir)/p/doc/info/gpc-es.info \ - $(srcdir)/p/doc/info/gpcs-es.info -pascal.dvi: gpc.dvi - -$(srcdir)/p/doc/info/gpc.info: $(GPC_TEXI_EN) - [ -d "$(srcdir)/p/doc/info" ] || $(srcdir)/p/script/mkdir-p "$(srcdir)/p/doc/info" - $(MAKEINFO_EN) -o $(srcdir)/p/doc/info/gpc.info gpc.texi - -$(srcdir)/p/doc/info/gpcs.info: $(GPC_TEXI_EN) - [ -d "$(srcdir)/p/doc/info" ] || $(srcdir)/p/script/mkdir-p "$(srcdir)/p/doc/info" - $(MAKEINFO_EN) --no-split -o $(srcdir)/p/doc/info/gpcs.info gpcs.texi - -$(srcdir)/p/doc/info/gpcs-de.info: $(GPC_TEXI_DE) - [ -d "$(srcdir)/p/doc/info" ] || $(srcdir)/p/script/mkdir-p "$(srcdir)/p/doc/info" - $(MAKEINFO_DE) --no-split -o $(srcdir)/p/doc/info/gpcs-de.info gpcs.texi - -$(srcdir)/p/doc/info/gpc-hr.info: $(GPC_TEXI_HR) - [ -d "$(srcdir)/p/doc/info" ] || $(srcdir)/p/script/mkdir-p "$(srcdir)/p/doc/info" - $(MAKEINFO_HR) -o $(srcdir)/p/doc/info/gpc-hr.info gpc.texi - -$(srcdir)/p/doc/info/gpcs-hr.info: $(GPC_TEXI_HR) - [ -d "$(srcdir)/p/doc/info" ] || $(srcdir)/p/script/mkdir-p "$(srcdir)/p/doc/info" - $(MAKEINFO_HR) --no-split -o $(srcdir)/p/doc/info/gpcs-hr.info gpcs.texi - -$(srcdir)/p/doc/info/gpc-es.info: $(GPC_TEXI_ES) - [ -d "$(srcdir)/p/doc/info" ] || $(srcdir)/p/script/mkdir-p "$(srcdir)/p/doc/info" - $(MAKEINFO_ES) -o $(srcdir)/p/doc/info/gpc-es.info gpc.texi - -$(srcdir)/p/doc/info/gpcs-es.info: $(GPC_TEXI_ES) - [ -d "$(srcdir)/p/doc/info" ] || $(srcdir)/p/script/mkdir-p "$(srcdir)/p/doc/info" - $(MAKEINFO_ES) --no-split -o $(srcdir)/p/doc/info/gpcs-es.info gpcs.texi - -gpc.dvi: $(GPC_TEXI_EN) - TEXINPUTS=$(srcdir)/p/doc:$(srcdir)/p/doc/images:$$TEXINPUTS \ - LANG=en_GB LC_ALL=en_GB MAKEINFO="$(MAKEINFO) $(MAKEINFOFLAGS) $(GPC_DOC_DIRS_EN)" \ - texi2dvi -t "$(GPC_PAGESIZE)" $(GPC_DOC_DIRS_EN) -b $(srcdir)/p/doc/en/gpc.texi > gpc.to # TeX is way too noisy ... - if grep -i overfull gpc.to gpc.log; then false; else true; fi - cp $(srcdir)/p/doc/images/GnuPascal.eps . - -gpc.ps: gpc.dvi - dvips -q -o gpc.ps gpc.dvi - -# pdftex uses TEXPSHEADERS to search for GnuPascal.pdf -- some versions use TEXINPUTS now ... -gpc.pdf: $(GPC_TEXI_EN) - srcdir=`cd $(srcdir) && pwd` && \ - TEXINPUTS=$$srcdir/p/doc:$$srcdir/p/doc/images:$$TEXINPUTS \ - TEXPSHEADERS=$$srcdir/p/doc/images:$$TEXPSHEADERS \ - LANG=en_GB LC_ALL=en_GB MAKEINFO="$(MAKEINFO) $(MAKEINFOFLAGS) $(GPC_DOC_DIRS_EN)" \ - texi2pdf -t "$(GPC_PAGESIZE)" $(GPC_DOC_DIRS_EN) -b $(srcdir)/p/doc/en/gpc.texi > gpc.po # TeX is way too noisy ... - if grep -i overfull gpc.po gpc.log; then false; else true; fi - -gpc.txt: $(GPC_TEXI_EN) - $(MAKEINFO_EN) --no-headers --force -o "$@" gpc.texi - -HTML_DIR=./p/html - -p/stamp-gpc-html: $(GPC_TEXI_EN) $(GPC_TEXI_DE) $(GPC_TEXI_HR) $(GPC_TEXI_ES) - $(srcdir)/p/script/mkdir-p $(HTML_DIR) - -rm -rf $(HTML_DIR)/gpc $(HTML_DIR)/gpc-hr $(HTML_DIR)/gpc-es - $(MAKEINFO_EN) --html --no-split -o $(HTML_DIR)/gpcs-en.html $(srcdir)/p/doc/en/gpcs.texi - $(MAKEINFO_DE) --html --no-split -o $(HTML_DIR)/gpcs-de.html $(srcdir)/p/doc/de/gpcs.texi - $(MAKEINFO_HR) --html --no-split -o $(HTML_DIR)/gpcs-hr.html $(srcdir)/p/doc/hr/gpcs.texi - $(MAKEINFO_ES) --html --no-split -o $(HTML_DIR)/gpcs-es.html $(srcdir)/p/doc/es/gpcs.texi - $(MAKEINFO_EN) --html $(GPC_DOC_DIRS_EN) -o $(HTML_DIR)/gpc $(srcdir)/p/doc/en/gpc.texi - $(MAKEINFO_HR) --html $(GPC_DOC_DIRS_HR) -o $(HTML_DIR)/gpc-hr $(srcdir)/p/doc/hr/gpc.texi - $(MAKEINFO_ES) --html $(GPC_DOC_DIRS_ES) -o $(HTML_DIR)/gpc-es $(srcdir)/p/doc/es/gpc.texi - cd $(HTML_DIR) && tar --owner=root --group=root --mode=u=rwX,go=rX --use-compress-program=bzip2 -cf gpc-html.tar.bz2 gpc gpcs-en.html - cd $(HTML_DIR) && tar --owner=root --group=root --mode=u=rwX,go=rX --use-compress-program=bzip2 -cf gpc-hr-html.tar.bz2 gpc-hr gpcs-hr.html - cd $(HTML_DIR) && tar --owner=root --group=root --mode=u=rwX,go=rX --use-compress-program=bzip2 -cf gpc-es-html.tar.bz2 gpc-es gpcs-es.html - $(STAMP) "$@" - -pascal.html: p/stamp-pascal-html -# @@ This rule also depends on $(srcdir)/p/doc/images/* and $(srcdir)/p/demos/*, -# but wildcards aren't allowed here and I don't want to put the whole list of files -# there. So, you'll have to force rebuilding when you only change one of those. -p/stamp-pascal-html: p/stamp-gpc-html gpc.dvi gpc.ps gpc.pdf \ - $(srcdir)/p/doc/languages \ - $(srcdir)/p/doc/en/index.html.in $(srcdir)/p/doc/hr/index.html.in $(srcdir)/p/doc/es/index.html.in \ - $(srcdir)/p/doc/en/homepage.def $(srcdir)/p/doc/hr/homepage.def $(srcdir)/p/doc/es/homepage.def \ - $(srcdir)/p/COPYING $(srcdir)/p/COPYING.LIB $(srcdir)/p/COPYING.DEMO $(VERSION_FILENAME) - cp -f $(srcdir)/p/COPYING $(srcdir)/p/COPYING.LIB $(srcdir)/p/COPYING.DEMO gpc.dvi gpc.ps gpc.pdf $(HTML_DIR) - $(srcdir)/p/script/mkdir-p $(HTML_DIR)/images $(HTML_DIR)/demos - for f in $(srcdir)/p/doc/images/*; do \ - case "$$f" in \ - */CVS|*/README) : ;; \ - *) cp -f "$$f" $(HTML_DIR)/images || exit 1;; \ - esac; \ - done - for f in $(srcdir)/p/demos/*; do \ - case "$$f" in \ - */CVS|*/README) : ;; \ - *) cp -f "$$f" $(HTML_DIR)/demos || exit 1;; \ - esac; \ - done - rm -f $(HTML_DIR)/gpc.dvi.bz2 $(HTML_DIR)/gpc.ps.bz2 - bzip2 $(HTML_DIR)/gpc.dvi $(HTML_DIR)/gpc.ps - { echo 'RedirectMatch (^/$$) http://www.gnu-pascal.de/gpc/h-index.html'; \ - echo 'RedirectMatch (^/index.orig.html$) http://www.gnu-pascal.de/gpc/h-index.html'; \ - echo 'RedirectMatch (^/todo.html$$) http://www.gnu-pascal.de/gpc/h-todo.html'; } > $(HTML_DIR)/.htaccess - echo '' > $(HTML_DIR)/index.html - echo '' > $(HTML_DIR)/todo.html - $(srcdir)/p/script/make-homepage $(gpc_version) $(srcdir)/p/doc $(HTML_DIR) en gpc - $(srcdir)/p/script/make-homepage $(gpc_version) $(srcdir)/p/doc $(HTML_DIR) hr gpc-hr - $(srcdir)/p/script/make-homepage $(gpc_version) $(srcdir)/p/doc $(HTML_DIR) es gpc-es - $(srcdir)/p/script/make-homepage-gpcs $(srcdir)/p/doc $(HTML_DIR) en - $(srcdir)/p/script/make-homepage-gpcs $(srcdir)/p/doc $(HTML_DIR) hr - $(srcdir)/p/script/make-homepage-gpcs $(srcdir)/p/doc $(HTML_DIR) es - $(srcdir)/p/script/make-homepage-gpcs $(srcdir)/p/doc $(HTML_DIR) de - chmod -R go+rX $(HTML_DIR) - $(STAMP) "$@" - -pascal.html-dist: p/stamp-pascal-html - r=$(gpc_version) && cd ./p && tar $(GPC_TARFLAGS) ../gpc-html-$$r.tar.gz html - # Install hooks: # gpc1 is installed elsewhere as part of $(COMPILERS). -pascal.install-info-man-dirs: - for directory in $(infodir) $(man1dir); do \ - $(srcdir)/p/script/mkdir-p -m a+rx $(DESTDIR)$$directory || exit 1; \ - done - pascal.install-dir: - for directory in $(prefix) $(bindir) $(unitsubdir) $(libsubdir)/include $(LIBEXECSUBDIR) \ + for directory in $(prefix) $(bindir) $(unitsubdir) $(LIBEXECSUBDIR) \ $(infodir) $(p_inst_docdir) $(p_inst_demodir) $(p_inst_docdemodir) $(man1dir); do \ - $(srcdir)/p/script/mkdir-p -m a+rx $(DESTDIR)$$directory || exit 1; \ + mkdir -p -m 0755 $(DESTDIR)$$directory || exit 1; \ done # Install the driver program as $(target)-gpc # and also as either gpc (if native) or $(tooldir)/bin/gpc. -pascal.install-common: pascal.install-dir xgpc$(exeext) gpc-run +pascal.install-common: pascal.install-dir if [ -f gpc-cross$(exeext) ]; then \ rm -f $(DESTDIR)$(bindir)/$(GPC_CROSS_NAME)$(exeext); \ $(INSTALL_PROGRAM) gpc-cross$(exeext) $(DESTDIR)$(bindir)/$(GPC_CROSS_NAME)$(exeext) && \ @@ -941,43 +454,41 @@ pascal.install-common: pascal.install-di $(INSTALL_PROGRAM) gpc-run $(DESTDIR)$(bindir)/gpc-run chmod a+x $(DESTDIR)$(bindir)/gpc-run -pascal.install-utils: pascal.utils +pascal.install-utils: srcdir=`cd $(srcdir) && pwd` && \ bindir=`cd "$(DESTDIR)$(bindir)"; pwd` && \ man1dir=`cd "$(DESTDIR)$(man1dir)"; pwd` && \ cd ./p/utils && $(MAKE) -f "$$srcdir/p/utils/Makefile" $(UTILS_FLAGS_TO_PASS) GCC_DIR="$$srcdir" bindir="$$bindir" man1dir="$$man1dir" install -pascal.install-lib: pascal.install-dir pascal.rts +pascal.install-lib: pascal.install-dir if [ -f libgpc.a ]; then \ - rm -f $(DESTDIR)$(libsubdir)/libgpc.a; \ - $(INSTALL_DATA) libgpc.a $(DESTDIR)$(libsubdir)/libgpc.a && \ - chmod a-x $(DESTDIR)$(libsubdir)/libgpc.a || exit 1; \ - $(RANLIB_FOR_TARGET) $(DESTDIR)$(libsubdir)/libgpc.a 2> /dev/null || true; \ + rm -f $(DESTDIR)$(GPCALIBDIR)/libgpc.a; \ + $(INSTALL_DATA) libgpc.a $(DESTDIR)$(GPCALIBDIR)/libgpc.a && \ + chmod a-x $(DESTDIR)$(GPCALIBDIR)/libgpc.a || exit 1; \ + $(RANLIB_FOR_TARGET) $(DESTDIR)$(GPCALIBDIR)/libgpc.a 2> /dev/null || true; \ fi for f in .. $(GPC_EXTRA_INSTALL_LIBS); do \ if [ x"$$f" != x.. ]; then \ - $(INSTALL_DATA) "$$f" "$(DESTDIR)$(libsubdir)/`echo "$$f" | sed -e 's,.*/,,'`" || exit 1; \ + $(INSTALL_DATA) "$$f" "$(DESTDIR)$(GPCALIBDIR)/`echo "$$f" | sed -e 's,.*/,,'`" || exit 1; \ fi; \ done if [ x$(WITH_SHARED) = xyes ] && [ -f $(GPCSOLIBNAME) ]; then \ - $(srcdir)/p/script/mkdir-p -m a+rx $(DESTDIR)$(prefix)/$(GPCSOLIBDIR) && \ - rm -f $(DESTDIR)$(libsubdir)/$(GPCSOLIBSHORTNAME) $(DESTDIR)$(prefix)/$(GPCSOLIBDIR)/$(GPCSOLIBNAME); \ - $(INSTALL_DATA) $(GPCSOLIBNAME) $(DESTDIR)$(prefix)/$(GPCSOLIBDIR)/$(GPCSOLIBNAME) && \ - chmod a-x $(DESTDIR)$(prefix)/$(GPCSOLIBDIR)/$(GPCSOLIBNAME) && \ - $(SYMLINK) $(prefix)/$(GPCSOLIBDIR)/$(GPCSOLIBNAME) $(DESTDIR)$(libsubdir)/$(GPCSOLIBSHORTNAME); \ + mkdir -p -m a+rx $(DESTDIR)$(GPCSOLIBDIR) && \ + $(INSTALL_DATA) $(GPCSOLIBNAME) $(DESTDIR)$(GPCSOLIBDIR)/$(GPCSOLIBNAME) && \ + chmod a-x $(DESTDIR)$(GPCSOLIBDIR)/$(GPCSOLIBNAME); \ else \ true; \ fi -pascal.install-units: pascal.install-dir $(srcdir)/p/units/crtc.h $(RTSSRCDIR)/gpc.pas +pascal.install-units: pascal.install-dir $(INSTALL_DATA) p/rts/rts-config.inc $(DESTDIR)$(unitsubdir)/rts-config.inc $(INSTALL_DATA) $(RTSSRCDIR)/gpc.pas $(DESTDIR)$(unitsubdir)/gpc.pas chmod a-x $(DESTDIR)$(unitsubdir)/rts-config.inc $(DESTDIR)$(unitsubdir)/gpc.pas for f in `cd $(srcdir)/p/units && echo *`; do \ if [ "$$f" = gpc-in-c.h ]; then \ - rm -f $(DESTDIR)$(libsubdir)/include/"$$f"; \ - $(INSTALL_DATA) $(srcdir)/p/units/"$$f" $(DESTDIR)$(libsubdir)/include/"$$f" || exit 1; \ - chmod a-x $(DESTDIR)$(libsubdir)/include/"$$f"; \ + rm -f $(DESTDIR)$(prefix)/include/"$$f"; \ + $(INSTALL_DATA) $(srcdir)/p/units/"$$f" $(DESTDIR)$(prefix)/include/"$$f" || exit 1; \ + chmod a-x $(DESTDIR)$(prefix)/include/"$$f"; \ elif [ "$$f" != CVS ]; then \ rm -f $(DESTDIR)$(unitsubdir)/"$$f"; \ $(INSTALL_DATA) $(srcdir)/p/units/"$$f" $(DESTDIR)$(unitsubdir)/"$$f" || exit 1; \ @@ -985,99 +496,11 @@ pascal.install-units: pascal.install-dir fi; \ done -# AIX has tight command-line length limits which would be exceeded -# in `rm -f $(p_inst_docdemodir)/*' or `chmod a-x $(p_inst_docdemodir)/*', -# probably also (soon) in `cd ./p/docdemos && echo *' -pascal.install-doc: $(PASCAL_INSTALL_DOC) -pascal.real-install-doc: pascal.install-dir $(srcdir)/p/README \ - $(srcdir)/p/NEWS $(srcdir)/p/FAQ $(srcdir)/p/AUTHORS \ - $(srcdir)/p/COPYING $(srcdir)/p/COPYING.LIB $(srcdir)/p/COPYING.DEMO $(srcdir)/p/test/README pascal.docdemos - for f in README NEWS INSTALL FAQ AUTHORS COPYING COPYING.LIB COPYING.DEMO; do \ - rm -f "$(DESTDIR)$(p_inst_docdir)/$$f"; \ - $(INSTALL_DATA) "$(srcdir)/p/$$f" "$(DESTDIR)$(p_inst_docdir)/$$f" || exit 1; \ - chmod a-x "$(DESTDIR)$(p_inst_docdir)/$$f"; \ - done - rm -f "$(DESTDIR)$(p_inst_docdir)/BUGS" - $(INSTALL_DATA) "$(srcdir)/p/test/README" "$(DESTDIR)$(p_inst_docdir)/BUGS" - for f in `cd "$(srcdir)/p/demos" && echo *`; do \ - if [ "$$f" != CVS ]; then \ - rm -f "$(DESTDIR)$(p_inst_demodir)/$$f"; \ - $(INSTALL_DATA) "$(srcdir)/p/demos/$$f" "$(DESTDIR)$(p_inst_demodir)/$$f" || exit 1; \ - fi \ - done - chmod a-x "$(DESTDIR)$(p_inst_docdir)/BUGS" "$(DESTDIR)$(p_inst_demodir)"/* - if [ "`cd ./p/docdemos && echo a*`" != "a*" ]; then \ - (cd "$(DESTDIR)$(p_inst_docdemodir)"; for f in *; do rm -f "$$f"; done) && \ - for f in `cd ./p/docdemos && echo *`; do \ - rm -f "$(DESTDIR)$(p_inst_docdemodir)/$$f"; \ - $(INSTALL_DATA) "p/docdemos/$$f" "$(DESTDIR)$(p_inst_docdemodir)/$$f" && \ - chmod a-x "$(DESTDIR)$(p_inst_docdemodir)/$$f" || exit 1; \ - done; \ - fi - -pascal.install-info: pascal.install-info-man-dirs pascal.info - rm -f $(DESTDIR)$(infodir)/gpc.info* $(DESTDIR)$(infodir)/gpcs.info* $(DESTDIR)$(infodir)/gpcs-de.info* $(DESTDIR)$(infodir)/gpcs-hr.info* $(DESTDIR)$(infodir)/gpcs-es.info* - for f in `cd $(srcdir)/p/doc/info && echo gpc.info* gpcs*.info*`; do \ - $(INSTALL_DATA) $(srcdir)/p/doc/info/$$f $(DESTDIR)$(infodir)/$$f || exit 1; \ - done - chmod a-x $(DESTDIR)$(infodir)/gpc.info* $(DESTDIR)$(infodir)/gpcs.info* $(DESTDIR)$(infodir)/gpcs-de.info* $(DESTDIR)$(infodir)/gpcs-hr.info* $(DESTDIR)$(infodir)/gpcs-es.info* - -pascal.install-man: pascal.install-info-man-dirs $(srcdir)/p/doc/en/gpc.1 $(srcdir)/p/doc/generated/gpc-run.1 - -if [ -f gpc1$(exeext) ]; then \ - if [ -f gpc-cross$(exeext) ]; then \ - rm -f $(DESTDIR)$(man1dir)/$(GPC_CROSS_NAME)$(man1ext); \ - $(INSTALL_DATA) $(srcdir)/p/doc/en/gpc.1 $(DESTDIR)$(man1dir)/$(GPC_CROSS_NAME)$(man1ext); \ - chmod a-x $(DESTDIR)$(man1dir)/$(GPC_CROSS_NAME)$(man1ext); \ - else \ - rm -f $(DESTDIR)$(man1dir)/$(GPC_INSTALL_NAME)$(man1ext); \ - $(INSTALL_DATA) $(srcdir)/p/doc/en/gpc.1 $(DESTDIR)$(man1dir)/$(GPC_INSTALL_NAME)$(man1ext); \ - chmod a-x $(DESTDIR)$(man1dir)/$(GPC_INSTALL_NAME)$(man1ext); \ - fi; \ - else \ - true; \ - fi - rm -f $(DESTDIR)$(man1dir)/gpc-run$(man1ext) - $(INSTALL_DATA) $(srcdir)/p/doc/generated/gpc-run.1 $(DESTDIR)$(man1dir)/gpc-run$(man1ext) - chmod a-x $(DESTDIR)$(man1dir)/gpc-run$(man1ext) - -pascal.install-hr: pascal.install-info-hr pascal.install-man-hr - -pascal.install-info-hr: pascal.install-info-man-dirs pascal.info - rm -f $(DESTDIR)$(infodir)/gpc-hr.info* $(DESTDIR)$(infodir)/gpcs-hr.info* - for f in `cd $(srcdir)/p/doc/info && echo gpc-hr.info* gpcs-hr.info*`; do \ - $(INSTALL_DATA) $(srcdir)/p/doc/info/$$f $(DESTDIR)$(infodir)/$$f || exit 1; \ - done - chmod a-x $(DESTDIR)$(infodir)/gpc-hr.info* $(DESTDIR)$(infodir)/gpcs-hr.info* - -pascal.install-man-hr: pascal.install-info-man-dirs $(srcdir)/p/doc/hr/gpc.1 - -if [ -f gpc1$(exeext) ]; then \ - if [ -f gpc-cross$(exeext) ]; then \ - rm -f $(DESTDIR)$(man1dir)/$(GPC_CROSS_NAME)-hr$(man1ext); \ - $(INSTALL_DATA) $(srcdir)/p/doc/hr/gpc.1 $(DESTDIR)$(man1dir)/$(GPC_CROSS_NAME)-hr$(man1ext); \ - chmod a-x $(DESTDIR)$(man1dir)/$(GPC_CROSS_NAME)-hr$(man1ext); \ - else \ - rm -f $(DESTDIR)$(man1dir)/$(GPC_INSTALL_NAME)-hr$(man1ext); \ - $(INSTALL_DATA) $(srcdir)/p/doc/en/gpc.1 $(DESTDIR)$(man1dir)/$(GPC_INSTALL_NAME)-hr$(man1ext); \ - chmod a-x $(DESTDIR)$(man1dir)/$(GPC_INSTALL_NAME)-hr$(man1ext); \ - fi; \ - else \ - true; \ - fi - -pascal.install-es: pascal.install-info-es - -pascal.install-info-es: pascal.install-info-man-dirs pascal.info - rm -f $(DESTDIR)$(infodir)/gpc-es.info* $(DESTDIR)$(infodir)/gpcs-es.info* - for f in `cd $(srcdir)/p/doc/info && echo gpc-es.info* gpcs-es.info*`; do \ - $(INSTALL_DATA) $(srcdir)/p/doc/info/$$f $(DESTDIR)$(infodir)/$$f || exit 1; \ - done - chmod a-x $(DESTDIR)$(infodir)/gpc-es.info* $(DESTDIR)$(infodir)/gpcs-es.info* - pascal.install-compiler34: # Install gpc1 et.al. # Do *not* overwrite files if they exist. -pascal.install-compiler: pascal.install-dir pascal +pascal.install-compiler: pascal.install-dir for file in gpc1$(exeext); do \ if [ -f $$file ]; then \ rm -f $(DESTDIR)$(LIBEXECSUBDIR)/$$file; \ @@ -1102,8 +525,7 @@ pascal.install-compiler: pascal.install- fi; exit 0 pascal.install-normal: pascal.install-common pascal.install-compiler$(GPC_GCC_34_) \ - pascal.install-utils pascal.install-lib pascal.install-man \ - pascal.install-info pascal.install-units pascal.install-doc + pascal.install-utils pascal.install-lib pascal.install-units # This target will install GPC into an existing GCC installation, # without overwriting existing files. @@ -1114,14 +536,6 @@ pascal.install-normal: pascal.install-co # in pascal.install-normal for gcc-3.4, it would otherwise be missing here. pascal.install: pascal.install-normal pascal.install-compiler; @true -pascal.install-with-gcc: $(INSTALL_HEADERS) pascal.install $(INSTALL_LIBGCC) - for file in $(GCC_PASSES); do \ - if [ x"$$file" != x"xgcc$(exeext)" ]; then \ - rm -f $(DESTDIR)$(libsubdir)/$$file; \ - $(INSTALL_PROGRAM) $$file $(DESTDIR)$(libsubdir)/$$file || exit 1; \ - fi; \ - done; exit 0 - pascal.uninstall: -rm -rf $(DESTDIR)$(bindir)/$(GPC_INSTALL_NAME)$(exeext) -rm -rf $(DESTDIR)$(bindir)/$(GPC_CROSS_NAME)$(exeext) @@ -1131,41 +545,6 @@ pascal.uninstall: -rm -rf $(DESTDIR)$(man1dir)/$(GPC_CROSS_NAME)-hr$(man1ext) -rm -rf $(DESTDIR)$(man1dir)/gpc-run$(man1ext) -pascal.bindist: pascal - tmp_base=`pwd`/tmp && \ - rm -rf $$tmp_base && \ - $(MAKE) pascal.install $(GPC_INSTALL_FLAGS_TO_PASS) DESTDIR=$$tmp_base/ && \ - version=$(gpc_version) && (cd $$tmp_base && $(MAKEGPCBINDIST) *) && \ - rm -rf $$tmp_base - -pascal.bindist-with-gcc: pascal - tmp_base=`pwd`/tmp && \ - rm -rf $$tmp_base && \ - $(MAKE) pascal.install-with-gcc $(GPC_INSTALL_FLAGS_TO_PASS) DESTDIR=$$tmp_base/ && \ - version=$(gpc_version) && (cd $$tmp_base && $(MAKEGPCWITHGCCBINDIST) *) && \ - rm -rf $$tmp_base - -# Test targets - -CHECK_TARGETS += check-pascal # @@ Is this meant to be done like this? - -check-pascal pascal.check: pascal.check-dejagnu -pascal.check-dejagnu pascal.check-short pascal.check-long pascal.check-long-nolog: p/stamp-test-Makefile - cd ./p/test && $(MAKE) $(TEST_FLAGS_TO_PASS) "$@" - -p/stamp-test-Makefile: $(srcdir)/p/test/Makefile - $(srcdir)/p/script/mkdir-p p/test - { \ - echo "# Automatically generated from $(srcdir)/p/test/Makefile."; \ - echo "# Don't change manually."; \ - echo ""; \ - sed -e "s,^srcdir *=.*,srcdir=`cd $(srcdir)/p/test && pwd`,; \ - s,^PC *=.*,PC=`pwd`/xgpc -B`pwd`/,; \ - s,^TEST_PATHS *=.*,TEST_PATHS=-I ../rts --no-unit-path --unit-path=`cd $(srcdir)/p/units && pwd`," \ - $(srcdir)/p/test/Makefile; \ - } > p/test/Makefile || { rm -f p/test/Makefile; false; } - $(STAMP) "$@" - # Clean hooks: A lot of the ancillary files are deleted by the main makefile. # We just have to delete files specific to us. @@ -1213,7 +592,7 @@ pascal.maintainer-clean: pascal.extracle # Stage hooks: The main makefile has already created stage?/p. -GPCSTAGESTUFF=p/*.o p/stamp-gbe +GPCSTAGESTUFF=p/*.o RTSSTAGESTUFF=p/rts/*.o p/rts/*.lo p/rts/*.gpi p/rts/*.gpd \ p/rts/config.cache p/rts/config.log p/rts/config.status p/rts/Makefile \ @@ -1221,19 +600,19 @@ RTSSTAGESTUFF=p/rts/*.o p/rts/*.lo p/rts p/rts/stamp-error-gpi pascal.stage1: - $(srcdir)/p/script/mkdir-p stage1/p/rts + mkdir -p stage1/p/rts -mv $(GPCSTAGESTUFF) stage1/p -mv $(RTSSTAGESTUFF) stage1/p/rts pascal.stage2: - $(srcdir)/p/script/mkdir-p stage2/p/rts + mkdir -p stage2/p/rts -mv $(GPCSTAGESTUFF) stage2/p -mv $(RTSSTAGESTUFF) stage2/p/rts pascal.stage3: - $(srcdir)/p/script/mkdir-p stage3/p/rts + mkdir -p stage3/p/rts -mv $(GPCSTAGESTUFF) stage3/p -mv $(RTSSTAGESTUFF) stage3/p/rts pascal.stage4: - $(srcdir)/p/script/mkdir-p stage4/p/rts + mkdir -p stage4/p/rts -mv $(GPCSTAGESTUFF) stage4/p -mv $(RTSSTAGESTUFF) stage4/p/rts pascal.stageprofile: stageprofile-start @@ -1241,35 +620,18 @@ pascal.stageprofile: stageprofile-start pascal.stagefeedback: stageprofile-start -mv p/*$(objext) stagefeedback/p -# Maintenance hooks: +pascal.man: + +pascal.info: -# This target creates the files that can be rebuilt, but go in the -# distribution anyway. It then copies the files to the distdir directory. -# This will fail on systems that don't support symlinks. Tough luck ... -# (The symlinks will disappear after integration into GCC, anyway.) -pascal.distdir: pascal.extraclean pascal.generated-files - $(srcdir)/p/script/mkdir-p tmp/p - dest=`cd ./tmp/p && pwd` && \ - cd $(srcdir)/p && \ - for file in `find . -type d -print`; do \ - script/mkdir-p $$dest/$$file || exit 1; \ - done && \ - for file in `find . -type f -print`; do \ - ln $$file $$dest/$$file > /dev/null 2>&1 || cp $$file $$dest/$$file || exit 1; \ - done && \ - for file in `find . -type l -print`; do \ - ln -s `ls -l $$file | sed -e 's/.*-> *//'` $$dest/$$file || exit 1; \ - done +pascal.dvi: + +pascal.install-man: + +pascal.install-info: + +pascal.install-dvi: -pascal.dist: pascal.distdir - mv tmp gpc-$(gpc_version) - tar $(GPC_TARFLAGS) gpc-$(gpc_version).tar.gz gpc-$(gpc_version) - rm -rf gpc-$(gpc_version) - -# requires GNU tar -pascal.testsuite-dist: $(srcdir)/p/test/README - dest=`pwd` && cd $(srcdir) && \ - tar --owner=root --group=root --mode=u=rwX,go=rX \ - --use-compress-program=bzip2 -cf "$$dest"/gpc-test-$(gpc_version).tar.bz2 p/test +pascal.distdir: force: Index: gcc/p/config-lang.in =================================================================== RCS file: /cvs/gcc/gcc/p/config-lang.in,v retrieving revision 1.1.111.3 retrieving revision 1.4 diff -u -p -r1.1.111.3 -r1.4 --- gcc/p/config-lang.in 27 Mar 2006 11:51:05 -0000 1.1.111.3 +++ gcc/p/config-lang.in 27 Mar 2006 11:58:56 -0000 1.4 @@ -1,3 +1,4 @@ +# $MirOS: gcc/gcc/p/config-lang.in,v 1.4 2006/03/27 11:58:56 tg Exp $ # Top level configure fragment for GNU Pascal. # # Copyright (C) 1994-2005 Free Software Foundation, Inc. @@ -28,10 +29,6 @@ compilers="gpc1\$(exeext)" stagestuff="gpc\$(exeext) gpc-cross\$(exeext) gpc1\$(exeext) gpcpp\$(exeext) libgpc.a" gtfiles="\$(srcdir)/p/gpc.h \$(srcdir)/p/declarations.c \$(srcdir)/p/module.c \$(srcdir)/p/predef.c \$(srcdir)/p/plant.c" -#echo "in p/config-lang.in" -#echo "srcdir=$srcdir" -#echo "pwd=`pwd`" - ( if [ -f "$srcdir/version.c" ]; then MY_SRCDIR="$srcdir" @@ -102,37 +99,6 @@ else echo "/* empty */" > "$gcc_version_h" fi -if echo $version | grep '^2\.[89]' > /dev/null || echo $version | grep '^3\.[1-2]' > /dev/null; then - echo "*** Detected GCC version $mainversion." >&2 - echo "*** Using GPC with 2.x or 3.2.x backends is depreciated." >&2 - echo "*** In the future support for those backends will be dropped." >&2 - echo "*** We encourage you to try GPC based on gcc 3.3.x or gcc 3.4.x" >&2 - echo "***" >&2 - echo "*** Press ENTER to continue, Ctrl-C to abort." >&2 - echo "***" >&2 - read junk -fi - -for x in 2.95.1 2.95.2 2.95.3 2.95.3-5 2.95.3-6 2.95.3-8 2.95.4; do - if [ ! -r "$srcdir/p/diffs/gcc-$x.diff" ]; then - (cd "$srcdir/p/diffs"; ln -s "gcc-2.95.diff" "gcc-$x.diff") - fi -done -for x in 3.2.2 3.2.3; do - if [ ! -r "$srcdir/p/diffs/gcc-$x.diff" ]; then - (cd "$srcdir/p/diffs"; ln -s "gcc-3.2.1.diff" "gcc-$x.diff") - fi -done -if [ ! -r "$srcdir/p/diffs/gcc-3.3.6.diff" ]; then - (cd "$srcdir/p/diffs"; ln -s "gcc-3.3.5.diff" "gcc-3.3.6.diff") -fi -if [ ! -r "$srcdir/p/diffs/gcc-3.4.5.diff" ]; then - (cd "$srcdir/p/diffs"; ln -s "gcc-3.4.4.diff" "gcc-3.4.5.diff") -fi -if [ ! -r "$srcdir/p/diffs/gcc-3.4.6.diff" ]; then - (cd "$srcdir/p/diffs"; ln -s "gcc-3.4.4.diff" "gcc-3.4.6.diff") -fi - if grep "@@ PATCHED FOR GPC 20060322 @@" "$srcdir/stor-layout.c" > /dev/null; then : elif grep "@@ PATCHED FOR GPC" "$srcdir/stor-layout.c" > /dev/null; then @@ -142,43 +108,8 @@ elif grep "@@ PATCHED FOR GPC" "$srcdir/ echo "" >&2 exit 1 else - patchfile="p/diffs/gcc-$mainversion.diff" - if [ ! -r "$srcdir/$patchfile" ]; then - echo "" >&2 - echo "***" >&2 echo "*** Detected GCC version $mainversion." >&2 - echo "*** This version of GPC requires one of the following versions of the GCC" >&2 - echo "*** sources to build:" >&2 - echo "***" >&2 - ls "$srcdir"/p/diffs/gcc-*.diff | sed -e 's/^.*\/p\/diffs\/gcc-/*** /' -e 's/\.diff//' >&2 - echo "***" >&2 - echo "*** (You can try to patch GCC manually by changing to the directory" >&2 - echo "*** `cd "$srcdir"; pwd`," >&2 - echo "*** typing a command like \`patch -p1 < p/diffs/gcc-.diff' and patching" >&2 - echo "*** possible rejects by hand before you run the configure script again.)" >&2 - echo "***" >&2 echo >&2 exit 1 - fi - echo "" >&2 - echo "***" >&2 - echo "*** Detected GCC version $mainversion." >&2 - echo "*** This version of GPC requires a patch to GCC to build with" >&2 - echo "*** GCC version $mainversion." >&2 - echo "*** This patch will now be applied." >&2 - echo "*** Press ENTER to continue, Ctrl-C to abort." >&2 - echo "***" >&2 - read junk - if [ $gcc281 = y ]; then - (cd "$srcdir"; patch -s -p1 < "$patchfile" || exit 1) - else - (cd "$srcdir/.."; patch -s -p0 < "gcc/$patchfile" || exit 1) - fi - # gcc-2's configure expects this. Since it's already running, patching it - # will not stop it from requiring it (only for future runs). - if [ $gcc3 = n ] && [ ! -r "$srcdir/p/Makefile.in" ]; then - echo "*** Creating dummy $srcdir/p/Makefile.in" - echo "# empty" > "$srcdir/p/Makefile.in" - fi fi ) || exit 1 Index: gcc/p/expressions.c =================================================================== RCS file: /cvs/gcc/gcc/p/expressions.c,v retrieving revision 1.1.111.3 retrieving revision 1.4 diff -u -p -r1.1.111.3 -r1.4 --- gcc/p/expressions.c 27 Mar 2006 11:51:04 -0000 1.1.111.3 +++ gcc/p/expressions.c 13 Aug 2011 22:19:49 -0000 1.4 @@ -247,7 +247,7 @@ build_range_check (tree min, tree max, t NULL_TREE), expr), expr)); return t; #else - int side_effects = TREE_SIDE_EFFECTS (expr); + int side_effects __attribute__((unused)) = TREE_SIDE_EFFECTS (expr); tree cond, tv, t; tree tmpvar = #ifdef GCC_4_0 @@ -2688,7 +2688,7 @@ build_binary_op (enum tree_code code, tr != COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (type1))) pedwarn ("comparison of complete and incomplete pointers"); else if (pedantic && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE) - warning ("ordered comparision of pointers to routines"); + warning ("ordered comparison of pointers to routines"); } else { Index: gcc/p/gpc-lex.c =================================================================== RCS file: /cvs/gcc/gcc/p/gpc-lex.c,v retrieving revision 1.1.111.3 retrieving revision 1.6 diff -u -p -r1.1.111.3 -r1.6 --- gcc/p/gpc-lex.c 27 Mar 2006 11:51:05 -0000 1.1.111.3 +++ gcc/p/gpc-lex.c 2 Apr 2017 23:57:13 -0000 1.6 @@ -47,6 +47,7 @@ int LEX_LINE_DIRECTIVE = MIN_EXTRA_SYMBO #define yyrealloc xrealloc #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; +void *yyxrealloc(void *p, yy_size_t size); #include "pascal-lex.c" filename_t lexer_filename = NULL, compiler_filename = NULL; Index: gcc/p/gpc.c =================================================================== RCS file: /cvs/gcc/gcc/p/gpc.c,v retrieving revision 1.1.111.3 retrieving revision 1.2 diff -u -p -r1.1.111.3 -r1.2 --- gcc/p/gpc.c 27 Mar 2006 11:51:05 -0000 1.1.111.3 +++ gcc/p/gpc.c 7 Aug 2017 20:11:23 -0000 1.2 @@ -331,7 +331,7 @@ extern int getrusage (int, struct rusage /* Say how to test for an absolute pathname. On Unix systems, this is if it starts with a leading slash or a '$', the latter meaning the value of an environment variable is to be used. On machine with DOS-based - file systems, it is also absolute if it starts with a drive identifier. */ + filesystems, it is also absolute if it starts with a drive identifier. */ #ifdef HAVE_DOS_BASED_FILE_SYSTEM #define IS_ABSOLUTE_PATHNAME(STR) \ (IS_DIR_SEPARATOR ((STR)[0]) || (STR)[0] == '$' \ Index: gcc/p/gpc.h =================================================================== RCS file: /cvs/gcc/gcc/p/gpc.h,v retrieving revision 1.1.111.3 retrieving revision 1.2 diff -u -p -r1.1.111.3 -r1.2 --- gcc/p/gpc.h 27 Mar 2006 11:51:05 -0000 1.1.111.3 +++ gcc/p/gpc.h 31 Mar 2006 03:16:49 -0000 1.2 @@ -109,6 +109,7 @@ extern tree builtin_function (const char #define EM(t) (TREE_CODE (t) == ERROR_MARK) #define CHK_EM(t) do { if (EM (t)) return error_mark_node; } while (0) +#define CHK_EM_VOID(t) do { if (EM (t)) return; } while (0) #ifndef EGCS97 #define SET_DECL_ASSEMBLER_NAME(x, y) (DECL_ASSEMBLER_NAME (x) = (y)) Index: gcc/p/gpcpp.c =================================================================== RCS file: /cvs/gcc/gcc/p/gpcpp.c,v retrieving revision 1.1.111.3 retrieving revision 1.6 diff -u -p -r1.1.111.3 -r1.6 --- gcc/p/gpcpp.c 27 Mar 2006 11:51:05 -0000 1.1.111.3 +++ gcc/p/gpcpp.c 31 Mar 2006 03:16:50 -0000 1.6 @@ -1,3 +1,5 @@ +/* $MirOS: gcc/gcc/p/gpcpp.c,v 1.6 2006/03/31 03:16:50 tg Exp $ */ + /*GNU Pascal Compiler Preprocessor (GPCPP) Copyright (C) 1986-2006 Free Software Foundation, Inc. @@ -1195,7 +1197,9 @@ gpcpp_process_options (int argc, char ** make_undef (pend_undefs[i], &outbuf); if (pend_defs[i]) { +#ifndef GCC_3_3 int c; +#endif char *p = pend_defs[i]; make_definition (p, pend_defs_case_sensitive[i]); #ifndef GCC_3_3 @@ -3105,7 +3109,7 @@ special_symbol (HASHNODE *hp, FILE_BUF * timebuf = localtime (&t); } if (hp->type == T_DATE) - sprintf (s, "\"%04d-%02d-%02d\"", timebuf->tm_year + 1900, timebuf->tm_mon + 1, timebuf->tm_mday); + sprintf (s, "\"%04d-%02d-%02d\"", (int)timebuf->tm_year + 1900, timebuf->tm_mon + 1, timebuf->tm_mday); else sprintf (s, "\"%02d:%02d:%02d\"", timebuf->tm_hour, timebuf->tm_min, timebuf->tm_sec); buf = s; Index: gcc/p/lang.c =================================================================== RCS file: /cvs/gcc/gcc/p/lang.c,v retrieving revision 1.1.111.3 retrieving revision 1.4 diff -u -p -r1.1.111.3 -r1.4 --- gcc/p/lang.c 27 Mar 2006 11:51:05 -0000 1.1.111.3 +++ gcc/p/lang.c 31 Mar 2006 03:16:51 -0000 1.4 @@ -841,6 +841,9 @@ void lang_init (void) #endif { + /* Default trampolines to on, for now. */ + flag_trampolines = 1; + /* What type_hash_canon() does is wrong for Pascal (distinct, but structurally identical types are not compatible, fjf834.pas). Also, it's not compatible with the end_temporary_allocation() call in build_pascal_array_type @@ -1626,6 +1629,13 @@ bool #else int #endif +pascal_mark_addressable (tree exp); + +#ifdef GCC_3_3 +bool +#else +int +#endif pascal_mark_addressable (tree exp) { return mark_addressable2 (exp, 1); Index: gcc/p/module.c =================================================================== RCS file: /cvs/gcc/gcc/p/module.c,v retrieving revision 1.1.111.3 retrieving revision 1.5 diff -u -p -r1.1.111.3 -r1.5 --- gcc/p/module.c 27 Mar 2006 11:51:05 -0000 1.1.111.3 +++ gcc/p/module.c 27 Mar 2006 11:58:59 -0000 1.5 @@ -1,3 +1,5 @@ +/* $MirOS: gcc/gcc/p/module.c,v 1.5 2006/03/27 11:58:59 tg Exp $ */ + /*Module support for GNU Pascal Copyright (C) 1994-2006, Free Software Foundation, Inc. @@ -356,6 +358,35 @@ mseek (MEMFILE *F, size_t O) F->curpos = O; } +/* Kill the writers of this code, gently, with a chainsaw. */ + +#define TEMP_FILE "ccXXXXXXXXXX" +#define TEMP_FILE_LEN (sizeof(TEMP_FILE) - 1) + +char *choose_temp_base(void); + +char * +choose_temp_base () +{ + extern char *choose_tmpdir(void); + const char *base = choose_tmpdir (); + char *temp_filename; + int len; + + len = strlen (base); + temp_filename = xmalloc (len + TEMP_FILE_LEN + 1); + strcpy (temp_filename, base); + strcpy (temp_filename + len, TEMP_FILE); + + mktemp (temp_filename); + if (strlen (temp_filename) == 0) + gcc_assert (0); + return temp_filename; +} + +#undef TEMP_FILE +#undef TEMP_FILE_LEN + /* Scan the program/module parameter list for entries of file type. If this is at top level, and they are variables of file type, flag the files as external. Since the order of declarations is relaxed, this is checked before every routine. Index: gcc/p/parse.c =================================================================== RCS file: /cvs/gcc/gcc/p/parse.c,v retrieving revision 1.1.111.2 retrieving revision 1.5 diff -u -p -r1.1.111.2 -r1.5 --- gcc/p/parse.c 27 Mar 2006 11:51:06 -0000 1.1.111.2 +++ gcc/p/parse.c 3 Apr 2017 00:30:08 -0000 1.5 @@ -1,7 +1,8 @@ -/* A Bison parser, made by GNU Bison 2.1. */ +/* A Bison parser, made by GNU Bison 2.3. */ -/* Skeleton parser for GLR parsing with Bison, - Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +/* Skeleton implementation for Bison GLR parsers in C + + Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,13 +19,26 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -/* This is the parser code for GLR (Generalized LR) parser. */ +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C GLR parser skeleton written by Paul Hilfinger. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.1" +#define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "glr.c" @@ -37,294 +51,10 @@ -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - prec_lower_than_error = 258, - prec_if = 259, - prec_import = 260, - p_uses = 261, - p_else = 262, - p_and = 263, - p_array = 264, - p_begin = 265, - p_case = 266, - p_div = 267, - p_do = 268, - p_downto = 269, - p_end = 270, - p_file = 271, - p_for = 272, - p_function = 273, - p_goto = 274, - p_if = 275, - p_in = 276, - p_label = 277, - p_mod = 278, - p_nil = 279, - p_not = 280, - p_of = 281, - p_or = 282, - p_packed = 283, - p_procedure = 284, - p_to = 285, - p_program = 286, - p_record = 287, - p_repeat = 288, - p_set = 289, - p_then = 290, - p_type = 291, - p_until = 292, - p_var = 293, - p_while = 294, - p_with = 295, - p_absolute = 296, - p_abstract = 297, - p_and_then = 298, - p_as = 299, - p_asm = 300, - p_attribute = 301, - p_bindable = 302, - p_const = 303, - p_constructor = 304, - p_destructor = 305, - p_external = 306, - p_far = 307, - p_finalization = 308, - p_forward = 309, - p_implementation = 310, - p_import = 311, - p_inherited = 312, - p_initialization = 313, - p_is = 314, - p_near = 315, - p_object = 316, - p_only = 317, - p_operator = 318, - p_otherwise = 319, - p_or_else = 320, - p_pow = 321, - p_qualified = 322, - p_restricted = 323, - p_shl = 324, - p_shr = 325, - p_unit = 326, - p_value = 327, - p_virtual = 328, - p_xor = 329, - p_asmname = 330, - p_c = 331, - p_c_language = 332, - p_class = 333, - p_override = 334, - p_reintroduce = 335, - p_view = 336, - p_Addr = 337, - p_Assigned = 338, - p_Dispose = 339, - p_Exit = 340, - p_FormatString = 341, - p_New = 342, - p_Return = 343, - p_StringOf = 344, - LEX_INTCONST = 345, - LEX_INTCONST_BASE = 346, - LEX_STRCONST = 347, - LEX_REALCONST = 348, - LEX_BUILTIN_PROCEDURE = 349, - LEX_BUILTIN_PROCEDURE_WRITE = 350, - LEX_BUILTIN_FUNCTION = 351, - LEX_ID = 352, - LEX_CARET_WHITE = 353, - LEX_CARET_LETTER = 354, - LEX_ASSIGN = 355, - LEX_RENAME = 356, - LEX_RANGE = 357, - LEX_ELLIPSIS = 358, - LEX_CONST_EQUAL = 359, - LEX_SYMDIFF = 360, - LEX_NE = 361, - LEX_GE = 362, - LEX_LE = 363, - LEX_POWER = 364, - LEX_BPPLUS = 365, - LEX_BPMINUS = 366, - LEX_CEIL_PLUS = 367, - LEX_CEIL_MINUS = 368, - LEX_FLOOR_PLUS = 369, - LEX_FLOOR_MINUS = 370, - LEX_CEIL_MULT = 371, - LEX_CEIL_DIV = 372, - LEX_FLOOR_MULT = 373, - LEX_FLOOR_DIV = 374 - }; -#endif -/* Tokens. */ -#define prec_lower_than_error 258 -#define prec_if 259 -#define prec_import 260 -#define p_uses 261 -#define p_else 262 -#define p_and 263 -#define p_array 264 -#define p_begin 265 -#define p_case 266 -#define p_div 267 -#define p_do 268 -#define p_downto 269 -#define p_end 270 -#define p_file 271 -#define p_for 272 -#define p_function 273 -#define p_goto 274 -#define p_if 275 -#define p_in 276 -#define p_label 277 -#define p_mod 278 -#define p_nil 279 -#define p_not 280 -#define p_of 281 -#define p_or 282 -#define p_packed 283 -#define p_procedure 284 -#define p_to 285 -#define p_program 286 -#define p_record 287 -#define p_repeat 288 -#define p_set 289 -#define p_then 290 -#define p_type 291 -#define p_until 292 -#define p_var 293 -#define p_while 294 -#define p_with 295 -#define p_absolute 296 -#define p_abstract 297 -#define p_and_then 298 -#define p_as 299 -#define p_asm 300 -#define p_attribute 301 -#define p_bindable 302 -#define p_const 303 -#define p_constructor 304 -#define p_destructor 305 -#define p_external 306 -#define p_far 307 -#define p_finalization 308 -#define p_forward 309 -#define p_implementation 310 -#define p_import 311 -#define p_inherited 312 -#define p_initialization 313 -#define p_is 314 -#define p_near 315 -#define p_object 316 -#define p_only 317 -#define p_operator 318 -#define p_otherwise 319 -#define p_or_else 320 -#define p_pow 321 -#define p_qualified 322 -#define p_restricted 323 -#define p_shl 324 -#define p_shr 325 -#define p_unit 326 -#define p_value 327 -#define p_virtual 328 -#define p_xor 329 -#define p_asmname 330 -#define p_c 331 -#define p_c_language 332 -#define p_class 333 -#define p_override 334 -#define p_reintroduce 335 -#define p_view 336 -#define p_Addr 337 -#define p_Assigned 338 -#define p_Dispose 339 -#define p_Exit 340 -#define p_FormatString 341 -#define p_New 342 -#define p_Return 343 -#define p_StringOf 344 -#define LEX_INTCONST 345 -#define LEX_INTCONST_BASE 346 -#define LEX_STRCONST 347 -#define LEX_REALCONST 348 -#define LEX_BUILTIN_PROCEDURE 349 -#define LEX_BUILTIN_PROCEDURE_WRITE 350 -#define LEX_BUILTIN_FUNCTION 351 -#define LEX_ID 352 -#define LEX_CARET_WHITE 353 -#define LEX_CARET_LETTER 354 -#define LEX_ASSIGN 355 -#define LEX_RENAME 356 -#define LEX_RANGE 357 -#define LEX_ELLIPSIS 358 -#define LEX_CONST_EQUAL 359 -#define LEX_SYMDIFF 360 -#define LEX_NE 361 -#define LEX_GE 362 -#define LEX_LE 363 -#define LEX_POWER 364 -#define LEX_BPPLUS 365 -#define LEX_BPMINUS 366 -#define LEX_CEIL_PLUS 367 -#define LEX_CEIL_MINUS 368 -#define LEX_FLOOR_PLUS 369 -#define LEX_FLOOR_MINUS 370 -#define LEX_CEIL_MULT 371 -#define LEX_CEIL_DIV 372 -#define LEX_FLOOR_MULT 373 -#define LEX_FLOOR_DIV 374 - - - - -/* Copy the first part of user declarations. */ -#line 63 "parse.y" -#define YYMAXDEPTH 200000 -#include "gpc.h" -#ifdef GCC_4_0 -#include "cgraph.h" -#endif -/* A few keywords of some dialects can be parsed as regular identifiers - and checked from the parser actions => fewer special tokens. */ -#define ASSERT_ID(id, location, pseudo_keyword) \ - do if (!IDENTIFIER_IS_BUILT_IN (id, pseudo_keyword) || !PD_ACTIVE (IDENTIFIER_BUILT_IN_VALUE (id))) \ - { yyerror_id (id, &location); YYERROR; } while (0) - -enum { od_none, od_uses, od_label, od_const, od_type, od_var, od_routine }; -static int check_decl_order (int, int); - -extern int main_yyparse (void); -#define yyparse main_yyparse - -union yyGLRStackItem; -static void locations (YYLTYPE *, const union yyGLRStackItem *, int); -#define YYLLOC_DEFAULT(DEST, SRC, N) locations (&DEST, SRC, N) -#ifndef GCC_3_4 -#define LOCATION_NOTE(LOC) if (current_function_decl) emit_line_note ((LOC).first_file, (LOC).first_line) -#else -#define LOCATION_NOTE(LOC) if (current_function_decl) \ - { \ - location_t loc_aux; \ - loc_aux.file = (LOC).first_file; \ - loc_aux.line = (LOC).first_line; \ - emit_line_note (loc_aux); \ - } -#endif -#define COPYLOC(D, S) /* @@ ? (* (YYLTYPE *) memcpy (&(D), &(S), sizeof (YYLTYPE))) */ (S) - -#define YYASSERT gcc_assert -#define YYMALLOC (void *) xmalloc -#define YYREALLOC (void *) xrealloc +#include "parse.h" /* Enabling traces. */ #ifndef YYDEBUG @@ -344,45 +74,26 @@ static void locations (YYLTYPE *, const # define YYTOKEN_TABLE 0 #endif -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 112 "parse.y" -typedef union YYSTYPE { - enum tree_code code; - long itype; - tree ttype; -} YYSTYPE; -/* Line 186 of glr.c. */ -#line 356 "parse.c" -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - -#if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED) -typedef struct YYLTYPE -{ - - int first_line; - int first_column; - int last_line; - int last_column; - -} YYLTYPE; -# define YYLTYPE_IS_DECLARED 1 -# define YYLTYPE_IS_TRIVIAL 1 -#endif - /* Default (constant) value used for initialization for null right-hand sides. Unlike the standard yacc.c template, here we set the default value of $$ to a zeroed-out value. Since the default value is undefined, this behavior is - technically correct. */ + technically correct. */ static YYSTYPE yyval_default; /* Copy the second part of user declarations. */ +#line 116 "parse.y" + +static int check_decl_order (int, int); + +extern int main_yyparse (void); +#define yyparse main_yyparse + +static void locations (YYLTYPE *, const union yyGLRStackItem *, int); -/* Line 217 of glr.c. */ -#line 386 "parse.c" +/* Line 234 of glr.c. */ +#line 97 "parse.c" #include #include @@ -401,6 +112,31 @@ static YYSTYPE yyval_default; # endif #endif +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(e) ((void) (e)) +#else +# define YYUSE(e) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int i) +#else +static int +YYID (i) + int i; +#endif +{ + return i; +} +#endif + #ifndef YYFREE # define YYFREE free #endif @@ -434,7 +170,7 @@ static YYSTYPE yyval_default; #ifndef __attribute__ /* This feature is available in gcc versions 2.5 and later. */ -# if (!defined (__GNUC__) || __GNUC__ < 2 \ +# if (! defined __GNUC__ || __GNUC__ < 2 \ || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__) # define __attribute__(Spec) /* empty */ # endif @@ -446,23 +182,23 @@ static YYSTYPE yyval_default; # define YYASSERT(condition) ((void) ((condition) || (abort (), 0))) #endif -/* YYFINAL -- State number of the termination state. */ +/* YYFINAL -- State number of the termination state. */ #define YYFINAL 70 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 8810 -/* YYNTOKENS -- Number of terminals. */ +/* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 139 -/* YYNNTS -- Number of nonterminals. */ +/* YYNNTS -- Number of nonterminals. */ #define YYNNTS 294 -/* YYNRULES -- Number of rules. */ +/* YYNRULES -- Number of rules. */ #define YYNRULES 797 -/* YYNRULES -- Number of states. */ +/* YYNRULES -- Number of states. */ #define YYNSTATES 1330 -/* YYMAXRHS -- Maximum number of symbols on right-hand side of rule. */ +/* YYMAXRHS -- Maximum number of symbols on right-hand side of rule. */ #define YYMAXRHS 12 /* YYMAXLEFT -- Maximum number of symbols to the left of a handle - accessed by $0, $-1, etc., in any rule. */ + accessed by $0, $-1, etc., in any rule. */ #define YYMAXLEFT 0 /* YYTRANSLATE(X) -- Bison symbol number corresponding to X. */ @@ -603,7 +339,7 @@ static const unsigned short int yyprhs[] 2382, 2384, 2386, 2388, 2390, 2392, 2394, 2395 }; -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const short int yyrhs[] = { 140, 0, -1, -1, 141, -1, -1, -1, 173, 176, @@ -851,92 +587,92 @@ static const short int yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short int yyrline[] = { - 0, 216, 216, 217, 229, 231, 228, 234, 240, 242, - 239, 245, 246, 248, 247, 256, 258, 255, 264, 263, - 270, 272, 269, 279, 278, 286, 285, 291, 293, 291, - 298, 299, 304, 303, 306, 308, 307, 311, 316, 315, - 321, 325, 327, 328, 329, 334, 333, 341, 340, 348, - 349, 351, 356, 361, 362, 367, 368, 372, 373, 375, - 377, 379, 384, 389, 391, 392, 397, 402, 403, 405, - 407, 409, 414, 416, 418, 423, 423, 427, 429, 433, - 434, 435, 440, 445, 446, 450, 451, 453, 458, 459, - 461, 463, 465, 470, 475, 476, 482, 483, 488, 489, - 494, 495, 500, 500, 503, 505, 511, 512, 517, 518, - 519, 525, 526, 531, 532, 532, 535, 540, 545, 546, - 547, 552, 557, 558, 563, 563, 579, 582, 581, 585, - 592, 594, 596, 598, 600, 602, 606, 607, 612, 613, - 614, 618, 620, 629, 630, 635, 634, 659, 664, 665, - 670, 671, 674, 673, 680, 681, 686, 688, 693, 695, - 694, 702, 707, 708, 710, 711, 713, 715, 719, 730, - 732, 729, 746, 745, 752, 754, 751, 764, 766, 763, - 776, 775, 784, 791, 797, 806, 808, 813, 814, 816, - 818, 820, 824, 829, 830, 836, 836, 852, 853, 858, - 859, 861, 863, 864, 865, 866, 868, 869, 874, 876, - 884, 887, 889, 891, 893, 898, 900, 901, 903, 905, - 905, 907, 909, 913, 914, 919, 920, 922, 924, 926, - 931, 933, 939, 940, 942, 947, 948, 952, 953, 955, - 957, 959, 963, 969, 970, 975, 977, 979, 981, 986, - 987, 989, 991, 993, 997, 1002, 1007, 1008, 1012, 1014, - 1019, 1021, 1023, 1025, 1027, 1031, 1033, 1042, 1044, 1046, - 1048, 1053, 1055, 1061, 1065, 1071, 1070, 1077, 1078, 1080, - 1085, 1086, 1090, 1091, 1092, 1097, 1098, 1100, 1105, 1107, - 1114, 1113, 1117, 1123, 1129, 1131, 1133, 1135, 1137, 1139, - 1143, 1144, 1146, 1151, 1152, 1154, 1161, 1172, 1175, 1177, - 1174, 1186, 1187, 1191, 1198, 1197, 1202, 1201, 1213, 1220, - 1219, 1223, 1229, 1238, 1239, 1243, 1248, 1250, 1253, 1252, - 1256, 1258, 1260, 1262, 1264, 1269, 1270, 1272, 1277, 1282, - 1283, 1288, 1289, 1291, 1293, 1295, 1297, 1302, 1303, 1307, - 1308, 1312, 1313, 1315, 1320, 1320, 1323, 1324, 1326, 1328, - 1330, 1332, 1337, 1338, 1340, 1342, 1346, 1348, 1350, 1352, - 1354, 1356, 1363, 1362, 1369, 1371, 1373, 1377, 1378, 1383, - 1385, 1389, 1390, 1395, 1396, 1401, 1402, 1403, 1407, 1412, - 1413, 1417, 1419, 1428, 1429, 1431, 1433, 1437, 1442, 1447, - 1448, 1454, 1459, 1460, 1464, 1466, 1468, 1470, 1467, 1475, - 1477, 1482, 1486, 1486, 1492, 1493, 1494, 1501, 1502, 1505, - 1504, 1508, 1510, 1512, 1514, 1516, 1518, 1520, 1521, 1523, - 1526, 1525, 1534, 1536, 1533, 1555, 1557, 1559, 1554, 1563, - 1565, 1562, 1569, 1568, 1573, 1572, 1576, 1581, 1586, 1587, - 1589, 1591, 1593, 1598, 1600, 1606, 1605, 1616, 1623, 1628, - 1630, 1635, 1636, 1641, 1642, 1644, 1646, 1648, 1654, 1653, - 1660, 1661, 1663, 1665, 1667, 1671, 1673, 1675, 1677, 1682, - 1684, 1686, 1691, 1692, 1697, 1698, 1703, 1705, 1707, 1709, - 1711, 1713, 1715, 1717, 1719, 1721, 1727, 1728, 1733, 1734, - 1738, 1739, 1744, 1749, 1751, 1758, 1771, 1773, 1778, 1779, - 1781, 1783, 1786, 1785, 1792, 1793, 1795, 1798, 1797, 1804, - 1805, 1807, 1809, 1811, 1813, 1818, 1820, 1822, 1823, 1824, - 1826, 1827, 1832, 1833, 1834, 1838, 1839, 1843, 1848, 1850, - 1855, 1856, 1857, 1862, 1863, 1863, 1863, 1863, 1863, 1863, - 1863, 1863, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, - 1864, 1868, 1880, 1894, 1895, 1900, 1902, 1906, 1907, 1909, - 1911, 1913, 1915, 1917, 1919, 1921, 1923, 1925, 1927, 1929, - 1931, 1933, 1935, 1937, 1942, 1943, 1945, 1954, 1958, 1960, - 1962, 1964, 1969, 1970, 1972, 1974, 1980, 1982, 1984, 1989, - 1994, 1995, 1997, 1999, 2000, 2004, 2005, 2010, 2012, 2017, - 2019, 2024, 2029, 2034, 2036, 2038, 2040, 2042, 2047, 2048, - 2050, 2055, 2056, 2061, 2063, 2068, 2069, 2071, 2073, 2075, - 2080, 2082, 2084, 2089, 2091, 2096, 2097, 2099, 2101, 2106, - 2108, 2115, 2116, 2120, 2121, 2122, 2126, 2127, 2128, 2129, - 2130, 2131, 2132, 2136, 2137, 2138, 2139, 2140, 2141, 2145, - 2146, 2147, 2148, 2149, 2150, 2154, 2155, 2156, 2157, 2161, - 2162, 2163, 2164, 2168, 2171, 2172, 2173, 2174, 2175, 2176, - 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, - 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, - 2202, 2203, 2204, 2208, 2209, 2210, 2211, 2215, 2216, 2217, - 2218, 2224, 2225, 2229, 2234, 2239, 2241, 2243, 2249, 2251, - 2255, 2257, 2262, 2263, 2268, 2273, 2274, 2275, 2276, 2277, - 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, - 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, - 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, - 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, - 2318, 2322, 2327, 2328, 2329, 2330, 2331, 2333, 2334, 2335, - 2339, 2347, 2352, 2357, 2361, 2366, 2371, 2377, 2378, 2383, - 2384, 2385, 2389, 2390, 2394, 2395, 2401, 2405 + 0, 223, 223, 224, 236, 238, 235, 241, 247, 249, + 246, 252, 253, 255, 254, 263, 265, 262, 271, 270, + 277, 279, 276, 286, 285, 293, 292, 298, 300, 298, + 305, 306, 311, 310, 313, 315, 314, 318, 323, 322, + 328, 332, 334, 335, 336, 341, 340, 348, 347, 355, + 356, 358, 363, 368, 369, 374, 375, 379, 380, 382, + 384, 386, 391, 396, 398, 399, 404, 409, 410, 412, + 414, 416, 421, 423, 425, 430, 430, 434, 436, 440, + 441, 442, 447, 452, 453, 457, 458, 460, 465, 466, + 468, 470, 472, 477, 482, 483, 489, 490, 495, 496, + 501, 502, 507, 507, 510, 512, 518, 519, 524, 525, + 526, 532, 533, 538, 539, 539, 542, 547, 552, 553, + 554, 559, 564, 565, 570, 570, 586, 589, 588, 592, + 599, 601, 603, 605, 607, 609, 613, 614, 619, 620, + 621, 625, 627, 636, 637, 642, 641, 666, 671, 672, + 677, 678, 681, 680, 687, 688, 693, 695, 700, 702, + 701, 709, 714, 715, 717, 718, 720, 722, 726, 737, + 739, 736, 753, 752, 759, 761, 758, 771, 773, 770, + 783, 782, 791, 798, 804, 813, 815, 820, 821, 823, + 825, 827, 831, 836, 837, 843, 843, 859, 860, 865, + 866, 868, 870, 871, 872, 873, 875, 876, 881, 883, + 891, 894, 896, 898, 900, 905, 907, 908, 910, 912, + 912, 914, 916, 920, 921, 926, 927, 929, 931, 933, + 938, 940, 946, 947, 949, 954, 955, 959, 960, 962, + 964, 966, 970, 976, 977, 982, 984, 986, 988, 993, + 994, 996, 998, 1000, 1004, 1009, 1014, 1015, 1019, 1021, + 1026, 1028, 1030, 1032, 1034, 1038, 1040, 1049, 1051, 1053, + 1055, 1060, 1062, 1068, 1072, 1078, 1077, 1084, 1085, 1087, + 1092, 1093, 1097, 1098, 1099, 1104, 1105, 1107, 1112, 1114, + 1121, 1120, 1124, 1130, 1136, 1138, 1140, 1142, 1144, 1146, + 1150, 1151, 1153, 1158, 1159, 1161, 1168, 1179, 1182, 1184, + 1181, 1193, 1194, 1198, 1205, 1204, 1209, 1208, 1220, 1227, + 1226, 1230, 1236, 1245, 1246, 1250, 1255, 1257, 1260, 1259, + 1263, 1265, 1267, 1269, 1271, 1276, 1277, 1279, 1284, 1289, + 1290, 1295, 1296, 1298, 1300, 1302, 1304, 1309, 1310, 1314, + 1315, 1319, 1320, 1322, 1327, 1327, 1330, 1331, 1333, 1335, + 1337, 1339, 1344, 1345, 1347, 1349, 1353, 1355, 1357, 1359, + 1361, 1363, 1370, 1369, 1376, 1378, 1380, 1384, 1385, 1390, + 1392, 1396, 1397, 1402, 1403, 1408, 1409, 1410, 1414, 1419, + 1420, 1424, 1426, 1435, 1436, 1438, 1440, 1444, 1449, 1454, + 1455, 1461, 1466, 1467, 1471, 1473, 1475, 1477, 1474, 1482, + 1484, 1489, 1493, 1493, 1499, 1500, 1501, 1508, 1509, 1512, + 1511, 1515, 1517, 1519, 1521, 1523, 1525, 1527, 1528, 1530, + 1533, 1532, 1541, 1543, 1540, 1562, 1564, 1566, 1561, 1570, + 1572, 1569, 1576, 1575, 1580, 1579, 1583, 1588, 1593, 1594, + 1596, 1598, 1600, 1605, 1607, 1613, 1612, 1623, 1630, 1635, + 1637, 1642, 1643, 1648, 1649, 1651, 1653, 1655, 1661, 1660, + 1667, 1668, 1670, 1672, 1674, 1678, 1680, 1682, 1684, 1689, + 1691, 1693, 1698, 1699, 1704, 1705, 1710, 1712, 1714, 1716, + 1718, 1720, 1722, 1724, 1726, 1728, 1734, 1735, 1740, 1741, + 1745, 1746, 1751, 1756, 1758, 1765, 1778, 1780, 1785, 1786, + 1788, 1790, 1793, 1792, 1799, 1800, 1802, 1805, 1804, 1811, + 1812, 1814, 1816, 1818, 1820, 1825, 1827, 1829, 1830, 1831, + 1833, 1834, 1839, 1840, 1841, 1845, 1846, 1850, 1855, 1857, + 1862, 1863, 1864, 1869, 1870, 1870, 1870, 1870, 1870, 1870, + 1870, 1870, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1875, 1887, 1901, 1902, 1907, 1909, 1913, 1914, 1916, + 1918, 1920, 1922, 1924, 1926, 1928, 1930, 1932, 1934, 1936, + 1938, 1940, 1942, 1944, 1949, 1950, 1952, 1961, 1965, 1967, + 1969, 1971, 1976, 1977, 1979, 1981, 1987, 1989, 1991, 1996, + 2001, 2002, 2004, 2006, 2007, 2011, 2012, 2017, 2019, 2024, + 2026, 2031, 2036, 2041, 2043, 2045, 2047, 2049, 2054, 2055, + 2057, 2062, 2063, 2068, 2070, 2075, 2076, 2078, 2080, 2082, + 2087, 2089, 2091, 2096, 2098, 2103, 2104, 2106, 2108, 2113, + 2115, 2122, 2123, 2127, 2128, 2129, 2133, 2134, 2135, 2136, + 2137, 2138, 2139, 2143, 2144, 2145, 2146, 2147, 2148, 2152, + 2153, 2154, 2155, 2156, 2157, 2161, 2162, 2163, 2164, 2168, + 2169, 2170, 2171, 2175, 2178, 2179, 2180, 2181, 2182, 2183, + 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, + 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, + 2209, 2210, 2211, 2215, 2216, 2217, 2218, 2222, 2223, 2224, + 2225, 2231, 2232, 2236, 2241, 2246, 2248, 2250, 2256, 2258, + 2262, 2264, 2269, 2270, 2275, 2280, 2281, 2282, 2283, 2284, + 2285, 2286, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, + 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, + 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, + 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, + 2325, 2329, 2334, 2335, 2336, 2337, 2338, 2340, 2341, 2342, + 2346, 2354, 2359, 2364, 2368, 2373, 2378, 2384, 2385, 2390, + 2391, 2392, 2396, 2397, 2401, 2402, 2408, 2412 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "prec_lower_than_error", "prec_if", @@ -1221,7 +957,7 @@ static const unsigned char yyr2[] = 1, 1, 1, 1, 1, 1, 0, 1 }; -/* YYDPREC[RULE-NUM] -- Dynamic precedence of rule #RULE-NUM (0 if none). */ +/* YYDPREC[RULE-NUM] -- Dynamic precedence of rule #RULE-NUM (0 if none). */ static const unsigned char yydprec[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1306,7 +1042,7 @@ static const unsigned char yydprec[] = 0, 0, 0, 0, 0, 0, 0, 0 }; -/* YYMERGER[RULE-NUM] -- Index of merging function for rule #RULE-NUM. */ +/* YYMERGER[RULE-NUM] -- Index of merging function for rule #RULE-NUM. */ static const unsigned char yymerger[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1531,7 +1267,7 @@ static const unsigned short int yydefact 290, 288, 232, 0, 0, 0, 254, 291, 787, 244 }; -/* YYPDEFGOTO[NTERM-NUM]. */ +/* YYPDEFGOTO[NTERM-NUM]. */ static const short int yydefgoto[] = { -1, 4, 5, 85, 184, 6, 133, 453, 71, 107, @@ -4587,7 +4323,7 @@ int yyparse (void); #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ - if (N) \ + if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ @@ -4601,7 +4337,7 @@ int yyparse (void); (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ - while (0) + while (YYID (0)) /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know @@ -4609,8 +4345,8 @@ int yyparse (void); # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ - (Loc).first_line, (Loc).first_column, \ - (Loc).last_line, (Loc).last_column) + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) #endif @@ -4636,62 +4372,74 @@ typedef enum { yyok, yyaccept, yyabort, #define YYCHK(YYE) \ do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; } \ - while (0) + while (YYID (0)) #if YYDEBUG -#if ! defined (YYFPRINTF) +# ifndef YYFPRINTF # define YYFPRINTF fprintf -#endif +# endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ -} while (0) +} while (YYID (0)) + /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ +/*ARGSUSED*/ static void -yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp) +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp) { - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - (void) yylocationp; - - if (yytype < YYNTOKENS) - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - - YY_LOCATION_PRINT (yyoutput, *yylocationp); - YYFPRINTF (yyoutput, ": "); - + if (!yyvaluep) + return; + YYUSE (yylocationp); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); # endif switch (yytype) { default: - break; + break; } - YYFPRINTF (yyoutput, ")"); } -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yysymprint (stderr, \ - Type, Value, Location); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp) +{ + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + YY_LOCATION_PRINT (yyoutput, *yylocationp); + YYFPRINTF (yyoutput, ": "); + yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp); + YYFPRINTF (yyoutput, ")"); +} + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, Type, \ + Value, Location); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ @@ -4724,23 +4472,38 @@ int yydebug; allocation. This is to allow allocation and initialization to be completed by functions that call yyexpandGLRStack before the stack is expanded, thus insuring that all necessary pointers get - properly redirected to new data. */ + properly redirected to new data. */ #define YYHEADROOM 2 #ifndef YYSTACKEXPANDABLE -# if (! defined (__cplusplus) \ - || (defined (YYLTYPE_IS_TRIVIAL) && YYLTYPE_IS_TRIVIAL \ - && defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)) +# if (! defined __cplusplus \ + || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ + && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)) # define YYSTACKEXPANDABLE 1 # else # define YYSTACKEXPANDABLE 0 # endif #endif +#if YYSTACKEXPANDABLE +# define YY_RESERVE_GLRSTACK(Yystack) \ + do { \ + if (Yystack->yyspaceLeft < YYHEADROOM) \ + yyexpandGLRStack (Yystack); \ + } while (YYID (0)) +#else +# define YY_RESERVE_GLRSTACK(Yystack) \ + do { \ + if (Yystack->yyspaceLeft < YYHEADROOM) \ + yyMemoryExhausted (Yystack); \ + } while (YYID (0)) +#endif + + #if YYERROR_VERBOSE # ifndef yystpcpy -# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in @@ -4822,18 +4585,18 @@ typedef short int yySymbol; typedef short int yyItemNum; typedef struct yyGLRState yyGLRState; +typedef struct yyGLRStateSet yyGLRStateSet; typedef struct yySemanticOption yySemanticOption; typedef union yyGLRStackItem yyGLRStackItem; typedef struct yyGLRStack yyGLRStack; -typedef struct yyGLRStateSet yyGLRStateSet; struct yyGLRState { - /** Type tag: always true. */ + /** Type tag: always true. */ yybool yyisState; - /** Type tag for yysemantics. If true, yysval applies, otherwise - * yyfirstVal applies. */ + /** Type tag for yysemantics. If true, yysval applies, otherwise + * yyfirstVal applies. */ yybool yyresolved; - /** Number of corresponding LALR(1) machine state. */ + /** Number of corresponding LALR(1) machine state. */ yyStateNum yylrState; /** Preceding state in this stack */ yyGLRState* yypred; @@ -4842,34 +4605,43 @@ struct yyGLRState { union { /** First in a chain of alternative reductions producing the * non-terminal corresponding to this state, threaded through - * yynext. */ + * yynext. */ yySemanticOption* yyfirstVal; - /** Semantic value for this state. */ + /** Semantic value for this state. */ YYSTYPE yysval; } yysemantics; - /** Source location for this state. */ + /** Source location for this state. */ YYLTYPE yyloc; }; struct yyGLRStateSet { yyGLRState** yystates; + /** During nondeterministic operation, yylookaheadNeeds tracks which + * stacks have actually needed the current lookahead. During deterministic + * operation, yylookaheadNeeds[0] is not maintained since it would merely + * duplicate yychar != YYEMPTY. */ + yybool* yylookaheadNeeds; size_t yysize, yycapacity; }; struct yySemanticOption { - /** Type tag: always false. */ + /** Type tag: always false. */ yybool yyisState; /** Rule number for this reduction */ yyRuleNum yyrule; - /** The last RHS state in the list of states to be reduced. */ + /** The last RHS state in the list of states to be reduced. */ yyGLRState* yystate; - /** Next sibling in chain of options. To facilitate merging, - * options are chained in decreasing order by address. */ + /** The lookahead for this reduction. */ + int yyrawchar; + YYSTYPE yyval; + YYLTYPE yyloc; + /** Next sibling in chain of options. To facilitate merging, + * options are chained in decreasing order by address. */ yySemanticOption* yynext; }; -/** Type of the items in the GLR stack. The yyisState field - * indicates which item of the union is valid. */ +/** Type of the items in the GLR stack. The yyisState field + * indicates which item of the union is valid. */ union yyGLRStackItem { yyGLRState yystate; yySemanticOption yyoption; @@ -4880,7 +4652,6 @@ struct yyGLRStack { /* To compute the location of the error token. */ yyGLRStackItem yyerror_range[3]; - yySymbol* yytokenp; YYJMP_BUF yyexception_buffer; yyGLRStackItem* yyitems; yyGLRStackItem* yynextFree; @@ -4890,24 +4661,26 @@ struct yyGLRStack { yyGLRStateSet yytops; }; -static void yyexpandGLRStack (yyGLRStack* yystack); +#if YYSTACKEXPANDABLE +static void yyexpandGLRStack (yyGLRStack* yystackp); +#endif -static void yyFail (yyGLRStack* yystack, const char* yymsg) +static void yyFail (yyGLRStack* yystackp, const char* yymsg) __attribute__ ((__noreturn__)); static void -yyFail (yyGLRStack* yystack, const char* yymsg) +yyFail (yyGLRStack* yystackp, const char* yymsg) { if (yymsg != NULL) yyerror (yymsg); - YYLONGJMP (yystack->yyexception_buffer, 1); + YYLONGJMP (yystackp->yyexception_buffer, 1); } -static void yyMemoryExhausted (yyGLRStack* yystack) +static void yyMemoryExhausted (yyGLRStack* yystackp) __attribute__ ((__noreturn__)); static void -yyMemoryExhausted (yyGLRStack* yystack) +yyMemoryExhausted (yyGLRStack* yystackp) { - YYLONGJMP (yystack->yyexception_buffer, 2); + YYLONGJMP (yystackp->yyexception_buffer, 2); } #if YYDEBUG || YYERROR_VERBOSE @@ -4924,8 +4697,7 @@ yytokenName (yySymbol yytoken) /** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting * at YYVSP[YYLOW0].yystate.yypred. Leaves YYVSP[YYLOW1].yystate.yypred - * containing the pointer to the next state in the chain. Assumes - * YYLOW1 < YYLOW0. */ + * containing the pointer to the next state in the chain. */ static void yyfillin (yyGLRStackItem *, int, int) __attribute__ ((__unused__)); static void yyfillin (yyGLRStackItem *yyvsp, int yylow0, int yylow1) @@ -4944,8 +4716,8 @@ yyfillin (yyGLRStackItem *yyvsp, int yyl } /* Do nothing if YYNORMAL or if *YYLOW <= YYLOW1. Otherwise, fill in - YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1. - For convenience, always return YYLOW1. */ + * YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1. + * For convenience, always return YYLOW1. */ static inline int yyfill (yyGLRStackItem *, int *, int, yybool) __attribute__ ((__unused__)); static inline int @@ -4962,21 +4734,20 @@ yyfill (yyGLRStackItem *yyvsp, int *yylo /** Perform user action for rule number YYN, with RHS length YYRHSLEN, * and top stack item YYVSP. YYLVALP points to place to put semantic * value ($$), and yylocp points to place for location information - * (@$). Returns yyok for normal return, yyaccept for YYACCEPT, - * yyerr for YYERROR, yyabort for YYABORT. */ -static YYRESULTTAG + * (@$). Returns yyok for normal return, yyaccept for YYACCEPT, + * yyerr for YYERROR, yyabort for YYABORT. */ +/*ARGSUSED*/ static YYRESULTTAG yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp, YYSTYPE* yyvalp, YYLTYPE* YYOPTIONAL_LOC (yylocp), - yyGLRStack* yystack - ) + yyGLRStack* yystackp + ) { yybool yynormal __attribute__ ((__unused__)) = - (yystack->yysplitPoint == NULL); + (yystackp->yysplitPoint == NULL); int yylow; - # undef yyerrok -# define yyerrok (yystack->yyerrState = 0) +# define yyerrok (yystackp->yyerrState = 0) # undef YYACCEPT # define YYACCEPT return yyaccept # undef YYABORT @@ -4984,9 +4755,9 @@ yyuserAction (yyRuleNum yyn, int yyrhsle # undef YYERROR # define YYERROR return yyerrok, yyerr # undef YYRECOVERING -# define YYRECOVERING (yystack->yyerrState != 0) +# define YYRECOVERING() (yystackp->yyerrState != 0) # undef yyclearin -# define yyclearin (yychar = *(yystack->yytokenp) = YYEMPTY) +# define yyclearin (yychar = YYEMPTY) # undef YYFILL # define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal) # undef YYBACKUP @@ -4999,18 +4770,18 @@ yyuserAction (yyRuleNum yyn, int yyrhsle *yyvalp = yyval_default; else *yyvalp = yyvsp[YYFILL (1-yyrhslen)].yystate.yysemantics.yysval; - YYLLOC_DEFAULT (*yylocp, yyvsp - yyrhslen, yyrhslen); - yystack->yyerror_range[1].yystate.yyloc = *yylocp; + YYLLOC_DEFAULT ((*yylocp), (yyvsp - yyrhslen), yyrhslen); + yystackp->yyerror_range[1].yystate.yyloc = *yylocp; switch (yyn) { case 2: -#line 216 "parse.y" +#line 223 "parse.y" { error ("empty input file"); ;} break; case 3: -#line 218 "parse.y" +#line 225 "parse.y" { if (co->ignore_garbage_after_dot) { @@ -5021,61 +4792,61 @@ yyuserAction (yyRuleNum yyn, int yyrhsle break; case 4: -#line 229 "parse.y" - { initialize_module (TREE_PURPOSE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)), build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype) ? TREE_PURPOSE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) : NULL_TREE, TREE_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))), 0); ;} +#line 236 "parse.y" + { initialize_module (TREE_PURPOSE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)), build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype) ? TREE_PURPOSE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)) : NULL_TREE, TREE_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype))), 0); ;} break; case 5: -#line 231 "parse.y" +#line 238 "parse.y" { start_main_program (); ;} break; case 6: -#line 233 "parse.y" +#line 240 "parse.y" { finish_main_program (); ;} break; case 7: -#line 235 "parse.y" +#line 242 "parse.y" { finalize_module (0); ;} break; case 8: -#line 240 "parse.y" - { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), p_interface); initialize_module ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), 1); ;} +#line 247 "parse.y" + { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yyloc), p_interface); initialize_module ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype), 1); ;} break; case 9: -#line 242 "parse.y" +#line 249 "parse.y" { start_unit_implementation (); ;} break; case 10: -#line 244 "parse.y" +#line 251 "parse.y" { check_forward_decls (1); ;} break; case 13: -#line 248 "parse.y" +#line 255 "parse.y" { ((*yyvalp).ttype) = current_module->name; finalize_module (1); ;} break; case 14: -#line 250 "parse.y" +#line 257 "parse.y" { - if ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype) && current_module->name != (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)) + if ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype) && current_module->name != (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)) error ("implementation of module `%s' following interface of module `%s'", - IDENTIFIER_NAME (current_module->name), IDENTIFIER_NAME ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); + IDENTIFIER_NAME (current_module->name), IDENTIFIER_NAME ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype))); ;} break; case 15: -#line 256 "parse.y" - { initialize_module ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 2); ;} +#line 263 "parse.y" + { initialize_module ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 2); ;} break; case 16: -#line 258 "parse.y" +#line 265 "parse.y" { if (co->interface_only) exit_compilation (); @@ -5083,357 +4854,357 @@ yyuserAction (yyRuleNum yyn, int yyrhsle break; case 18: -#line 264 "parse.y" - { initialize_module ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 4); ;} +#line 271 "parse.y" + { initialize_module ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 4); ;} break; case 20: -#line 270 "parse.y" - { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), p_interface); ;} +#line 277 "parse.y" + { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yyloc), p_interface); ;} break; case 21: -#line 272 "parse.y" - { initialize_module ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 2); ;} +#line 279 "parse.y" + { initialize_module ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), 2); ;} break; case 22: -#line 274 "parse.y" +#line 281 "parse.y" { clear_forward_decls (); /* don't complain in poplevel */ ;} break; case 23: -#line 279 "parse.y" - { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), p_export); start_module_interface (); ;} +#line 286 "parse.y" + { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yyloc), p_export); start_module_interface (); ;} break; case 24: -#line 281 "parse.y" +#line 288 "parse.y" { create_gpi_files (); ;} break; case 25: -#line 286 "parse.y" - { initialize_module ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), NULL_TREE, 3); ;} +#line 293 "parse.y" + { initialize_module ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.ttype), NULL_TREE, 3); ;} break; case 27: -#line 291 "parse.y" +#line 298 "parse.y" { current_module->implementation = 1; ;} break; case 28: -#line 293 "parse.y" +#line 300 "parse.y" { check_forward_decls (1); ;} break; case 30: -#line 298 "parse.y" +#line 305 "parse.y" { chk_dialect ("units without `implementation' part are", U_M_PASCAL); ;} break; case 32: -#line 304 "parse.y" +#line 311 "parse.y" { start_constructor (0); ;} break; case 35: -#line 308 "parse.y" +#line 315 "parse.y" { start_destructor (); ;} break; case 36: -#line 310 "parse.y" +#line 317 "parse.y" { finish_destructor (); ;} break; case 38: -#line 316 "parse.y" +#line 323 "parse.y" { start_constructor (0); ;} break; case 40: -#line 322 "parse.y" +#line 329 "parse.y" { finish_constructor (); ;} break; case 45: -#line 334 "parse.y" +#line 341 "parse.y" { chk_dialect_name ("to begin do", E_O_PASCAL); start_constructor (0); ;} break; case 46: -#line 336 "parse.y" +#line 343 "parse.y" { finish_constructor (); ;} break; case 47: -#line 341 "parse.y" +#line 348 "parse.y" { chk_dialect_name ("to end do", E_O_PASCAL); start_destructor (); ;} break; case 48: -#line 343 "parse.y" +#line 350 "parse.y" { finish_destructor (); ;} break; case 49: -#line 348 "parse.y" +#line 355 "parse.y" { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, NULL_TREE); ;} break; case 50: -#line 350 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 357 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 51: -#line 352 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 359 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 52: -#line 357 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype) ? TREE_PURPOSE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) : NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} +#line 364 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype) ? TREE_PURPOSE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)) : NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 54: -#line 363 "parse.y" - { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype); ;} +#line 370 "parse.y" + { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype); ;} break; case 58: -#line 374 "parse.y" +#line 381 "parse.y" { yyerrok; ;} break; case 59: -#line 376 "parse.y" +#line 383 "parse.y" { error ("module specifications need an export part"); ;} break; case 60: -#line 378 "parse.y" +#line 385 "parse.y" { warning ("missing semicolon"); yyerrok; ;} break; case 61: -#line 380 "parse.y" +#line 387 "parse.y" { error ("extra semicolon"); ;} break; case 62: -#line 385 "parse.y" - { export_interface ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 392 "parse.y" + { export_interface ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 63: -#line 390 "parse.y" - { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype); ;} +#line 397 "parse.y" + { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype); ;} break; case 65: -#line 393 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 400 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 66: -#line 398 "parse.y" - { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), p_all); ((*yyvalp).ttype) = build_tree_list (NULL_TREE, NULL_TREE); ;} +#line 405 "parse.y" + { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yyloc), p_all); ((*yyvalp).ttype) = build_tree_list (NULL_TREE, NULL_TREE); ;} break; case 68: -#line 404 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 411 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 69: -#line 406 "parse.y" +#line 413 "parse.y" { ((*yyvalp).ttype) = NULL_TREE; ;} break; case 70: -#line 408 "parse.y" +#line 415 "parse.y" { ((*yyvalp).ttype) = NULL_TREE; ;} break; case 71: -#line 410 "parse.y" +#line 417 "parse.y" { ((*yyvalp).ttype) = NULL_TREE; ;} break; case 72: -#line 415 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 422 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 73: -#line 417 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} +#line 424 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))); ;} break; case 74: -#line 419 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); TREE_READONLY (((*yyvalp).ttype)) = 1; ;} +#line 426 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)); TREE_READONLY (((*yyvalp).ttype)) = 1; ;} break; case 75: -#line 423 "parse.y" +#line 430 "parse.y" { do_extra_import (); ;} break; case 81: -#line 436 "parse.y" +#line 443 "parse.y" { warning ("missing semicolon"); yyerrok; ;} break; case 82: -#line 441 "parse.y" - { import_interface ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype) ? IMPORT_QUALIFIED : IMPORT_ISO, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 448 "parse.y" + { import_interface ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.ttype) ? IMPORT_QUALIFIED : IMPORT_ISO, (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 86: -#line 452 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 459 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 87: -#line 454 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 461 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 89: -#line 460 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 467 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 90: -#line 462 "parse.y" +#line 469 "parse.y" { ((*yyvalp).ttype) = NULL_TREE; ;} break; case 91: -#line 464 "parse.y" - { error ("missing comma"); ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 471 "parse.y" + { error ("missing comma"); ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 92: -#line 466 "parse.y" +#line 473 "parse.y" { ((*yyvalp).ttype) = NULL_TREE; ;} break; case 93: -#line 471 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 478 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 95: -#line 477 "parse.y" - { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); ;} +#line 484 "parse.y" + { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype); ;} break; case 96: -#line 482 "parse.y" +#line 489 "parse.y" { ((*yyvalp).itype) = 2 * od_none; ;} break; case 97: -#line 484 "parse.y" - { ((*yyvalp).itype) = check_decl_order ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.itype)); ;} +#line 491 "parse.y" + { ((*yyvalp).itype) = check_decl_order ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.itype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.itype)); ;} break; case 100: -#line 494 "parse.y" +#line 501 "parse.y" { ((*yyvalp).itype) = 2 * od_none; ;} break; case 101: -#line 496 "parse.y" - { ((*yyvalp).itype) = check_decl_order ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.itype)); ;} +#line 503 "parse.y" + { ((*yyvalp).itype) = check_decl_order ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.itype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.itype)); ;} break; case 102: -#line 500 "parse.y" +#line 507 "parse.y" { check_forward_decls (0); ;} break; case 103: -#line 502 "parse.y" - { ((*yyvalp).itype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.itype); ;} +#line 509 "parse.y" + { ((*yyvalp).itype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.itype); ;} break; case 104: -#line 504 "parse.y" +#line 511 "parse.y" { ((*yyvalp).itype) = od_label; ;} break; case 105: -#line 506 "parse.y" +#line 513 "parse.y" { ((*yyvalp).itype) = od_routine; ;} break; case 106: -#line 511 "parse.y" +#line 518 "parse.y" { ((*yyvalp).itype) = 2 * od_none; ;} break; case 107: -#line 513 "parse.y" - { ((*yyvalp).itype) = check_decl_order ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.itype)); ;} +#line 520 "parse.y" + { ((*yyvalp).itype) = check_decl_order ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.itype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.itype)); ;} break; case 110: -#line 520 "parse.y" +#line 527 "parse.y" { ((*yyvalp).itype) = od_routine; ;} break; case 111: -#line 525 "parse.y" +#line 532 "parse.y" { ((*yyvalp).itype) = 2 * od_none; ;} break; case 112: -#line 527 "parse.y" - { ((*yyvalp).itype) = check_decl_order ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.itype)); ;} +#line 534 "parse.y" + { ((*yyvalp).itype) = check_decl_order ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.itype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.itype)); ;} break; case 114: -#line 532 "parse.y" +#line 539 "parse.y" { check_forward_decls (0); ;} break; case 115: -#line 534 "parse.y" - { ((*yyvalp).itype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.itype); ;} +#line 541 "parse.y" + { ((*yyvalp).itype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.itype); ;} break; case 116: -#line 536 "parse.y" +#line 543 "parse.y" { ((*yyvalp).itype) = od_routine; ;} break; case 117: -#line 541 "parse.y" +#line 548 "parse.y" { ((*yyvalp).itype) = od_uses; ;} break; case 120: -#line 548 "parse.y" +#line 555 "parse.y" { warning ("missing comma"); yyerrok; ;} break; case 121: -#line 553 "parse.y" - { import_interface ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), NULL_TREE, IMPORT_USES, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 560 "parse.y" + { import_interface ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype), NULL_TREE, IMPORT_USES, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 123: -#line 559 "parse.y" - { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); chk_dialect ("file name specification with `in' is", BORLAND_DELPHI); ;} +#line 566 "parse.y" + { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype); chk_dialect ("file name specification with `in' is", BORLAND_DELPHI); ;} break; case 124: -#line 563 "parse.y" +#line 570 "parse.y" { #ifndef EGCS97 push_obstacks_nochange (); @@ -5443,84 +5214,84 @@ yyuserAction (yyRuleNum yyn, int yyrhsle break; case 125: -#line 570 "parse.y" +#line 577 "parse.y" { #ifndef EGCS97 pop_obstacks (); #endif - ((*yyvalp).itype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.itype); + ((*yyvalp).itype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.itype); ;} break; case 126: -#line 580 "parse.y" +#line 587 "parse.y" { ((*yyvalp).itype) = od_const; ;} break; case 127: -#line 582 "parse.y" +#line 589 "parse.y" { current_type_list = build_tree_list (NULL_TREE, NULL_TREE); ;} break; case 128: -#line 584 "parse.y" +#line 591 "parse.y" { declare_types (); ((*yyvalp).itype) = od_type; ;} break; case 129: -#line 586 "parse.y" +#line 593 "parse.y" { ((*yyvalp).itype) = od_var; ;} break; case 130: -#line 593 "parse.y" - { declare_label ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 600 "parse.y" + { declare_label ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 131: -#line 595 "parse.y" - { declare_label ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 602 "parse.y" + { declare_label ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 132: -#line 597 "parse.y" +#line 604 "parse.y" { error ("non-label in label_list"); ;} break; case 133: -#line 599 "parse.y" - { declare_label ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} +#line 606 "parse.y" + { declare_label ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} break; case 134: -#line 601 "parse.y" +#line 608 "parse.y" { error ("extra comma"); ;} break; case 137: -#line 608 "parse.y" +#line 615 "parse.y" { chk_dialect ("non-numeric labels are", B_D_M_PASCAL); ;} break; case 141: -#line 619 "parse.y" - { declare_constant ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 626 "parse.y" + { declare_constant ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 142: -#line 622 "parse.y" +#line 629 "parse.y" { lex_const_equal = -1; - declare_variables (build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-7)].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)), VQ_BP_CONST, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); + declare_variables (build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (8))].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (8))].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (8))].yystate.yysemantics.yysval.ttype)), VQ_BP_CONST, (((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (8))].yystate.yysemantics.yysval.ttype)); ;} break; case 145: -#line 635 "parse.y" +#line 642 "parse.y" { - tree t, ids = ((*yyvalp).ttype) = nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype)); - if ((TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) == POINTER_TYPE || TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) == REFERENCE_TYPE) - && TREE_CODE (TREE_TYPE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))) == FUNCTION_TYPE) + tree t, ids = ((*yyvalp).ttype) = nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype)); + if ((TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)) == POINTER_TYPE || TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)) == REFERENCE_TYPE) + && TREE_CODE (TREE_TYPE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype))) == FUNCTION_TYPE) TREE_PRIVATE (ids) = !!allow_function_calls (0); /* kludge */ /* With `begin var Foo: Integer; Foo := ...' where `Foo' is a built-in identifier, parser look-ahead would already get @@ -5532,114 +5303,114 @@ yyuserAction (yyRuleNum yyn, int yyrhsle break; case 146: -#line 648 "parse.y" +#line 655 "parse.y" { - tree t, ids = (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype); + tree t, ids = (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (8))].yystate.yysemantics.yysval.ttype); for (t = ids; t; t = TREE_CHAIN (t)) PASCAL_PENDING_DECLARATION (TREE_VALUE (t)) = 0; lex_const_equal = -1; - ((*yyvalp).ttype) = declare_variables (ids, (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), 0, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); - if ((TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype)) == POINTER_TYPE || TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype)) == REFERENCE_TYPE) - && TREE_CODE (TREE_TYPE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype))) == FUNCTION_TYPE) + ((*yyvalp).ttype) = declare_variables (ids, (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (8))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (8))].yystate.yysemantics.yysval.ttype), 0, (((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (8))].yystate.yysemantics.yysval.ttype)); + if ((TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (8))].yystate.yysemantics.yysval.ttype)) == POINTER_TYPE || TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (8))].yystate.yysemantics.yysval.ttype)) == REFERENCE_TYPE) + && TREE_CODE (TREE_TYPE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (8))].yystate.yysemantics.yysval.ttype))) == FUNCTION_TYPE) allow_function_calls (TREE_PRIVATE (ids)); yyerrok; ;} break; case 147: -#line 660 "parse.y" +#line 667 "parse.y" { ((*yyvalp).ttype) = NULL_TREE; lex_const_equal = -1; ;} break; case 149: -#line 666 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 673 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 151: -#line 672 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 679 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 152: -#line 674 "parse.y" - { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), p_name); ;} +#line 681 "parse.y" + { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yyloc), p_name); ;} break; case 153: -#line 676 "parse.y" - { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype))); ;} +#line 683 "parse.y" + { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (5))].yystate.yysemantics.yysval.ttype))); ;} break; case 155: -#line 682 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 689 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 156: -#line 687 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 694 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 157: -#line 689 "parse.y" - { ((*yyvalp).ttype) = TREE_PURPOSE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 696 "parse.y" + { ((*yyvalp).ttype) = TREE_PURPOSE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 159: -#line 695 "parse.y" +#line 702 "parse.y" { ((*yyvalp).itype) = allow_function_calls (0); lex_const_equal = -1; ;} break; case 160: -#line 697 "parse.y" +#line 704 "parse.y" { - allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype)); - ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); + allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.itype)); + ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); PASCAL_ABSOLUTE_CLAUSE (((*yyvalp).ttype)) = 1; ;} break; case 161: -#line 703 "parse.y" +#line 710 "parse.y" { ((*yyvalp).ttype) = NULL_TREE; ;} break; case 163: -#line 709 "parse.y" +#line 716 "parse.y" { yyerrok; ;} break; case 165: -#line 712 "parse.y" +#line 719 "parse.y" { error ("missing semicolon"); yyerrok; ;} break; case 166: -#line 714 "parse.y" +#line 721 "parse.y" { error ("extra semicolon"); ;} break; case 168: -#line 720 "parse.y" +#line 727 "parse.y" { lex_const_equal = -1; - if (!EM ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))) + if (!EM ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype))) { - if (PASCAL_TYPE_UNDISCRIMINATED_SCHEMA ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))) + if (PASCAL_TYPE_UNDISCRIMINATED_SCHEMA ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype))) chk_dialect ("undiscriminated schemata on the right side of a type definition are", GNU_PASCAL); - build_type_decl ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); + build_type_decl ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype)); } ;} break; case 169: -#line 730 "parse.y" +#line 737 "parse.y" { current_schema = start_struct (RECORD_TYPE); ;} break; case 170: -#line 732 "parse.y" +#line 739 "parse.y" { ((*yyvalp).itype) = immediate_size_expand; immediate_size_expand = 0; @@ -5648,148 +5419,148 @@ yyuserAction (yyRuleNum yyn, int yyrhsle break; case 171: -#line 738 "parse.y" +#line 745 "parse.y" { - build_type_decl ((((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.ttype), build_schema_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), current_schema), + build_type_decl ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (7))].yystate.yysemantics.yysval.ttype), build_schema_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (7))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (7))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (7))].yystate.yysemantics.yysval.ttype), current_schema), NULL_TREE); - immediate_size_expand = (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.itype); + immediate_size_expand = (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (7))].yystate.yysemantics.yysval.itype); size_volatile--; current_schema = NULL_TREE; ;} break; case 172: -#line 746 "parse.y" +#line 753 "parse.y" { current_schema = start_struct (RECORD_TYPE); ;} break; case 173: -#line 748 "parse.y" - { build_schema_type (error_mark_node, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), NULL_TREE, current_schema); +#line 755 "parse.y" + { build_schema_type (error_mark_node, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), NULL_TREE, current_schema); current_schema = NULL_TREE; ;} break; case 174: -#line 752 "parse.y" - { ((*yyvalp).ttype) = start_object_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), 0); ;} +#line 759 "parse.y" + { ((*yyvalp).ttype) = start_object_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), 0); ;} break; case 175: -#line 754 "parse.y" +#line 761 "parse.y" { push_scope (); ;} break; case 176: -#line 756 "parse.y" +#line 763 "parse.y" { lex_const_equal = -1; - finish_object_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype) != NULL_TREE); - pop_record_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.ttype)); + finish_object_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (10))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (10))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((9) - (10))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (10))].yystate.yysemantics.yysval.ttype) != NULL_TREE); + pop_record_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (10))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} break; case 177: -#line 764 "parse.y" - { ((*yyvalp).ttype) = start_object_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), 1); ;} +#line 771 "parse.y" + { ((*yyvalp).ttype) = start_object_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), 1); ;} break; case 178: -#line 766 "parse.y" +#line 773 "parse.y" { push_scope (); ;} break; case 179: -#line 768 "parse.y" +#line 775 "parse.y" { lex_const_equal = -1; - finish_object_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype) != NULL_TREE); - pop_record_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.ttype)); + finish_object_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (10))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (10))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((9) - (10))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (10))].yystate.yysemantics.yysval.ttype) != NULL_TREE); + pop_record_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (10))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} break; case 180: -#line 776 "parse.y" +#line 783 "parse.y" { push_scope (); ;} break; case 181: -#line 778 "parse.y" +#line 785 "parse.y" { lex_const_equal = -1; - finish_view_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (-9)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); + finish_view_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (10))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (10))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (10))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((9) - (10))].yystate.yysemantics.yysval.ttype)); pop_record_level (NULL_TREE); yyerrok; ;} break; case 182: -#line 785 "parse.y" +#line 792 "parse.y" { tree t = build_pascal_pointer_type (make_node (LANG_TYPE)); PASCAL_TYPE_CLASS (t) = 1; - build_type_decl ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), t, NULL_TREE); + build_type_decl ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (5))].yystate.yysemantics.yysval.ttype), t, NULL_TREE); warning("ignored parent in Delphi forward class declaration"); ;} break; case 183: -#line 792 "parse.y" +#line 799 "parse.y" { tree t = build_pascal_pointer_type (make_node (LANG_TYPE)); PASCAL_TYPE_CLASS (t) = 1; - build_type_decl ((((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype), t, NULL_TREE); + build_type_decl ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (6))].yystate.yysemantics.yysval.ttype), t, NULL_TREE); ;} break; case 184: -#line 798 "parse.y" +#line 805 "parse.y" { tree t = build_pascal_pointer_type (make_node (LANG_TYPE)); PASCAL_TYPE_CLASS (t) = 1; - build_type_decl ((((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype), t, NULL_TREE); + build_type_decl ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (6))].yystate.yysemantics.yysval.ttype), t, NULL_TREE); ;} break; case 185: -#line 807 "parse.y" - { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype); ;} +#line 814 "parse.y" + { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype); ;} break; case 186: -#line 809 "parse.y" +#line 816 "parse.y" { error ("invalid schema discriminants"); ((*yyvalp).ttype) = NULL_TREE; ;} break; case 188: -#line 815 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 822 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 189: -#line 817 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); error ("missing semicolon"); yyerrok; ;} +#line 824 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing semicolon"); yyerrok; ;} break; case 190: -#line 819 "parse.y" +#line 826 "parse.y" { error ("extra semicolon"); ;} break; case 192: -#line 825 "parse.y" - { ((*yyvalp).ttype) = build_discriminants ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), current_schema); ;} +#line 832 "parse.y" + { ((*yyvalp).ttype) = build_discriminants ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), current_schema); ;} break; case 194: -#line 831 "parse.y" - { type_attributes (&((*yyvalp).ttype), TREE_PURPOSE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} +#line 838 "parse.y" + { type_attributes (&((*yyvalp).ttype), TREE_PURPOSE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype))); ;} break; case 195: -#line 836 "parse.y" +#line 843 "parse.y" { #ifndef EGCS97 push_obstacks_nochange (); @@ -5799,473 +5570,473 @@ yyuserAction (yyRuleNum yyn, int yyrhsle break; case 196: -#line 843 "parse.y" +#line 850 "parse.y" { #ifndef EGCS97 pop_obstacks (); #endif - ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); + ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype); ;} break; case 198: -#line 854 "parse.y" - { ((*yyvalp).ttype) = pascal_type_variant ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), TYPE_QUALIFIER_BINDABLE); ;} +#line 861 "parse.y" + { ((*yyvalp).ttype) = pascal_type_variant ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype), TYPE_QUALIFIER_BINDABLE); ;} break; case 200: -#line 860 "parse.y" - { ((*yyvalp).ttype) = pascal_type_variant ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), TYPE_QUALIFIER_RESTRICTED); ;} +#line 867 "parse.y" + { ((*yyvalp).ttype) = pascal_type_variant ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype), TYPE_QUALIFIER_RESTRICTED); ;} break; case 201: -#line 862 "parse.y" - { ((*yyvalp).ttype) = build_discriminated_schema_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0); ;} +#line 869 "parse.y" + { ((*yyvalp).ttype) = build_discriminated_schema_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype), 0); ;} break; case 205: -#line 867 "parse.y" +#line 874 "parse.y" { chk_dialect ("procedural variables and types are", B_D_M_PASCAL); ;} break; case 207: -#line 870 "parse.y" - { defining_packed_type -= (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype); ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype) ? pack_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) : (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); ;} +#line 877 "parse.y" + { defining_packed_type -= (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.itype); ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.itype) ? pack_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)) : (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype); ;} break; case 208: -#line 875 "parse.y" - { chk_dialect ("schema/string discriminants are", E_O_M_PASCAL); ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype); ;} +#line 882 "parse.y" + { chk_dialect ("schema/string discriminants are", E_O_M_PASCAL); ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype); ;} break; case 209: -#line 877 "parse.y" +#line 884 "parse.y" { chk_dialect ("string capacity in brackets is", U_B_D_M_PASCAL); - ((*yyvalp).ttype) = build_tree_list (NULL_TREE, maybe_schema_discriminant (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), 0))); + ((*yyvalp).ttype) = build_tree_list (NULL_TREE, maybe_schema_discriminant (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), 0))); ;} break; case 210: -#line 886 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, maybe_schema_discriminant (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0))); ;} +#line 893 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, maybe_schema_discriminant (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), 0))); ;} break; case 211: -#line 888 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, maybe_schema_discriminant (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0)))); yyerrok; ;} +#line 895 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, maybe_schema_discriminant (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 0)))); yyerrok; ;} break; case 212: -#line 890 "parse.y" +#line 897 "parse.y" { error ("missing expression"); ((*yyvalp).ttype) = NULL_TREE; ;} break; case 213: -#line 892 "parse.y" - { error ("missing comma"); ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, maybe_schema_discriminant (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0)))); yyerrok; ;} +#line 899 "parse.y" + { error ("missing comma"); ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, maybe_schema_discriminant (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 0)))); yyerrok; ;} break; case 214: -#line 894 "parse.y" +#line 901 "parse.y" { error ("extra comma"); ;} break; case 215: -#line 899 "parse.y" - { ((*yyvalp).ttype) = build_pascal_array_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype)); ;} +#line 906 "parse.y" + { ((*yyvalp).ttype) = build_pascal_array_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype)); ;} break; case 217: -#line 902 "parse.y" - { ((*yyvalp).ttype) = build_file_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), 0); ;} +#line 909 "parse.y" + { ((*yyvalp).ttype) = build_file_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.ttype), 0); ;} break; case 218: -#line 904 "parse.y" - { ((*yyvalp).ttype) = build_set_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 911 "parse.y" + { ((*yyvalp).ttype) = build_set_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 219: -#line 905 "parse.y" +#line 912 "parse.y" { push_scope (); ;} break; case 220: -#line 906 "parse.y" - { pop_record_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype); yyerrok; ;} +#line 913 "parse.y" + { pop_record_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype); yyerrok; ;} break; case 221: -#line 908 "parse.y" +#line 915 "parse.y" { ((*yyvalp).ttype) = build_record (NULL_TREE, NULL_TREE, NULL_TREE); ;} break; case 224: -#line 915 "parse.y" - { ((*yyvalp).ttype) = TREE_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 922 "parse.y" + { ((*yyvalp).ttype) = TREE_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 226: -#line 921 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} +#line 928 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} break; case 227: -#line 923 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} +#line 930 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} break; case 228: -#line 925 "parse.y" +#line 932 "parse.y" { ((*yyvalp).ttype) = build_tree_list (error_mark_node, error_mark_node); ;} break; case 229: -#line 927 "parse.y" +#line 934 "parse.y" { ((*yyvalp).ttype) = build_tree_list (error_mark_node, error_mark_node); ;} break; case 230: -#line 932 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 939 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 231: -#line 934 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 941 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 232: -#line 939 "parse.y" +#line 946 "parse.y" { ((*yyvalp).ttype) = build_record (NULL_TREE, NULL_TREE, NULL_TREE); ;} break; case 233: -#line 941 "parse.y" - { ((*yyvalp).ttype) = build_record ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), NULL_TREE, NULL_TREE); ;} +#line 948 "parse.y" + { ((*yyvalp).ttype) = build_record ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype), NULL_TREE, NULL_TREE); ;} break; case 234: -#line 943 "parse.y" - { ((*yyvalp).ttype) = build_record ((((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} +#line 950 "parse.y" + { ((*yyvalp).ttype) = build_record ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (7))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (7))].yystate.yysemantics.yysval.ttype), chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (7))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (7))].yystate.yysemantics.yysval.ttype))); ;} break; case 238: -#line 954 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} +#line 961 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} break; case 239: -#line 956 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); error ("missing semicolon"); yyerrok; ;} +#line 963 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing semicolon"); yyerrok; ;} break; case 240: -#line 958 "parse.y" +#line 965 "parse.y" { error ("extra semicolon"); ;} break; case 242: -#line 964 "parse.y" - { ((*yyvalp).ttype) = build_fields ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 971 "parse.y" + { ((*yyvalp).ttype) = build_fields ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 243: -#line 969 "parse.y" +#line 976 "parse.y" { ((*yyvalp).ttype) = NULL_TREE; ;} break; case 244: -#line 971 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, build_field (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype))); ;} +#line 978 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, build_field (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (5))].yystate.yysemantics.yysval.ttype))); ;} break; case 245: -#line 976 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), build_field ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} +#line 983 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), build_field ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))); ;} break; case 246: -#line 978 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), build_field ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} +#line 985 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), build_field ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))); ;} break; case 247: -#line 980 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} +#line 987 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} break; case 248: -#line 982 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} +#line 989 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} break; case 250: -#line 988 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} +#line 995 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} break; case 251: -#line 990 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); error ("missing semicolon"); yyerrok; ;} +#line 997 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing semicolon"); yyerrok; ;} break; case 252: -#line 992 "parse.y" +#line 999 "parse.y" { ((*yyvalp).ttype) = NULL_TREE; ;} break; case 254: -#line 998 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), build_field (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); ;} +#line 1005 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (5))].yystate.yysemantics.yysval.ttype), build_field (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype))); ;} break; case 255: -#line 1003 "parse.y" +#line 1010 "parse.y" { chk_dialect ("type denoters (no identifiers) as variant tag type are", U_B_D_M_PASCAL); ;} break; case 258: -#line 1013 "parse.y" - { ((*yyvalp).ttype) = build_enum_type (nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); ;} +#line 1020 "parse.y" + { ((*yyvalp).ttype) = build_enum_type (nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype))); ;} break; case 259: -#line 1015 "parse.y" +#line 1022 "parse.y" { ((*yyvalp).ttype) = error_mark_node; ;} break; case 260: -#line 1020 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} +#line 1027 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} break; case 261: -#line 1022 "parse.y" - { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} +#line 1029 "parse.y" + { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} break; case 262: -#line 1024 "parse.y" - { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} +#line 1031 "parse.y" + { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} break; case 263: -#line 1026 "parse.y" +#line 1033 "parse.y" { error ("extra comma"); ;} break; case 265: -#line 1032 "parse.y" - { ((*yyvalp).ttype) = build_pascal_subrange_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0); ;} +#line 1039 "parse.y" + { ((*yyvalp).ttype) = build_pascal_subrange_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 0); ;} break; case 266: -#line 1034 "parse.y" +#line 1041 "parse.y" { - defining_packed_type -= (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.itype); + defining_packed_type -= (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.itype); chk_dialect ("packed subrange types are", B_D_PASCAL); - ((*yyvalp).ttype) = build_pascal_subrange_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.itype)); + ((*yyvalp).ttype) = build_pascal_subrange_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.itype)); ;} break; case 267: -#line 1043 "parse.y" - { ((*yyvalp).ttype) = EM ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) ? error_mark_node : build_pascal_pointer_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1050 "parse.y" + { ((*yyvalp).ttype) = EM ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)) ? error_mark_node : build_pascal_pointer_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 268: -#line 1045 "parse.y" - { ((*yyvalp).ttype) = EM ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) ? error_mark_node : build_pascal_pointer_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1052 "parse.y" + { ((*yyvalp).ttype) = EM ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)) ? error_mark_node : build_pascal_pointer_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 269: -#line 1047 "parse.y" - { ((*yyvalp).ttype) = EM ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) ? error_mark_node : build_pascal_pointer_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1054 "parse.y" + { ((*yyvalp).ttype) = EM ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)) ? error_mark_node : build_pascal_pointer_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 270: -#line 1049 "parse.y" - { ((*yyvalp).ttype) = EM ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) ? error_mark_node : build_pascal_pointer_type (p_build_type_variant ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 1, TYPE_VOLATILE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)))); ;} +#line 1056 "parse.y" + { ((*yyvalp).ttype) = EM ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)) ? error_mark_node : build_pascal_pointer_type (p_build_type_variant ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 1, TYPE_VOLATILE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)))); ;} break; case 271: -#line 1054 "parse.y" - { ((*yyvalp).ttype) = get_pointer_domain_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1061 "parse.y" + { ((*yyvalp).ttype) = get_pointer_domain_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 272: -#line 1056 "parse.y" +#line 1063 "parse.y" { chk_dialect ("pointers to routines are", GNU_PASCAL); - gcc_assert (EM ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) || (TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) == REFERENCE_TYPE && TREE_TYPE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)))); - ((*yyvalp).ttype) = TREE_TYPE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); + gcc_assert (EM ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)) || (TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)) == REFERENCE_TYPE && TREE_TYPE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)))); + ((*yyvalp).ttype) = TREE_TYPE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 274: -#line 1066 "parse.y" +#line 1073 "parse.y" { - pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); - ((*yyvalp).ttype) = build_procedural_type (void_type_node, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); + pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype), NULL_TREE); + ((*yyvalp).ttype) = build_procedural_type (void_type_node, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 275: -#line 1071 "parse.y" - { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} +#line 1078 "parse.y" + { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} break; case 276: -#line 1073 "parse.y" - { ((*yyvalp).ttype) = build_procedural_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} +#line 1080 "parse.y" + { ((*yyvalp).ttype) = build_procedural_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 278: -#line 1079 "parse.y" - { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype); ;} +#line 1086 "parse.y" + { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype); ;} break; case 279: -#line 1081 "parse.y" +#line 1088 "parse.y" { ((*yyvalp).ttype) = NULL_TREE; ;} break; case 282: -#line 1090 "parse.y" - { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); ;} +#line 1097 "parse.y" + { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype); ;} break; case 283: -#line 1091 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1098 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 284: -#line 1093 "parse.y" +#line 1100 "parse.y" { ((*yyvalp).ttype) = error_mark_node; ;} break; case 286: -#line 1099 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), build_tree_list (void_type_node, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} +#line 1106 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype), build_tree_list (void_type_node, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype))); ;} break; case 287: -#line 1101 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} +#line 1108 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} break; case 288: -#line 1106 "parse.y" - { ((*yyvalp).ttype) = build_fields ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1113 "parse.y" + { ((*yyvalp).ttype) = build_fields ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 289: -#line 1108 "parse.y" +#line 1115 "parse.y" { - pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); - ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE, + pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE); + ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE, void_type_node, 0); ;} break; case 290: -#line 1114 "parse.y" - { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1121 "parse.y" + { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 291: -#line 1116 "parse.y" - { ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0); ;} +#line 1123 "parse.y" + { ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (6))].yystate.yysemantics.yysval.ttype), 0); ;} break; case 292: -#line 1118 "parse.y" +#line 1125 "parse.y" { - pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); - ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE, + pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE); + ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE, boolean_type_node, 1); ;} break; case 293: -#line 1124 "parse.y" +#line 1131 "parse.y" { - pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); - ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE, + pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE); + ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE, void_type_node, 1); ;} break; case 294: -#line 1130 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1137 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 295: -#line 1132 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1139 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 296: -#line 1134 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1141 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 297: -#line 1136 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1143 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 298: -#line 1138 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1145 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 301: -#line 1145 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1152 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 302: -#line 1147 "parse.y" +#line 1154 "parse.y" { ((*yyvalp).ttype) = NULL_TREE; ;} break; case 303: -#line 1151 "parse.y" +#line 1158 "parse.y" { lex_const_equal = -1; ;} break; case 304: -#line 1153 "parse.y" +#line 1160 "parse.y" { chk_dialect ("initialization with `:=' is", VAX_PASCAL|SUN_PASCAL); ;} break; case 305: -#line 1155 "parse.y" +#line 1162 "parse.y" { chk_dialect ("initialization with `=' is", BORLAND_DELPHI); ;} break; case 306: -#line 1162 "parse.y" - { declare_routine ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 1); ;} +#line 1169 "parse.y" + { declare_routine ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 1); ;} break; case 307: -#line 1173 "parse.y" - { declare_routine ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0); ;} +#line 1180 "parse.y" + { declare_routine ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 0); ;} break; case 308: -#line 1175 "parse.y" - { ((*yyvalp).ttype) = start_routine ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1182 "parse.y" + { ((*yyvalp).ttype) = start_routine ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 309: -#line 1177 "parse.y" +#line 1184 "parse.y" { do_setjmp (); un_initialize_block (getdecls (), 0, 0); @@ -6273,455 +6044,455 @@ yyuserAction (yyRuleNum yyn, int yyrhsle break; case 310: -#line 1182 "parse.y" - { finish_routine ((((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype)); ;} +#line 1189 "parse.y" + { finish_routine ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (9))].yystate.yysemantics.yysval.ttype)); ;} break; case 313: -#line 1192 "parse.y" +#line 1199 "parse.y" { - pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); - ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE, + pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE); + ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE, void_type_node, 0); ;} break; case 314: -#line 1198 "parse.y" - { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1205 "parse.y" + { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 315: -#line 1200 "parse.y" - { ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0); ;} +#line 1207 "parse.y" + { ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (6))].yystate.yysemantics.yysval.ttype), 0); ;} break; case 316: -#line 1202 "parse.y" - { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1209 "parse.y" + { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 317: -#line 1204 "parse.y" - { ((*yyvalp).ttype) = build_operator_heading ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1211 "parse.y" + { ((*yyvalp).ttype) = build_operator_heading ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (6))].yystate.yysemantics.yysval.ttype)); ;} break; case 318: -#line 1214 "parse.y" +#line 1221 "parse.y" { - pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); - ((*yyvalp).ttype) = build_routine_heading ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE, + pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), NULL_TREE); + ((*yyvalp).ttype) = build_routine_heading ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), NULL_TREE, void_type_node, 0); ;} break; case 319: -#line 1220 "parse.y" - { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1227 "parse.y" + { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (6))].yystate.yysemantics.yysval.ttype)); ;} break; case 320: -#line 1222 "parse.y" - { ((*yyvalp).ttype) = build_routine_heading ((((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0); ;} +#line 1229 "parse.y" + { ((*yyvalp).ttype) = build_routine_heading ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (8))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (8))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (8))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (8))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((8) - (8))].yystate.yysemantics.yysval.ttype), 0); ;} break; case 321: -#line 1224 "parse.y" +#line 1231 "parse.y" { - pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); - ((*yyvalp).ttype) = build_routine_heading ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE, + pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), NULL_TREE); + ((*yyvalp).ttype) = build_routine_heading ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), NULL_TREE, boolean_type_node, 1); ;} break; case 322: -#line 1230 "parse.y" +#line 1237 "parse.y" { - pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); - ((*yyvalp).ttype) = build_routine_heading ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE, + pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), NULL_TREE); + ((*yyvalp).ttype) = build_routine_heading ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), NULL_TREE, void_type_node, 1); ;} break; case 325: -#line 1244 "parse.y" - { ((*yyvalp).ttype) = chainon (chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1251 "parse.y" + { ((*yyvalp).ttype) = chainon (chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 326: -#line 1249 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1256 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 327: -#line 1251 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} +#line 1258 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 328: -#line 1253 "parse.y" - { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), p_name); ;} +#line 1260 "parse.y" + { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yyloc), p_name); ;} break; case 329: -#line 1255 "parse.y" - { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype))); ;} +#line 1262 "parse.y" + { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype), build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (6))].yystate.yysemantics.yysval.ttype))); ;} break; case 330: -#line 1257 "parse.y" - { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype))); ;} +#line 1264 "parse.y" + { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (6))].yystate.yysemantics.yysval.ttype), build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (6))].yystate.yysemantics.yysval.ttype))); ;} break; case 331: -#line 1259 "parse.y" - { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype), build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype))); ;} +#line 1266 "parse.y" + { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (6))].yystate.yysemantics.yysval.ttype), build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (6))].yystate.yysemantics.yysval.ttype))); ;} break; case 332: -#line 1261 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} +#line 1268 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 333: -#line 1263 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1270 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 334: -#line 1265 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1272 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 336: -#line 1271 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1278 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 337: -#line 1273 "parse.y" - { ((*yyvalp).ttype) = tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} +#line 1280 "parse.y" + { ((*yyvalp).ttype) = tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 338: -#line 1278 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype)); ;} +#line 1285 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 340: -#line 1284 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1291 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 342: -#line 1290 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} +#line 1297 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} break; case 343: -#line 1292 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} +#line 1299 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} break; case 344: -#line 1294 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} +#line 1301 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))); ;} break; case 345: -#line 1296 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); ;} +#line 1303 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype))); ;} break; case 346: -#line 1298 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype), tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); ;} +#line 1305 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (6))].yystate.yysemantics.yysval.ttype), tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (6))].yystate.yysemantics.yysval.ttype))); ;} break; case 352: -#line 1314 "parse.y" - { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); chk_dialect ("operator result variables with `=' are", GNU_PASCAL); ;} +#line 1321 "parse.y" + { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype); chk_dialect ("operator result variables with `=' are", GNU_PASCAL); ;} break; case 353: -#line 1316 "parse.y" +#line 1323 "parse.y" { error ("missing operator result variable"); ;} break; case 354: -#line 1320 "parse.y" +#line 1327 "parse.y" { push_scope (); ;} break; case 355: -#line 1320 "parse.y" - { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); ;} +#line 1327 "parse.y" + { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype); ;} break; case 357: -#line 1325 "parse.y" +#line 1332 "parse.y" { chk_dialect ("empty parentheses are", BORLAND_DELPHI); ((*yyvalp).ttype) = void_list_node; ;} break; case 358: -#line 1327 "parse.y" - { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype); ;} +#line 1334 "parse.y" + { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype); ;} break; case 359: -#line 1329 "parse.y" +#line 1336 "parse.y" { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, NULL_TREE); ;} break; case 360: -#line 1331 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, NULL_TREE)); ;} +#line 1338 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (5))].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, NULL_TREE)); ;} break; case 361: -#line 1333 "parse.y" +#line 1340 "parse.y" { ((*yyvalp).ttype) = NULL_TREE; ;} break; case 363: -#line 1339 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} +#line 1346 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} break; case 364: -#line 1341 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); error ("missing semicolon"); yyerrok; ;} +#line 1348 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing semicolon"); yyerrok; ;} break; case 366: -#line 1347 "parse.y" - { ((*yyvalp).ttype) = build_formal_param ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0, 0); ;} +#line 1354 "parse.y" + { ((*yyvalp).ttype) = build_formal_param ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 0, 0); ;} break; case 367: -#line 1349 "parse.y" - { ((*yyvalp).ttype) = build_formal_param ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0, 1); ;} +#line 1356 "parse.y" + { ((*yyvalp).ttype) = build_formal_param ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype), 0, 1); ;} break; case 368: -#line 1351 "parse.y" - { ((*yyvalp).ttype) = build_formal_param ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 1, !!(((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype)); ;} +#line 1358 "parse.y" + { ((*yyvalp).ttype) = build_formal_param ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype), 1, !!(((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 369: -#line 1353 "parse.y" - { ((*yyvalp).ttype) = build_formal_param ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 3, 1); ;} +#line 1360 "parse.y" + { ((*yyvalp).ttype) = build_formal_param ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), 3, 1); ;} break; case 370: -#line 1355 "parse.y" - { ((*yyvalp).ttype) = build_formal_param ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 2, 1); ;} +#line 1362 "parse.y" + { ((*yyvalp).ttype) = build_formal_param ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 2, 1); ;} break; case 371: -#line 1357 "parse.y" +#line 1364 "parse.y" { - pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); - ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE, + pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE); + ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE, void_type_node, 0); ;} break; case 372: -#line 1363 "parse.y" - { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1370 "parse.y" + { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 373: -#line 1365 "parse.y" - { ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0); ;} +#line 1372 "parse.y" + { ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (6))].yystate.yysemantics.yysval.ttype), 0); ;} break; case 374: -#line 1370 "parse.y" +#line 1377 "parse.y" { ((*yyvalp).ttype) = NULL_TREE; ;} break; case 375: -#line 1372 "parse.y" - { ((*yyvalp).ttype) = check_result_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1379 "parse.y" + { ((*yyvalp).ttype) = check_result_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 378: -#line 1379 "parse.y" - { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); chk_dialect ("function result variable specifications are", E_O_PASCAL); ;} +#line 1386 "parse.y" + { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype); chk_dialect ("function result variable specifications are", E_O_PASCAL); ;} break; case 380: -#line 1385 "parse.y" +#line 1392 "parse.y" { chk_dialect ("function result variables without `=' are", GNU_PASCAL); ;} break; case 383: -#line 1395 "parse.y" +#line 1402 "parse.y" { ((*yyvalp).ttype) = void_type_node; chk_dialect ("untyped parameters are", U_B_D_M_PASCAL); ;} break; case 384: -#line 1397 "parse.y" - { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); ;} +#line 1404 "parse.y" + { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype); ;} break; case 388: -#line 1408 "parse.y" - { ((*yyvalp).ttype) = build_type_of ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1415 "parse.y" + { ((*yyvalp).ttype) = build_type_of ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 391: -#line 1418 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1425 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (6))].yystate.yysemantics.yysval.ttype)); ;} break; case 392: -#line 1420 "parse.y" +#line 1427 "parse.y" { - defining_packed_type -= (((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.itype); - PASCAL_TREE_PACKED ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype)) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.itype); - ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); + defining_packed_type -= (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (7))].yystate.yysemantics.yysval.itype); + PASCAL_TREE_PACKED ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (7))].yystate.yysemantics.yysval.ttype)) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (7))].yystate.yysemantics.yysval.itype); + ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (7))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (7))].yystate.yysemantics.yysval.ttype)); ;} break; case 394: -#line 1430 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} +#line 1437 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} break; case 395: -#line 1432 "parse.y" +#line 1439 "parse.y" { error ("missing semicolon"); yyerrok; ;} break; case 397: -#line 1438 "parse.y" - { TREE_TYPE ((((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)))) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); ;} +#line 1445 "parse.y" + { TREE_TYPE ((((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (5))].yystate.yysemantics.yysval.ttype)))) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype); ;} break; case 398: -#line 1443 "parse.y" - { TREE_TYPE ((((*yyvalp).ttype) = build_tree_list (NULL_TREE, NULL_TREE))) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); ;} +#line 1450 "parse.y" + { TREE_TYPE ((((*yyvalp).ttype) = build_tree_list (NULL_TREE, NULL_TREE))) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype); ;} break; case 401: -#line 1455 "parse.y" +#line 1462 "parse.y" { yyerrok; ;} break; case 403: -#line 1461 "parse.y" +#line 1468 "parse.y" { yyerrok; ;} break; case 406: -#line 1468 "parse.y" +#line 1475 "parse.y" { chk_dialect ("variable declarations in the statement part are", GNU_PASCAL); pushlevel_expand (1); ;} break; case 407: -#line 1470 "parse.y" - { un_initialize_block ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0, 0); ;} +#line 1477 "parse.y" + { un_initialize_block ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 0, 0); ;} break; case 409: -#line 1476 "parse.y" +#line 1483 "parse.y" { ((*yyvalp).itype) = 0; ;} break; case 410: -#line 1478 "parse.y" +#line 1485 "parse.y" { ((*yyvalp).itype) = 1; ;} break; case 412: -#line 1486 "parse.y" +#line 1493 "parse.y" { mark_temporary_levels (); ;} break; case 413: -#line 1488 "parse.y" +#line 1495 "parse.y" { release_temporary_levels (); ;} break; case 418: -#line 1503 "parse.y" - { expand_call_statement ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1510 "parse.y" + { expand_call_statement ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 419: -#line 1505 "parse.y" - { ((*yyvalp).itype) = allow_function_calls (!PASCAL_PROCEDURAL_TYPE (TREE_TYPE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)))); ;} +#line 1512 "parse.y" + { ((*yyvalp).itype) = allow_function_calls (!PASCAL_PROCEDURAL_TYPE (TREE_TYPE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)))); ;} break; case 420: -#line 1507 "parse.y" - { expand_pascal_assignment ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.itype)); ;} +#line 1514 "parse.y" + { expand_pascal_assignment ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)); allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.itype)); ;} break; case 421: -#line 1509 "parse.y" +#line 1516 "parse.y" { build_predef_call (p_Return, NULL_TREE); ;} break; case 422: -#line 1511 "parse.y" - { build_predef_call (p_Return, build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} +#line 1518 "parse.y" + { build_predef_call (p_Return, build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype))); ;} break; case 423: -#line 1513 "parse.y" +#line 1520 "parse.y" { build_predef_call (p_Exit, NULL_TREE); ;} break; case 424: -#line 1515 "parse.y" +#line 1522 "parse.y" { build_predef_call (p_Exit, build_tree_list (NULL_TREE, void_type_node)); ;} break; case 425: -#line 1517 "parse.y" - { build_predef_call (p_Exit, build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); ;} +#line 1524 "parse.y" + { build_predef_call (p_Exit, build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype))); ;} break; case 426: -#line 1519 "parse.y" - { build_predef_call (p_Exit, build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); ;} +#line 1526 "parse.y" + { build_predef_call (p_Exit, build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (6))].yystate.yysemantics.yysval.ttype))); ;} break; case 428: -#line 1522 "parse.y" - { restore_identifiers ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype)); ;} +#line 1529 "parse.y" + { restore_identifiers ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (6))].yystate.yysemantics.yysval.ttype)); ;} break; case 429: -#line 1524 "parse.y" +#line 1531 "parse.y" { expand_end_cond (); ;} break; case 430: -#line 1526 "parse.y" +#line 1533 "parse.y" { expand_start_else (); ;} break; case 431: -#line 1528 "parse.y" +#line 1535 "parse.y" { - if (!(((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype) && extra_warnings) + if (!(((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (6))].yystate.yysemantics.yysval.itype) && extra_warnings) warning ("empty statement after `else'"); expand_end_cond (); ;} break; case 432: -#line 1534 "parse.y" - { ((*yyvalp).ttype) = pascal_expand_start_case ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1541 "parse.y" + { ((*yyvalp).ttype) = pascal_expand_start_case ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 433: -#line 1536 "parse.y" +#line 1543 "parse.y" { if (!EM (current_case_values)) { @@ -6733,128 +6504,128 @@ yyuserAction (yyRuleNum yyn, int yyrhsle break; case 434: -#line 1545 "parse.y" +#line 1552 "parse.y" { - if (!(((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.itype) && !(((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype)) + if (!(((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (8))].yystate.yysemantics.yysval.itype) && !(((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (8))].yystate.yysemantics.yysval.itype)) chk_dialect ("empty `case' statements are", MAC_PASCAL); expand_exit_something (); if (!EM (current_case_values)) - expand_end_case ((((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.ttype)); - current_case_values = (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype); + expand_end_case ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (8))].yystate.yysemantics.yysval.ttype)); + current_case_values = (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (8))].yystate.yysemantics.yysval.ttype); yyerrok; ;} break; case 435: -#line 1555 "parse.y" +#line 1562 "parse.y" { emit_nop (); expand_start_loop_continue_elsewhere (1); ;} break; case 436: -#line 1557 "parse.y" - { LOCATION_NOTE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc)); expand_loop_continue_here (); ;} +#line 1564 "parse.y" + { LOCATION_NOTE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yyloc)); expand_loop_continue_here (); ;} break; case 437: -#line 1559 "parse.y" - { LOCATION_NOTE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc)); expand_exit_loop_if_false (0, build_pascal_unary_op (TRUTH_NOT_EXPR, check_boolean ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)))); ;} +#line 1566 "parse.y" + { LOCATION_NOTE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (7))].yystate.yyloc)); expand_exit_loop_if_false (0, build_pascal_unary_op (TRUTH_NOT_EXPR, check_boolean ((((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (7))].yystate.yysemantics.yysval.ttype)))); ;} break; case 438: -#line 1561 "parse.y" +#line 1568 "parse.y" { expand_end_loop (); ;} break; case 439: -#line 1563 "parse.y" +#line 1570 "parse.y" { expand_start_loop (1); ;} break; case 440: -#line 1565 "parse.y" - { LOCATION_NOTE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc)); expand_exit_loop_if_false (0, check_boolean ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} +#line 1572 "parse.y" + { LOCATION_NOTE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yyloc)); expand_exit_loop_if_false (0, check_boolean ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype))); ;} break; case 441: -#line 1567 "parse.y" +#line 1574 "parse.y" { expand_end_loop (); ;} break; case 442: -#line 1569 "parse.y" - { ((*yyvalp).ttype) = start_for_loop ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.code)); ;} +#line 1576 "parse.y" + { ((*yyvalp).ttype) = start_for_loop ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (6))].yystate.yysemantics.yysval.code)); ;} break; case 443: -#line 1571 "parse.y" - { LOCATION_NOTE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yyloc)); finish_for_loop ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.code)); ;} +#line 1578 "parse.y" + { LOCATION_NOTE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (11))].yystate.yyloc)); finish_for_loop ((((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (11))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (11))].yystate.yysemantics.yysval.code)); ;} break; case 444: -#line 1573 "parse.y" - { ((*yyvalp).ttype) = start_for_set_loop ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1580 "parse.y" + { ((*yyvalp).ttype) = start_for_set_loop ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 445: -#line 1575 "parse.y" - { LOCATION_NOTE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yyloc)); finish_for_set_loop ((((yyGLRStackItem const *)yyvsp)[YYFILL (-7)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype)); ;} +#line 1582 "parse.y" + { LOCATION_NOTE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (9))].yystate.yyloc)); finish_for_set_loop ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (9))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (9))].yystate.yysemantics.yysval.ttype)); ;} break; case 446: -#line 1577 "parse.y" - { pascal_expand_goto ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1584 "parse.y" + { pascal_expand_goto ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 447: -#line 1582 "parse.y" - { set_label ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1589 "parse.y" + { set_label ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 449: -#line 1588 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} +#line 1595 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} break; case 450: -#line 1590 "parse.y" +#line 1597 "parse.y" { ((*yyvalp).ttype) = NULL_TREE; ;} break; case 451: -#line 1592 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} +#line 1599 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} break; case 452: -#line 1594 "parse.y" +#line 1601 "parse.y" { error ("extra comma"); ;} break; case 453: -#line 1599 "parse.y" - { ((*yyvalp).ttype) = pascal_shadow_record_fields ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} +#line 1606 "parse.y" + { ((*yyvalp).ttype) = pascal_shadow_record_fields ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} break; case 454: -#line 1601 "parse.y" - { ((*yyvalp).ttype) = pascal_shadow_record_fields ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1608 "parse.y" + { ((*yyvalp).ttype) = pascal_shadow_record_fields ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 455: -#line 1606 "parse.y" - { expand_start_cond (check_boolean ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)), 0); ;} +#line 1613 "parse.y" + { expand_start_cond (check_boolean ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)), 0); ;} break; case 456: -#line 1608 "parse.y" +#line 1615 "parse.y" { - if (!(((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype) && extra_warnings) + if (!(((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (7))].yystate.yysemantics.yysval.itype) && extra_warnings) warning ("empty statement after `then'"); ;} break; case 457: -#line 1616 "parse.y" +#line 1623 "parse.y" { /* Create an implicit `otherwise' (in the rule above) to avoid warnings about unhandled cases. In ISO Pascal, this is a run-time error. */ @@ -6865,199 +6636,199 @@ yyuserAction (yyRuleNum yyn, int yyrhsle break; case 458: -#line 1624 "parse.y" +#line 1631 "parse.y" { ((*yyvalp).itype) = 1; ;} break; case 459: -#line 1629 "parse.y" +#line 1636 "parse.y" { chk_dialect ("`else' in `case' statements is", B_D_M_PASCAL); ;} break; case 461: -#line 1635 "parse.y" +#line 1642 "parse.y" { ((*yyvalp).itype) = 0; ;} break; case 462: -#line 1637 "parse.y" +#line 1644 "parse.y" { ((*yyvalp).itype) = 1; ;} break; case 464: -#line 1643 "parse.y" +#line 1650 "parse.y" { yyerrok; ;} break; case 465: -#line 1645 "parse.y" +#line 1652 "parse.y" { error ("case element expected"); ;} break; case 466: -#line 1647 "parse.y" +#line 1654 "parse.y" { error ("missing semicolon"); yyerrok; ;} break; case 467: -#line 1649 "parse.y" +#line 1656 "parse.y" { error ("extra semicolon"); ;} break; case 468: -#line 1654 "parse.y" - { pascal_pushcase ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1661 "parse.y" + { pascal_pushcase ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 469: -#line 1656 "parse.y" +#line 1663 "parse.y" { expand_exit_something (); ;} break; case 471: -#line 1662 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} +#line 1669 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} break; case 472: -#line 1664 "parse.y" +#line 1671 "parse.y" { error ("extra comma"); ;} break; case 473: -#line 1666 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} +#line 1673 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} break; case 475: -#line 1672 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1679 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 476: -#line 1674 "parse.y" - { chk_dialect ("`case' ranges are", NOT_CLASSIC_PASCAL); ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} +#line 1681 "parse.y" + { chk_dialect ("`case' ranges are", NOT_CLASSIC_PASCAL); ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 477: -#line 1676 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); error ("missing `..'"); yyerrok; ;} +#line 1683 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing `..'"); yyerrok; ;} break; case 478: -#line 1678 "parse.y" - { error ("extra `..'"); ((*yyvalp).ttype) = build_tree_list (NULL_TREE, string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), 0)); ;} +#line 1685 "parse.y" + { error ("extra `..'"); ((*yyvalp).ttype) = build_tree_list (NULL_TREE, string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), 0)); ;} break; case 479: -#line 1683 "parse.y" +#line 1690 "parse.y" { ((*yyvalp).code) = LE_EXPR; ;} break; case 480: -#line 1685 "parse.y" +#line 1692 "parse.y" { ((*yyvalp).code) = GE_EXPR; ;} break; case 481: -#line 1687 "parse.y" +#line 1694 "parse.y" { error ("missing `to' or `downto'"); ((*yyvalp).code) = LE_EXPR; ;} break; case 483: -#line 1693 "parse.y" - { ((*yyvalp).ttype) = build_pascal_lvalue_address_expression ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1700 "parse.y" + { ((*yyvalp).ttype) = build_pascal_lvalue_address_expression ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 485: -#line 1699 "parse.y" +#line 1706 "parse.y" { error ("using `=' instead of `:=' in assignment"); ;} break; case 486: -#line 1704 "parse.y" - { build_predef_call ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1711 "parse.y" + { build_predef_call ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.itype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 487: -#line 1706 "parse.y" - { build_predef_call (IDENTIFIER_BUILT_IN_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))->symbol, NULL_TREE); ;} +#line 1713 "parse.y" + { build_predef_call (IDENTIFIER_BUILT_IN_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype))->symbol, NULL_TREE); ;} break; case 488: -#line 1708 "parse.y" - { build_predef_call (IDENTIFIER_BUILT_IN_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype))->symbol, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} +#line 1715 "parse.y" + { build_predef_call (IDENTIFIER_BUILT_IN_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype))->symbol, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} break; case 489: -#line 1710 "parse.y" - { build_new_dispose (p_Dispose, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), NULL_TREE, NULL_TREE); ;} +#line 1717 "parse.y" + { build_new_dispose (p_Dispose, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), NULL_TREE, NULL_TREE); ;} break; case 490: -#line 1712 "parse.y" - { build_new_dispose (p_Dispose, (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1719 "parse.y" + { build_new_dispose (p_Dispose, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype), NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (6))].yystate.yysemantics.yysval.ttype)); ;} break; case 491: -#line 1714 "parse.y" - { build_new_dispose (p_Dispose, (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1721 "parse.y" + { build_new_dispose (p_Dispose, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (7))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (7))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (7))].yystate.yysemantics.yysval.ttype)); ;} break; case 492: -#line 1716 "parse.y" - { pascal_expand_asm_operands ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), NULL_TREE, NULL_TREE, NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.itype)); ;} +#line 1723 "parse.y" + { pascal_expand_asm_operands ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype), NULL_TREE, NULL_TREE, NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (5))].yystate.yysemantics.yysval.itype)); ;} break; case 493: -#line 1718 "parse.y" - { pascal_expand_asm_operands ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), NULL_TREE, NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.itype)); ;} +#line 1725 "parse.y" + { pascal_expand_asm_operands ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (7))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (7))].yystate.yysemantics.yysval.ttype), NULL_TREE, NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (7))].yystate.yysemantics.yysval.itype)); ;} break; case 494: -#line 1720 "parse.y" - { pascal_expand_asm_operands ((((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-7)].yystate.yysemantics.yysval.itype)); ;} +#line 1727 "parse.y" + { pascal_expand_asm_operands ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (9))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (9))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((8) - (9))].yystate.yysemantics.yysval.ttype), NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (9))].yystate.yysemantics.yysval.itype)); ;} break; case 495: -#line 1722 "parse.y" - { pascal_expand_asm_operands ((((yyGLRStackItem const *)yyvsp)[YYFILL (-7)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-9)].yystate.yysemantics.yysval.itype)); ;} +#line 1729 "parse.y" + { pascal_expand_asm_operands ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (11))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (11))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((8) - (11))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((10) - (11))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (11))].yystate.yysemantics.yysval.itype)); ;} break; case 496: -#line 1727 "parse.y" +#line 1734 "parse.y" { ((*yyvalp).itype) = 0; ;} break; case 497: -#line 1729 "parse.y" - { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), p_volatile); ((*yyvalp).itype) = 1; ;} +#line 1736 "parse.y" + { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yyloc), p_volatile); ((*yyvalp).itype) = 1; ;} break; case 501: -#line 1740 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1747 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 502: -#line 1745 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1752 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 503: -#line 1750 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1757 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 504: -#line 1752 "parse.y" - { ((*yyvalp).ttype) = tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} +#line 1759 "parse.y" + { ((*yyvalp).ttype) = tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 505: -#line 1759 "parse.y" +#line 1766 "parse.y" { - ((*yyvalp).ttype) = string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0); + ((*yyvalp).ttype) = string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), 0); if (PEDANTIC (NOT_CLASSIC_PASCAL) && ( PASCAL_CST_PARENTHESES (((*yyvalp).ttype)) || !(TREE_CODE (((*yyvalp).ttype)) == STRING_CST @@ -7068,127 +6839,127 @@ yyuserAction (yyRuleNum yyn, int yyrhsle break; case 506: -#line 1772 "parse.y" - { ((*yyvalp).ttype) = fold ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1779 "parse.y" + { ((*yyvalp).ttype) = fold ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 507: -#line 1774 "parse.y" - { ((*yyvalp).ttype) = fold (parser_build_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} +#line 1781 "parse.y" + { ((*yyvalp).ttype) = fold (parser_build_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))); ;} break; case 509: -#line 1780 "parse.y" - { ((*yyvalp).ttype) = build_pascal_unary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1787 "parse.y" + { ((*yyvalp).ttype) = build_pascal_unary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 510: -#line 1782 "parse.y" - { ((*yyvalp).ttype) = parser_build_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1789 "parse.y" + { ((*yyvalp).ttype) = parser_build_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 511: -#line 1784 "parse.y" - { ((*yyvalp).ttype) = build_operator_call ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 1); ;} +#line 1791 "parse.y" + { ((*yyvalp).ttype) = build_operator_call ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 1); ;} break; case 512: -#line 1786 "parse.y" - { ((*yyvalp).ttype) = start_boolean_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1793 "parse.y" + { ((*yyvalp).ttype) = start_boolean_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 513: -#line 1788 "parse.y" - { if ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)) LOCATION_NOTE (COPYLOC ((*yylocp), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc))); ((*yyvalp).ttype) = finish_boolean_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1795 "parse.y" + { if ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)) LOCATION_NOTE (COPYLOC ((*yylocp), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yyloc))); ((*yyvalp).ttype) = finish_boolean_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 515: -#line 1794 "parse.y" - { ((*yyvalp).ttype) = parser_build_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1801 "parse.y" + { ((*yyvalp).ttype) = parser_build_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 516: -#line 1796 "parse.y" - { ((*yyvalp).ttype) = build_operator_call ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 1); ;} +#line 1803 "parse.y" + { ((*yyvalp).ttype) = build_operator_call ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 1); ;} break; case 517: -#line 1798 "parse.y" - { ((*yyvalp).ttype) = start_boolean_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1805 "parse.y" + { ((*yyvalp).ttype) = start_boolean_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 518: -#line 1800 "parse.y" - { if ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)) LOCATION_NOTE (COPYLOC ((*yylocp), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc))); ((*yyvalp).ttype) = finish_boolean_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1807 "parse.y" + { if ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)) LOCATION_NOTE (COPYLOC ((*yylocp), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yyloc))); ((*yyvalp).ttype) = finish_boolean_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 520: -#line 1806 "parse.y" - { ((*yyvalp).ttype) = build_operator_call ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0); ;} +#line 1813 "parse.y" + { ((*yyvalp).ttype) = build_operator_call ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 0); ;} break; case 521: -#line 1808 "parse.y" - { ((*yyvalp).ttype) = parser_build_binary_op (POW_EXPR, (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1815 "parse.y" + { ((*yyvalp).ttype) = parser_build_binary_op (POW_EXPR, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 522: -#line 1810 "parse.y" - { ((*yyvalp).ttype) = parser_build_binary_op (POWER_EXPR, (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1817 "parse.y" + { ((*yyvalp).ttype) = parser_build_binary_op (POWER_EXPR, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 523: -#line 1812 "parse.y" - { ((*yyvalp).ttype) = build_is_as ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), p_is); ;} +#line 1819 "parse.y" + { ((*yyvalp).ttype) = build_is_as ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), p_is); ;} break; case 524: -#line 1814 "parse.y" - { ((*yyvalp).ttype) = build_is_as ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), p_as); ;} +#line 1821 "parse.y" + { ((*yyvalp).ttype) = build_is_as ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), p_as); ;} break; case 525: -#line 1819 "parse.y" - { ((*yyvalp).ttype) = set_exp_original_code (build_pascal_unary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.code)); ;} +#line 1826 "parse.y" + { ((*yyvalp).ttype) = set_exp_original_code (build_pascal_unary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.code)); ;} break; case 526: -#line 1821 "parse.y" - { chk_dialect ("the address operator is", B_D_M_PASCAL); ((*yyvalp).ttype) = build_pascal_address_expression ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), !co->typed_address); ;} +#line 1828 "parse.y" + { chk_dialect ("the address operator is", B_D_M_PASCAL); ((*yyvalp).ttype) = build_pascal_address_expression ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype), !co->typed_address); ;} break; case 529: -#line 1825 "parse.y" +#line 1832 "parse.y" { ((*yyvalp).ttype) = null_pointer_node; ;} break; case 531: -#line 1828 "parse.y" - { ((*yyvalp).ttype) = build_variable_or_routine_access ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1835 "parse.y" + { ((*yyvalp).ttype) = build_variable_or_routine_access ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 537: -#line 1844 "parse.y" - { ((*yyvalp).ttype) = combine_strings ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 1); ;} +#line 1851 "parse.y" + { ((*yyvalp).ttype) = combine_strings ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), 1); ;} break; case 538: -#line 1849 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1856 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 539: -#line 1851 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} +#line 1858 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype))); ;} break; case 542: -#line 1858 "parse.y" - { ((*yyvalp).ttype) = build_caret_string_constant ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.itype)); ;} +#line 1865 "parse.y" + { ((*yyvalp).ttype) = build_caret_string_constant ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.itype)); ;} break; case 561: -#line 1869 "parse.y" +#line 1876 "parse.y" { if (PASCAL_TYPE_UNDISCRIMINATED_STRING (((*yyvalp).ttype))) { @@ -7200,808 +6971,810 @@ yyuserAction (yyRuleNum yyn, int yyrhsle break; case 562: -#line 1881 "parse.y" +#line 1888 "parse.y" { - tree decl = lookup_name ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); + tree decl = lookup_name ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ((*yyvalp).ttype) = error_mark_node; if (!decl) - error ("unknown identifier `%s'", IDENTIFIER_NAME ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); + error ("unknown identifier `%s'", IDENTIFIER_NAME ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype))); else if (TREE_CODE (decl) != TYPE_DECL) - error ("type name expected, `%s' given", IDENTIFIER_NAME ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); + error ("type name expected, `%s' given", IDENTIFIER_NAME ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype))); else ((*yyvalp).ttype) = TREE_TYPE (decl); ;} break; case 564: -#line 1896 "parse.y" - { ((*yyvalp).ttype) = build_qualified_id ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1903 "parse.y" + { ((*yyvalp).ttype) = build_qualified_id ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 565: -#line 1901 "parse.y" - { ((*yyvalp).ttype) = build_predef_call (IDENTIFIER_BUILT_IN_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))->symbol, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1908 "parse.y" + { ((*yyvalp).ttype) = build_predef_call (IDENTIFIER_BUILT_IN_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype))->symbol, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 568: -#line 1908 "parse.y" - { ((*yyvalp).ttype) = TYPE_NAME ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1915 "parse.y" + { ((*yyvalp).ttype) = TYPE_NAME ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 569: -#line 1910 "parse.y" - { ((*yyvalp).ttype) = set_exp_original_code ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), NOP_EXPR); ;} +#line 1917 "parse.y" + { ((*yyvalp).ttype) = set_exp_original_code ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), NOP_EXPR); ;} break; case 570: -#line 1912 "parse.y" - { ((*yyvalp).ttype) = build_qualified_or_component_access ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1919 "parse.y" + { ((*yyvalp).ttype) = build_qualified_or_component_access ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 571: -#line 1914 "parse.y" - { ((*yyvalp).ttype) = build_pascal_pointer_reference ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1921 "parse.y" + { ((*yyvalp).ttype) = build_pascal_pointer_reference ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 572: -#line 1916 "parse.y" - { ((*yyvalp).ttype) = build_array_ref_or_constructor ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1923 "parse.y" + { ((*yyvalp).ttype) = build_array_ref_or_constructor ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 573: -#line 1918 "parse.y" - { ((*yyvalp).ttype) = build_iso_constructor ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); ;} +#line 1925 "parse.y" + { ((*yyvalp).ttype) = build_iso_constructor ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype))); ;} break; case 574: -#line 1920 "parse.y" - { chk_dialect ("empty parentheses are", BORLAND_DELPHI | MAC_PASCAL); ((*yyvalp).ttype) = build_call_or_cast ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} +#line 1927 "parse.y" + { chk_dialect ("empty parentheses are", BORLAND_DELPHI | MAC_PASCAL); ((*yyvalp).ttype) = build_call_or_cast ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} break; case 575: -#line 1922 "parse.y" - { allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.itype)); ((*yyvalp).ttype) = build_call_or_cast ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1929 "parse.y" + { allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (5))].yystate.yysemantics.yysval.itype)); ((*yyvalp).ttype) = build_call_or_cast ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype)); ;} break; case 576: -#line 1924 "parse.y" - { ((*yyvalp).ttype) = build_inherited_method ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1931 "parse.y" + { ((*yyvalp).ttype) = build_inherited_method ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} break; case 577: -#line 1926 "parse.y" - { ((*yyvalp).ttype) = build_predef_call (p_FormatString, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1933 "parse.y" + { ((*yyvalp).ttype) = build_predef_call (p_FormatString, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 578: -#line 1928 "parse.y" - { ((*yyvalp).ttype) = build_predef_call (p_StringOf, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1935 "parse.y" + { ((*yyvalp).ttype) = build_predef_call (p_StringOf, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} break; case 579: -#line 1930 "parse.y" - { ((*yyvalp).ttype) = build_predef_call (p_Assigned, build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.itype)); ;} +#line 1937 "parse.y" + { ((*yyvalp).ttype) = build_predef_call (p_Assigned, build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype))); allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (5))].yystate.yysemantics.yysval.itype)); ;} break; case 580: -#line 1932 "parse.y" - { ((*yyvalp).ttype) = build_pascal_address_expression ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), co->pascal_dialect & B_D_M_PASCAL); ;} +#line 1939 "parse.y" + { ((*yyvalp).ttype) = build_pascal_address_expression ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), co->pascal_dialect & B_D_M_PASCAL); ;} break; case 581: -#line 1934 "parse.y" - { ((*yyvalp).ttype) = build_new_dispose (p_New, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), NULL_TREE, NULL_TREE); ;} +#line 1941 "parse.y" + { ((*yyvalp).ttype) = build_new_dispose (p_New, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), NULL_TREE, NULL_TREE); ;} break; case 582: -#line 1936 "parse.y" - { ((*yyvalp).ttype) = build_new_dispose (p_New, (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1943 "parse.y" + { ((*yyvalp).ttype) = build_new_dispose (p_New, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype), NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (6))].yystate.yysemantics.yysval.ttype)); ;} break; case 583: -#line 1938 "parse.y" - { ((*yyvalp).ttype) = build_new_dispose (p_New, (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 1945 "parse.y" + { ((*yyvalp).ttype) = build_new_dispose (p_New, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (7))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (7))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (7))].yystate.yysemantics.yysval.ttype)); ;} break; case 585: -#line 1944 "parse.y" - { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype); allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.itype)); yyerrok; ;} +#line 1951 "parse.y" + { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype); allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.itype)); yyerrok; ;} break; case 586: -#line 1946 "parse.y" +#line 1953 "parse.y" { - ((*yyvalp).ttype) = build_tree_list (NULL_TREE, TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)) == TYPE_DECL ? (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype) : build_variable_or_routine_access ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); - allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.itype)); + ((*yyvalp).ttype) = build_tree_list (NULL_TREE, TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)) == TYPE_DECL ? (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype) : build_variable_or_routine_access ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype))); + allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.itype)); yyerrok; ;} break; case 587: -#line 1954 "parse.y" +#line 1961 "parse.y" { ((*yyvalp).itype) = allow_function_calls (0); ;} break; case 588: -#line 1959 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1966 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 589: -#line 1961 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); yyerrok; ;} +#line 1968 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))); yyerrok; ;} break; case 590: -#line 1963 "parse.y" +#line 1970 "parse.y" { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, error_mark_node); ;} break; case 591: -#line 1965 "parse.y" +#line 1972 "parse.y" { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, error_mark_node); error ("extra comma"); ;} break; case 593: -#line 1971 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} +#line 1978 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} break; case 594: -#line 1973 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} +#line 1980 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} break; case 595: -#line 1975 "parse.y" +#line 1982 "parse.y" { error ("extra comma"); ;} break; case 596: -#line 1981 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 1988 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 597: -#line 1983 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} +#line 1990 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 598: -#line 1985 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype)); ;} +#line 1992 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (5))].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (5))].yystate.yysemantics.yysval.ttype)); ;} break; case 599: -#line 1990 "parse.y" +#line 1997 "parse.y" { chk_dialect ("untyped files are", U_B_D_M_PASCAL); ((*yyvalp).ttype) = untyped_file_type_node; ;} break; case 601: -#line 1996 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} +#line 2003 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 602: -#line 1998 "parse.y" - { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype); ;} +#line 2005 "parse.y" + { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype); ;} break; case 606: -#line 2006 "parse.y" - { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype); ;} +#line 2013 "parse.y" + { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype); ;} break; case 607: -#line 2011 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 2018 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 608: -#line 2013 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 2020 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 609: -#line 2018 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), build_tree_list (build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype))); ;} +#line 2025 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (6))].yystate.yysemantics.yysval.ttype), build_tree_list (build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (6))].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (6))].yystate.yysemantics.yysval.ttype))); ;} break; case 610: -#line 2020 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), build_tree_list (build_tree_list (NULL_TREE, integer_zero_node), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype))); ;} +#line 2027 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype), build_tree_list (build_tree_list (NULL_TREE, integer_zero_node), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.ttype))); ;} break; case 611: -#line 2025 "parse.y" - { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype); ;} +#line 2032 "parse.y" + { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.ttype); ;} break; case 612: -#line 2030 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (build_tree_list (NULL_TREE, NULL_TREE), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 2037 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (build_tree_list (NULL_TREE, NULL_TREE), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 613: -#line 2035 "parse.y" - { ((*yyvalp).ttype) = maybe_schema_discriminant ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 2042 "parse.y" + { ((*yyvalp).ttype) = maybe_schema_discriminant ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 614: -#line 2037 "parse.y" +#line 2044 "parse.y" { ((*yyvalp).ttype) = NULL_TREE; ;} break; case 615: -#line 2039 "parse.y" - { PASCAL_BP_INITIALIZER_LIST ((((*yyvalp).ttype) = nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)))) = 1; ;} +#line 2046 "parse.y" + { PASCAL_BP_INITIALIZER_LIST ((((*yyvalp).ttype) = nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)))) = 1; ;} break; case 616: -#line 2041 "parse.y" - { ((*yyvalp).ttype) = nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} +#line 2048 "parse.y" + { ((*yyvalp).ttype) = nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 617: -#line 2043 "parse.y" +#line 2050 "parse.y" { error ("invalid component value"); ((*yyvalp).ttype) = error_mark_node; ;} break; case 619: -#line 2049 "parse.y" - { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype); ;} +#line 2056 "parse.y" + { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype); ;} break; case 620: -#line 2051 "parse.y" - { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype); error ("missing separator"); ;} +#line 2058 "parse.y" + { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype); error ("missing separator"); ;} break; case 622: -#line 2057 "parse.y" +#line 2064 "parse.y" { chk_dialect ("initializers separated with `,' are", B_D_M_PASCAL); ;} break; case 623: -#line 2062 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 2069 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 624: -#line 2064 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 2071 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 626: -#line 2070 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} +#line 2077 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} break; case 627: -#line 2072 "parse.y" +#line 2079 "parse.y" { error ("missing index expression"); ((*yyvalp).ttype) = NULL_TREE; ;} break; case 628: -#line 2074 "parse.y" - { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} +#line 2081 "parse.y" + { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} break; case 629: -#line 2076 "parse.y" +#line 2083 "parse.y" { error ("extra comma"); ;} break; case 630: -#line 2081 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} +#line 2088 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} break; case 631: -#line 2083 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 1), NULL_TREE); ;} +#line 2090 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), 1), NULL_TREE); ;} break; case 632: -#line 2085 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), 1), string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 1)); ;} +#line 2092 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), 1), string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 1)); ;} break; case 633: -#line 2090 "parse.y" +#line 2097 "parse.y" { ((*yyvalp).ttype) = build_set_constructor (NULL_TREE); ;} break; case 634: -#line 2092 "parse.y" - { ((*yyvalp).ttype) = build_set_constructor (nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); ;} +#line 2099 "parse.y" + { ((*yyvalp).ttype) = build_set_constructor (nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype))); ;} break; case 636: -#line 2098 "parse.y" - { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype); yyerrok; ;} +#line 2105 "parse.y" + { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype); yyerrok; ;} break; case 637: -#line 2100 "parse.y" - { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype); error ("missing comma"); yyerrok; ;} +#line 2107 "parse.y" + { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype); error ("missing comma"); yyerrok; ;} break; case 638: -#line 2102 "parse.y" +#line 2109 "parse.y" { error ("extra comma"); ;} break; case 639: -#line 2107 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} +#line 2114 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} break; case 640: -#line 2109 "parse.y" - { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 2116 "parse.y" + { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 641: -#line 2115 "parse.y" +#line 2122 "parse.y" { ((*yyvalp).code) = CONVERT_EXPR; ;} break; case 642: -#line 2116 "parse.y" +#line 2123 "parse.y" { ((*yyvalp).code) = NEGATE_EXPR; ;} break; case 643: -#line 2120 "parse.y" +#line 2127 "parse.y" { ((*yyvalp).code) = CONVERT_EXPR; ;} break; case 644: -#line 2121 "parse.y" +#line 2128 "parse.y" { ((*yyvalp).code) = NEGATE_EXPR; ;} break; case 645: -#line 2122 "parse.y" +#line 2129 "parse.y" { ((*yyvalp).code) = TRUTH_NOT_EXPR; ;} break; case 646: -#line 2126 "parse.y" +#line 2133 "parse.y" { ((*yyvalp).code) = NE_EXPR; ;} break; case 647: -#line 2127 "parse.y" +#line 2134 "parse.y" { ((*yyvalp).code) = LE_EXPR; ;} break; case 648: -#line 2128 "parse.y" +#line 2135 "parse.y" { ((*yyvalp).code) = GE_EXPR; ;} break; case 649: -#line 2129 "parse.y" +#line 2136 "parse.y" { ((*yyvalp).code) = EQ_EXPR; ;} break; case 650: -#line 2130 "parse.y" +#line 2137 "parse.y" { ((*yyvalp).code) = LT_EXPR; ;} break; case 651: -#line 2131 "parse.y" +#line 2138 "parse.y" { ((*yyvalp).code) = GT_EXPR; ;} break; case 652: -#line 2132 "parse.y" +#line 2139 "parse.y" { ((*yyvalp).code) = IN_EXPR; ;} break; case 653: -#line 2136 "parse.y" +#line 2143 "parse.y" { ((*yyvalp).code) = PLUS_EXPR; ;} break; case 654: -#line 2137 "parse.y" +#line 2144 "parse.y" { ((*yyvalp).code) = PLUS_EXPR; ;} break; case 655: -#line 2138 "parse.y" +#line 2145 "parse.y" { ((*yyvalp).code) = MINUS_EXPR; ;} break; case 656: -#line 2139 "parse.y" +#line 2146 "parse.y" { ((*yyvalp).code) = MINUS_EXPR; ;} break; case 657: -#line 2140 "parse.y" +#line 2147 "parse.y" { ((*yyvalp).code) = TRUTH_XOR_EXPR; ;} break; case 658: -#line 2141 "parse.y" +#line 2148 "parse.y" { ((*yyvalp).code) = SYMDIFF_EXPR; ;} break; case 659: -#line 2145 "parse.y" +#line 2152 "parse.y" { ((*yyvalp).code) = MULT_EXPR; ;} break; case 660: -#line 2146 "parse.y" +#line 2153 "parse.y" { ((*yyvalp).code) = RDIV_EXPR; ;} break; case 661: -#line 2147 "parse.y" +#line 2154 "parse.y" { ((*yyvalp).code) = TRUNC_DIV_EXPR; ;} break; case 662: -#line 2148 "parse.y" +#line 2155 "parse.y" { ((*yyvalp).code) = (co->pascal_dialect & B_D_M_PASCAL) ? TRUNC_MOD_EXPR : FLOOR_MOD_EXPR; ;} break; case 663: -#line 2149 "parse.y" +#line 2156 "parse.y" { ((*yyvalp).code) = LSHIFT_EXPR; ;} break; case 664: -#line 2150 "parse.y" +#line 2157 "parse.y" { ((*yyvalp).code) = RSHIFT_EXPR; ;} break; case 665: -#line 2154 "parse.y" +#line 2161 "parse.y" { ((*yyvalp).code) = TRUTH_OR_EXPR; ;} break; case 666: -#line 2155 "parse.y" +#line 2162 "parse.y" { ((*yyvalp).code) = TRUTH_ORIF_EXPR; chk_dialect ("`or else' (without underscore) is", GNU_PASCAL); ;} break; case 667: -#line 2156 "parse.y" +#line 2163 "parse.y" { ((*yyvalp).code) = TRUTH_ORIF_EXPR; ;} break; case 668: -#line 2157 "parse.y" +#line 2164 "parse.y" { ((*yyvalp).code) = TRUTH_ORIF_EXPR; chk_dialect ("`|' is", MAC_PASCAL); ;} break; case 669: -#line 2161 "parse.y" +#line 2168 "parse.y" { ((*yyvalp).code) = TRUTH_AND_EXPR; ;} break; case 670: -#line 2162 "parse.y" +#line 2169 "parse.y" { ((*yyvalp).code) = TRUTH_ANDIF_EXPR; chk_dialect ("`and then' (without underscore) is", GNU_PASCAL); ;} break; case 671: -#line 2163 "parse.y" +#line 2170 "parse.y" { ((*yyvalp).code) = TRUTH_ANDIF_EXPR; ;} break; case 672: -#line 2164 "parse.y" +#line 2171 "parse.y" { ((*yyvalp).code) = TRUTH_ANDIF_EXPR; chk_dialect ("`&' is", MAC_PASCAL); ;} break; case 673: -#line 2169 "parse.y" - { ((*yyvalp).itype) = IDENTIFIER_BUILT_IN_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))->symbol; ;} +#line 2176 "parse.y" + { ((*yyvalp).itype) = IDENTIFIER_BUILT_IN_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype))->symbol; ;} break; case 674: -#line 2171 "parse.y" +#line 2178 "parse.y" { ((*yyvalp).itype) = p_and; ;} break; case 675: -#line 2172 "parse.y" +#line 2179 "parse.y" { ((*yyvalp).itype) = p_or; ;} break; case 676: -#line 2173 "parse.y" +#line 2180 "parse.y" { ((*yyvalp).itype) = p_not; ;} break; case 677: -#line 2174 "parse.y" +#line 2181 "parse.y" { ((*yyvalp).itype) = p_xor; ;} break; case 678: -#line 2175 "parse.y" +#line 2182 "parse.y" { ((*yyvalp).itype) = p_shl; ;} break; case 679: -#line 2176 "parse.y" +#line 2183 "parse.y" { ((*yyvalp).itype) = p_shr; ;} break; case 680: -#line 2182 "parse.y" +#line 2189 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("BPlus", "+"); ;} break; case 681: -#line 2183 "parse.y" +#line 2190 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("BPlus", "+"); ;} break; case 682: -#line 2184 "parse.y" +#line 2191 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("BMinus", "-"); ;} break; case 683: -#line 2185 "parse.y" +#line 2192 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("BMinus", "-"); ;} break; case 684: -#line 2186 "parse.y" +#line 2193 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("BMult", "*"); ;} break; case 685: -#line 2187 "parse.y" +#line 2194 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("RDiv", "/"); ;} break; case 686: -#line 2188 "parse.y" +#line 2195 "parse.y" { ((*yyvalp).ttype) = get_identifier ("Div"); ;} break; case 687: -#line 2189 "parse.y" +#line 2196 "parse.y" { ((*yyvalp).ttype) = get_identifier ("Mod"); ;} break; case 688: -#line 2190 "parse.y" +#line 2197 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("RPower", "**"); ;} break; case 689: -#line 2191 "parse.y" +#line 2198 "parse.y" { ((*yyvalp).ttype) = get_identifier ("In"); ;} break; case 690: -#line 2192 "parse.y" +#line 2199 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("LT", "<"); ;} break; case 691: -#line 2193 "parse.y" +#line 2200 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("EQ", "="); ;} break; case 692: -#line 2194 "parse.y" +#line 2201 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("GT", ">"); ;} break; case 693: -#line 2195 "parse.y" +#line 2202 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("NE", "<>"); ;} break; case 694: -#line 2196 "parse.y" +#line 2203 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("GE", ">="); ;} break; case 695: -#line 2197 "parse.y" +#line 2204 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("LE", "<="); ;} break; case 696: -#line 2198 "parse.y" +#line 2205 "parse.y" { ((*yyvalp).ttype) = get_identifier ("And"); ;} break; case 697: -#line 2199 "parse.y" +#line 2206 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("SAnd", "&"); ;} break; case 698: -#line 2200 "parse.y" +#line 2207 "parse.y" { ((*yyvalp).ttype) = get_identifier ("Or"); ;} break; case 699: -#line 2201 "parse.y" +#line 2208 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("SOr", "|"); ;} break; case 700: -#line 2202 "parse.y" +#line 2209 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("SymDiff", "<>"); ;} break; case 703: -#line 2208 "parse.y" +#line 2215 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("CeilPlus", "+>"); ;} break; case 704: -#line 2209 "parse.y" +#line 2216 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("CeilMinus", "->"); ;} break; case 705: -#line 2210 "parse.y" +#line 2217 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("FloorPlus", "+<"); ;} break; case 706: -#line 2211 "parse.y" +#line 2218 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("FloorMinus", "-<"); ;} break; case 707: -#line 2215 "parse.y" +#line 2222 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("CeilMult", "*>"); ;} break; case 708: -#line 2216 "parse.y" +#line 2223 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("CeilRDiv", "/>"); ;} break; case 709: -#line 2217 "parse.y" +#line 2224 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("FloorMult", "*<"); ;} break; case 710: -#line 2218 "parse.y" +#line 2225 "parse.y" { ((*yyvalp).ttype) = get_identifier_with_spelling ("FloorRDiv", "/<"); ;} break; case 713: -#line 2230 "parse.y" - { ((*yyvalp).ttype) = numeric_label ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 2237 "parse.y" + { ((*yyvalp).ttype) = numeric_label ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 714: -#line 2235 "parse.y" - { ((*yyvalp).ttype) = nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 2242 "parse.y" + { ((*yyvalp).ttype) = nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 715: -#line 2240 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 2247 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 716: -#line 2242 "parse.y" - { ((*yyvalp).ttype) = tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} +#line 2249 "parse.y" + { ((*yyvalp).ttype) = tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 717: -#line 2244 "parse.y" +#line 2251 "parse.y" { - ((*yyvalp).ttype) = tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); - error ("comma missing after `%s'", IDENTIFIER_NAME (TREE_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)))); + ((*yyvalp).ttype) = tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); + error ("comma missing after `%s'", IDENTIFIER_NAME (TREE_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)))); yyerrok; ;} break; case 718: -#line 2250 "parse.y" +#line 2257 "parse.y" { error ("extra comma following identifier list"); ;} break; case 720: -#line 2256 "parse.y" - { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 2263 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 721: -#line 2258 "parse.y" - { ((*yyvalp).ttype) = tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} +#line 2265 "parse.y" + { ((*yyvalp).ttype) = tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 723: -#line 2264 "parse.y" - { ((*yyvalp).ttype) = build_qualified_id ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 2271 "parse.y" + { ((*yyvalp).ttype) = build_qualified_id ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} break; case 724: -#line 2269 "parse.y" +#line 2276 "parse.y" { warn_about_keyword_redeclaration (((*yyvalp).ttype), 1); ;} break; case 771: -#line 2323 "parse.y" - { ((*yyvalp).ttype) = check_identifier ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} +#line 2330 "parse.y" + { ((*yyvalp).ttype) = check_identifier ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} break; case 780: -#line 2340 "parse.y" - { char c = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.itype); ((*yyvalp).ttype) = make_identifier (&c, 1); ;} +#line 2347 "parse.y" + { char c = (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.itype); ((*yyvalp).ttype) = make_identifier (&c, 1); ;} break; case 781: -#line 2347 "parse.y" +#line 2354 "parse.y" { pushlevel_expand (0); ;} break; case 782: -#line 2352 "parse.y" +#line 2359 "parse.y" { poplevel_expand (0, 1); ;} break; case 783: -#line 2357 "parse.y" +#line 2364 "parse.y" { lex_const_equal = 0; ;} break; case 784: -#line 2362 "parse.y" +#line 2369 "parse.y" { defining_packed_type += ((*yyvalp).itype) = !co->ignore_packed; /* can be nested */ ;} break; case 785: -#line 2367 "parse.y" - { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), p_protected); ;} +#line 2374 "parse.y" + { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yyloc), p_protected); ;} break; case 786: -#line 2372 "parse.y" - { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), p_module); ;} +#line 2379 "parse.y" + { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yyloc), p_module); ;} break; case 787: -#line 2377 "parse.y" +#line 2384 "parse.y" { yyerrok; ;} break; case 788: -#line 2379 "parse.y" +#line 2386 "parse.y" { yyerrok; ;} break; case 795: -#line 2396 "parse.y" +#line 2403 "parse.y" { warning ("missing `.' at the end of program/unit/module"); ;} break; case 796: -#line 2401 "parse.y" +#line 2408 "parse.y" { ((*yyvalp).ttype) = NULL_TREE; ;} break; case 797: -#line 2406 "parse.y" +#line 2413 "parse.y" { ((*yyvalp).ttype) = error_mark_node; ;} break; +/* Line 930 of glr.c. */ +#line 7778 "parse.c" default: break; } @@ -8013,17 +7786,14 @@ yyuserAction (yyRuleNum yyn, int yyrhsle # undef YYBACKUP # undef yyclearin # undef YYRECOVERING -/* Line 872 of glr.c. */ -#line 8018 "parse.c" } -static void +/*ARGSUSED*/ static void yyuserMerge (int yyn, YYSTYPE* yy0, YYSTYPE* yy1) { - /* `Use' the arguments. */ - (void) yy0; - (void) yy1; + YYUSE (yy0); + YYUSE (yy1); switch (yyn) { @@ -8038,12 +7808,12 @@ yyuserMerge (int yyn, YYSTYPE* yy0, YYST | Release the memory associated to this symbol. | `-----------------------------------------------*/ +/*ARGSUSED*/ static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp) { - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - (void) yylocationp; + YYUSE (yyvaluep); + YYUSE (yylocationp); if (!yymsg) yymsg = "Deleting"; @@ -8053,7 +7823,7 @@ yydestruct (const char *yymsg, int yytyp { default: - break; + break; } } @@ -8075,27 +7845,30 @@ yydestroyGLRState (char const *yymsg, yy #if YYDEBUG if (yydebug) { - YYFPRINTF (stderr, "%s unresolved ", yymsg); - yysymprint (stderr, yystos[yys->yylrState], - &yys->yysemantics.yysval, &yys->yyloc); + if (yys->yysemantics.yyfirstVal) + YYFPRINTF (stderr, "%s unresolved ", yymsg); + else + YYFPRINTF (stderr, "%s incomplete ", yymsg); + yy_symbol_print (stderr, yystos[yys->yylrState], + NULL, &yys->yyloc); YYFPRINTF (stderr, "\n"); } #endif if (yys->yysemantics.yyfirstVal) - { - yySemanticOption *yyoption = yys->yysemantics.yyfirstVal; - yyGLRState *yyrh; - int yyn; - for (yyrh = yyoption->yystate, yyn = yyrhsLength (yyoption->yyrule); - yyn > 0; - yyrh = yyrh->yypred, yyn -= 1) - yydestroyGLRState (yymsg, yyrh); - } + { + yySemanticOption *yyoption = yys->yysemantics.yyfirstVal; + yyGLRState *yyrh; + int yyn; + for (yyrh = yyoption->yystate, yyn = yyrhsLength (yyoption->yyrule); + yyn > 0; + yyrh = yyrh->yypred, yyn -= 1) + yydestroyGLRState (yymsg, yyrh); + } } } -/** Left-hand-side symbol for rule #RULE. */ +/** Left-hand-side symbol for rule #RULE. */ static inline yySymbol yylhsNonterm (yyRuleNum yyrule) { @@ -8106,14 +7879,14 @@ yylhsNonterm (yyRuleNum yyrule) ((yystate) == YYPACT_NINF) /** True iff LR state STATE has only a default reduction (regardless - * of token). */ + * of token). */ static inline yybool yyisDefaultedState (yyStateNum yystate) { return yyis_pact_ninf (yypact[yystate]); } -/** The default reduction for STATE, assuming it has one. */ +/** The default reduction for STATE, assuming it has one. */ static inline yyRuleNum yydefaultAction (yyStateNum yystate) { @@ -8121,7 +7894,7 @@ yydefaultAction (yyStateNum yystate) } #define yyis_table_ninf(yytable_value) \ - 0 + YYID (0) /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN. * Result R means @@ -8133,7 +7906,7 @@ yydefaultAction (yyStateNum yystate) */ static inline void yygetLRActions (yyStateNum yystate, int yytoken, - int* yyaction, const short int** yyconflicts) + int* yyaction, const short int** yyconflicts) { int yyindex = yypact[yystate] + yytoken; if (yyindex < 0 || YYLAST < yyindex || yycheck[yyindex] != yytoken) @@ -8178,26 +7951,49 @@ yyisErrorAction (int yyaction) /* GLRStates */ +/** Return a fresh GLRStackItem. Callers should call + * YY_RESERVE_GLRSTACK afterwards to make sure there is sufficient + * headroom. */ + +static inline yyGLRStackItem* +yynewGLRStackItem (yyGLRStack* yystackp, yybool yyisState) +{ + yyGLRStackItem* yynewItem = yystackp->yynextFree; + yystackp->yyspaceLeft -= 1; + yystackp->yynextFree += 1; + yynewItem->yystate.yyisState = yyisState; + return yynewItem; +} + +/** Add a new semantic action that will execute the action for rule + * RULENUM on the semantic values in RHS to the list of + * alternative actions for STATE. Assumes that RHS comes from + * stack #K of *STACKP. */ static void -yyaddDeferredAction (yyGLRStack* yystack, yyGLRState* yystate, +yyaddDeferredAction (yyGLRStack* yystackp, size_t yyk, yyGLRState* yystate, yyGLRState* rhs, yyRuleNum yyrule) { - yySemanticOption* yynewItem; - yynewItem = &yystack->yynextFree->yyoption; - yystack->yyspaceLeft -= 1; - yystack->yynextFree += 1; - yynewItem->yyisState = yyfalse; - yynewItem->yystate = rhs; - yynewItem->yyrule = yyrule; - yynewItem->yynext = yystate->yysemantics.yyfirstVal; - yystate->yysemantics.yyfirstVal = yynewItem; - if (yystack->yyspaceLeft < YYHEADROOM) - yyexpandGLRStack (yystack); + yySemanticOption* yynewOption = + &yynewGLRStackItem (yystackp, yyfalse)->yyoption; + yynewOption->yystate = rhs; + yynewOption->yyrule = yyrule; + if (yystackp->yytops.yylookaheadNeeds[yyk]) + { + yynewOption->yyrawchar = yychar; + yynewOption->yyval = yylval; + yynewOption->yyloc = yylloc; + } + else + yynewOption->yyrawchar = YYEMPTY; + yynewOption->yynext = yystate->yysemantics.yyfirstVal; + yystate->yysemantics.yyfirstVal = yynewOption; + + YY_RESERVE_GLRSTACK (yystackp); } /* GLRStacks */ -/** Initialize SET to a singleton set containing an empty stack. */ +/** Initialize SET to a singleton set containing an empty stack. */ static yybool yyinitStateSet (yyGLRStateSet* yyset) { @@ -8207,58 +8003,67 @@ yyinitStateSet (yyGLRStateSet* yyset) if (! yyset->yystates) return yyfalse; yyset->yystates[0] = NULL; + yyset->yylookaheadNeeds = + (yybool*) YYMALLOC (16 * sizeof yyset->yylookaheadNeeds[0]); + if (! yyset->yylookaheadNeeds) + { + YYFREE (yyset->yystates); + return yyfalse; + } return yytrue; } static void yyfreeStateSet (yyGLRStateSet* yyset) { YYFREE (yyset->yystates); + YYFREE (yyset->yylookaheadNeeds); } /** Initialize STACK to a single empty stack, with total maximum - * capacity for all stacks of SIZE. */ + * capacity for all stacks of SIZE. */ static yybool -yyinitGLRStack (yyGLRStack* yystack, size_t yysize) +yyinitGLRStack (yyGLRStack* yystackp, size_t yysize) { - yystack->yyerrState = 0; + yystackp->yyerrState = 0; yynerrs = 0; - yystack->yyspaceLeft = yysize; - yystack->yyitems = - (yyGLRStackItem*) YYMALLOC (yysize * sizeof yystack->yynextFree[0]); - if (!yystack->yyitems) + yystackp->yyspaceLeft = yysize; + yystackp->yyitems = + (yyGLRStackItem*) YYMALLOC (yysize * sizeof yystackp->yynextFree[0]); + if (!yystackp->yyitems) return yyfalse; - yystack->yynextFree = yystack->yyitems; - yystack->yysplitPoint = NULL; - yystack->yylastDeleted = NULL; - return yyinitStateSet (&yystack->yytops); + yystackp->yynextFree = yystackp->yyitems; + yystackp->yysplitPoint = NULL; + yystackp->yylastDeleted = NULL; + return yyinitStateSet (&yystackp->yytops); } -#define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \ + +#if YYSTACKEXPANDABLE +# define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \ &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE /** If STACK is expandable, extend it. WARNING: Pointers into the stack from outside should be considered invalid after this call. We always expand when there are 1 or fewer items left AFTER an allocation, so that we can avoid having external pointers exist - across an allocation. */ + across an allocation. */ static void -yyexpandGLRStack (yyGLRStack* yystack) +yyexpandGLRStack (yyGLRStack* yystackp) { -#if YYSTACKEXPANDABLE yyGLRStackItem* yynewItems; yyGLRStackItem* yyp0, *yyp1; size_t yysize, yynewSize; size_t yyn; - yysize = yystack->yynextFree - yystack->yyitems; - if (YYMAXDEPTH < yysize + YYHEADROOM) - yyMemoryExhausted (yystack); + yysize = yystackp->yynextFree - yystackp->yyitems; + if (YYMAXDEPTH - YYHEADROOM < yysize) + yyMemoryExhausted (yystackp); yynewSize = 2*yysize; if (YYMAXDEPTH < yynewSize) yynewSize = YYMAXDEPTH; yynewItems = (yyGLRStackItem*) YYMALLOC (yynewSize * sizeof yynewItems[0]); if (! yynewItems) - yyMemoryExhausted (yystack); - for (yyp0 = yystack->yyitems, yyp1 = yynewItems, yyn = yysize; + yyMemoryExhausted (yystackp); + for (yyp0 = yystackp->yyitems, yyp1 = yynewItems, yyn = yysize; 0 < yyn; yyn -= 1, yyp0 += 1, yyp1 += 1) { @@ -8284,83 +8089,87 @@ yyexpandGLRStack (yyGLRStack* yystack) yyv1->yynext = YYRELOC (yyp0, yyp1, yyv0->yynext, yyoption); } } - if (yystack->yysplitPoint != NULL) - yystack->yysplitPoint = YYRELOC (yystack->yyitems, yynewItems, - yystack->yysplitPoint, yystate); - - for (yyn = 0; yyn < yystack->yytops.yysize; yyn += 1) - if (yystack->yytops.yystates[yyn] != NULL) - yystack->yytops.yystates[yyn] = - YYRELOC (yystack->yyitems, yynewItems, - yystack->yytops.yystates[yyn], yystate); - YYFREE (yystack->yyitems); - yystack->yyitems = yynewItems; - yystack->yynextFree = yynewItems + yysize; - yystack->yyspaceLeft = yynewSize - yysize; - -#else - yyMemoryExhausted (yystack); -#endif + if (yystackp->yysplitPoint != NULL) + yystackp->yysplitPoint = YYRELOC (yystackp->yyitems, yynewItems, + yystackp->yysplitPoint, yystate); + + for (yyn = 0; yyn < yystackp->yytops.yysize; yyn += 1) + if (yystackp->yytops.yystates[yyn] != NULL) + yystackp->yytops.yystates[yyn] = + YYRELOC (yystackp->yyitems, yynewItems, + yystackp->yytops.yystates[yyn], yystate); + YYFREE (yystackp->yyitems); + yystackp->yyitems = yynewItems; + yystackp->yynextFree = yynewItems + yysize; + yystackp->yyspaceLeft = yynewSize - yysize; } +#endif static void -yyfreeGLRStack (yyGLRStack* yystack) +yyfreeGLRStack (yyGLRStack* yystackp) { - YYFREE (yystack->yyitems); - yyfreeStateSet (&yystack->yytops); + YYFREE (yystackp->yyitems); + yyfreeStateSet (&yystackp->yytops); } /** Assuming that S is a GLRState somewhere on STACK, update the * splitpoint of STACK, if needed, so that it is at least as deep as - * S. */ + * S. */ static inline void -yyupdateSplit (yyGLRStack* yystack, yyGLRState* yys) +yyupdateSplit (yyGLRStack* yystackp, yyGLRState* yys) { - if (yystack->yysplitPoint != NULL && yystack->yysplitPoint > yys) - yystack->yysplitPoint = yys; + if (yystackp->yysplitPoint != NULL && yystackp->yysplitPoint > yys) + yystackp->yysplitPoint = yys; } -/** Invalidate stack #K in STACK. */ +/** Invalidate stack #K in STACK. */ static inline void -yymarkStackDeleted (yyGLRStack* yystack, size_t yyk) +yymarkStackDeleted (yyGLRStack* yystackp, size_t yyk) { - if (yystack->yytops.yystates[yyk] != NULL) - yystack->yylastDeleted = yystack->yytops.yystates[yyk]; - yystack->yytops.yystates[yyk] = NULL; + if (yystackp->yytops.yystates[yyk] != NULL) + yystackp->yylastDeleted = yystackp->yytops.yystates[yyk]; + yystackp->yytops.yystates[yyk] = NULL; } /** Undelete the last stack that was marked as deleted. Can only be done once after a deletion, and only when all other stacks have - been deleted. */ + been deleted. */ static void -yyundeleteLastStack (yyGLRStack* yystack) +yyundeleteLastStack (yyGLRStack* yystackp) { - if (yystack->yylastDeleted == NULL || yystack->yytops.yysize != 0) + if (yystackp->yylastDeleted == NULL || yystackp->yytops.yysize != 0) return; - yystack->yytops.yystates[0] = yystack->yylastDeleted; - yystack->yytops.yysize = 1; + yystackp->yytops.yystates[0] = yystackp->yylastDeleted; + yystackp->yytops.yysize = 1; YYDPRINTF ((stderr, "Restoring last deleted stack as stack #0.\n")); - yystack->yylastDeleted = NULL; + yystackp->yylastDeleted = NULL; } static inline void -yyremoveDeletes (yyGLRStack* yystack) +yyremoveDeletes (yyGLRStack* yystackp) { size_t yyi, yyj; yyi = yyj = 0; - while (yyj < yystack->yytops.yysize) + while (yyj < yystackp->yytops.yysize) { - if (yystack->yytops.yystates[yyi] == NULL) + if (yystackp->yytops.yystates[yyi] == NULL) { if (yyi == yyj) { YYDPRINTF ((stderr, "Removing dead stacks.\n")); } - yystack->yytops.yysize -= 1; + yystackp->yytops.yysize -= 1; } else { - yystack->yytops.yystates[yyj] = yystack->yytops.yystates[yyi]; + yystackp->yytops.yystates[yyj] = yystackp->yytops.yystates[yyi]; + /* In the current implementation, it's unnecessary to copy + yystackp->yytops.yylookaheadNeeds[yyi] since, after + yyremoveDeletes returns, the parser immediately either enters + deterministic operation or shifts a token. However, it doesn't + hurt, and the code might evolve to need it. */ + yystackp->yytops.yylookaheadNeeds[yyj] = + yystackp->yytops.yylookaheadNeeds[yyi]; if (yyj != yyi) { YYDPRINTF ((stderr, "Rename stack %lu -> %lu.\n", @@ -8373,117 +8182,131 @@ yyremoveDeletes (yyGLRStack* yystack) } /** Shift to a new state on stack #K of STACK, corresponding to LR state - * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */ + * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */ static inline void -yyglrShift (yyGLRStack* yystack, size_t yyk, yyStateNum yylrState, +yyglrShift (yyGLRStack* yystackp, size_t yyk, yyStateNum yylrState, size_t yyposn, - YYSTYPE yysval, YYLTYPE* yylocp) + YYSTYPE* yyvalp, YYLTYPE* yylocp) { - yyGLRStackItem* yynewItem; + yyGLRState* yynewState = &yynewGLRStackItem (yystackp, yytrue)->yystate; - yynewItem = yystack->yynextFree; - yystack->yynextFree += 1; - yystack->yyspaceLeft -= 1; - yynewItem->yystate.yyisState = yytrue; - yynewItem->yystate.yylrState = yylrState; - yynewItem->yystate.yyposn = yyposn; - yynewItem->yystate.yyresolved = yytrue; - yynewItem->yystate.yypred = yystack->yytops.yystates[yyk]; - yystack->yytops.yystates[yyk] = &yynewItem->yystate; - yynewItem->yystate.yysemantics.yysval = yysval; - yynewItem->yystate.yyloc = *yylocp; - if (yystack->yyspaceLeft < YYHEADROOM) - yyexpandGLRStack (yystack); + yynewState->yylrState = yylrState; + yynewState->yyposn = yyposn; + yynewState->yyresolved = yytrue; + yynewState->yypred = yystackp->yytops.yystates[yyk]; + yynewState->yysemantics.yysval = *yyvalp; + yynewState->yyloc = *yylocp; + yystackp->yytops.yystates[yyk] = yynewState; + + YY_RESERVE_GLRSTACK (yystackp); } /** Shift stack #K of YYSTACK, to a new state corresponding to LR * state YYLRSTATE, at input position YYPOSN, with the (unresolved) - * semantic value of YYRHS under the action for YYRULE. */ + * semantic value of YYRHS under the action for YYRULE. */ static inline void -yyglrShiftDefer (yyGLRStack* yystack, size_t yyk, yyStateNum yylrState, +yyglrShiftDefer (yyGLRStack* yystackp, size_t yyk, yyStateNum yylrState, size_t yyposn, yyGLRState* rhs, yyRuleNum yyrule) { - yyGLRStackItem* yynewItem; + yyGLRState* yynewState = &yynewGLRStackItem (yystackp, yytrue)->yystate; + + yynewState->yylrState = yylrState; + yynewState->yyposn = yyposn; + yynewState->yyresolved = yyfalse; + yynewState->yypred = yystackp->yytops.yystates[yyk]; + yynewState->yysemantics.yyfirstVal = NULL; + yystackp->yytops.yystates[yyk] = yynewState; - yynewItem = yystack->yynextFree; - yynewItem->yystate.yyisState = yytrue; - yynewItem->yystate.yylrState = yylrState; - yynewItem->yystate.yyposn = yyposn; - yynewItem->yystate.yyresolved = yyfalse; - yynewItem->yystate.yypred = yystack->yytops.yystates[yyk]; - yynewItem->yystate.yysemantics.yyfirstVal = NULL; - yystack->yytops.yystates[yyk] = &yynewItem->yystate; - yystack->yynextFree += 1; - yystack->yyspaceLeft -= 1; - yyaddDeferredAction (yystack, &yynewItem->yystate, rhs, yyrule); + /* Invokes YY_RESERVE_GLRSTACK. */ + yyaddDeferredAction (yystackp, yyk, yynewState, rhs, yyrule); } /** Pop the symbols consumed by reduction #RULE from the top of stack * #K of STACK, and perform the appropriate semantic action on their * semantic values. Assumes that all ambiguities in semantic values - * have been previously resolved. Set *VALP to the resulting value, + * have been previously resolved. Set *VALP to the resulting value, * and *LOCP to the computed location (if any). Return value is as - * for userAction. */ + * for userAction. */ static inline YYRESULTTAG -yydoAction (yyGLRStack* yystack, size_t yyk, yyRuleNum yyrule, +yydoAction (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule, YYSTYPE* yyvalp, YYLTYPE* yylocp) { int yynrhs = yyrhsLength (yyrule); - if (yystack->yysplitPoint == NULL) + if (yystackp->yysplitPoint == NULL) { - /* Standard special case: single stack. */ - yyGLRStackItem* rhs = (yyGLRStackItem*) yystack->yytops.yystates[yyk]; + /* Standard special case: single stack. */ + yyGLRStackItem* rhs = (yyGLRStackItem*) yystackp->yytops.yystates[yyk]; YYASSERT (yyk == 0); - yystack->yynextFree -= yynrhs; - yystack->yyspaceLeft += yynrhs; - yystack->yytops.yystates[0] = & yystack->yynextFree[-1].yystate; + yystackp->yynextFree -= yynrhs; + yystackp->yyspaceLeft += yynrhs; + yystackp->yytops.yystates[0] = & yystackp->yynextFree[-1].yystate; return yyuserAction (yyrule, yynrhs, rhs, - yyvalp, yylocp, yystack); + yyvalp, yylocp, yystackp); } else { + /* At present, doAction is never called in nondeterministic + * mode, so this branch is never taken. It is here in + * anticipation of a future feature that will allow immediate + * evaluation of selected actions in nondeterministic mode. */ int yyi; yyGLRState* yys; yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1]; yys = yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred - = yystack->yytops.yystates[yyk]; + = yystackp->yytops.yystates[yyk]; + if (yynrhs == 0) + /* Set default location. */ + yyrhsVals[YYMAXRHS + YYMAXLEFT - 1].yystate.yyloc = yys->yyloc; for (yyi = 0; yyi < yynrhs; yyi += 1) { yys = yys->yypred; YYASSERT (yys); } - yyupdateSplit (yystack, yys); - yystack->yytops.yystates[yyk] = yys; + yyupdateSplit (yystackp, yys); + yystackp->yytops.yystates[yyk] = yys; return yyuserAction (yyrule, yynrhs, yyrhsVals + YYMAXRHS + YYMAXLEFT - 1, - yyvalp, yylocp, yystack); + yyvalp, yylocp, yystackp); } } #if !YYDEBUG -# define YY_REDUCE_PRINT(K, Rule) +# define YY_REDUCE_PRINT(Args) #else -# define YY_REDUCE_PRINT(K, Rule) \ +# define YY_REDUCE_PRINT(Args) \ do { \ if (yydebug) \ - yy_reduce_print (K, Rule); \ -} while (0) + yy_reduce_print Args; \ +} while (YYID (0)) /*----------------------------------------------------------. | Report that the RULE is going to be reduced on stack #K. | `----------------------------------------------------------*/ -static inline void -yy_reduce_print (size_t yyk, yyRuleNum yyrule) +/*ARGSUSED*/ static inline void +yy_reduce_print (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule, + YYSTYPE* yyvalp, YYLTYPE* yylocp) { + int yynrhs = yyrhsLength (yyrule); + yybool yynormal __attribute__ ((__unused__)) = + (yystackp->yysplitPoint == NULL); + yyGLRStackItem* yyvsp = (yyGLRStackItem*) yystackp->yytops.yystates[yyk]; + int yylow = 1; int yyi; - YYFPRINTF (stderr, "Reducing stack %lu by rule %d (line %lu), ", + YYUSE (yyvalp); + YYUSE (yylocp); + YYFPRINTF (stderr, "Reducing stack %lu by rule %d (line %lu):\n", (unsigned long int) yyk, yyrule - 1, (unsigned long int) yyrline[yyrule]); - /* Print the symbols being reduced, and their result. */ - for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) - YYFPRINTF (stderr, "%s ", yytokenName (yyrhs[yyi])); - YYFPRINTF (stderr, "-> %s\n", yytokenName (yyr1[yyrule])); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + fprintf (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(((yyGLRStackItem const *)yyvsp)[YYFILL ((yyi + 1) - (yynrhs))].yystate.yysemantics.yysval) + , &(((yyGLRStackItem const *)yyvsp)[YYFILL ((yyi + 1) - (yynrhs))].yystate.yyloc) ); + fprintf (stderr, "\n"); + } } #endif @@ -8495,56 +8318,58 @@ yy_reduce_print (size_t yyk, yyRuleNum y * the new state. If the new state would have an identical input * position, LR state, and predecessor to an existing state on the stack, * it is identified with that existing state, eliminating stack #K from - * the STACK. In this case, the (necessarily deferred) semantic value is + * the STACK. In this case, the (necessarily deferred) semantic value is * added to the options for the existing state's semantic value. */ static inline YYRESULTTAG -yyglrReduce (yyGLRStack* yystack, size_t yyk, yyRuleNum yyrule, - yybool yyforceEval) +yyglrReduce (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule, + yybool yyforceEval) { - size_t yyposn = yystack->yytops.yystates[yyk]->yyposn; + size_t yyposn = yystackp->yytops.yystates[yyk]->yyposn; - if (yyforceEval || yystack->yysplitPoint == NULL) + if (yyforceEval || yystackp->yysplitPoint == NULL) { YYSTYPE yysval; YYLTYPE yyloc; - YY_REDUCE_PRINT (yyk, yyrule); - YYCHK (yydoAction (yystack, yyk, yyrule, &yysval, &yyloc)); - yyglrShift (yystack, yyk, - yyLRgotoState (yystack->yytops.yystates[yyk]->yylrState, + YY_REDUCE_PRINT ((yystackp, yyk, yyrule, &yysval, &yyloc)); + YYCHK (yydoAction (yystackp, yyk, yyrule, &yysval, + &yyloc)); + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyrule], &yysval, &yyloc); + yyglrShift (yystackp, yyk, + yyLRgotoState (yystackp->yytops.yystates[yyk]->yylrState, yylhsNonterm (yyrule)), - yyposn, yysval, &yyloc); + yyposn, &yysval, &yyloc); } else { size_t yyi; int yyn; - yyGLRState* yys, *yys0 = yystack->yytops.yystates[yyk]; + yyGLRState* yys, *yys0 = yystackp->yytops.yystates[yyk]; yyStateNum yynewLRState; - for (yys = yystack->yytops.yystates[yyk], yyn = yyrhsLength (yyrule); + for (yys = yystackp->yytops.yystates[yyk], yyn = yyrhsLength (yyrule); 0 < yyn; yyn -= 1) { yys = yys->yypred; YYASSERT (yys); } - yyupdateSplit (yystack, yys); + yyupdateSplit (yystackp, yys); yynewLRState = yyLRgotoState (yys->yylrState, yylhsNonterm (yyrule)); YYDPRINTF ((stderr, - "Reduced stack %lu by rule #%d; action deferred. Now in state %d.\n", + "Reduced stack %lu by rule #%d; action deferred. Now in state %d.\n", (unsigned long int) yyk, yyrule - 1, yynewLRState)); - for (yyi = 0; yyi < yystack->yytops.yysize; yyi += 1) - if (yyi != yyk && yystack->yytops.yystates[yyi] != NULL) + for (yyi = 0; yyi < yystackp->yytops.yysize; yyi += 1) + if (yyi != yyk && yystackp->yytops.yystates[yyi] != NULL) { - yyGLRState* yyp, *yysplit = yystack->yysplitPoint; - yyp = yystack->yytops.yystates[yyi]; + yyGLRState* yyp, *yysplit = yystackp->yysplitPoint; + yyp = yystackp->yytops.yystates[yyi]; while (yyp != yys && yyp != yysplit && yyp->yyposn >= yyposn) { if (yyp->yylrState == yynewLRState && yyp->yypred == yys) { - yyaddDeferredAction (yystack, yyp, yys0, yyrule); - yymarkStackDeleted (yystack, yyk); + yyaddDeferredAction (yystackp, yyk, yyp, yys0, yyrule); + yymarkStackDeleted (yystackp, yyk); YYDPRINTF ((stderr, "Merging stack %lu into stack %lu.\n", (unsigned long int) yyk, (unsigned long int) yyi)); @@ -8553,41 +8378,59 @@ yyglrReduce (yyGLRStack* yystack, size_t yyp = yyp->yypred; } } - yystack->yytops.yystates[yyk] = yys; - yyglrShiftDefer (yystack, yyk, yynewLRState, yyposn, yys0, yyrule); + yystackp->yytops.yystates[yyk] = yys; + yyglrShiftDefer (yystackp, yyk, yynewLRState, yyposn, yys0, yyrule); } return yyok; } static size_t -yysplitStack (yyGLRStack* yystack, size_t yyk) +yysplitStack (yyGLRStack* yystackp, size_t yyk) { - if (yystack->yysplitPoint == NULL) + if (yystackp->yysplitPoint == NULL) { YYASSERT (yyk == 0); - yystack->yysplitPoint = yystack->yytops.yystates[yyk]; + yystackp->yysplitPoint = yystackp->yytops.yystates[yyk]; } - if (yystack->yytops.yysize >= yystack->yytops.yycapacity) + if (yystackp->yytops.yysize >= yystackp->yytops.yycapacity) { yyGLRState** yynewStates; - if (! ((yystack->yytops.yycapacity - <= (YYSIZEMAX / (2 * sizeof yynewStates[0]))) - && (yynewStates = - (yyGLRState**) YYREALLOC (yystack->yytops.yystates, - ((yystack->yytops.yycapacity *= 2) - * sizeof yynewStates[0]))))) - yyMemoryExhausted (yystack); - yystack->yytops.yystates = yynewStates; - } - yystack->yytops.yystates[yystack->yytops.yysize] - = yystack->yytops.yystates[yyk]; - yystack->yytops.yysize += 1; - return yystack->yytops.yysize-1; + yybool* yynewLookaheadNeeds; + + yynewStates = NULL; + + if (yystackp->yytops.yycapacity + > (YYSIZEMAX / (2 * sizeof yynewStates[0]))) + yyMemoryExhausted (yystackp); + yystackp->yytops.yycapacity *= 2; + + yynewStates = + (yyGLRState**) YYREALLOC (yystackp->yytops.yystates, + (yystackp->yytops.yycapacity + * sizeof yynewStates[0])); + if (yynewStates == NULL) + yyMemoryExhausted (yystackp); + yystackp->yytops.yystates = yynewStates; + + yynewLookaheadNeeds = + (yybool*) YYREALLOC (yystackp->yytops.yylookaheadNeeds, + (yystackp->yytops.yycapacity + * sizeof yynewLookaheadNeeds[0])); + if (yynewLookaheadNeeds == NULL) + yyMemoryExhausted (yystackp); + yystackp->yytops.yylookaheadNeeds = yynewLookaheadNeeds; + } + yystackp->yytops.yystates[yystackp->yytops.yysize] + = yystackp->yytops.yystates[yyk]; + yystackp->yytops.yylookaheadNeeds[yystackp->yytops.yysize] + = yystackp->yytops.yylookaheadNeeds[yyk]; + yystackp->yytops.yysize += 1; + return yystackp->yytops.yysize-1; } /** True iff Y0 and Y1 represent identical options at the top level. * That is, they represent the same rule applied to RHS symbols - * that produce the same terminal symbols. */ + * that produce the same terminal symbols. */ static yybool yyidenticalOptions (yySemanticOption* yyy0, yySemanticOption* yyy1) { @@ -8608,7 +8451,7 @@ yyidenticalOptions (yySemanticOption* yy } /** Assuming identicalOptions (Y0,Y1), destructively merge the - * alternative semantic values for the RHS-symbols of Y1 and Y0. */ + * alternative semantic values for the RHS-symbols of Y1 and Y0. */ static void yymergeOptionSets (yySemanticOption* yyy0, yySemanticOption* yyy1) { @@ -8637,7 +8480,7 @@ yymergeOptionSets (yySemanticOption* yyy yySemanticOption* yyz1; yyz0p = &yys0->yysemantics.yyfirstVal; yyz1 = yys1->yysemantics.yyfirstVal; - while (yytrue) + while (YYID (yytrue)) { if (yyz1 == *yyz0p || yyz1 == NULL) break; @@ -8662,7 +8505,7 @@ yymergeOptionSets (yySemanticOption* yyy /** Y0 and Y1 represent two possible actions to take in a given * parsing state; return 0 if no combination is possible, - * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */ + * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */ static int yypreference (yySemanticOption* y0, yySemanticOption* y1) { @@ -8685,46 +8528,71 @@ yypreference (yySemanticOption* y0, yySe return 0; } -static YYRESULTTAG yyresolveValue (yySemanticOption* yyoptionList, - yyGLRStack* yystack, YYSTYPE* yyvalp, - YYLTYPE* yylocp); +static YYRESULTTAG yyresolveValue (yyGLRState* yys, + yyGLRStack* yystackp); + +/** Resolve the previous N states starting at and including state S. If result + * != yyok, some states may have been left unresolved possibly with empty + * semantic option chains. Regardless of whether result = yyok, each state + * has been left with consistent data so that yydestroyGLRState can be invoked + * if necessary. */ static YYRESULTTAG -yyresolveStates (yyGLRState* yys, int yyn, yyGLRStack* yystack) +yyresolveStates (yyGLRState* yys, int yyn, + yyGLRStack* yystackp) { - YYRESULTTAG yyflag; if (0 < yyn) { YYASSERT (yys->yypred); - yyflag = yyresolveStates (yys->yypred, yyn-1, yystack); - if (yyflag != yyok) - return yyflag; + YYCHK (yyresolveStates (yys->yypred, yyn-1, yystackp)); if (! yys->yyresolved) - { - yyflag = yyresolveValue (yys->yysemantics.yyfirstVal, yystack, - &yys->yysemantics.yysval, &yys->yyloc - ); - if (yyflag != yyok) - return yyflag; - yys->yyresolved = yytrue; - } + YYCHK (yyresolveValue (yys, yystackp)); } return yyok; } +/** Resolve the states for the RHS of OPT, perform its user action, and return + * the semantic value and location. Regardless of whether result = yyok, all + * RHS states have been destroyed (assuming the user action destroys all RHS + * semantic values if invoked). */ static YYRESULTTAG -yyresolveAction (yySemanticOption* yyopt, yyGLRStack* yystack, - YYSTYPE* yyvalp, YYLTYPE* yylocp) +yyresolveAction (yySemanticOption* yyopt, yyGLRStack* yystackp, + YYSTYPE* yyvalp, YYLTYPE* yylocp) { yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1]; int yynrhs; + int yychar_current; + YYSTYPE yylval_current; + YYLTYPE yylloc_current; + YYRESULTTAG yyflag; yynrhs = yyrhsLength (yyopt->yyrule); - YYCHK (yyresolveStates (yyopt->yystate, yynrhs, yystack)); + yyflag = yyresolveStates (yyopt->yystate, yynrhs, yystackp); + if (yyflag != yyok) + { + yyGLRState *yys; + for (yys = yyopt->yystate; yynrhs > 0; yys = yys->yypred, yynrhs -= 1) + yydestroyGLRState ("Cleanup: popping", yys); + return yyflag; + } + yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred = yyopt->yystate; - return yyuserAction (yyopt->yyrule, yynrhs, - yyrhsVals + YYMAXRHS + YYMAXLEFT - 1, - yyvalp, yylocp, yystack); + if (yynrhs == 0) + /* Set default location. */ + yyrhsVals[YYMAXRHS + YYMAXLEFT - 1].yystate.yyloc = yyopt->yystate->yyloc; + yychar_current = yychar; + yylval_current = yylval; + yylloc_current = yylloc; + yychar = yyopt->yyrawchar; + yylval = yyopt->yyval; + yylloc = yyopt->yyloc; + yyflag = yyuserAction (yyopt->yyrule, yynrhs, + yyrhsVals + YYMAXRHS + YYMAXLEFT - 1, + yyvalp, yylocp, yystackp); + yychar = yychar_current; + yylval = yylval_current; + yylloc = yylloc_current; + return yyflag; } #if YYDEBUG @@ -8734,7 +8602,7 @@ yyreportTree (yySemanticOption* yyx, int int yynrhs = yyrhsLength (yyx->yyrule); int yyi; yyGLRState* yys; - yyGLRState* yystates[YYMAXRHS]; + yyGLRState* yystates[1 + YYMAXRHS]; yyGLRState yyleftmost_state; for (yyi = yynrhs, yys = yyx->yystate; 0 < yyi; yyi -= 1, yys = yys->yypred) @@ -8750,11 +8618,11 @@ yyreportTree (yySemanticOption* yyx, int if (yyx->yystate->yyposn < yys->yyposn + 1) YYFPRINTF (stderr, "%*s%s -> \n", yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)), - yyx->yyrule); + yyx->yyrule - 1); else YYFPRINTF (stderr, "%*s%s -> \n", yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)), - yyx->yyrule, (unsigned long int) (yys->yyposn + 1), + yyx->yyrule - 1, (unsigned long int) (yys->yyposn + 1), (unsigned long int) yyx->yystate->yyposn); for (yyi = 1; yyi <= yynrhs; yyi += 1) { @@ -8775,16 +8643,12 @@ yyreportTree (yySemanticOption* yyx, int } #endif -static void yyreportAmbiguity (yySemanticOption* yyx0, yySemanticOption* yyx1, - yyGLRStack* yystack) - __attribute__ ((__noreturn__)); -static void -yyreportAmbiguity (yySemanticOption* yyx0, yySemanticOption* yyx1, - yyGLRStack* yystack) +/*ARGSUSED*/ static YYRESULTTAG +yyreportAmbiguity (yySemanticOption* yyx0, + yySemanticOption* yyx1) { - /* `Unused' warnings. */ - (void) yyx0; - (void) yyx1; + YYUSE (yyx0); + YYUSE (yyx1); #if YYDEBUG YYFPRINTF (stderr, "Ambiguity detected.\n"); @@ -8794,19 +8658,85 @@ yyreportAmbiguity (yySemanticOption* yyx yyreportTree (yyx1, 2); YYFPRINTF (stderr, "\n"); #endif - yyFail (yystack, YY_("syntax is ambiguous")); + + yyerror (YY_("syntax is ambiguous")); + return yyabort; } +/** Starting at and including state S1, resolve the location for each of the + * previous N1 states that is unresolved. The first semantic option of a state + * is always chosen. */ +static void +yyresolveLocations (yyGLRState* yys1, int yyn1, + yyGLRStack *yystackp) +{ + if (0 < yyn1) + { + yyresolveLocations (yys1->yypred, yyn1 - 1, yystackp); + if (!yys1->yyresolved) + { + yySemanticOption *yyoption; + yyGLRStackItem yyrhsloc[1 + YYMAXRHS]; + int yynrhs; + int yychar_current; + YYSTYPE yylval_current; + YYLTYPE yylloc_current; + yyoption = yys1->yysemantics.yyfirstVal; + YYASSERT (yyoption != NULL); + yynrhs = yyrhsLength (yyoption->yyrule); + if (yynrhs > 0) + { + yyGLRState *yys; + int yyn; + yyresolveLocations (yyoption->yystate, yynrhs, + yystackp); + for (yys = yyoption->yystate, yyn = yynrhs; + yyn > 0; + yys = yys->yypred, yyn -= 1) + yyrhsloc[yyn].yystate.yyloc = yys->yyloc; + } + else + { + /* Both yyresolveAction and yyresolveLocations traverse the GSS + in reverse rightmost order. It is only necessary to invoke + yyresolveLocations on a subforest for which yyresolveAction + would have been invoked next had an ambiguity not been + detected. Thus the location of the previous state (but not + necessarily the previous state itself) is guaranteed to be + resolved already. */ + yyGLRState *yyprevious = yyoption->yystate; + yyrhsloc[0].yystate.yyloc = yyprevious->yyloc; + } + yychar_current = yychar; + yylval_current = yylval; + yylloc_current = yylloc; + yychar = yyoption->yyrawchar; + yylval = yyoption->yyval; + yylloc = yyoption->yyloc; + YYLLOC_DEFAULT ((yys1->yyloc), yyrhsloc, yynrhs); + yychar = yychar_current; + yylval = yylval_current; + yylloc = yylloc_current; + } + } +} -/** Resolve the ambiguity represented by OPTIONLIST, perform the indicated - * actions, and return the result. */ +/** Resolve the ambiguity represented in state S, perform the indicated + * actions, and set the semantic value of S. If result != yyok, the chain of + * semantic options in S has been cleared instead or it has been left + * unmodified except that redundant options may have been removed. Regardless + * of whether result = yyok, S has been left with consistent data so that + * yydestroyGLRState can be invoked if necessary. */ static YYRESULTTAG -yyresolveValue (yySemanticOption* yyoptionList, yyGLRStack* yystack, - YYSTYPE* yyvalp, YYLTYPE* yylocp) +yyresolveValue (yyGLRState* yys, yyGLRStack* yystackp) { + yySemanticOption* yyoptionList = yys->yysemantics.yyfirstVal; yySemanticOption* yybest; yySemanticOption** yypp; yybool yymerge; + YYSTYPE yysval; + YYRESULTTAG yyflag; + YYLTYPE *yylocp = &yys->yyloc; yybest = yyoptionList; yymerge = yyfalse; @@ -8824,7 +8754,8 @@ yyresolveValue (yySemanticOption* yyopti switch (yypreference (yybest, yyp)) { case 0: - yyreportAmbiguity (yybest, yyp, yystack); + yyresolveLocations (yys, 1, yystackp); + return yyreportAmbiguity (yybest, yyp); break; case 1: yymerge = yytrue; @@ -8837,7 +8768,7 @@ yyresolveValue (yySemanticOption* yyopti break; default: /* This cannot happen so it is not worth a YYASSERT (yyfalse), - but some compilers complain if the default case is + but some compilers complain if the default case is omitted. */ break; } @@ -8849,84 +8780,100 @@ yyresolveValue (yySemanticOption* yyopti { yySemanticOption* yyp; int yyprec = yydprec[yybest->yyrule]; - YYCHK (yyresolveAction (yybest, yystack, yyvalp, yylocp)); - for (yyp = yybest->yynext; yyp != NULL; yyp = yyp->yynext) - { - if (yyprec == yydprec[yyp->yyrule]) - { - YYSTYPE yyval1; - YYLTYPE yydummy; - YYCHK (yyresolveAction (yyp, yystack, &yyval1, &yydummy)); - yyuserMerge (yymerger[yyp->yyrule], yyvalp, &yyval1); - } - } - return yyok; + yyflag = yyresolveAction (yybest, yystackp, &yysval, + yylocp); + if (yyflag == yyok) + for (yyp = yybest->yynext; yyp != NULL; yyp = yyp->yynext) + { + if (yyprec == yydprec[yyp->yyrule]) + { + YYSTYPE yysval_other; + YYLTYPE yydummy; + yyflag = yyresolveAction (yyp, yystackp, &yysval_other, + &yydummy); + if (yyflag != yyok) + { + yydestruct ("Cleanup: discarding incompletely merged value for", + yystos[yys->yylrState], + &yysval, yylocp); + break; + } + yyuserMerge (yymerger[yyp->yyrule], &yysval, &yysval_other); + } + } } else - return yyresolveAction (yybest, yystack, yyvalp, yylocp); + yyflag = yyresolveAction (yybest, yystackp, &yysval, yylocp); + + if (yyflag == yyok) + { + yys->yyresolved = yytrue; + yys->yysemantics.yysval = yysval; + } + else + yys->yysemantics.yyfirstVal = NULL; + return yyflag; } static YYRESULTTAG -yyresolveStack (yyGLRStack* yystack) +yyresolveStack (yyGLRStack* yystackp) { - if (yystack->yysplitPoint != NULL) + if (yystackp->yysplitPoint != NULL) { yyGLRState* yys; int yyn; - for (yyn = 0, yys = yystack->yytops.yystates[0]; - yys != yystack->yysplitPoint; + for (yyn = 0, yys = yystackp->yytops.yystates[0]; + yys != yystackp->yysplitPoint; yys = yys->yypred, yyn += 1) continue; - YYCHK (yyresolveStates (yystack->yytops.yystates[0], yyn, yystack + YYCHK (yyresolveStates (yystackp->yytops.yystates[0], yyn, yystackp )); } return yyok; } static void -yycompressStack (yyGLRStack* yystack) +yycompressStack (yyGLRStack* yystackp) { yyGLRState* yyp, *yyq, *yyr; - if (yystack->yytops.yysize != 1 || yystack->yysplitPoint == NULL) + if (yystackp->yytops.yysize != 1 || yystackp->yysplitPoint == NULL) return; - for (yyp = yystack->yytops.yystates[0], yyq = yyp->yypred, yyr = NULL; - yyp != yystack->yysplitPoint; + for (yyp = yystackp->yytops.yystates[0], yyq = yyp->yypred, yyr = NULL; + yyp != yystackp->yysplitPoint; yyr = yyp, yyp = yyq, yyq = yyp->yypred) yyp->yypred = yyr; - yystack->yyspaceLeft += yystack->yynextFree - yystack->yyitems; - yystack->yynextFree = ((yyGLRStackItem*) yystack->yysplitPoint) + 1; - yystack->yyspaceLeft -= yystack->yynextFree - yystack->yyitems; - yystack->yysplitPoint = NULL; - yystack->yylastDeleted = NULL; + yystackp->yyspaceLeft += yystackp->yynextFree - yystackp->yyitems; + yystackp->yynextFree = ((yyGLRStackItem*) yystackp->yysplitPoint) + 1; + yystackp->yyspaceLeft -= yystackp->yynextFree - yystackp->yyitems; + yystackp->yysplitPoint = NULL; + yystackp->yylastDeleted = NULL; while (yyr != NULL) { - yystack->yynextFree->yystate = *yyr; + yystackp->yynextFree->yystate = *yyr; yyr = yyr->yypred; - yystack->yynextFree->yystate.yypred = & yystack->yynextFree[-1].yystate; - yystack->yytops.yystates[0] = &yystack->yynextFree->yystate; - yystack->yynextFree += 1; - yystack->yyspaceLeft -= 1; + yystackp->yynextFree->yystate.yypred = &yystackp->yynextFree[-1].yystate; + yystackp->yytops.yystates[0] = &yystackp->yynextFree->yystate; + yystackp->yynextFree += 1; + yystackp->yyspaceLeft -= 1; } } static YYRESULTTAG -yyprocessOneStack (yyGLRStack* yystack, size_t yyk, - size_t yyposn, YYSTYPE* yylvalp, YYLTYPE* yyllocp - ) +yyprocessOneStack (yyGLRStack* yystackp, size_t yyk, + size_t yyposn) { int yyaction; const short int* yyconflicts; yyRuleNum yyrule; - yySymbol* const yytokenp = yystack->yytokenp; - while (yystack->yytops.yystates[yyk] != NULL) + while (yystackp->yytops.yystates[yyk] != NULL) { - yyStateNum yystate = yystack->yytops.yystates[yyk]->yylrState; + yyStateNum yystate = yystackp->yytops.yystates[yyk]->yylrState; YYDPRINTF ((stderr, "Stack %lu Entering state %d\n", (unsigned long int) yyk, yystate)); @@ -8939,77 +8886,68 @@ yyprocessOneStack (yyGLRStack* yystack, { YYDPRINTF ((stderr, "Stack %lu dies.\n", (unsigned long int) yyk)); - yymarkStackDeleted (yystack, yyk); + yymarkStackDeleted (yystackp, yyk); return yyok; } - YYCHK (yyglrReduce (yystack, yyk, yyrule, yyfalse)); + YYCHK (yyglrReduce (yystackp, yyk, yyrule, yyfalse)); } else { - if (*yytokenp == YYEMPTY) + yySymbol yytoken; + yystackp->yytops.yylookaheadNeeds[yyk] = yytrue; + if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; - *yytokenp = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", *yytokenp, yylvalp, yyllocp); + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } - yygetLRActions (yystate, *yytokenp, &yyaction, &yyconflicts); + else + yytoken = YYTRANSLATE (yychar); + yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts); while (*yyconflicts != 0) { - size_t yynewStack = yysplitStack (yystack, yyk); + size_t yynewStack = yysplitStack (yystackp, yyk); YYDPRINTF ((stderr, "Splitting off stack %lu from %lu.\n", (unsigned long int) yynewStack, (unsigned long int) yyk)); - YYCHK (yyglrReduce (yystack, yynewStack, + YYCHK (yyglrReduce (yystackp, yynewStack, *yyconflicts, yyfalse)); - YYCHK (yyprocessOneStack (yystack, yynewStack, yyposn, - yylvalp, yyllocp)); + YYCHK (yyprocessOneStack (yystackp, yynewStack, + yyposn)); yyconflicts += 1; } if (yyisShiftAction (yyaction)) - { - YYDPRINTF ((stderr, "On stack %lu, ", (unsigned long int) yyk)); - YY_SYMBOL_PRINT ("shifting", *yytokenp, yylvalp, yyllocp); - yyglrShift (yystack, yyk, yyaction, yyposn+1, - *yylvalp, yyllocp); - YYDPRINTF ((stderr, "Stack %lu now in state #%d\n", - (unsigned long int) yyk, - yystack->yytops.yystates[yyk]->yylrState)); - break; - } + break; else if (yyisErrorAction (yyaction)) { YYDPRINTF ((stderr, "Stack %lu dies.\n", (unsigned long int) yyk)); - yymarkStackDeleted (yystack, yyk); + yymarkStackDeleted (yystackp, yyk); break; } else - YYCHK (yyglrReduce (yystack, yyk, -yyaction, yyfalse)); + YYCHK (yyglrReduce (yystackp, yyk, -yyaction, + yyfalse)); } } return yyok; } -static void -yyreportSyntaxError (yyGLRStack* yystack, - YYSTYPE* yylvalp, YYLTYPE* yyllocp) +/*ARGSUSED*/ static void +yyreportSyntaxError (yyGLRStack* yystackp) { - /* `Unused' warnings. */ - (void) yylvalp; - (void) yyllocp; - - if (yystack->yyerrState == 0) + if (yystackp->yyerrState == 0) { #if YYERROR_VERBOSE - yySymbol* const yytokenp = yystack->yytokenp; int yyn; - yyn = yypact[yystack->yytops.yystates[0]->yylrState]; - if (YYPACT_NINF < yyn && yyn < YYLAST) + yyn = yypact[yystackp->yytops.yystates[0]->yylrState]; + if (YYPACT_NINF < yyn && yyn <= YYLAST) { - size_t yysize0 = yytnamerr (NULL, yytokenName (*yytokenp)); + yySymbol yytoken = YYTRANSLATE (yychar); + size_t yysize0 = yytnamerr (NULL, yytokenName (yytoken)); size_t yysize = yysize0; size_t yysize1; yybool yysize_overflow = yyfalse; @@ -9033,11 +8971,11 @@ yyreportSyntaxError (yyGLRStack* yystack int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn; + int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; - yyarg[0] = yytokenName (*yytokenp); + yyarg[0] = yytokenName (yytoken); yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) @@ -9089,7 +9027,7 @@ yyreportSyntaxError (yyGLRStack* yystack else { yyerror (YY_("syntax error")); - yyMemoryExhausted (yystack); + yyMemoryExhausted (yystackp); } } else @@ -9099,49 +9037,47 @@ yyreportSyntaxError (yyGLRStack* yystack } } -/* Recover from a syntax error on YYSTACK, assuming that YYTOKENP, - YYLVALP, and YYLLOCP point to the syntactic category, semantic - value, and location of the look-ahead. */ -static void -yyrecoverSyntaxError (yyGLRStack* yystack, - YYSTYPE* yylvalp, - YYLTYPE* YYOPTIONAL_LOC (yyllocp) - ) +/* Recover from a syntax error on *YYSTACKP, assuming that *YYSTACKP->YYTOKENP, + yylval, and yylloc are the syntactic category, semantic value, and location + of the look-ahead. */ +/*ARGSUSED*/ static void +yyrecoverSyntaxError (yyGLRStack* yystackp) { - yySymbol* const yytokenp = yystack->yytokenp; size_t yyk; int yyj; - if (yystack->yyerrState == 3) + if (yystackp->yyerrState == 3) /* We just shifted the error token and (perhaps) took some reductions. Skip tokens until we can proceed. */ - while (yytrue) + while (YYID (yytrue)) { - if (*yytokenp == YYEOF) - yyFail (yystack, NULL); - if (*yytokenp != YYEMPTY) + yySymbol yytoken; + if (yychar == YYEOF) + yyFail (yystackp, NULL); + if (yychar != YYEMPTY) { /* We throw away the lookahead, but the error range - of the shifted error token must take it into account. */ - yyGLRState *yys = yystack->yytops.yystates[0]; + of the shifted error token must take it into account. */ + yyGLRState *yys = yystackp->yytops.yystates[0]; yyGLRStackItem yyerror_range[3]; yyerror_range[1].yystate.yyloc = yys->yyloc; - yyerror_range[2].yystate.yyloc = *yyllocp; - YYLLOC_DEFAULT (yys->yyloc, yyerror_range, 2); + yyerror_range[2].yystate.yyloc = yylloc; + YYLLOC_DEFAULT ((yys->yyloc), yyerror_range, 2); + yytoken = YYTRANSLATE (yychar); yydestruct ("Error: discarding", - *yytokenp, yylvalp, yyllocp); + yytoken, &yylval, &yylloc); } YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; - *yytokenp = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", *yytokenp, yylvalp, yyllocp); - yyj = yypact[yystack->yytops.yystates[0]->yylrState]; + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + yyj = yypact[yystackp->yytops.yystates[0]->yylrState]; if (yyis_pact_ninf (yyj)) return; - yyj += *yytokenp; - if (yyj < 0 || YYLAST < yyj || yycheck[yyj] != *yytokenp) + yyj += yytoken; + if (yyj < 0 || YYLAST < yyj || yycheck[yyj] != yytoken) { - if (yydefact[yystack->yytops.yystates[0]->yylrState] != 0) + if (yydefact[yystackp->yytops.yystates[0]->yylrState] != 0) return; } else if (yytable[yyj] != 0 && ! yyis_table_ninf (yytable[yyj])) @@ -9149,21 +9085,21 @@ yyrecoverSyntaxError (yyGLRStack* yystac } /* Reduce to one stack. */ - for (yyk = 0; yyk < yystack->yytops.yysize; yyk += 1) - if (yystack->yytops.yystates[yyk] != NULL) + for (yyk = 0; yyk < yystackp->yytops.yysize; yyk += 1) + if (yystackp->yytops.yystates[yyk] != NULL) break; - if (yyk >= yystack->yytops.yysize) - yyFail (yystack, NULL); - for (yyk += 1; yyk < yystack->yytops.yysize; yyk += 1) - yymarkStackDeleted (yystack, yyk); - yyremoveDeletes (yystack); - yycompressStack (yystack); - - /* Now pop stack until we find a state that shifts the error token. */ - yystack->yyerrState = 3; - while (yystack->yytops.yystates[0] != NULL) + if (yyk >= yystackp->yytops.yysize) + yyFail (yystackp, NULL); + for (yyk += 1; yyk < yystackp->yytops.yysize; yyk += 1) + yymarkStackDeleted (yystackp, yyk); + yyremoveDeletes (yystackp); + yycompressStack (yystackp); + + /* Now pop stack until we find a state that shifts the error token. */ + yystackp->yyerrState = 3; + while (yystackp->yytops.yystates[0] != NULL) { - yyGLRState *yys = yystack->yytops.yystates[0]; + yyGLRState *yys = yystackp->yytops.yystates[0]; yyj = yypact[yys->yylrState]; if (! yyis_pact_ninf (yyj)) { @@ -9173,24 +9109,24 @@ yyrecoverSyntaxError (yyGLRStack* yystac { /* Shift the error token having adjusted its location. */ YYLTYPE yyerrloc; - yystack->yyerror_range[2].yystate.yyloc = *yyllocp; - YYLLOC_DEFAULT (yyerrloc, yystack->yyerror_range, 2); + yystackp->yyerror_range[2].yystate.yyloc = yylloc; + YYLLOC_DEFAULT (yyerrloc, (yystackp->yyerror_range), 2); YY_SYMBOL_PRINT ("Shifting", yystos[yytable[yyj]], - yylvalp, &yyerrloc); - yyglrShift (yystack, 0, yytable[yyj], - yys->yyposn, *yylvalp, &yyerrloc); - yys = yystack->yytops.yystates[0]; + &yylval, &yyerrloc); + yyglrShift (yystackp, 0, yytable[yyj], + yys->yyposn, &yylval, &yyerrloc); + yys = yystackp->yytops.yystates[0]; break; } } - yystack->yyerror_range[1].yystate.yyloc = yys->yyloc; + yystackp->yyerror_range[1].yystate.yyloc = yys->yyloc; yydestroyGLRState ("Error: popping", yys); - yystack->yytops.yystates[0] = yys->yypred; - yystack->yynextFree -= 1; - yystack->yyspaceLeft += 1; + yystackp->yytops.yystates[0] = yys->yypred; + yystackp->yynextFree -= 1; + yystackp->yyspaceLeft += 1; } - if (yystack->yytops.yystates[0] == NULL) - yyFail (yystack, NULL); + if (yystackp->yytops.yystates[0] == NULL) + yyFail (yystackp, NULL); } #define YYCHK1(YYE) \ @@ -9207,7 +9143,7 @@ yyrecoverSyntaxError (yyGLRStack* yystac default: \ goto yybuglab; \ } \ - } while (0) + } while (YYID (0)) /*----------. @@ -9218,17 +9154,13 @@ int yyparse (void) { int yyresult; - yySymbol yytoken; yyGLRStack yystack; + yyGLRStack* const yystackp = &yystack; size_t yyposn; - - YYSTYPE* const yylvalp = &yylval; - YYLTYPE* const yyllocp = &yylloc; - YYDPRINTF ((stderr, "Starting parse\n")); - yytoken = YYEMPTY; + yychar = YYEMPTY; yylval = yyval_default; #if YYLTYPE_IS_TRIVIAL @@ -9237,7 +9169,7 @@ yyparse (void) #endif - if (! yyinitGLRStack (&yystack, YYINITDEPTH)) + if (! yyinitGLRStack (yystackp, YYINITDEPTH)) goto yyexhaustedlab; switch (YYSETJMP (yystack.yyexception_buffer)) { @@ -9246,24 +9178,23 @@ yyparse (void) case 2: goto yyexhaustedlab; default: goto yybuglab; } - yystack.yytokenp = &yytoken; - yyglrShift (&yystack, 0, 0, 0, yylval, &yylloc); + yyglrShift (&yystack, 0, 0, 0, &yylval, &yylloc); yyposn = 0; - while (yytrue) + while (YYID (yytrue)) { /* For efficiency, we have two loops, the first of which is specialized to deterministic operation (single stack, no potential ambiguity). */ /* Standard mode */ - while (yytrue) + while (YYID (yytrue)) { yyRuleNum yyrule; int yyaction; const short int* yyconflicts; yyStateNum yystate = yystack.yytops.yystates[0]->yylrState; - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) goto yyacceptlab; if (yyisDefaultedState (yystate)) @@ -9271,38 +9202,41 @@ yyparse (void) yyrule = yydefaultAction (yystate); if (yyrule == 0) { - yystack.yyerror_range[1].yystate.yyloc = *yyllocp; - yyreportSyntaxError (&yystack, yylvalp, yyllocp); + yystack.yyerror_range[1].yystate.yyloc = yylloc; + yyreportSyntaxError (&yystack); goto yyuser_error; } YYCHK1 (yyglrReduce (&yystack, 0, yyrule, yytrue)); } else { - if (yytoken == YYEMPTY) + yySymbol yytoken; + if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; yytoken = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", yytoken, yylvalp, yyllocp); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } + else + yytoken = YYTRANSLATE (yychar); yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts); if (*yyconflicts != 0) break; if (yyisShiftAction (yyaction)) { - YY_SYMBOL_PRINT ("Shifting", yytoken, yylvalp, yyllocp); - if (yytoken != YYEOF) - yytoken = YYEMPTY; + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + if (yychar != YYEOF) + yychar = YYEMPTY; yyposn += 1; - yyglrShift (&yystack, 0, yyaction, yyposn, yylval, yyllocp); + yyglrShift (&yystack, 0, yyaction, yyposn, &yylval, &yylloc); if (0 < yystack.yyerrState) yystack.yyerrState -= 1; } else if (yyisErrorAction (yyaction)) { - yystack.yyerror_range[1].yystate.yyloc = *yyllocp; - yyreportSyntaxError (&yystack, yylvalp, yyllocp); + yystack.yyerror_range[1].yystate.yyloc = yylloc; + yyreportSyntaxError (&yystack); goto yyuser_error; } else @@ -9310,15 +9244,35 @@ yyparse (void) } } - while (yytrue) + while (YYID (yytrue)) { + yySymbol yytoken_to_shift; size_t yys; - size_t yyn = yystack.yytops.yysize; - for (yys = 0; yys < yyn; yys += 1) - YYCHK1 (yyprocessOneStack (&yystack, yys, yyposn, - yylvalp, yyllocp)); - yytoken = YYEMPTY; - yyposn += 1; + + for (yys = 0; yys < yystack.yytops.yysize; yys += 1) + yystackp->yytops.yylookaheadNeeds[yys] = yychar != YYEMPTY; + + /* yyprocessOneStack returns one of three things: + + - An error flag. If the caller is yyprocessOneStack, it + immediately returns as well. When the caller is finally + yyparse, it jumps to an error label via YYCHK1. + + - yyok, but yyprocessOneStack has invoked yymarkStackDeleted + (&yystack, yys), which sets the top state of yys to NULL. Thus, + yyparse's following invocation of yyremoveDeletes will remove + the stack. + + - yyok, when ready to shift a token. + + Except in the first case, yyparse will invoke yyremoveDeletes and + then shift the next token onto all remaining stacks. This + synchronization of the shift (that is, after all preceding + reductions on all stacks) helps prevent double destructor calls + on yylval in the event of memory exhaustion. */ + + for (yys = 0; yys < yystack.yytops.yysize; yys += 1) + YYCHK1 (yyprocessOneStack (&yystack, yys, yyposn)); yyremoveDeletes (&yystack); if (yystack.yytops.yysize == 0) { @@ -9327,11 +9281,37 @@ yyparse (void) yyFail (&yystack, YY_("syntax error")); YYCHK1 (yyresolveStack (&yystack)); YYDPRINTF ((stderr, "Returning to deterministic operation.\n")); - yystack.yyerror_range[1].yystate.yyloc = *yyllocp; - yyreportSyntaxError (&yystack, yylvalp, yyllocp); + yystack.yyerror_range[1].yystate.yyloc = yylloc; + yyreportSyntaxError (&yystack); goto yyuser_error; } - else if (yystack.yytops.yysize == 1) + + /* If any yyglrShift call fails, it will fail after shifting. Thus, + a copy of yylval will already be on stack 0 in the event of a + failure in the following loop. Thus, yychar is set to YYEMPTY + before the loop to make sure the user destructor for yylval isn't + called twice. */ + yytoken_to_shift = YYTRANSLATE (yychar); + yychar = YYEMPTY; + yyposn += 1; + for (yys = 0; yys < yystack.yytops.yysize; yys += 1) + { + int yyaction; + const short int* yyconflicts; + yyStateNum yystate = yystack.yytops.yystates[yys]->yylrState; + yygetLRActions (yystate, yytoken_to_shift, &yyaction, + &yyconflicts); + /* Note that yyconflicts were handled by yyprocessOneStack. */ + YYDPRINTF ((stderr, "On stack %lu, ", (unsigned long int) yys)); + YY_SYMBOL_PRINT ("shifting", yytoken_to_shift, &yylval, &yylloc); + yyglrShift (&yystack, yys, yyaction, yyposn, + &yylval, &yylloc); + YYDPRINTF ((stderr, "Stack %lu now in state #%d\n", + (unsigned long int) yys, + yystack.yytops.yystates[yys]->yylrState)); + } + + if (yystack.yytops.yysize == 1) { YYCHK1 (yyresolveStack (&yystack)); YYDPRINTF ((stderr, "Returning to deterministic operation.\n")); @@ -9341,7 +9321,7 @@ yyparse (void) } continue; yyuser_error: - yyrecoverSyntaxError (&yystack, yylvalp, yyllocp); + yyrecoverSyntaxError (&yystack); yyposn = yystack.yytops.yystates[0]->yyposn; } @@ -9351,7 +9331,7 @@ yyparse (void) yybuglab: YYASSERT (yyfalse); - /* Fall through. */ + goto yyabortlab; yyabortlab: yyresult = 1; @@ -9360,12 +9340,13 @@ yyparse (void) yyexhaustedlab: yyerror (YY_("memory exhausted")); yyresult = 2; - /* Fall through. */ + goto yyreturn; yyreturn: - if (yytoken != YYEOF && yytoken != YYEMPTY) + if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", - yytoken, yylvalp, yyllocp); + YYTRANSLATE (yychar), + &yylval, &yylloc); /* If the stack is well-formed, pop the stack until it is empty, destroying its entries as we go. But free the stack regardless @@ -9374,26 +9355,36 @@ yyparse (void) { yyGLRState** yystates = yystack.yytops.yystates; if (yystates) - while (yystates[0]) - { - yyGLRState *yys = yystates[0]; - yystack.yyerror_range[1].yystate.yyloc = yys->yyloc; - yydestroyGLRState ("Cleanup: popping", yys); - yystates[0] = yys->yypred; - yystack.yynextFree -= 1; - yystack.yyspaceLeft += 1; - } + { + size_t yysize = yystack.yytops.yysize; + size_t yyk; + for (yyk = 0; yyk < yysize; yyk += 1) + if (yystates[yyk]) + { + while (yystates[yyk]) + { + yyGLRState *yys = yystates[yyk]; + yystack.yyerror_range[1].yystate.yyloc = yys->yyloc; + yydestroyGLRState ("Cleanup: popping", yys); + yystates[yyk] = yys->yypred; + yystack.yynextFree -= 1; + yystack.yyspaceLeft += 1; + } + break; + } + } yyfreeGLRStack (&yystack); } - return yyresult; + /* Make sure YYID is used. */ + return YYID (yyresult); } /* DEBUGGING ONLY */ #ifdef YYDEBUG -static void yypstack (yyGLRStack* yystack, size_t yyk) +static void yypstack (yyGLRStack* yystackp, size_t yyk) __attribute__ ((__unused__)); -static void yypdumpstack (yyGLRStack* yystack) __attribute__ ((__unused__)); +static void yypdumpstack (yyGLRStack* yystackp) __attribute__ ((__unused__)); static void yy_yypstack (yyGLRState* yys) @@ -9417,23 +9408,23 @@ yypstates (yyGLRState* yyst) } static void -yypstack (yyGLRStack* yystack, size_t yyk) +yypstack (yyGLRStack* yystackp, size_t yyk) { - yypstates (yystack->yytops.yystates[yyk]); + yypstates (yystackp->yytops.yystates[yyk]); } #define YYINDEX(YYX) \ - ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystack->yyitems) + ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystackp->yyitems) static void -yypdumpstack (yyGLRStack* yystack) +yypdumpstack (yyGLRStack* yystackp) { yyGLRStackItem* yyp; size_t yyi; - for (yyp = yystack->yyitems; yyp < yystack->yynextFree; yyp += 1) + for (yyp = yystackp->yyitems; yyp < yystackp->yynextFree; yyp += 1) { - fprintf (stderr, "%3lu. ", (unsigned long int) (yyp - yystack->yyitems)); + fprintf (stderr, "%3lu. ", (unsigned long int) (yyp - yystackp->yyitems)); if (*(yybool *) yyp) { fprintf (stderr, "Res: %d, LR State: %d, posn: %lu, pred: %ld", @@ -9447,22 +9438,22 @@ yypdumpstack (yyGLRStack* yystack) else { fprintf (stderr, "Option. rule: %d, state: %ld, next: %ld", - yyp->yyoption.yyrule, + yyp->yyoption.yyrule - 1, (long int) YYINDEX (yyp->yyoption.yystate), (long int) YYINDEX (yyp->yyoption.yynext)); } fprintf (stderr, "\n"); } fprintf (stderr, "Tops:"); - for (yyi = 0; yyi < yystack->yytops.yysize; yyi += 1) + for (yyi = 0; yyi < yystackp->yytops.yysize; yyi += 1) fprintf (stderr, "%lu: %ld; ", (unsigned long int) yyi, - (long int) YYINDEX (yystack->yytops.yystates[yyi])); + (long int) YYINDEX (yystackp->yytops.yystates[yyi])); fprintf (stderr, "\n"); } #endif -#line 2409 "parse.y" +#line 2416 "parse.y" /* Check the order of declarations for various standards */ Index: gcc/p/parse.h =================================================================== RCS file: /cvs/gcc/gcc/p/parse.h,v retrieving revision 1.1.111.2 retrieving revision 1.4 diff -u -p -r1.1.111.2 -r1.4 --- gcc/p/parse.h 27 Mar 2006 11:51:06 -0000 1.1.111.2 +++ gcc/p/parse.h 3 Apr 2017 00:30:12 -0000 1.4 @@ -1,7 +1,8 @@ -/* A Bison parser, made by GNU Bison 2.1. */ +/* A Bison parser, made by GNU Bison 2.3. */ -/* Skeleton parser for GLR parsing with Bison, - Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +/* Skeleton interface for Bison GLR parsers in C + + Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,6 +19,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE @@ -143,144 +157,64 @@ LEX_FLOOR_DIV = 374 }; #endif -/* Tokens. */ -#define prec_lower_than_error 258 -#define prec_if 259 -#define prec_import 260 -#define p_uses 261 -#define p_else 262 -#define p_and 263 -#define p_array 264 -#define p_begin 265 -#define p_case 266 -#define p_div 267 -#define p_do 268 -#define p_downto 269 -#define p_end 270 -#define p_file 271 -#define p_for 272 -#define p_function 273 -#define p_goto 274 -#define p_if 275 -#define p_in 276 -#define p_label 277 -#define p_mod 278 -#define p_nil 279 -#define p_not 280 -#define p_of 281 -#define p_or 282 -#define p_packed 283 -#define p_procedure 284 -#define p_to 285 -#define p_program 286 -#define p_record 287 -#define p_repeat 288 -#define p_set 289 -#define p_then 290 -#define p_type 291 -#define p_until 292 -#define p_var 293 -#define p_while 294 -#define p_with 295 -#define p_absolute 296 -#define p_abstract 297 -#define p_and_then 298 -#define p_as 299 -#define p_asm 300 -#define p_attribute 301 -#define p_bindable 302 -#define p_const 303 -#define p_constructor 304 -#define p_destructor 305 -#define p_external 306 -#define p_far 307 -#define p_finalization 308 -#define p_forward 309 -#define p_implementation 310 -#define p_import 311 -#define p_inherited 312 -#define p_initialization 313 -#define p_is 314 -#define p_near 315 -#define p_object 316 -#define p_only 317 -#define p_operator 318 -#define p_otherwise 319 -#define p_or_else 320 -#define p_pow 321 -#define p_qualified 322 -#define p_restricted 323 -#define p_shl 324 -#define p_shr 325 -#define p_unit 326 -#define p_value 327 -#define p_virtual 328 -#define p_xor 329 -#define p_asmname 330 -#define p_c 331 -#define p_c_language 332 -#define p_class 333 -#define p_override 334 -#define p_reintroduce 335 -#define p_view 336 -#define p_Addr 337 -#define p_Assigned 338 -#define p_Dispose 339 -#define p_Exit 340 -#define p_FormatString 341 -#define p_New 342 -#define p_Return 343 -#define p_StringOf 344 -#define LEX_INTCONST 345 -#define LEX_INTCONST_BASE 346 -#define LEX_STRCONST 347 -#define LEX_REALCONST 348 -#define LEX_BUILTIN_PROCEDURE 349 -#define LEX_BUILTIN_PROCEDURE_WRITE 350 -#define LEX_BUILTIN_FUNCTION 351 -#define LEX_ID 352 -#define LEX_CARET_WHITE 353 -#define LEX_CARET_LETTER 354 -#define LEX_ASSIGN 355 -#define LEX_RENAME 356 -#define LEX_RANGE 357 -#define LEX_ELLIPSIS 358 -#define LEX_CONST_EQUAL 359 -#define LEX_SYMDIFF 360 -#define LEX_NE 361 -#define LEX_GE 362 -#define LEX_LE 363 -#define LEX_POWER 364 -#define LEX_BPPLUS 365 -#define LEX_BPMINUS 366 -#define LEX_CEIL_PLUS 367 -#define LEX_CEIL_MINUS 368 -#define LEX_FLOOR_PLUS 369 -#define LEX_FLOOR_MINUS 370 -#define LEX_CEIL_MULT 371 -#define LEX_CEIL_DIV 372 -#define LEX_FLOOR_MULT 373 -#define LEX_FLOOR_DIV 374 - - - - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 112 "parse.y" -typedef union YYSTYPE { + + +/* Copy the first part of user declarations. */ +#line 63 "parse.y" + +#ifndef GPC_PARSE_Y_FIRST_PROLOGUE +#define GPC_PARSE_Y_FIRST_PROLOGUE + +#define YYMAXDEPTH 200000 +#include "gpc.h" +#ifdef GCC_4_0 +#include "cgraph.h" +#endif + +/* A few keywords of some dialects can be parsed as regular identifiers + and checked from the parser actions => fewer special tokens. */ +#define ASSERT_ID(id, location, pseudo_keyword) \ + do if (!IDENTIFIER_IS_BUILT_IN (id, pseudo_keyword) || !PD_ACTIVE (IDENTIFIER_BUILT_IN_VALUE (id))) \ + { yyerror_id (id, &location); YYERROR; } while (0) + +enum { od_none, od_uses, od_label, od_const, od_type, od_var, od_routine }; +union yyGLRStackItem; +#define YYLLOC_DEFAULT(DEST, SRC, N) locations (&DEST, SRC, N) +#ifndef GCC_3_4 +#define LOCATION_NOTE(LOC) if (current_function_decl) emit_line_note ((LOC).first_file, (LOC).first_line) +#else +#define LOCATION_NOTE(LOC) if (current_function_decl) \ + { \ + location_t loc_aux; \ + loc_aux.file = (LOC).first_file; \ + loc_aux.line = (LOC).first_line; \ + emit_line_note (loc_aux); \ + } +#endif +#define COPYLOC(D, S) /* @@ ? (* (YYLTYPE *) memcpy (&(D), &(S), sizeof (YYLTYPE))) */ (S) + +#define YYASSERT gcc_assert +#define YYMALLOC (void *) xmalloc +#define YYREALLOC (void *) xrealloc +#endif + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 110 "parse.y" +{ enum tree_code code; long itype; tree ttype; -} YYSTYPE; -/* Line 2359 of glr.c. */ -#line 277 "parse.h" +} +/* Line 2616 of glr.c. */ +#line 212 "parse.h" + YYSTYPE; # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif -extern YYSTYPE yylval; - -#if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED) +#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED typedef struct YYLTYPE { @@ -294,6 +228,9 @@ typedef struct YYLTYPE # define YYLTYPE_IS_TRIVIAL 1 #endif + +extern YYSTYPE yylval; + extern YYLTYPE yylloc; Index: gcc/p/parse.y =================================================================== RCS file: /cvs/gcc/gcc/p/parse.y,v retrieving revision 1.1.111.3 retrieving revision 1.3 diff -u -p -r1.1.111.3 -r1.3 --- gcc/p/parse.y 27 Mar 2006 11:51:06 -0000 1.1.111.3 +++ gcc/p/parse.y 3 Apr 2017 00:27:50 -0000 1.3 @@ -61,6 +61,9 @@ token LEX_CONST_EQUAL. */ %{ +#ifndef GPC_PARSE_Y_FIRST_PROLOGUE +#define GPC_PARSE_Y_FIRST_PROLOGUE + #define YYMAXDEPTH 200000 #include "gpc.h" #ifdef GCC_4_0 @@ -74,13 +77,7 @@ { yyerror_id (id, &location); YYERROR; } while (0) enum { od_none, od_uses, od_label, od_const, od_type, od_var, od_routine }; -static int check_decl_order (int, int); - -extern int main_yyparse (void); -#define yyparse main_yyparse - union yyGLRStackItem; -static void locations (YYLTYPE *, const union yyGLRStackItem *, int); #define YYLLOC_DEFAULT(DEST, SRC, N) locations (&DEST, SRC, N) #ifndef GCC_3_4 #define LOCATION_NOTE(LOC) if (current_function_decl) emit_line_note ((LOC).first_file, (LOC).first_line) @@ -98,6 +95,7 @@ static void locations (YYLTYPE *, const #define YYASSERT gcc_assert #define YYMALLOC (void *) xmalloc #define YYREALLOC (void *) xrealloc +#endif %} %debug @@ -106,7 +104,7 @@ static void locations (YYLTYPE *, const %glr-parser %no-default-prec %expect 62 -%expect-rr 24 +%expect-rr 25 /* The semantic values */ %union { @@ -115,6 +113,15 @@ static void locations (YYLTYPE *, const tree ttype; } +%{ +static int check_decl_order (int, int); + +extern int main_yyparse (void); +#define yyparse main_yyparse + +static void locations (YYLTYPE *, const union yyGLRStackItem *, int); +%} + /* The dangling `else' shift/reduce conflict is avoided by precedence rules. Also, some conflicts coming from error recovery rules are avoided by giving rules the precedence `lower_than_error'. To avoid unwanted effects we Index: gcc/p/pascal-lex.c =================================================================== RCS file: /cvs/gcc/gcc/p/pascal-lex.c,v retrieving revision 1.1.111.2 retrieving revision 1.5 diff -u -p -r1.1.111.2 -r1.5 --- gcc/p/pascal-lex.c 27 Mar 2006 11:51:06 -0000 1.1.111.2 +++ gcc/p/pascal-lex.c 2 Apr 2017 23:32:54 -0000 1.5 @@ -1,7 +1,8 @@ /* A lexical scanner generated by flex */ /* Scanner skeleton version: - * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $ + * $miros: src/usr.bin/lex/flex.skl,v 1.3 2008/06/13 15:05:30 tg Exp $ + * $Header: /cvs/src/usr.bin/lex/flex.skl,v 1.8 2004/02/09 11:38:31 espie Exp $ */ #define FLEX_SCANNER @@ -9,7 +10,7 @@ #define YY_FLEX_MINOR_VERSION 5 #include -#include +#include /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */ @@ -23,6 +24,7 @@ #ifdef __cplusplus #include +#include /* Use prototypes in function declarations. */ #define YY_USE_PROTOS @@ -32,7 +34,7 @@ #else /* ! __cplusplus */ -#if __STDC__ +#ifdef __STDC__ #define YY_USE_PROTOS #define YY_USE_CONST @@ -49,6 +51,14 @@ #define YY_USE_PROTOS #endif +#ifdef __IDSTRING +__IDSTRING(flex_skl, "$miros: src/usr.bin/lex/flex.skl,v 1.3 2008/06/13 15:05:30 tg Exp $"); +#endif + +#ifndef __dead +#define __dead /* nothing */ +#endif + #ifdef YY_USE_CONST #define yyconst const #else @@ -272,7 +282,7 @@ extern char *yytext; static yy_state_type yy_get_previous_state YY_PROTO(( void )); static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state )); static int yy_get_next_buffer YY_PROTO(( void )); -static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); +static void yy_fatal_error YY_PROTO(( yyconst char msg[] )) __dead; /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. @@ -1008,6 +1018,10 @@ static int input YY_PROTO(( void )); #endif #endif +#ifndef YY_STACK_USED +#define YY_STACK_USED 0 +#endif + #if YY_STACK_USED static int yy_start_stack_ptr = 0; static int yy_start_stack_depth = 0; @@ -1031,7 +1045,7 @@ static int yy_top_state YY_PROTO(( void #ifdef YY_MALLOC_DECL YY_MALLOC_DECL #else -#if __STDC__ +#ifdef __STDC__ #ifndef __cplusplus #include #endif @@ -1122,6 +1136,8 @@ YY_MALLOC_DECL (yytext[yyleng - 1] == '\n'); \ YY_USER_ACTION +YY_DECL; + YY_DECL { register yy_state_type yy_current_state; @@ -1858,7 +1874,11 @@ YY_FATAL_ERROR( "flex scanner jammed" ); * EOB_ACT_END_OF_FILE - end of file */ +#ifdef YY_USE_PROTOS +static int yy_get_next_buffer(void) +#else static int yy_get_next_buffer() +#endif { register char *dest = yy_current_buffer->yy_ch_buf; register char *source = yytext_ptr; @@ -1990,7 +2010,11 @@ static int yy_get_next_buffer() /* yy_get_previous_state - get the state just before the EOB char was reached */ +#ifdef YY_USE_PROTOS +static yy_state_type yy_get_previous_state(void) +#else static yy_state_type yy_get_previous_state() +#endif { register yy_state_type yy_current_state; register char *yy_cp; @@ -2100,7 +2124,9 @@ register char *yy_bp; #ifdef __cplusplus -static int yyinput() +static int yyinput(void) +#elif defined(YY_USE_PROTOS) +static int input(void) #else static int input() #endif @@ -2282,6 +2308,11 @@ YY_BUFFER_STATE b; } +#ifndef YY_ALWAYS_INTERACTIVE +#ifndef YY_NEVER_INTERACTIVE +#include +#endif +#endif #ifdef YY_USE_PROTOS void yy_init_buffer( YY_BUFFER_STATE b, FILE *file ) @@ -2293,11 +2324,20 @@ FILE *file; { + int oerrno = errno; + yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; +#ifndef YY_ALWAYS_INTERACTIVE +#define YY_ALWAYS_INTERACTIVE 0 +#endif +#ifndef YY_NEVER_INTERACTIVE +#define YY_NEVER_INTERACTIVE 0 +#endif + #if YY_ALWAYS_INTERACTIVE b->yy_is_interactive = 1; #else @@ -2307,6 +2347,7 @@ FILE *file; b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; #endif #endif + errno = oerrno; } @@ -2592,6 +2633,10 @@ void *ptr; free( ptr ); } +#ifndef YY_MAIN +#define YY_MAIN 0 +#endif + #if YY_MAIN int main() { Index: gcc/p/predef.c =================================================================== RCS file: /cvs/gcc/gcc/p/predef.c,v retrieving revision 1.1.111.3 retrieving revision 1.4 diff -u -p -r1.1.111.3 -r1.4 --- gcc/p/predef.c 27 Mar 2006 11:51:06 -0000 1.1.111.3 +++ gcc/p/predef.c 31 Mar 2006 03:16:55 -0000 1.4 @@ -36,6 +36,7 @@ enum { #define BINDING_NAME_LENGTH 2048 // #ifndef EGCS +tree xnon_lvalue (tree x); tree xnon_lvalue (tree x) { @@ -3074,7 +3075,7 @@ build_new_dispose (int r_num, tree arg1, /* Objects, the interesting case */ if (is_object) { - tree t; + tree t = NULL_TREE /* please gcc */; if (r_num == p_New) { if (PASCAL_TYPE_CLASS (TREE_TYPE (arg1))) Index: gcc/p/statements.c =================================================================== RCS file: /cvs/gcc/gcc/p/statements.c,v retrieving revision 1.1.111.3 retrieving revision 1.3 diff -u -p -r1.1.111.3 -r1.3 --- gcc/p/statements.c 27 Mar 2006 11:51:06 -0000 1.1.111.3 +++ gcc/p/statements.c 6 Mar 2007 19:01:32 -0000 1.3 @@ -1213,8 +1213,8 @@ expand_pascal_assignment (tree target, t schema_target = undo_schema_dereference (target); DEREFERENCE_SCHEMA (source); DEREFERENCE_SCHEMA (target); - CHK_EM (source); - CHK_EM (target); + CHK_EM_VOID (source); + CHK_EM_VOID (target); /* Restricted types. @@@@ Maybe this needs further checking */ if (TREE_CODE (source) == CALL_EXPR && PASCAL_TYPE_RESTRICTED (TREE_TYPE (source))) @@ -1363,10 +1363,11 @@ assign_string (tree target, tree source) length = integer_zero_node; else { -#if 0 - /* Use save_expr, so the length is not computed twice (for the - number of chars to move and the assignment to the target length). */ - length = save_expr (fold (build_pascal_binary_op (MIN_EXPR, PASCAL_STRING_LENGTH (source), capacity))); +#if 1 + /* Use save_expr_string, so the string is not evaluated 2 or 3 times (for the + number of chars to move, assignment to the target length and the chars). */ + source = save_expr_string (source); + length = fold (build_pascal_binary_op (MIN_EXPR, PASCAL_STRING_LENGTH (source), capacity)); /* The target needs to be an lvalue, but the source might be e.g. an array returned by a function or whatever. */ expr1 = build_memcpy (build_unary_op (ADDR_EXPR, PASCAL_STRING_VALUE (target), 1), Index: gcc/p/typecheck.c =================================================================== RCS file: /cvs/gcc/gcc/p/typecheck.c,v retrieving revision 1.1.111.3 retrieving revision 1.2 diff -u -p -r1.1.111.3 -r1.2 --- gcc/p/typecheck.c 27 Mar 2006 11:51:06 -0000 1.1.111.3 +++ gcc/p/typecheck.c 31 Mar 2006 03:16:56 -0000 1.2 @@ -31,7 +31,6 @@ static int compatible_assignment_p (tree, tree); static int check_simple_pascal_initializer (tree, tree); static tree decl_constant_value (tree); -static int is_discriminant_of (tree, tree); static tree pascal_fold (tree); static tree re_fold (tree, tree, tree, int *); static tree re_layout_type (tree, tree, tree); @@ -1459,7 +1458,7 @@ convert_conformal (tree type, tree val, } static tree -convert_bounds (tree typetail, tree argtype, tree val, +convert_bounds (tree typetail, tree argtype __attribute__((unused)), tree val, struct argument_error_context * errc, long cnt) { tree type = TREE_VALUE (typetail); @@ -2528,7 +2527,7 @@ re_layout_type (tree type, tree stype, t tree build_discriminated_schema_type (tree type, tree discriminants, int prediscriminating) { - tree type_template = type, field, disc, fix; + tree type_template = type, field, disc; tree fix_list = NULL_TREE; #ifndef EGCS97 struct obstack *ambient_obstack; Index: gcc/p/types.c =================================================================== RCS file: /cvs/gcc/gcc/p/types.c,v retrieving revision 1.1.111.3 retrieving revision 1.2 diff -u -p -r1.1.111.3 -r1.2 --- gcc/p/types.c 27 Mar 2006 11:51:05 -0000 1.1.111.3 +++ gcc/p/types.c 31 Mar 2006 03:16:57 -0000 1.2 @@ -807,13 +807,14 @@ is_of_string_type (tree type, int error_ } /* String type low index must be one and nonvarying according to ISO */ - if (tree_int_cst_equal (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), integer_one_node)) + if (tree_int_cst_equal (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), integer_one_node)) { if ((co->pascal_dialect & CLASSIC_PASCAL) && tree_int_cst_equal (TYPE_MAX_VALUE (TYPE_DOMAIN (type)), integer_one_node)) return 0; else return 1; + } if (co->pascal_dialect & C_E_O_PASCAL) return 0; Index: gcc/p/demos/statfsdemo.pas =================================================================== RCS file: /cvs/gcc/gcc/p/demos/statfsdemo.pas,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/demos/statfsdemo.pas 29 Mar 2013 19:00:39 -0000 1.1.111.1 +++ gcc/p/demos/statfsdemo.pas 7 Aug 2017 20:11:26 -0000 1.2 @@ -37,11 +37,11 @@ begin Write ('Enter a path: '); ReadLn (s); if not StatFS (s, Buf) then - WriteLn ('Could not stat file system. Probably the path given is invalid.') + WriteLn ('Could not stat filesystem. Probably the path given is invalid.') else with Buf do begin - WriteLn ('The file system on which the given file resides has'); + WriteLn ('The filesystem on which the given file resides has'); WriteLn (BlockSize * BlocksTotal : 15, ' bytes total'); WriteLn (BlockSize * BlocksFree : 15, ' bytes available'); WriteLn (FilesTotal : 15, ' file nodes total'); Index: gcc/p/doc/languages =================================================================== RCS file: /cvs/gcc/gcc/p/doc/languages,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/languages 27 Dec 2009 16:00:54 -0000 1.1.111.1 +++ gcc/p/doc/languages 27 Dec 2009 16:17:28 -0000 1.2 @@ -1,4 +1,3 @@ gpc en This page in English gpc-hr hr Ova stranica na hrvatskom -gpc-es es This page in Spanish -gpc de Diese Seite auf deutsch Index: gcc/p/doc/de/README =================================================================== RCS file: /cvs/gcc/gcc/p/doc/de/README,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/de/README 27 Dec 2009 16:00:54 -0000 1.1.111.1 +++ gcc/p/doc/de/README 21 May 2012 21:30:49 -0000 1.2 @@ -1,5 +1,5 @@ This directory contains the German version of GNU Pascal's Texinfo documentation (not finished yet). -Dieses Verzeichnis enthält die deutsche Version von GNU Pascals +Dieses Verzeichnis enthält die deutsche Version von GNU Pascals Texinfo-Dokumentation (noch nicht fertiggestellt). Index: gcc/p/doc/de/gpcs.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/de/gpcs.texi,v retrieving revision 1.1.111.1 retrieving revision 1.3 diff -u -p -r1.1.111.1 -r1.3 --- gcc/p/doc/de/gpcs.texi 27 Dec 2009 16:00:55 -0000 1.1.111.1 +++ gcc/p/doc/de/gpcs.texi 12 Oct 2015 22:33:10 -0000 1.3 @@ -1,7 +1,6 @@ \input texinfo @setfilename gpcs-de.info @settitle GNU Pascal Coding Standards (Deutsch) -@documentencoding iso-8859-1 @c Copyright (C) 2001-2006 Free Software Foundation, Inc. @c @@ -81,51 +80,51 @@ approved by the copyright holders. @node Top @top Version -Letzte Änderung @value{lasttranslationupdate}. +Letzte Änderung @value{lasttranslationupdate}. Basierend auf der englischen Version von @value{lastupdate}. @end ifnottex @menu -* Vorwort:: Über die GNU Pascal Coding Standards +* Vorwort:: Über die GNU Pascal Coding Standards * Rechtliches:: Freie Software soll frei bleiben -* Gestaltungsratschläge:: Allgemeine Projektgestaltung +* Gestaltungsratschläge:: Allgemeine Projektgestaltung * Verhalten von Programmen:: Wie sich Programme verhalten sollten -* Pascal Programmieren:: Ratschläge zur Gestaltung des Quelltextes +* Pascal Programmieren:: Ratschläge zur Gestaltung des Quelltextes * Dokumentation:: Programme dokumentieren -* Veröffentlichungen:: Der Verlauf der Veröffentlichung +* VerĂśffentlichungen:: Der Verlauf der VerĂśffentlichung * Glossar:: Glossar der Worte in diesem Text * Index:: @end menu @node Vorwort -@chapter Über die GNU Pascal Coding Standards +@chapter Über die GNU Pascal Coding Standards -Vorwort des Übersetzers: -Dieses Dokument enthält die Übersetzung der +Vorwort des Übersetzers: +Dieses Dokument enthält die Übersetzung der ``GNU Pascal Coding Standards''. Einige Worte werden so beibehalten, wie sie im Englischen geschrieben wurden, weil es meiner Meinung -nach die Lesbarkeit des Textes fördert. Für Fehler in der -Übersetzung bin ich verantwortlich, nicht die ursprünglichen -Autoren. Für Rückfragen zur Übersetzung bin ich erreichbar unter: +nach die Lesbarkeit des Textes fĂśrdert. FĂźr Fehler in der +Übersetzung bin ich verantwortlich, nicht die ursprĂźnglichen +Autoren. FĂźr RĂźckfragen zur Übersetzung bin ich erreichbar unter: Eike Lange @email{eike@@g-n-u.de}. Mein besonderer Dank gilt Roland -Goretzki für seine unermüdliche Arbeit, dieses Dokument vom +Goretzki fĂźr seine unermĂźdliche Arbeit, dieses Dokument vom Fehlerteufel zu befreien. -Trotz aller Sorgfalt lassen sich Fehler in der Übersetzung nicht -ganz ausschließen. In Konfliktfällen gilt stets das englische +Trotz aller Sorgfalt lassen sich Fehler in der Übersetzung nicht +ganz ausschließen. In Konfliktfällen gilt stets das englische Original. Bitte teilen sie uns eventuelle Diskrepanzen mit, damit -wir sie beheben können. +wir sie beheben kĂśnnen. Die GNU Pascal Coding Standards wurden von einer Gruppe freiwilliger Helfer des GNU Pascal Projektes entwickelt. Das Ziel dieses Dokumentes ist es, die GNU Coding Standards um spezifische -Informationen für Pascal-Programmierer zu ergänzen. Die -Informationen in den GNU Coding Standard beziehen sich zu großen -Teilen auf die Programmiersprache C. Gleichsam erklären sie jedoch +Informationen fĂźr Pascal-Programmierer zu ergänzen. Die +Informationen in den GNU Coding Standard beziehen sich zu großen +Teilen auf die Programmiersprache C. Gleichsam erklären sie jedoch viele der Regeln und Prinzipien, die zum Schreiben portabler, -robuster und zuverlässiger Programme nützlich sind. Die meisten -dieser Regeln können mit wenigen Anmerkungen versehen aus dem -Dokument übernommen werden, weswegen sich Referenzen zu den GNU +robuster und zuverlässiger Programme nĂźtzlich sind. Die meisten +dieser Regeln kĂśnnen mit wenigen Anmerkungen versehen aus dem +Dokument Ăźbernommen werden, weswegen sich Referenzen zu den GNU Coding Standards in diesem Dokument befinden. Letzte Aktualisierung dieses Dokuments (original): @value{lastupdate}. @@ -134,21 +133,21 @@ Letzte Aktualisierung dieses Dokuments ( @cindex Download der Coding Standards Die GNU Pascal Coding Standards sind als Teil der GPC-Distributionen -erhältlich -- in Binärdistributionen als Info-Dateien, in +erhältlich -- in Binärdistributionen als Info-Dateien, in Quelltext-Distributions auch als Texinfo-Dateien, aus denen sich weitere Formate wie HTML, PostScript und PDF erzeugen lassen. Eine HTML-Version befindet sich auch auf der Homepage von GPC, @uref{http://www.gnu-pascal.de}. @cindex Feedback -@cindex Beiträge zum Dokument +@cindex Beiträge zum Dokument -Berichtigungen oder Vorschläge zu diesem Dokument können Sie direkt -beim Autor einreichen: @email{eike@@g-n-u.de}. Für das +Berichtigungen oder Vorschläge zu diesem Dokument kĂśnnen Sie direkt +beim Autor einreichen: @email{eike@@g-n-u.de}. FĂźr das englischsprachige Original wenden Sie sich bitte an die Dokumentations-Mailingliste des GNU Pascal Compilers, @email{gpc-doc@@gnu.de}. Da unsere Zeit begrenzt ist, sollten Ihre -Vorschläge den geänderten Text enthalten. Ein ``context diff'' der +Vorschläge den geänderten Text enthalten. Ein ``context diff'' der Quelldatei im Texinfo-Format ist sehr willkommen, wobei wir einer einfachen Mail auch nicht abgeneigt sind. @@ -165,14 +164,14 @@ Heckenbach @samp{frank(at)pascal.gnu.de} @cindex legal aspects Dieses Kapitel der GNU Coding Standards beschreibt unter anderem, -wie man sich versichert, daß GNU Software rechtliche +wie man sich versichert, daß GNU Software rechtliche Schwierigkeiten vermeidet. @xref{Intellectual Property, , , standards}. -@node Gestaltungsratschläge +@node Gestaltungsratschläge @chapter Allgemeine Projektgestaltung @cindex Projektgestaltung -Dieses Kapitel beschäftigt sich mit einigen grundlegenden Themen +Dieses Kapitel beschäftigt sich mit einigen grundlegenden Themen zur Gestaltung eines Programmes. @menu @@ -186,16 +185,16 @@ zur Gestaltung eines Programmes. @section Welche Sprache nimmt man @cindex Programmiersprache -Wir unterstützen die Idee, daß die Vielfalt der Programmiersprachen -etwas Gutes ist. Verschiedene Programmiersprachen sind nützlich für +Wir unterstĂźtzen die Idee, daß die Vielfalt der Programmiersprachen +etwas Gutes ist. Verschiedene Programmiersprachen sind nĂźtzlich fĂźr verschiedene Aufgaben. Anders als die GNU Coding Standards (@pxref{Source Language, , , standards}) wollen wir Sie nicht davon -überzeugen, daß Sie C oder Pascal oder eine andere einzelne -Programmiersprache für alles nutzen sollten. +Ăźberzeugen, daß Sie C oder Pascal oder eine andere einzelne +Programmiersprache fĂźr alles nutzen sollten. -Wenn Sie das lesen, dann haben Sie sich möglicherweise schon bei -einigen Projekten für Pascal entschieden oder ziehen dies in -Erwägung. Dieses Dokument will Ihnen Vorschläge unterbreiten, +Wenn Sie das lesen, dann haben Sie sich mĂśglicherweise schon bei +einigen Projekten fĂźr Pascal entschieden oder ziehen dies in +Erwägung. Dieses Dokument will Ihnen Vorschläge unterbreiten, @emph{wie} Sie ihren Quellcode formatieren, wenn Sie in GNU Pascal programmieren. @@ -204,7 +203,7 @@ programmieren. @cindex Pascal und C @cindex Linken mit C Bibliotheken -Sie können eine C-Bibliothek oder eine C-Objektcode-Datei mit Ihrem +Sie kĂśnnen eine C-Bibliothek oder eine C-Objektcode-Datei mit Ihrem Pascal-Programm oder ihrer Unit verlinken. Bitte beachten Sie die Hinweise im GPC-Handbuch bzgl. der Einzelheiten (@pxref{Other Languages, , , gpc}). @@ -213,17 +212,17 @@ Hinweise im GPC-Handbuch bzgl. der Einze Wir empfehlen die Verwendung von in C geschriebenen ``Wrapper-Funktionen'' zum Zugriff auf C-Bibliotheken, also kleinen Funktionen, die i.w. nichts anderes machen, als die Funktionen der -C-Bilbiothek aufzurufen. Der Grund dafür ist die Portabilität. Eines -Tages könnte es Änderungen an der zu linkenden Bibliothek geben, die -direkte @samp{external}-Deklarationen gefährden. Sie sollten dann -die Wrapper anpassen, so daß Pascal Programme mit jeder Version +C-Bilbiothek aufzurufen. Der Grund dafĂźr ist die Portabilität. Eines +Tages kĂśnnte es Änderungen an der zu linkenden Bibliothek geben, die +direkte @samp{external}-Deklarationen gefährden. Sie sollten dann +die Wrapper anpassen, so daß Pascal Programme mit jeder Version dieser Bibliothek zusammenarbeiten. -Bei der Arbeit mit großen Paketen kann es passieren, daß -die Kompatibilität zwischen Versionen einer Library und dem +Bei der Arbeit mit großen Paketen kann es passieren, daß +die Kompatibilität zwischen Versionen einer Library und dem Programm nicht einfach aufrechterhalten werden kann. In diesem Fall -kann man direkt zur Bibliothek linken, mit der man arbeiten möchte, und -bindet ebenso eine ergänzende Datei hinzu, die ausschließlich der +kann man direkt zur Bibliothek linken, mit der man arbeiten mĂśchte, und +bindet ebenso eine ergänzende Datei hinzu, die ausschließlich der Versionskontrolle dient. Hier ein Beispiel: @@ -237,88 +236,88 @@ Hier ein Beispiel: @end smallexample Beachten Sie die Benutzung von @samp{!=} anstelle von @samp{<} oder -@samp{>}, um eine sehr präzise Versionskontrolle durchzuführen. -Bitte beachten Sie auch, daß dieses Verfahren nur dann anwendbar +@samp{>}, um eine sehr präzise Versionskontrolle durchzufĂźhren. +Bitte beachten Sie auch, daß dieses Verfahren nur dann anwendbar ist, wenn es nur eine einzige Implementation dieser Bibliothek gibt, -d.h. es läßt sich mit einer Bibliothek wie GTK, aber nicht mit libc, +d.h. es läßt sich mit einer Bibliothek wie GTK, aber nicht mit libc, libm, curses etc. anwenden. -@cindex Header-Übersetzung -Ein automatischer Header-Übersetzer ist geplant. Dieses Werkzeug -würde das Schreiben von Wrapperfunktionen überflüssig machen. Das +@cindex Header-Übersetzung +Ein automatischer Header-Übersetzer ist geplant. Dieses Werkzeug +wĂźrde das Schreiben von Wrapperfunktionen ĂźberflĂźssig machen. Das Schreiben eines solchen Programmes ist eine schwierige Aufgabe, und -niemand ist sich wirklich sicher, ob sie überhaupt durchführbar ist. -Wann ein solches Programm verfügbar sein wird, ist ungewiß. +niemand ist sich wirklich sicher, ob sie Ăźberhaupt durchfĂźhrbar ist. +Wann ein solches Programm verfĂźgbar sein wird, ist ungewiß. @cindex C-Code Compilation -Sie können annehmen, daß der GNU C Compiler benutzt wird, um die Wrapper, -und, allgemein, jedes bißchen C-Code zu übersetzen, das Sie Ihrem -Programm hinzufügen. -Der Grund für diese Annahme ist, daß nur der GNU C Compiler -garantiert, daß alle Konventionen kompatibel zum GNU Pascal Compiler +Sie kĂśnnen annehmen, daß der GNU C Compiler benutzt wird, um die Wrapper, +und, allgemein, jedes bißchen C-Code zu Ăźbersetzen, das Sie Ihrem +Programm hinzufĂźgen. +Der Grund fĂźr diese Annahme ist, daß nur der GNU C Compiler +garantiert, daß alle Konventionen kompatibel zum GNU Pascal Compiler sind, und das auf jeder Plattform! Der GNU C Compiler und der GNU -Pascal Compiler teilen sich dasselbe Backend. Außerdem wird der GNU +Pascal Compiler teilen sich dasselbe Backend. Außerdem wird der GNU C Compiler immer zusammen mit dem GNU Pascal Compiler erzeugt. Damit -ist @samp{gcc} überall dort vorhanden, wo auch @samp{gpc} +ist @samp{gcc} Ăźberall dort vorhanden, wo auch @samp{gpc} installiert ist. @node Erweiterungen benutzen @section Das Benutzen von nicht standardisierten Erweiterungen @cindex Nicht-Standard Erweiterungen -GNU Pascal hat viele Möglichkeiten, die Standard Pascal nicht bietet. -Ob diese Möglichkeiten in einem Programm genutzt werden sollen, ist -eine zu häufig diskutierte Frage. +GNU Pascal hat viele MĂśglichkeiten, die Standard Pascal nicht bietet. +Ob diese MĂśglichkeiten in einem Programm genutzt werden sollen, ist +eine zu häufig diskutierte Frage. -Auf der einen Seite kann das Benutzen dieser Möglichkeiten zu -effizienteren oder übersichtlicheren Programmen führen. Auf der +Auf der einen Seite kann das Benutzen dieser MĂśglichkeiten zu +effizienteren oder Ăźbersichtlicheren Programmen fĂźhren. Auf der anderen Seite ist dadurch nur der GNU Pascal Compiler in der Lage, diesen Quelltext zu bearbeiten. Dadurch wird das Kompilieren des -Programmes auf Systemen unmöglich, auf denen dieser Compiler nicht +Programmes auf Systemen unmĂśglich, auf denen dieser Compiler nicht vorhanden ist. -Im allgemeinen ist es das beste, Kompatibilität zu anderen Compilern +Im allgemeinen ist es das beste, Kompatibilität zu anderen Compilern oder zum Sprachstandard beizubehalten, @emph{wenn diese -Kompatibilität einfach zu erhalten ist}. Leider ist dies jedoch +Kompatibilität einfach zu erhalten ist}. Leider ist dies jedoch oftmals mit erheblichen Nachteilen verbunden. Als Beispiel dienen -viele eingefügte @samp{@{$ifdef@}}s, um alle nicht-Standard-Compiler +viele eingefĂźgte @samp{@{$ifdef@}}s, um alle nicht-Standard-Compiler zu versorgen, was den Code schwerer zu lesen, schreiben, testen und -warten macht. Außerdem sind @samp{@{$ifdef@}}s selbst nicht +warten macht. Außerdem sind @samp{@{$ifdef@}}s selbst nicht standardisiert. Sie gewinnen also nicht viel. Daher schlagen wir vor, sich nicht zu sehr an Fragen der -Kompatibilität stören. Alles am GNU Pascal Compiler ist offen -(Compiler und Laufzeit-System). Das bedeutet, daß das gesamte -Interface bei Bedarf für andere Compiler verfügbar gemacht werden -kann. Dazu können sogar einfach die Quelltexte übernommen werden, +Kompatibilität stĂśren. Alles am GNU Pascal Compiler ist offen +(Compiler und Laufzeit-System). Das bedeutet, daß das gesamte +Interface bei Bedarf fĂźr andere Compiler verfĂźgbar gemacht werden +kann. Dazu kĂśnnen sogar einfach die Quelltexte Ăźbernommen werden, solange die Lizenzvereinbarung erhalten bleibt. Hier erfahren Sie -mehr über die GNU General Public License: +mehr Ăźber die GNU General Public License: @uref{http://www.gnu.org/copyleft/gpl.html}. Das ist sinnvoller als -eine Zerstückelung des Codes. Ein (begrenztes) Beispiel dieser -Strategie kann in der @samp{gpc-bp}-Unit (für Borland Pascal) +eine ZerstĂźckelung des Codes. Ein (begrenztes) Beispiel dieser +Strategie kann in der @samp{gpc-bp}-Unit (fĂźr Borland Pascal) gefunden werden. Schauen Sie einfach in das Interface. Es ist -meistens einfach, diese Unit um zusätzliche Features zu erweitern. +meistens einfach, diese Unit um zusätzliche Features zu erweitern. Bitte benutzen Sie die folgenden Features nicht, speziell solche -nicht, die lediglich aus Gründen der Rückwärtskompatibilität -eingeführt wurden: +nicht, die lediglich aus GrĂźnden der RĂźckwärtskompatibilität +eingefĂźhrt wurden: @itemize @bullet @item -Kommentare der Form @samp{(* *)} für alte Terminals, wo es die +Kommentare der Form @samp{(* *)} fĂźr alte Terminals, wo es die Zeichen @samp{@{} und @samp{@}} nicht gab. @item die @samp{#}-Direktiven und @samp{//}-Kommentare, wie in C/Delphi. -Wenn eine Datei auch in C genutzt werden muß, so darf sie die +Wenn eine Datei auch in C genutzt werden muß, so darf sie die @samp{#}-Direktiven, die C-Syntax in Conditionalen sowie @samp{//}-Kommentare enthalten. -Gegenwärtig gibt es dazu das folgende Beispiel (das kann sich in -Zukunft ändern): @file{p/rts/constants.h} in den GNU Pascal Compiler +Gegenwärtig gibt es dazu das folgende Beispiel (das kann sich in +Zukunft ändern): @file{p/rts/constants.h} in den GNU Pascal Compiler Quellen. @item -den Mißbrauch der typisierten Konstanten als Variablen, was eine +den Mißbrauch der typisierten Konstanten als Variablen, was eine seltsame Eigenschaft des Borland Pascal Compilers darstellt. @item @@ -326,7 +325,7 @@ Zeichen-Konstanten der Form @samp{^A}. B oder @samp{Chr (1)} stattdessen. @item -@samp{CString}s (außer natürlich für C-Schnittstellen) +@samp{CString}s (außer natĂźrlich fĂźr C-Schnittstellen) @item komplizierten Borland Pascal Code wie den folgenden anstelle von @@ -338,7 +337,7 @@ s := 'Hallo ' + s; @end smallexample @item -die meisten Fälle von @samp{FillChar} und @samp{Move}, außer für +die meisten Fälle von @samp{FillChar} und @samp{Move}, außer fĂźr Low-Level-Programmierung und wenn es sich auf Zeichen innerhalb eines Strings bezieht. Das Benutzen von @@ -346,36 +345,36 @@ eines Strings bezieht. Das Benutzen von FillChar (s, SizeOf (s), 0); @end smallexample -um einen String zu leeren ist falsch in GNU Pascal und außerdem +um einen String zu leeren ist falsch in GNU Pascal und außerdem ineffizient, sogar in Borland Pascal. Bitte benutzen Sie folgendes: @smallexample s := ''; @end smallexample -Dieses Beispiel ändert lediglich das Längenfeld des Strings +Dieses Beispiel ändert lediglich das Längenfeld des Strings @samp{s}, und leert ihn schon dadurch. @item -die meisten Fälle von @samp{GetMem} und @samp{FreeMem}, die -normalerweise ein Work-Around für fehlende Schemata in anderen +die meisten Fälle von @samp{GetMem} und @samp{FreeMem}, die +normalerweise ein Work-Around fĂźr fehlende Schemata in anderen Compilern sind. @item -die meisten Fälle untypisierter Parameter. +die meisten Fälle untypisierter Parameter. @item die meisten selbstgemachten dateinamenbezogenen Routinen. (Falls sie in Borland Pascal geschrieben wurden, so sind sie zumeist sowieso nur unter DOS anwendbar. Benutzen Sie die -Möglichkeiten der @samp{GPC}-Unit, um einen portablen Weg +MĂśglichkeiten der @samp{GPC}-Unit, um einen portablen Weg einzuschlagen.) @item -Assembler-Code. Außer natürlich in seltenen Fällen, wo es um +Assembler-Code. Außer natĂźrlich in seltenen Fällen, wo es um die Optimierung von Code geht. Dort sollte er mit Hilfe von -@samp{@{$ifdef@}} (z.B. für den Prozessortyp) eingekapselt -werden. Unterstützen Sie in einem solchen Fall auch bitte +@samp{@{$ifdef@}} (z.B. fĂźr den Prozessortyp) eingekapselt +werden. UnterstĂźtzen Sie in einem solchen Fall auch bitte eine reine Pascal-Version dieser Routinen innerhalb des @samp{@{$else@}}-Teiles. Testen Sie diese Routinen. @@ -383,14 +382,14 @@ eine reine Pascal-Version dieser Routine alles, was die @samp{System}-Unit erfordert. @item -Annahmen über Typengrößen. +Annahmen Ăźber Typengrößen. @item -Annahmen über ``Endianness''. (Einige Systeme verwenden für die -Anordnung von höher- und niederwertige Bytes eine andere Reihenfolge -als andere Systeme.) [Anm. d. Übersetzers: Die Begriffe ``Little +Annahmen Ăźber ``Endianness''. (Einige Systeme verwenden fĂźr die +Anordnung von hĂśher- und niederwertige Bytes eine andere Reihenfolge +als andere Systeme.) [Anm. d. Übersetzers: Die Begriffe ``Little Endian'' und ``Big Endian'' lassen sich leider nicht direkt -übersetzen. Schauen Sie ins Glossar (@pxref{Glossar}), um mehr über +Ăźbersetzen. Schauen Sie ins Glossar (@pxref{Glossar}), um mehr Ăźber diese Begriffe herauszufinden.] @item @@ -398,9 +397,9 @@ Bezeichner, die mit einem oder mehreren beginnen oder enden. @item -Units, die nur zur Kompatibilität mit Borland Pascal geschrieben -wurden. (@pxref{GPC Units, , , GPC}) Die Units @samp{CRT} -und @samp{Printer} hingegen dienen sowohl der Kompatibilität +Units, die nur zur Kompatibilität mit Borland Pascal geschrieben +wurden. (@pxref{GPC Units, , , gpc}) Die Units @samp{CRT} +und @samp{Printer} hingegen dienen sowohl der Kompatibilität zu Borland Pascal als auch dem allgemeinen Nutzen. @end itemize @@ -412,7 +411,7 @@ diesem Thema. @xref{Using Extensions, , @chapter Wie sich Programme verhalten sollten Dieses Kapitel der GNU Coding Standards beschreibt Konventionen zum -Schreiben stabiler Programme. Außerdem gibt es Richtlinien zur +Schreiben stabiler Programme. Außerdem gibt es Richtlinien zur Ausgabe von Fehlermeldungen, zum Kommandozeilen-Interface und dazu, wie sich Bibliotheken verhalten sollten. Bitte lesen Sie auch den entsprechenden Abschnitt der @@ -423,40 +422,40 @@ Einige Hinweise zur Pascal Programmierun @cindex Signal-Funktionen Die in den GNU Coding Standards besprochene Auswahl zwischen verschiedenen Signal-Funktionen wurde bereits im Run Time System -getroffen, so daß Sie sich nicht mehr darum kümmern müssen. +getroffen, so daß Sie sich nicht mehr darum kĂźmmern mĂźssen. @cindex Fehlerabfragen Ein weiterer Unterschied zu den GNU Coding Standards ist das -Verhalten bei Fehlerabfragen, die einen ``unmöglichen'' Zustand +Verhalten bei Fehlerabfragen, die einen ``unmĂśglichen'' Zustand entdecken. Wir empfehlen, das Programm nicht einfach abzubrechen. -Dies würde implizieren, daß der Anwender ein Programmierer ist, +Dies wĂźrde implizieren, daß der Anwender ein Programmierer ist, der den Fehler schon irgendwie findet. Diese Annahme ist nicht realistisch! Unser Vorschlag ist es deswegen, eine Fehlermeldung -herauszugeben, die es dem Anwender ermöglicht, eine +herauszugeben, die es dem Anwender ermĂśglicht, eine Fehlerbeschreibung an die Programmierer zu senden. -Die GNU Coding Standards schlagen außerdem vor, jeden -Funktionsaufruf auf Fehlerrückgaben zu überprüfen. Dieser -Vorschlag paßt durchaus zu C, jedoch nicht unbedingt zu Pascal. +Die GNU Coding Standards schlagen außerdem vor, jeden +Funktionsaufruf auf FehlerrĂźckgaben zu ĂźberprĂźfen. Dieser +Vorschlag paßt durchaus zu C, jedoch nicht unbedingt zu Pascal. In Pascal wird das Abfangen von Fehlern oftmals automatisch -durchgeführt, somit brauchen Sie sich in vielen Fällen nicht -darum zu kümmern. Viele I/O-Routinen geben Ihnen nicht einmal einen -Rückgabewert (beispielsweise @samp{Reset}). Diejenigen -Fehlerwerte, die zurückgegeben werden, sollten aber auch -überprüft werden. +durchgefĂźhrt, somit brauchen Sie sich in vielen Fällen nicht +darum zu kĂźmmern. Viele I/O-Routinen geben Ihnen nicht einmal einen +RĂźckgabewert (beispielsweise @samp{Reset}). Diejenigen +Fehlerwerte, die zurĂźckgegeben werden, sollten aber auch +ĂźberprĂźft werden. -Sie können die automatischen Fehlerabfragen ausschalten und sich -selber darum kümmern. Tatsächlich ist es so, daß manche Fehler das +Sie kĂśnnen die automatischen Fehlerabfragen ausschalten und sich +selber darum kĂźmmern. Tatsächlich ist es so, daß manche Fehler das Programm mit einer Nachricht abbrechen lassen. Speziell in Units oder Modulen wollen Sie stattdessen vielleicht den Benutzern eine -Möglichkeit einräumen, die Ursache des Fehlers zu beheben. Um das zu +MĂśglichkeit einräumen, die Ursache des Fehlers zu beheben. Um das zu tun, benutzen Sie bitte den Compiler-Switch @samp{@{$I-@}} und testen Sie den Wert der Funktion @samp{IOResult} (@pxref{IOResult, , , gpc}) oder der globalen Fehlervariablen wie @samp{InOutRes} -(@pxref{InOutRes, , , gpc}). Beachten Sie bitte, daß I/O-Routinen -sofort zurückkehren, während @samp{InOutRes} gesetzt ist, so daß es +(@pxref{InOutRes, , , gpc}). Beachten Sie bitte, daß I/O-Routinen +sofort zurĂźckkehren, während @samp{InOutRes} gesetzt ist, so daß es nicht notwendig ist, nach jeder Operation diesen Wert abzufragen. -Folgendes wird dadurch möglich: +Folgendes wird dadurch mĂśglich: @smallexample @{$local I-@} @@ -473,54 +472,54 @@ if InOutRes <> 0 then end; @end smallexample -Es kann jedoch nützlich sein, nach @samp{Rewrite} und anderen -Aufrufe zum Öffnen auf Fehler zu testen, denn dort treten die +Es kann jedoch nĂźtzlich sein, nach @samp{Rewrite} und anderen +Aufrufe zum Öffnen auf Fehler zu testen, denn dort treten die meisten Fehler auf, und ein Test macht andere, nachgestellte -Aufrufe oftmals unnötig. +Aufrufe oftmals unnĂśtig. -Die GPC-Unit enthält eine Menge Routinen für den Umgang mit -Temporärdateien, Konfigurationsdateien und vielen anderen +Die GPC-Unit enthält eine Menge Routinen fĂźr den Umgang mit +Temporärdateien, Konfigurationsdateien und vielen anderen dateinamenbezogenen Aufgaben. Der Vorteil beim Gebrauch dieser -Routinen liegt darin, daß sie unter verschiedenen Betriebssystemen -laufen (zum Beispiel DOS und Unix) und daß evtl. dateinamenbezogene +Routinen liegt darin, daß sie unter verschiedenen Betriebssystemen +laufen (zum Beispiel DOS und Unix) und daß evtl. dateinamenbezogene Probleme an einer zentralen Stelle (dem Run Time System) -behoben werden können. Das ist besser, als verschiedene Stellen +behoben werden kĂśnnen. Das ist besser, als verschiedene Stellen im Code entsprechend anzupassen. Soweit es die Bibliotheken betrifft, raten wir davon ab, jede einzelne -Routine in einer einzigen Datei unterzubringen. Wir hoffen, daß der GNU +Routine in einer einzigen Datei unterzubringen. Wir hoffen, daß der GNU Pascal Compiler das eines Tages auf der Ebene des Linkers selber macht. -Gegenwärtig, so glauben wir, ist Programmiererfreundlichkeit sinnvoller -als die Größe der ausführbaren Datei. Außerdem empfehlen wir, auf -Namens-Präfixe zu verzichten. Namenskonflikte können stattdessen -durch qualifizierte Bezeichner (@samp{UnitName.RoutinenName}) gelöst +Gegenwärtig, so glauben wir, ist Programmiererfreundlichkeit sinnvoller +als die Größe der ausfĂźhrbaren Datei. Außerdem empfehlen wir, auf +Namens-Präfixe zu verzichten. Namenskonflikte kĂśnnen stattdessen +durch qualifizierte Bezeichner (@samp{UnitName.RoutinenName}) gelĂśst werden. @node Pascal Programmieren -@chapter Ratschläge zur Gestaltung des Quelltextes +@chapter Ratschläge zur Gestaltung des Quelltextes -Dieses Kapitel gibt Ihnen Ratschläge, wie Sie Ihre Quelltexte gestalten -sollten. Diese Regeln gelten eigentlich nur für veröffentlichten +Dieses Kapitel gibt Ihnen Ratschläge, wie Sie Ihre Quelltexte gestalten +sollten. Diese Regeln gelten eigentlich nur fĂźr verĂśffentlichten Code. Wenn Sie als Beispiel Kommentare in der alten Form @samp{(* this one *)} -schreiben möchten, so geht das natürlich vorübergehend, bei der -Veröffentlichung sollten Sie dann allerdings unsere diesbezüglichen -Ratschläge beherzigen. Da man aber niemals wissen kann, ob und wann man -den Code veröffentlicht, ist es vorzuziehen, sich von vornherein an -diese Ratschläge zu halten. +schreiben mĂśchten, so geht das natĂźrlich vorĂźbergehend, bei der +VerĂśffentlichung sollten Sie dann allerdings unsere diesbezĂźglichen +Ratschläge beherzigen. Da man aber niemals wissen kann, ob und wann man +den Code verĂśffentlicht, ist es vorzuziehen, sich von vornherein an +diese Ratschläge zu halten. @menu * Verschiedene Tips:: Verschiedene Tips zur Gestaltung -* Konsitenzüberprüfung:: Über die Benutzung von @code{Assert}, um - abzubrechen, wenn etwas ``Unmögliches'' +* KonsitenzĂźberprĂźfung:: Über die Benutzung von @code{Assert}, um + abzubrechen, wenn etwas ``UnmĂśgliches'' passiert. * Formatierung:: Wie man die Quellen formatiert * Kommentare:: Quellen kommentieren * Reihenfolge:: Reihenfolge der Code-Bereiche -* Großschreibung:: Großschreibung +* Großschreibung:: Großschreibung * Compiler-Direktiven:: Benutzung von Compiler-Direktiven * Zwischenraum:: Wie man Leerzeichen in Code benutzt -* Zeilenumbrüche:: Wo man seine Zeilen umbrechen sollte +* ZeilenumbrĂźche:: Wo man seine Zeilen umbrechen sollte * Strings:: Zeichenketten * Internationalisierung:: Techniken zur Internationalisierung * MemoryMap:: Wie Sie sicher @samp{MemoryMap} benutzen @@ -554,23 +553,23 @@ Gleichheitszeichen, es sei denn, Sie wol Wenn eine Funktion einen @samp{Boolean}-Wert liefert, um den Erfolg einer Operation anzuzeigen, so sollte @samp{True} den Erfolg melden und @samp{False} das Fehlschlagen. -Beachten Sie, daß dieses Vorgehen anders ist als in C, wo +Beachten Sie, daß dieses Vorgehen anders ist als in C, wo @samp{0} oftmals den Erfolg meldet. -Vermeiden Sie @samp{goto} und ähnliche Statements, wie @samp{Exit}, +Vermeiden Sie @samp{goto} und ähnliche Statements, wie @samp{Exit}, @samp{Return}, @samp{Break} und @samp{Continue}. Vermeiden Sie -@samp{goto} um jeden Preis (außer @emph{möglicherweise} ein +@samp{goto} um jeden Preis (außer @emph{mĂśglicherweise} ein nicht-lokales @samp{goto}, um aus einer @emph{sehr tief} geschachtelten rekursiven Funktion im Falle eines Fehlers herauszukommen). Vermeiden Sie die anderen Statements, wenn dies -mit vertretbarem Aufwand möglich ist. Wenn Sie aber dafür eine -weitere @samp{Boolean}-Variable einführen müssten, so darf dies als -Entschuldigung für das Benutzen dieser Statements gelten. -Beachten Sie, daß Code oftmals @emph{einfacher} wird, wenn Sie auf +mit vertretbarem Aufwand mĂśglich ist. Wenn Sie aber dafĂźr eine +weitere @samp{Boolean}-Variable einfĂźhren mĂźssten, so darf dies als +Entschuldigung fĂźr das Benutzen dieser Statements gelten. +Beachten Sie, daß Code oftmals @emph{einfacher} wird, wenn Sie auf @samp{Break} verzichten und stattdessen eine bessere Abbruchbedingung oder eine andere Sorte Schleife benutzen. -Niemals sollten Sie die @samp{for}-Zählvariable verändern oder dem +Niemals sollten Sie die @samp{for}-Zählvariable verändern oder dem Wert der Variablen nach dem Durchlaufen dieser Schleife vertrauen. (Das ist nicht nur eine Art, seinen Quelltext zu gestalten, sondern mehr noch eine Definition von Pascal. Solche Dinge ergeben @@ -580,14 +579,14 @@ Vertrauen Sie niemals undefiniertem Verh globale Variablen, die zu Beginn des Programmes mit @samp{0} initialisiert zu sein scheinen, angeforderter Speicher, der initialisiert zu sein scheint, ein freigegebener Speicherbereich, -dessen Inhalt immer noch gültig zu sein scheint oder die oben -besprochenen @samp{for}-Zählvariablen. Nichts von all dem ist +dessen Inhalt immer noch gĂźltig zu sein scheint oder die oben +besprochenen @samp{for}-Zählvariablen. Nichts von all dem ist garantiert und kann mit jeder Compilerversion oder Plattform -geändert werden. Undefiniert ist eben undefiniert. Und der -Eindruck, daß solche Dinge bei 42 anderen Compilern zu -funktionieren scheinen, ist dabei völlig belanglos! +geändert werden. Undefiniert ist eben undefiniert. Und der +Eindruck, daß solche Dinge bei 42 anderen Compilern zu +funktionieren scheinen, ist dabei vĂśllig belanglos! -Bei Vergleichen sollte die sich häufiger ändernde Variable auf der +Bei Vergleichen sollte die sich häufiger ändernde Variable auf der linken Seite stehen. @smallexample @@ -597,21 +596,21 @@ for i := 1 to 10 do if b[j] = a[i] then @dots{} @end smallexample -In diesem Beispiel ändert sich @samp{a[i]} häufiger als @samp{Foo} -und @samp{b[j]} ändert sich häufiger als @samp{a[i]} (da @samp{j} -sich häufiger als @samp{i} ändert). +In diesem Beispiel ändert sich @samp{a[i]} häufiger als @samp{Foo} +und @samp{b[j]} ändert sich häufiger als @samp{a[i]} (da @samp{j} +sich häufiger als @samp{i} ändert). -Wir nehmen bei diesem Beispiel an, daß @samp{Foo} konstant ist. Wenn -@samp{Foo} ebenfalls von @samp{i} abhängt, so kann es angebracht +Wir nehmen bei diesem Beispiel an, daß @samp{Foo} konstant ist. Wenn +@samp{Foo} ebenfalls von @samp{i} abhängt, so kann es angebracht sein, @samp{Foo} auf die linke Seite zu stellen. Dies sollte dann -aber durch einen Kommentar erläutert werden. +aber durch einen Kommentar erläutert werden. Vermeiden Sie es, Code doppelt zu schreiben. Es ist zwar so einfach, den Code an eine andere Stelle zu kopieren, aber es wird ein Alptraum sein, diesen dann zu pflegen. Benutzen Sie stattdessen Routinen oder Subroutinen, Units oder Module. Planen Sie Ihren Code -so, daß er erweitert werden kann. Packen Sie schlaue Tricks nicht an -Stellen, die Sie später ändern wollen. +so, daß er erweitert werden kann. Packen Sie schlaue Tricks nicht an +Stellen, die Sie später ändern wollen. Umfassen Sie einzelne Statements nicht mit @samp{begin} und @samp{end}, es sei denn, Sie wollen das ``dangling else'' - Problem vermeiden oder @@ -656,9 +655,9 @@ end; end. @end smallexample -Schreiben Sie keine ungenutzten Deklarationen, außer +Schreiben Sie keine ungenutzten Deklarationen, außer in Interfaces, wo diese vom importierenden Code genutzt -werden können. +werden kĂśnnen. @cindex Boolsche Werte @cindex Boolean @@ -667,30 +666,30 @@ Bitte schreiben Sie @samp{if Foo then} s @samp{if Foo = True then}, und @samp{if not Foo then} statt @samp{if Foo = False then}. Benutzen Sie auch @samp{until False} statt @samp{until 1 = 0}, -das sieht auch hübscher aus. Ein anderes Beispiel ist +das sieht auch hĂźbscher aus. Ein anderes Beispiel ist @samp{Foo := Expression} statt @samp{if Expression then Foo := True else Foo := False}. -Vermeiden Sie doppelte globale Bezeichner, überladen Sie eingebaute +Vermeiden Sie doppelte globale Bezeichner, Ăźberladen Sie eingebaute Bezeichner nicht, obwohl es der GNU Pascal Compiler verschmerzen -würde. Benutzen Sie dieselben globalen Bezeichner auch nicht in +wĂźrde. Benutzen Sie dieselben globalen Bezeichner auch nicht in verschiedenen Units oder Modulen. (Dank ``qualifizierter -Bezeichner'' wäre dies für den Compiler kein Problem, aber für den +Bezeichner'' wäre dies fĂźr den Compiler kein Problem, aber fĂźr den Benutzer verwirrend.) @cindex Globale Variablen -Wir raten davon ab, globale Variablen für nicht-globale Zwecke -einzusetzen, z.B. eine globale Variable @code{Counter} als Zähler in +Wir raten davon ab, globale Variablen fĂźr nicht-globale Zwecke +einzusetzen, z.B. eine globale Variable @code{Counter} als Zähler in diversen lokalen Routinen zu verwenden. Deklarieren Sie stattdessen -eine lokale Variable in jeder Routine, die eine benötigt. Dies -ermöglicht i.a. auch eine bessere Optimierung des erzeugten Codes. +eine lokale Variable in jeder Routine, die eine benĂśtigt. Dies +ermĂśglicht i.a. auch eine bessere Optimierung des erzeugten Codes. @cindex Unendliche Schleifen Wenn Sie eine unendliche Schleife schreiben (auch wenn diese -möglicherweise durch @samp{Break} verlassen wird), empfehlen wir die +mĂśglicherweise durch @samp{Break} verlassen wird), empfehlen wir die Verwendung der @code{repeat} und nicht der @code{while} Schleife, -weil dadurch der Code weniger weit nach rechts eingerückt wird -(jedenfalls, sofern die Schleife mehr als eine Anweisung enthält). +weil dadurch der Code weniger weit nach rechts eingerĂźckt wird +(jedenfalls, sofern die Schleife mehr als eine Anweisung enthält). Also: @smallexample @@ -708,23 +707,23 @@ while True do end @end smallexample -@node Konsitenzüberprüfung -@section Explizite Überprüfung der internen Konsistenz -@cindex Konsitenzüberprüfung +@node KonsitenzĂźberprĂźfung +@section Explizite ÜberprĂźfung der internen Konsistenz +@cindex KonsitenzĂźberprĂźfung @cindex Assert Wie in der GNU C-Bibliotheksdokumentation (@pxref{Consistency -Checking, , , libc}) erläutert, ist es häufig von Vorteil, grundlegende -Annahmen in eigenen Programmen zu überprüfen. +Checking, , , libc}) erläutert, ist es häufig von Vorteil, grundlegende +Annahmen in eigenen Programmen zu ĂźberprĂźfen. Schauen Sie sich dazu einmal folgende Prozedur an: @smallexample procedure MachWasMitPString (StrPtr: PString); @end smallexample -Hierbei könnten Sie implizit annehmen, daß diese Prozedur niemals mit +Hierbei kĂśnnten Sie implizit annehmen, daß diese Prozedur niemals mit @code{nil} als Argument aufgerufen wird. Es ist jedoch sicherer, diese -``unmögliche Bedingung'' zu überprüfen, um sicher zu stellen, daß +``unmĂśgliche Bedingung'' zu ĂźberprĂźfen, um sicher zu stellen, daß @code{StrPtr} verschieden von @code{nil} ist: @smallexample @@ -735,37 +734,37 @@ begin end; @end smallexample -Wenn die Überprüfung fehlschlägt, dann erzeugt das Programm einen -Laufzeitfehler. Daraus läßt sich der Schluß ziehen, daß der Code, welcher +Wenn die ÜberprĂźfung fehlschlägt, dann erzeugt das Programm einen +Laufzeitfehler. Daraus läßt sich der Schluß ziehen, daß der Code, welcher diese Prozedur aufruft, fehlerhaft ist (oder diese Routine entsprechend -ergänzt werden sollte). Dieses Verfahren kann sich bei der Fehlersuche +ergänzt werden sollte). Dieses Verfahren kann sich bei der Fehlersuche wirklich als hilfreich erweisen. Mit anderen Worten: fundamentale Annahmen -am Anfang (oder einem anderen geeigneten Ort) einer Routine zu überprüfen -stellt sicher, daß eine Funktion oder Prozedur nicht falsch benutzt werden +am Anfang (oder einem anderen geeigneten Ort) einer Routine zu ĂźberprĂźfen +stellt sicher, daß eine Funktion oder Prozedur nicht falsch benutzt werden kann. -Die GNU C-Bibliothek enthält das @code{assert}-Makro für diese Art von -Überprüfungen. GNU-Pascals @code{Assert} verhält sich ein wenig anders. -@code{Assert} bricht das Programm nicht vollständig ab, sondern erzeugt +Die GNU C-Bibliothek enthält das @code{assert}-Makro fĂźr diese Art von +ÜberprĂźfungen. GNU-Pascals @code{Assert} verhält sich ein wenig anders. +@code{Assert} bricht das Programm nicht vollständig ab, sondern erzeugt einen Laufzeit-Fehler (@pxref{Assert, , , gpc}), den man z.B. mit der @samp{Trap}-Unit (@pxref{Trap, , , gpc}) abfangen kann. Wenn das Programm hinreichend getestet wurde, kann man die -Überprüfung von @code{Assert} abstellen, indem man das Programm mit +ÜberprĂźfung von @code{Assert} abstellen, indem man das Programm mit der Option @samp{--no-assertions} neu compiliert. Am Code selbst ist -keine Änderung nötig. Nebenwirkungen der Argumente von +keine Änderung nĂśtig. Nebenwirkungen der Argumente von @code{Assert} werden weiterhin ausgewertet (dies ist anders als -in C), so daß man weiterhin schreiben kann: +in C), so daß man weiterhin schreiben kann: @smallexample Assert (MeineFunktion (Foo, Bar) > 0) @end smallexample -@code{MeineFunktion} wird auf jeden Fall aufgerufen, die Überprüfung, -ob der Rückgabewert positiv ist, erfolgt jedoch nur, wenn +@code{MeineFunktion} wird auf jeden Fall aufgerufen, die ÜberprĂźfung, +ob der RĂźckgabewert positiv ist, erfolgt jedoch nur, wenn @samp{--no-assertions} nicht als Option angegeben wurde. -Wir empfehlen, die Konsistenzüberprüfung nie abzuschalten, sofern man den +Wir empfehlen, die KonsistenzĂźberprĂźfung nie abzuschalten, sofern man den kleinen Laufzeitzuwachs verschmerzen kann. @node Formatierung @@ -774,45 +773,45 @@ kleinen Laufzeitzuwachs verschmerzen kan @cindex Blanks @cindex Leerzeichen -Als erstes: Vermeiden Sie unnötige Leerzeichen am Ende einer Zeile. -Vergewissern Sie sich außerdem, daß Sie den Quelltext nicht mit +Als erstes: Vermeiden Sie unnĂśtige Leerzeichen am Ende einer Zeile. +Vergewissern Sie sich außerdem, daß Sie den Quelltext nicht mit Tabulatorzeichen speichern. Verschiedene Editoren oder auch verschiedene Konfigurationen eines Editors interpretieren diese Zeichen mit einer unterschiedlichen Anzahl Leerzeichen. -Dies gefährdet Ihre mühsam erarbeitete Einrückung. +Dies gefährdet Ihre mĂźhsam erarbeitete EinrĂźckung. (Wenn Sie GNU Emacs benutzen, so ist die Funktion @samp{untabify} -sehr nützlich; wenn sie VIM benutzen, die Umgebungsoption +sehr nĂźtzlich; wenn sie VIM benutzen, die Umgebungsoption @samp{expandtab} (@samp{:set et}); in PENG kann die Option @samp{Expand tabs} verwendet werden.) @cindex Steuerzeichen -Bitte vermeiden Sie es, in Ihren Quelltext Steuerzeichen einzufügen -(außer NewLine, selbstverständlich). Bitte auch keine Form-Feeds +Bitte vermeiden Sie es, in Ihren Quelltext Steuerzeichen einzufĂźgen +(außer NewLine, selbstverständlich). Bitte auch keine Form-Feeds (@samp{#12}), wenngleich sie in den GNU Coding Standards zum Separieren von logischen Bereichen empfohlen werden. Auch keine -@samp{SUB}-Zeichen (@samp{#26}), diese werden nämlich unter DOS -als Ende-der-Datei-Zeichen mißbraucht. Ältere DOS-Editoren -fügen dieses Zeichen an das Ende der Datei an, obwohl selbst das -FAT-Dateisystem selbst über das Ende der Datei Bescheid weiß. +@samp{SUB}-Zeichen (@samp{#26}), diese werden nämlich unter DOS +als Ende-der-Datei-Zeichen mißbraucht. Ältere DOS-Editoren +fĂźgen dieses Zeichen an das Ende der Datei an, obwohl selbst das +FAT-Dateisystem selbst Ăźber das Ende der Datei Bescheid weiß. -@cindex Zeilenlänge -Wir empfehlen eine maximale Länge von 68 Zeichen pro Zeile, so daß +@cindex Zeilenlänge +Wir empfehlen eine maximale Länge von 68 Zeichen pro Zeile, so daß eine Quelldatei in @TeX{} mit voreingestelltem Font auf A4 gedruckt -werden kann. oder 78 Zeichen, geeignet für 80 Zeichen breite +werden kann. oder 78 Zeichen, geeignet fĂźr 80 Zeichen breite Bildschirme. Dies ist keine feste Regel, denn umgebrochene Zeilen verringern nur allzuoft die Lesbarkeit. @cindex Leerzeilen -Benutzen Sie Leerzeilen zwischen Blöcken. Blöcke sind lange +Benutzen Sie Leerzeilen zwischen BlĂścken. BlĂścke sind lange Kommentare, @samp{type}, @samp{const}, @samp{var}, @samp{label} -Abschnitte, Routinen-Rümpfe, Unit- oder +Abschnitte, Routinen-RĂźmpfe, Unit- oder Modulinitialisierung/-finalisierung, @samp{interface}, @samp{implementation}, @samp{module}, @samp{export}, @samp{uses}, @samp{import} Zeilen, globale Compiler-Direktiven. Soweit lange Kommentare eine folgende Deklaration betreffen, bitten wir Sie, nur eine Zeile vor dem Kommentar abzusetzen, nicht zwischen Kommentar und Deklaration. -Eine besondere Ausnahme ist zwischen den Blöcken innerhalb +Eine besondere Ausnahme ist zwischen den BlĂścken innerhalb derselben Routine. Benutzen Sie hier keine Leerzeilen: @smallexample @@ -832,7 +831,7 @@ procedure Long; const @dots{} var - Variablen, die von Sub genutzt werden können @dots{} + Variablen, die von Sub genutzt werden kĂśnnen @dots{} procedure Sub; var @@ -842,7 +841,7 @@ var end; var - Variablen, die nicht von Sub genutzt werden können @dots{} + Variablen, die nicht von Sub genutzt werden kĂśnnen @dots{} begin @dots{} end; @@ -850,15 +849,15 @@ end; Benutzen Sie bitte auch keine Leerzeile nach der Deklaration des Namens der Hauptroutine, es sei denn, eine Subroutine folgt sofort. -Andernfalls würde die Deklaration aussehen wie eine +Andernfalls wĂźrde die Deklaration aussehen wie eine Forward-Deklaration. -Beachten Sie bitte, daß wir im obigen Beispiel die lokalen Variablen +Beachten Sie bitte, daß wir im obigen Beispiel die lokalen Variablen in Abschnitte vor und nach der Subroutine aufgeteilt haben. Dies ist nicht zwingend. -Alles, was wir über Subroutinen gesagt haben, gilt -selbstverständlich auch für Sub-Subroutinen beliebiger +Alles, was wir Ăźber Subroutinen gesagt haben, gilt +selbstverständlich auch fĂźr Sub-Subroutinen beliebiger Verschachtelungstiefe. Eine Leerzeile sollte dann zwischen Deklarationen desselben Types @@ -867,7 +866,7 @@ vor der Deklaration ein Kommentar steht, dem Kommentar stehen. Anderenfalls soll die Leerzeile vor der Deklaration stehen. -Leerzeilen können in langen Kommentaren Absätze teilen. +Leerzeilen kĂśnnen in langen Kommentaren Absätze teilen. Keine Leerzeile am Anfang oder am Ende einer Datei. Lediglich ein einzelnes Zeilenendzeichen nach dem letzten @samp{end.}. Niemals @@ -887,20 +886,20 @@ Altmodische Kommentare zwischen Klammern nicht mehr benutzt werden: @smallexample -(* Ein häßlicher Kommentar. So etwas braucht man nicht mehr! *) +(* Ein häßlicher Kommentar. So etwas braucht man nicht mehr! *) @end smallexample Auch sollten keine Kommentare mehr geschrieben werden, die mit -doppelten Schrägzeichen eingeleitet werden und bis zum Ende der +doppelten Schrägzeichen eingeleitet werden und bis zum Ende der Zeile gehen: @smallexample // Machen Sie es nicht. @end smallexample -Obwohl ISO Pascal gemischte Kommentare ausdrücklich erlaubt und +Obwohl ISO Pascal gemischte Kommentare ausdrĂźcklich erlaubt und der GNU Pascal Compiler sich mit der Option -@samp{@{$mixed-comments@}} auch nicht darüber beschweren würde, +@samp{@{$mixed-comments@}} auch nicht darĂźber beschweren wĂźrde, sollten solche Kommentare nicht benutzt werden: @smallexample @@ -911,38 +910,38 @@ sollten solche Kommentare nicht benutzt @cindex Verschachtelte Kommentare Vermeiden Sie verschachtelte Kommentare wie @samp{@{ @{ diesen hier @} @}}. Das ist nur dann in Ordnung, -wenn Sie @TeX{} in einem Kommentar setzen wollen oder ähnlich -exotische Dinge. Was auch immer Sie für Gründe haben mögen, müssen -Sie diese Option dann zunächst mit der Direktive +wenn Sie @TeX{} in einem Kommentar setzen wollen oder ähnlich +exotische Dinge. Was auch immer Sie fĂźr GrĂźnde haben mĂśgen, mĂźssen +Sie diese Option dann zunächst mit der Direktive @samp{@{$nested-comments@}} anschalten. Benutzen Sie bitte nicht die Kommandozeilenoption @samp{--nested-comments}. Packen Sie all diese Optionen in den Quellcode, damit niemand, der den Quellcode -übersetzen möchte, erst die benötigten Optionen erraten muß, und +Ăźbersetzen mĂśchte, erst die benĂśtigten Optionen erraten muß, und auch, weil Kommandozeilenoptionen z.B. bein Kompilieren eines Projektes mit mehreren Units/Modules @emph{alle} Dateien betreffen -würden. +wĂźrden. @cindex Sprache in Kommentaren Bitte schreiben Sie Kommentare in Englisch! Englisch ist diejenige -Sprache, die die meisten Programmierer in allen Ländern lesen -können. Wenn Sie sich im Englischen nicht fit genug fühlen, dann bitten +Sprache, die die meisten Programmierer in allen Ländern lesen +kĂśnnen. Wenn Sie sich im Englischen nicht fit genug fĂźhlen, dann bitten Sie jemanden, Ihnen dabei zu helfen. Schreiben Sie so gut, wie Sie -können. +kĂśnnen. @cindex Kommentarraster -Sie sollten sich ``French Spacing'' angewöhnen, d.h. nur ein -Leerzeichen am Ende eines Satzes. Dabei können Sie in GNU Emacs -@samp{M-a} und @samp{M-e} nicht benutzen. Wir hoffen, daß Sie das -verschmerzen können. Bitte lassen Sie nur ein Leerzeichen nach der -öffnenden und der schließenden geschweiften Klammer des Kommentares +Sie sollten sich ``French Spacing'' angewĂśhnen, d.h. nur ein +Leerzeichen am Ende eines Satzes. Dabei kĂśnnen Sie in GNU Emacs +@samp{M-a} und @samp{M-e} nicht benutzen. Wir hoffen, daß Sie das +verschmerzen kĂśnnen. Bitte lassen Sie nur ein Leerzeichen nach der +Ăśffnenden und der schließenden geschweiften Klammer des Kommentares Platz. @cindex Plazierung der Kommentare Wenn ein Kommentar sich nur auf eine Zeile Code bezieht, so sollte der Kommentar in derselben Zeile hinter dem Code stehen, soweit -das möglich ist. Bitte lassen Sie zwei Leerzeichen Platz. -Dies ist ebenfalls für den Interface-Bereich einer Unit und bei -globalen Variablen angemessen. Oftmals benötigt man diese Sorte +das mĂśglich ist. Bitte lassen Sie zwei Leerzeichen Platz. +Dies ist ebenfalls fĂźr den Interface-Bereich einer Unit und bei +globalen Variablen angemessen. Oftmals benĂśtigt man diese Sorte Kommentare neben Record-Feldern. Andernfalls sollten Kommentare in eigenen Zeilen stehen: @@ -950,14 +949,14 @@ in eigenen Zeilen stehen: @{ foo bar baz @} @end smallexample -Oder etwas länger: +Oder etwas länger: @smallexample @{ foo bar baz @} @end smallexample -Mit Absätzen: +Mit Absätzen: @smallexample @{ foo bar @@ -966,8 +965,8 @@ Mit Absätzen: qux @} @end smallexample -Die Kommentare sollten gewöhnlich vor den Code plaziert werden, -auf den sie sich beziehen. Sie erhalten dieselbe Einrückung: +Die Kommentare sollten gewĂśhnlich vor den Code plaziert werden, +auf den sie sich beziehen. Sie erhalten dieselbe EinrĂźckung: @smallexample @{ Meine Typen. @} @@ -984,7 +983,7 @@ begin Bla; @{ Anfang der Schleife. @} repeat - @{ Schleifenkörper. @} + @{ SchleifenkĂśrper. @} @dots{} @{ Beende die Schleife, wenn irgendwas passiert. @} until Something @@ -1004,7 +1003,7 @@ procedure Foo; @cindex Dumme Kommentare @cindex Triviale Kommentare Schreiben Sie keine ``trivialen'' Kommentare wie den obigen. -Sie sollten Kommentare dadurch vermeiden, daß Sie durchdachten +Sie sollten Kommentare dadurch vermeiden, daß Sie durchdachten Code schreiben. Linus Torvalds macht das in seinem Kernel Coding Style deutlich: @@ -1017,19 +1016,19 @@ Generally, you want your comments to tel not @strong{how}. @end quotation -Übersetzung: +Übersetzung: @quotation -Kommentare sind grundsätzlich sinnvoll, aber es besteht die Gefahr -der ``Überkommentierung''. @strong{Niemals} sollten Sie im -Kommentar erklären, @strong{wie} der Code arbeitet: -Es ist viel besser, offensichtlichen Code zu schreiben, so daß +Kommentare sind grundsätzlich sinnvoll, aber es besteht die Gefahr +der ``Überkommentierung''. @strong{Niemals} sollten Sie im +Kommentar erklären, @strong{wie} der Code arbeitet: +Es ist viel besser, offensichtlichen Code zu schreiben, so daß seine @emph{Arbeitsweise} sich ergibt. Es ist verschwendete Zeit, schlecht geschriebenen Code zu kommentieren. Allgemein sollte man mitteilen, @strong{was} der Code macht, nicht @strong{wie} er es macht. @end quotation -(Beachten Sie, daß wir in anderen Bereichen ziemlich stark von seinem +(Beachten Sie, daß wir in anderen Bereichen ziemlich stark von seinem Coding Style abweichen.) @cindex Kommentare bei nicht naheliegendem Code @@ -1037,20 +1036,20 @@ Coding Style abweichen.) ``Trickreicher'' Code ist es wert, kommentiert zu werden. Wir definieren den Code als ``trickreich'', der nicht naheliegende Dinge tut, auf nicht sofort einleuchtenden Annahmen basiert, unerwartete -Implikationen beinhaltet, bei dessen Änderung etwas Spezielles -beachtet werden muss, der sich nicht so verhält, wie es auf den -ersten Eindruck scheint, der Seiteneffekte enthält oder es -erfordert, daß andere Teile des Codes an anderer Stelle gleichzeitig -mit ihm geändert werden. Trickreicher Code sollte grundsätzlich nur -in bescheidenem Maße benutzt werden. +Implikationen beinhaltet, bei dessen Änderung etwas Spezielles +beachtet werden muss, der sich nicht so verhält, wie es auf den +ersten Eindruck scheint, der Seiteneffekte enthält oder es +erfordert, daß andere Teile des Codes an anderer Stelle gleichzeitig +mit ihm geändert werden. Trickreicher Code sollte grundsätzlich nur +in bescheidenem Maße benutzt werden. @cindex Kommentare zu externen Quellen -In dem Fall, daß sich ein Kommentar auf eine andere +In dem Fall, daß sich ein Kommentar auf eine andere Stelle des Codes bezieht, wobei es egal ist, ob die Referenz in derselben oder einer anderen Datei liegt, beziehen Sie sich bitte auf den Namen der Routine oder einen Kontext. Bitte geben Sie den -Bezug nicht in Form von Zeilennummern an (diese ändern sich zu -häufig). Lassen Sie in den Kommentaren außerdem beide Stellen +Bezug nicht in Form von Zeilennummern an (diese ändern sich zu +häufig). Lassen Sie in den Kommentaren außerdem beide Stellen aufeinander verweisen, wo es Sinn macht. Diese Art der ``Kreuzverweise'' erwies sich schon oft als sinnvoll. @@ -1060,7 +1059,7 @@ Code, der auskommentiert werden soll, so ausgeschlossen werden. Bitte benutzen Sie dazu keine Kommentare. @cindex Kommentare zur Trennung logischer Abschnitte -Um logische Abschnitte innerhalb größerer Module oder Units zu +Um logische Abschnitte innerhalb größerer Module oder Units zu markieren, sollten Sie Kommentare benutzen. Wir schlagen Ihnen folgende leicht zu suchende festgelegte Form vor: @@ -1069,48 +1068,48 @@ folgende leicht zu suchende festgelegte @{@@subsection Name des Abschnitts@} @end smallexample -Beachten Sie, daß in diesem Fall ausnahmsweise keine Leerzeichen -neben den geschweiften Klammern eingefügt werden. +Beachten Sie, daß in diesem Fall ausnahmsweise keine Leerzeichen +neben den geschweiften Klammern eingefĂźgt werden. @cindex Beschreibende Kommentare Ein Modul, eine Unit oder Library sollte im Interface-Bereich -Kommentare haben, so daß dieses Interface zu einer verläßlichen +Kommentare haben, so daß dieses Interface zu einer verläßlichen Dokumentationsquelle wird. Es ist freigestellt, solche Kommentare -für Routinen zu benutzen, die nur im Implementationsbereich +fĂźr Routinen zu benutzen, die nur im Implementationsbereich oder in Programmen (im Gegensatz zu Modulen etc.) deklariert werden. -Mehrere zusammenhängende Deklarationen (z.B. Gruppen von Konstanten) -können sich einen Kommentar teilen. +Mehrere zusammenhängende Deklarationen (z.B. Gruppen von Konstanten) +kĂśnnen sich einen Kommentar teilen. @cindex Kommentare mit Textauszeichnung Es wird ein Utility namens @samp{pas2texi} geschrieben, welches Texinfo-Dateien aus Pascal-Kommentaren erzeugt. Dieses Utility -wird verschiedene Textauszeichnungsmöglichkeiten innerhalb von +wird verschiedene TextauszeichnungsmĂśglichkeiten innerhalb von Kommentaren erlauben. Diese Textauszeichnungen werden innerhalb -der Dokumentation von @samp{pas2texi} oder in späteren -Versionen dieses Dokumentes erläutert werden. +der Dokumentation von @samp{pas2texi} oder in späteren +Versionen dieses Dokumentes erläutert werden. @cindex Fixme Kommentare -``Fixme''-Kommentare dienen dazu, aufzuzeigen, daß an dieser Stelle -Code etwas zu verändern ist. Den Kommentaren werden mindestens -zwei @samp{@@} vorangestellt. Fügen Sie soviele @samp{@@} ein, +``Fixme''-Kommentare dienen dazu, aufzuzeigen, daß an dieser Stelle +Code etwas zu verändern ist. Den Kommentaren werden mindestens +zwei @samp{@@} vorangestellt. FĂźgen Sie soviele @samp{@@} ein, wie es der Dringlichkeit der Korrektur entspricht. Die Kommentare sollten das Wesentliche des Problems enthalten, vor -allem wenn die Wurzel des Übels woanderes liegt. Beispielsweise -erklärt der Kommentar @samp{@{ @@@@fjf226 @}} den folgenden Code als -Work-Around für ein Problem des GNU Pascal Compilers, welches von +allem wenn die Wurzel des Übels woanderes liegt. Beispielsweise +erklärt der Kommentar @samp{@{ @@@@fjf226 @}} den folgenden Code als +Work-Around fĂźr ein Problem des GNU Pascal Compilers, welches von einem Test-Programm namens @samp{fjf226.pas} verdeutlicht wird. -(Diese Datei können Sie tatsächlich innerhalb des Quellpaketes des +(Diese Datei kĂśnnen Sie tatsächlich innerhalb des Quellpaketes des GNU Pascal Compilers finden.) ``Fixme''-Kommentare sollten nicht mit anderen Kommentaren vermischt werden. Wenn beide Kommentare gebraucht werden, so sollten sie getrennt, wenn auch direkt hintereinander stehen. Da sie -vorübergehender Natur sind, dürfen solche Kommentare überall stehen, +vorĂźbergehender Natur sind, dĂźrfen solche Kommentare Ăźberall stehen, sogar innerhalb von Anweisungen. Normalerweise stehen sie im Rumpf einer Routine, solange sie nicht das Interface eines Modules bzw. einer Unit beeinflussen. Interfaces, die voraussichtlich in der -Zukunft geändert werden, sollten @samp{@@@@}-Kommentare direkt vor +Zukunft geändert werden, sollten @samp{@@@@}-Kommentare direkt vor ihren beschreibenden Kommentaren aufweisen. @node Reihenfolge @@ -1124,7 +1123,7 @@ nach folgendes beinhaltet: @item eine kurze Beschreibung, was der Code in dieser Datei macht @item -eine längere Beschreibung über Details des Codes und wo man sich +eine längere Beschreibung Ăźber Details des Codes und wo man sich informieren kann @item Copyright-Informationen (Autoren) @@ -1149,7 +1148,7 @@ Allgemein sollte man diese Deklarations- Routinen @end itemize -Sie können von dieser Reihenfolge abweichen, wenn es notwendig +Sie kĂśnnen von dieser Reihenfolge abweichen, wenn es notwendig erscheint oder den Code lesbarer gestaltet. Im folgenden sehen Sie ein Beispiel, bei dem diese Reihenfolge nicht eingehalten werden kann: @@ -1164,37 +1163,37 @@ const IrgendEineKonstante = SizeOf (TIrgendwas); @end smallexample -Die obigen Regeln gelten selbstverständlich auch für +Die obigen Regeln gelten selbstverständlich auch fĂźr Deklarationsbereiche innerhalb von Routinen. -Wenn Sie mehrere mehr oder weniger unabhängige Bereiche in einer -großen Unit oder einem großen Modul haben, so sollten sie obige +Wenn Sie mehrere mehr oder weniger unabhängige Bereiche in einer +großen Unit oder einem großen Modul haben, so sollten sie obige Reihenfolge auf jeden Teilbereich des Modules anwenden. Es sollten z.B. nicht alle Konstanten aller Bereiche in eine einzelne @samp{const}-Deklaration geschrieben werden, das macht den Code eher unleserlich. @cindex Variablen-Deklaration -Variablen, die nur im Hauptprogramm genutzt werden, müssen in +Variablen, die nur im Hauptprogramm genutzt werden, mĂźssen in Pascal global deklariert werden, wobei GNU Pascal eine Erweiterung -kennt, um diese Beschränkung zu umgehen und Variablen im +kennt, um diese Beschränkung zu umgehen und Variablen im Anweisungsteil zu deklarieren (@pxref{var, , , gpc}). In einem solchen Fall sollten diese Variablen direkt vor dem @samp{begin} des Hauptprogrammes geschrieben werden, nach allen Routinen etc. Das -gilt besonders dann, wenn das Programm groß ist und viele Variablen +gilt besonders dann, wenn das Programm groß ist und viele Variablen deklariert werden. Dadurch wird der Variablen-Deklarations-Bereich leichter einsehbar und ist einfacher mit den entsprechenden -Code-Bereichen änderbar. Außerdem vermeidet man so, daß +Code-Bereichen änderbar. Außerdem vermeidet man so, daß versehentlich Routinen diese Variablen nutzen. @cindex Deklarationen innerhalb eines Typ-Deklarations-Blocks -Wenn Sie einen Typ und seinen zugehörigen Zeiger gleich mit +Wenn Sie einen Typ und seinen zugehĂśrigen Zeiger gleich mit deklarieren wollen, so deklarieren Sie bitte zuerst den Zeiger. -Dies ist übersichtlicher, besonders wenn der zugehörige Typ eine -größere Struktur (@samp{record} oder @samp{object}) ist. Auch wird -es damit möglich, rekursive Strukturen aufzubauen (Typdefinitionen, +Dies ist Ăźbersichtlicher, besonders wenn der zugehĂśrige Typ eine +größere Struktur (@samp{record} oder @samp{object}) ist. Auch wird +es damit mĂśglich, rekursive Strukturen aufzubauen (Typdefinitionen, die Zeiger auf denselben Typ beinhalten). Bitte stellen Sie den -Typen ein @samp{T}, und den zugehörigen Zeigern ein @samp{P} voran. +Typen ein @samp{T}, und den zugehĂśrigen Zeigern ein @samp{P} voran. Folgendes Beispiel veranschaulicht das: @smallexample @@ -1209,14 +1208,14 @@ type end; @end smallexample -Bitte beachten Sie in dem Beispiel, daß das @samp{Next}-Feld als -erstes aufgeführt ist. Wir schlagen vor, daß Sie es bei rekursiven -Typen immer so machen, es ermöglicht einige generische +Bitte beachten Sie in dem Beispiel, daß das @samp{Next}-Feld als +erstes aufgefĂźhrt ist. Wir schlagen vor, daß Sie es bei rekursiven +Typen immer so machen, es ermĂśglicht einige generische Listenroutinen und ist etwas effizienter, da beim Durchlaufen der Liste keine Offsets auftauchen. Nicht verpflichtend ist es, alle Zeigertypen innerhalb einer -@samp{type}-Deklaration zuerst aufzuführen, aber wir raten Ihnen +@samp{type}-Deklaration zuerst aufzufĂźhren, aber wir raten Ihnen dazu. Hier ist ein Beispiel dazu: @smallexample @@ -1226,7 +1225,7 @@ type PBar = ^TBar; PBaz = ^TBaz; - @{ Einige maßgefertigte Integertypen @} + @{ Einige maßgefertigte Integertypen @} TFoo = Integer attribute (Size = 16); TBar = Cardinal attribute (Size = 16); TBaz = Cardinal attribute (Size = 32); @@ -1234,7 +1233,7 @@ type @cindex Deklarationen innerhalb von Objekttypen Innerhalb von Objekt-Typen gibt es drei Deklarationsbereiche. Drei -reservierte Wörter leiten diese Bereiche ein: @samp{public}, +reservierte WĂśrter leiten diese Bereiche ein: @samp{public}, @samp{protected}, @samp{private}. Innerhalb eines jeden dieser Bereiche sollte man folgende Reihenfolge einhalten: @@ -1251,50 +1250,50 @@ Methoden @cindex Reihenfolge der Implementation Im Implementationsbereich sollte man dieselbe Reihenfolge -einhalten wie bei der Deklaration. Dies gilt selbstverständlich -ebenso für Units und Module. +einhalten wie bei der Deklaration. Dies gilt selbstverständlich +ebenso fĂźr Units und Module. Benutzen Sie nie ein @samp{;} am Ende eines Blockes, also vor -@samp{end}, @samp{until}, usw, außer im Fall von @samp{case}. +@samp{end}, @samp{until}, usw, außer im Fall von @samp{case}. Der letzte Zweig vor @samp{else} (oder der letzte Zweig, wenn es -keinen @samp{else}-Zweig gibt) @emph{sollte} ein abschließendes +keinen @samp{else}-Zweig gibt) @emph{sollte} ein abschließendes @samp{;} haben, um Probleme wie diese zu vermeiden: @smallexample case @dots{} Foo: - if Bar then @{ später eingefügt @} + if Bar then @{ später eingefĂźgt @} begin @dots{} end @{ wenn es hier kein Semikolon gibt @dots{} @} - else @{ @dots{} dann wird dieses @samp{else} plötzlich dem @samp{then} zugerechnet @} + else @{ @dots{} dann wird dieses @samp{else} plĂśtzlich dem @samp{then} zugerechnet @} @dots{} @end smallexample (Dasselbe gilt auch, wenn es @samp{if} schon gibt und das -@samp{else} des @samp{case} später eingefügt wird.) +@samp{else} des @samp{case} später eingefĂźgt wird.) -In Objekten mag es merkwürdig aussehen, das @samp{;} nach dem +In Objekten mag es merkwĂźrdig aussehen, das @samp{;} nach dem letzten Eintrag (meistens eine Objekt-Methode) wegzulassen. Deswegen erlauben wir es hier und zur Erhaltung der Konsistenz auch in Records. -@node Großschreibung -@section Großschreibung -@cindex Großschreibung +@node Großschreibung +@section Großschreibung +@cindex Großschreibung -Reservierte Wörter sollten allesamt kleingeschrieben werden, -einschließlich aller Direktiven und Wörter, die nur in manchen +Reservierte WĂśrter sollten allesamt kleingeschrieben werden, +einschließlich aller Direktiven und WĂśrter, die nur in manchen Kontexten reserviert sind (wie @samp{protected}). Wenn Sie -Direktiven außerhalb ihres Kontextes als Bezeichner benutzen (was -leicht zu Problemen führen kann), so schreiben Sie diese bitte wie +Direktiven außerhalb ihres Kontextes als Bezeichner benutzen (was +leicht zu Problemen fĂźhren kann), so schreiben Sie diese bitte wie Bezeichner. -Als besondere Ausnahme darf man @samp{File} großschreiben, wenn +Als besondere Ausnahme darf man @samp{File} großschreiben, wenn dieses als eigener Typ gebraucht wird. Anders ist es -selbstverständlich bei @samp{file of Char}. Im Fall von +selbstverständlich bei @samp{file of Char}. Im Fall von @samp{procedure} als Typ (Borland Pascal) kann man diese Regel -nicht anwenden, denn @samp{File} kann ein Typ an sich sein, während +nicht anwenden, denn @samp{File} kann ein Typ an sich sein, während @samp{procedure} ein Typ-Konstruktor ist. Beispiel: @smallexample @@ -1302,15 +1301,15 @@ procedure Foo (var a: File); @{ Das geh procedure Foo (var a: procedure); @{ Das geht nicht! @} @end smallexample -@cindex Großschreibung von Bezeichnern -Der nächste Punkt betrifft die Großschreibung von Bezeichnern. Es +@cindex Großschreibung von Bezeichnern +Der nächste Punkt betrifft die Großschreibung von Bezeichnern. Es gibt hierbei keinen Unterschied zwischen eingebauten und -selbstdefinierten Bezeichnern. Grundsätzlich sollte nur der erste -Buchstabe großgeschrieben werden, außer wenn es sich um -zusammengesetzte Wörter oder Akronyme handelt, dann sollte jeder -Anfangsbuchstabe eines jeden Teilwortes großgeschrieben werden. +selbstdefinierten Bezeichnern. Grundsätzlich sollte nur der erste +Buchstabe großgeschrieben werden, außer wenn es sich um +zusammengesetzte WĂśrter oder Akronyme handelt, dann sollte jeder +Anfangsbuchstabe eines jeden Teilwortes großgeschrieben werden. Unterstriche sollten vermieden werden. Akronyme, die zu einem Teil -der natürlichen Sprache geworden sind, sollten so geschrieben +der natĂźrlichen Sprache geworden sind, sollten so geschrieben werden wie in der Sprache. Beispielsweise @samp{Dos} oder @samp{DOS}, aber immer @samp{GPC} und niemals @samp{Gpc}! Hier einige Beispiele von Bezeichnern: @@ -1318,29 +1317,29 @@ Hier einige Beispiele von Bezeichnern: @samp{IOResult}, @samp{WriteLn}, @samp{Sqr}, @samp{SqRt}, @samp{EOF}, @samp{EOLn}. -@cindex Großschreibung von Konstanten -Anders als bei C-Makros gelten diese Regeln auch für Konstanten. +@cindex Großschreibung von Konstanten +Anders als bei C-Makros gelten diese Regeln auch fĂźr Konstanten. -Sehr kurze Bezeichner dürfen kleingschrieben werden, z.B. @samp{i}, +Sehr kurze Bezeichner dĂźrfen kleingschrieben werden, z.B. @samp{i}, @samp{s1} oder @samp{xx}. Solche kurzen Bezeichnernamen sollten nur -in lokalen Blöcken auftauchen. Dazu zählen auch Parameter globaler -Routinen, denn der Gültigkeitsbereich solcher Parameter ist lokal. +in lokalen BlĂścken auftauchen. Dazu zählen auch Parameter globaler +Routinen, denn der GĂźltigkeitsbereich solcher Parameter ist lokal. Der Gebrauch dieser Bezeichner sollte nicht in einem globalen Kontext erfolgen, besonders nicht in Units oder Modulen. Der Autor kann ja nie wissen, in welchen Kontexten die Units/Module benutzt werden. -Bitte bleiben Sie einheitlich, was die Groß- und Kleinschreibung +Bitte bleiben Sie einheitlich, was die Groß- und Kleinschreibung ihrer Bezeichner anbelangt. Wenngleich Pascal Sie auch nicht -schlägt, wenn Sie mal die Großschreibung einer Variablen innerhalb -eines Blockes ändern: Bitte halten Sie sich an eine Form. +schlägt, wenn Sie mal die Großschreibung einer Variablen innerhalb +eines Blockes ändern: Bitte halten Sie sich an eine Form. -@cindex Aufzählungstypen +@cindex Aufzählungstypen @cindex Konstanten -Für Bezeichner für die Werte von Aufzählungstypen und für Gruppen +FĂźr Bezeichner fĂźr die Werte von Aufzählungstypen und fĂźr Gruppen von Konstanten, d.h. an Stellen, wo viele Bezeichner auf einmal -eingeführt werden, kann es nützlich sein, ein zweibuchstabiges -kleingeschriebenes Präfix zu verwenden, dem im Gegensatz zu obigen +eingefĂźhrt werden, kann es nĂźtzlich sein, ein zweibuchstabiges +kleingeschriebenes Präfix zu verwenden, dem im Gegensatz zu obigen Regeln ein Unterstrich (@samp{_}) folgt: @smallexample @@ -1358,37 +1357,37 @@ const @cindex OOP In objektorientiertem Code, meistens in Konstruktoren, hat man den -Fall, daß der Parameter einer Funktion zu einem Feldnamen passen +Fall, daß der Parameter einer Funktion zu einem Feldnamen passen soll, den dieser Parameter initialisiert. Da beide Namen nicht -übereinstimmen dürfen, sollte das Feld den ``natürlichen'' Namen +Ăźbereinstimmen dĂźrfen, sollte das Feld den ``natĂźrlichen'' Namen haben, da es an mehreren Stellen verwendet wird, und der -Parametername verändert werden. Wir haben bislang keine einheitliche -Regel für den Namen des Parameters in einem solchen Fall gefunden. -Manche Programmierer verwenden @samp{a} als Präfix. Wenn Sie eine +Parametername verändert werden. Wir haben bislang keine einheitliche +Regel fĂźr den Namen des Parameters in einem solchen Fall gefunden. +Manche Programmierer verwenden @samp{a} als Präfix. Wenn Sie eine gute Idee haben, so lassen Sie es uns wissen. -@cindex Großschreibung von Makros +@cindex Großschreibung von Makros Makros sollten nicht genutzt werden! Sie sind die Reinkarnation -des Bösen! Wenn Sie es doch tun, so müssen Sie zur Strafe alle -Buchstaben groß schreiben und einzelne Teilwörter mit -Unterstrichen trennen. Da Makros außerhalb der +des BĂśsen! Wenn Sie es doch tun, so mĂźssen Sie zur Strafe alle +Buchstaben groß schreiben und einzelne TeilwĂśrter mit +Unterstrichen trennen. Da Makros außerhalb der Pascal-Geltungsbereiche stehen, macht es durchaus Sinn, sie anders -zu schreiben als den übrigen Pascal-Code. Das gilt ebenso für +zu schreiben als den Ăźbrigen Pascal-Code. Das gilt ebenso fĂźr Bedingungen im Rahmen der bedingten Kompilierung (Conditionale). @node Compiler-Direktiven @section Benutzung von Compiler-Direktiven @cindex Compiler-Direktiven -Anmerkung des Übersetzers: +Anmerkung des Übersetzers: Um der Doppeldeutigkeit von ``condition'', wie sie in einer @samp{if}-Anweisung vorkommt, und wie sie in der bedingten -Ausführung von Code vorkommt, Herr zu werden, habe ich mich -entschieden, in diesem Abschnitt durchgängig ``Conditional'' im -letztgenannten Kontext zu verwenden. Der Leser möge mir verzeihen. +AusfĂźhrung von Code vorkommt, Herr zu werden, habe ich mich +entschieden, in diesem Abschnitt durchgängig ``Conditional'' im +letztgenannten Kontext zu verwenden. Der Leser mĂśge mir verzeihen. -Grundsätzlich sollten Sie so wenig Compiler-Direktiven wie nur -irgend möglich verwenden, weil sie den Code schwerer lesbar +Grundsätzlich sollten Sie so wenig Compiler-Direktiven wie nur +irgend mĂśglich verwenden, weil sie den Code schwerer lesbar und wartbar machen. So sollten Direktiven aussehen: @smallexample @@ -1402,7 +1401,7 @@ und niemals so: (@pxref{Kommentare}) @end smallexample und auch nicht so, weil dies im Gegensatz zu Pascal, von -Zeilenumbrüchen anhängt: +ZeilenumbrĂźchen anhängt: @smallexample #so-auch-nicht-Direktive @@ -1414,18 +1413,18 @@ Dasselbe bei Makro-Definitionen: @{$define @dots{}@} @end smallexample -Dies spart außerdem den Backslash vor dem Zeilenumbruch, im +Dies spart außerdem den Backslash vor dem Zeilenumbruch, im Gegensatz zu @samp{#define}. Aber Sie wollen ohnehin keine Makros -benutzen, ODER? (@pxref{Großschreibung}) +benutzen, ODER? (@pxref{Großschreibung}) @cindex Blanks bei Direktiven -Fügen Sie niemals ein Leerzeichen vor der schließenden Klammer ein, -denn es darf auch keines nach der öffnenden Klammer kommen. Wenn -Sie mehrere Direktiven zusammenfügen, so fügen Sie zwischen zweien -kein Leerzeichen ein, ein einfaches Komma genügt. +FĂźgen Sie niemals ein Leerzeichen vor der schließenden Klammer ein, +denn es darf auch keines nach der Ăśffnenden Klammer kommen. Wenn +Sie mehrere Direktiven zusammenfĂźgen, so fĂźgen Sie zwischen zweien +kein Leerzeichen ein, ein einfaches Komma genĂźgt. @cindex Kommentare und Direktiven -Es sollten keine Kommentare innerhalb der Direktiven eingefügt +Es sollten keine Kommentare innerhalb der Direktiven eingefĂźgt werden. Schreiben Sie Kommentare stattdessen separat: @smallexample @@ -1433,17 +1432,17 @@ werden. Schreiben Sie Kommentare stattde @end smallexample Borland Pascal erlaubt, Kommentare mit Direktiven zu vermischen. -Das ist ein Mißbrauch eines solchen Kommentares! +Das ist ein Mißbrauch eines solchen Kommentares! Kurze Formen der Direktiven sind in Ordnung, aber man sollte den -langen Formen den Vorzug geben. Die kurzen Formen müssen -großgeschrieben werden, während die langen Formen kleingeschrieben +langen Formen den Vorzug geben. Die kurzen Formen mĂźssen +großgeschrieben werden, während die langen Formen kleingeschrieben werden sollten (ausgenommen Argumente, bei denen es auf die richtige Schreibweise ankommt, wie Fehlermeldungen, Warnungen, -Dateinamen -- bei letzteren ist auch unter DOS die korrekte Groß- +Dateinamen -- bei letzteren ist auch unter DOS die korrekte Groß- und Kleinschreibung zu verwenden, damit der Code portabel bleibt). -Sie können verschiedene Direktiven kombinieren, dabei auch kurze +Sie kĂśnnen verschiedene Direktiven kombinieren, dabei auch kurze und lange Formen mischen, wie im folgenden Beispiel: @smallexample @@ -1454,14 +1453,14 @@ und lange Formen mischen, wie im folgend Jede Unit und jedes Modul sollte @samp{@{$gnu-pascal,I-@}} oder @samp{@{$gnu-pascal,I+@}} nahe am Anfang stehen haben, und zwar nach dem einleitenden Kommentar mit der Beschreibung und der -Lizenz. @samp{@{$gnu-pascal@}} bewirkt, daß die Unit ohne +Lizenz. @samp{@{$gnu-pascal@}} bewirkt, daß die Unit ohne Dialekt-Optionen kompiliert wird, selbst wenn das aufrufende Programm Dialekt-Optionen nutzt. @samp{@{$I-@}} und @samp{@{$I+@}} -zeigen dem Nutzer der Unit, daß Ein-/Ausgabe-Fehler von den Routinen +zeigen dem Nutzer der Unit, daß Ein-/Ausgabe-Fehler von den Routinen abgefangen werden oder Laufzeitfehler zu erwarten sind. Der erste -Fall ist dem anderen in den meisten Fällen vorzuziehen. -Für Programme ist dies optional. Routinen, die Ein-/Ausgabe-Fehler -hervorrufen können, sollten mit dem Attribut @samp{iocritical} +Fall ist dem anderen in den meisten Fällen vorzuziehen. +FĂźr Programme ist dies optional. Routinen, die Ein-/Ausgabe-Fehler +hervorrufen kĂśnnen, sollten mit dem Attribut @samp{iocritical} (@pxref{attribute, , , gpc}) deklariert werden: @smallexample @@ -1494,82 +1493,82 @@ Sondern so: @end smallexample Das erste Beispiel ist falsch, wenn vorher schon @samp{@{$I-@}} -geschrieben wurde. Selbst wenn ein Programmierer weiß, welches -die aktuellen globalen Einstellungen sind, so können sich diese -eines Tages ändern. Auch dadurch, daß Teile des Codes an +geschrieben wurde. Selbst wenn ein Programmierer weiß, welches +die aktuellen globalen Einstellungen sind, so kĂśnnen sich diese +eines Tages ändern. Auch dadurch, daß Teile des Codes an eine andere Stelle kopiert werden. Das untere der beiden Beispiele ist daher die sichere Form. Um zu verdeutlichen, was wir meinen, hier noch ein Beispiel: @smallexample -@{$local W-@} Foo; @{$endlocal@} @{ @@ GPC gibt hier eine überflüssige Warnung @} +@{$local W-@} Foo; @{$endlocal@} @{ @@ GPC gibt hier eine ĂźberflĂźssige Warnung @} @end smallexample Nochmal: Vermeiden Sie es, lokale Direktiven zu gebrauchen. -@samp{@{$I-@}} kann manchmal nütztlich sein. @samp{@{$X+@}} sollte +@samp{@{$I-@}} kann manchmal nĂźtztlich sein. @samp{@{$X+@}} sollte nur dann gebraucht werden, wenn es @emph{wirklich} notwendig ist, -und dann auch bitte so lokal wie nur irgend möglich. Vermeiden Sie +und dann auch bitte so lokal wie nur irgend mĂśglich. Vermeiden Sie Zeiger-Arithmetik! -@cindex Testen der Rückgabewerte +@cindex Testen der RĂźckgabewerte Benutzen Sie weder @samp{@{$X+@}} noch @samp{@{$ignore-function-results@}}, um Funktionswerte zu -überprüfen. Es ist schlicht zu einfach, ein beachtenswertes +ĂźberprĂźfen. Es ist schlicht zu einfach, ein beachtenswertes Funktionsergebnis zu ignorieren. Manchmal, besonders dann, wenn man eine C-Bibliothek linkt, hat man es mit Funktionsergebnissen zu tun, -die überflüssig erscheinen, weshalb man sie nicht überprüfen möchte. +die ĂźberflĂźssig erscheinen, weshalb man sie nicht ĂźberprĂźfen mĂśchte. Solche Funktionen lassen sich bald mit dem Attribut @samp{ignorable} -deklarieren, so daß das Funktionsergebnis stillschweigend ignoriert +deklarieren, so daß das Funktionsergebnis stillschweigend ignoriert wird. Benutzen Sie auch dann Dummy-Variablen, wenn Sie Funktionsergebnisse von Funktionen, deren Ergebnisse gemeinhin nicht ignoriert werden sollen, ignorieren wollen. -Überprüfen Sie sehr sorgfältig, ob ein solches Ergebnis wirklich +ÜberprĂźfen Sie sehr sorgfältig, ob ein solches Ergebnis wirklich sicher ignoriert werden kann! Wenn jedoch ein unerwarteter Wert -Sie in eine ``unmögliche'' Situation bringen würde, so ist es -normalerweise besser, das Funktionsergebnis zu überprüfen +Sie in eine ``unmĂśgliche'' Situation bringen wĂźrde, so ist es +normalerweise besser, das Funktionsergebnis zu ĂźberprĂźfen und im unerwarteten Fall eine Warnung auszudrucken oder gar abzubrechen. Tun Sie das wenigstens dann, wenn @samp{DEBUG} gesetzt ist. (@pxref{Compiler-Direktiven}). @cindex Linker-Direktiven -Linker-Direktiven, d.h. @samp{@{$L@}} fürBibliotheken und +Linker-Direktiven, d.h. @samp{@{$L@}} fĂźrBibliotheken und C-Code-Dateien (oder Dateien anderer Sprachen) sollten nahe am Anfang des Programmes und nahe am Implementationsanfang von Units -oder Modulen stehen. Mehrere Bibliotheken und C-Quelldateien können +oder Modulen stehen. Mehrere Bibliotheken und C-Quelldateien kĂśnnen in eine Direktive geschrieben werden, wenn sie logisch -zusammengehören (bspw. eine Bibliothek und ihre zugehörige -Wrapper-Funktion), nicht aber dann, wenn sie nicht zusammengehören. +zusammengehĂśren (bspw. eine Bibliothek und ihre zugehĂśrige +Wrapper-Funktion), nicht aber dann, wenn sie nicht zusammengehĂśren. Diese Direktiven sollten nicht mit anderen Direktiven gemischt -werden (was auch nicht geht, wenn @samp{L} zuerst angeführt wird; +werden (was auch nicht geht, wenn @samp{L} zuerst angefĂźhrt wird; anders herum geht es, ist aber nicht ratsam). Die externen Deklarationen der Bibliothek oder C-Routinen sollten sofort der -zugehörigen Direktive folgen (außer für Units oder Module bei -denjenigen Deklarationen, die in das Interface gehören). Das +zugehĂśrigen Direktive folgen (außer fĂźr Units oder Module bei +denjenigen Deklarationen, die in das Interface gehĂśren). Das Benutzen von @samp{@{$L@}} innerhalb eines Programmes ist normalerweise keine gute Idee. Da lohnt es sich schon, eine Unit zu schreiben, welche abstrahiert und wiederverwertet werden kann. @cindex Bedingte Kompilierung -Bedingtes Kompilieren kann manchmal nützlich sein, aber es sollten -sowenige @samp{@{$ifdef@}}s wie nur irgend möglich geschrieben +Bedingtes Kompilieren kann manchmal nĂźtzlich sein, aber es sollten +sowenige @samp{@{$ifdef@}}s wie nur irgend mĂśglich geschrieben werden, denn sie vermindern die Lesbarkeit des Codes sehr stark. Wo Conditionale eingesetzt werden, um verschiedene Systeme zu -unterscheiden, sollten die Fähigkeiten des Systems (bspw. +unterscheiden, sollten die Fähigkeiten des Systems (bspw. @samp{__BYTES_LITTLE_ENDIAN__}) oder Gruppen von Systemen -(bspw. @samp{__OS_DOS__}) überprüft werden, nicht einzelne Systeme. -Dieses Vorgehen funktioniert dann oftmals auch später noch auf -Systemen, von denen man noch nichts weiß oder die noch nicht +(bspw. @samp{__OS_DOS__}) ĂźberprĂźft werden, nicht einzelne Systeme. +Dieses Vorgehen funktioniert dann oftmals auch später noch auf +Systemen, von denen man noch nichts weiß oder die noch nicht existieren. -Wann immer dies möglich ist, sollte vordefinierten Konstanten der -Vorzug gegenüber @samp{define}s gegeben werden (bspw. +Wann immer dies mĂśglich ist, sollte vordefinierten Konstanten der +Vorzug gegenĂźber @samp{define}s gegeben werden (bspw. @samp{BytesBigEndian}, @samp{OSDosFlag}). Dies ist im Anweisungsteil -möglich (der ``immer false'' - Zweig wird schlicht wegoptimiert, -trotzdem wird seine Syntax überprüft). Bei Typen-Deklarationen ist -es normalerweise nicht möglich. Hier muß man @samp{define}s +mĂśglich (der ``immer false'' - Zweig wird schlicht wegoptimiert, +trotzdem wird seine Syntax ĂźberprĂźft). Bei Typen-Deklarationen ist +es normalerweise nicht mĂśglich. Hier muß man @samp{define}s einsetzen. Folgendes ist ein Beispiel aus der CRT-Unit: @smallexample @@ -1589,39 +1588,39 @@ end; @end smallexample @cindex Debug-Flag -Das @samp{DEBUG}-Flag sollte eine Unterstützung beim Debuggen des -Codes sein, also Code, der die Funktionalität beim Debuggen nicht -verändert. Nur dafür sollte er eingesetzt werden. Programme müssen -mit und ohne @samp{DEBUG} lauffähig sein. Es kann sein, daß der -Code mit @samp{DEBUG} langsamer läuft und eine Vielzahl von +Das @samp{DEBUG}-Flag sollte eine UnterstĂźtzung beim Debuggen des +Codes sein, also Code, der die Funktionalität beim Debuggen nicht +verändert. Nur dafĂźr sollte er eingesetzt werden. Programme mĂźssen +mit und ohne @samp{DEBUG} lauffähig sein. Es kann sein, daß der +Code mit @samp{DEBUG} langsamer läuft und eine Vielzahl von Mitteilungen produziert. Diese Mitteilungen sollten klar als -Debug-Mitteilungen erkennbar sein, bspw. dadurch, daß der Ausgabe +Debug-Mitteilungen erkennbar sein, bspw. dadurch, daß der Ausgabe ein @samp{DEBUG: } vorangestellt wird. Solcher Code @emph{darf} auch -einfach abbrechen, wenn fehlerhafte oder merkwürdige Zustände +einfach abbrechen, wenn fehlerhafte oder merkwĂźrdige Zustände eintreten. @cindex Conditionale und Versionsverwaltung -Conditionale können ebenfalls herangezogen werden, um verschiedene +Conditionale kĂśnnen ebenfalls herangezogen werden, um verschiedene Versionen ein und desselben Codes anzufertigen. So ist es z.B. -innerhalb eines Mathematik-Programmes möglich, eine eigene +innerhalb eines Mathematik-Programmes mĂśglich, eine eigene Version mit GMP-Zahlen (GMP ist eine Bibliothek zur -Bearbeitung beliebig großer Zahlen) zu erzeugen und eine +Bearbeitung beliebig großer Zahlen) zu erzeugen und eine ohne, je nachdem, welches Conditional gesetzt ist. In diesem Fall sollten die Namen und Bedeutungen aller Conditionale in einem -weit oben im Quelltext stehenden Kommentar erklärt werden. Sehen Sie +weit oben im Quelltext stehenden Kommentar erklärt werden. Sehen Sie sich bitte @samp{__BP_TYPE_SIZES__}, @samp{__BP_RANDOM__} und @samp{__BP_PARAMSTR_0__} als Beispiele aus der Unit @samp{System} an. Der Code sollte mit jeder Kombination dieser Conditionale kompilierbar sein, was bedeutet, eine exponentielle Menge an Kombinationen zu testen. Noch ein guter Grund, Conditionale so -selten wie möglich zu benutzen oder gar zu vermeiden. +selten wie mĂśglich zu benutzen oder gar zu vermeiden. @cindex Conditionale und Implementationsverwaltung Eine andere denkbare Benutzung von Conditionalen besteht darin, mit ihrer Hilfe verschiedene Implementationen desselben Codes anzufertigen. Sie sollten diese Strategie @emph{nur} dann anwenden, -wenn alle Implementationen unterstützt werden oder es geplant ist, -sie zu unterstützen. Andernfalls sollte die alte Implementation +wenn alle Implementationen unterstĂźtzt werden oder es geplant ist, +sie zu unterstĂźtzen. Andernfalls sollte die alte Implementation besser ins Museum wandern. Halten Sie den Code in einem solchen Fall besser ``sauber''. Die Hinweise bzgl. des Testens gelten auch hier. @@ -1649,7 +1648,7 @@ Oder noch schlimmer: @cindex Auskommentieren von Code Eine spezielle Conditionale kann genutzt werden, um Code kurzfristig -auszukommentieren. Hier ist die zugehörige Syntax: +auszukommentieren. Hier ist die zugehĂśrige Syntax: @smallexample @{$if False@} @dots{} @{$endif@} @@ -1657,7 +1656,7 @@ auszukommentieren. Hier ist die zugehöri @cindex Conditionale und GPC-Versionen Ein Standard-Conditional sollte in Programmen, Units oder Modulen -genutzt werden, wenn Sie sicherstellen wollen, daß die richtige +genutzt werden, wenn Sie sicherstellen wollen, daß die richtige Version des GNU Pascal Compilers verwendet wird. Folgen Sie diesem Beispiel: @@ -1671,7 +1670,7 @@ Beispiel: @section Wie man Leerzeichen in Code benutzt. Im allgemeinen sollten nie mehrere Leerzeichen aufeinander -folgen, außer für Einrückungen und in speziellen Fällen, die im +folgen, außer fĂźr EinrĂźckungen und in speziellen Fällen, die im folgenden Beschrieben werden. Ein einzelner Blank soll vor und nach Operatoren, Zuweisungen @@ -1690,7 +1689,7 @@ begin end; @end smallexample -Kein Leerzeichen sollte hingegen nach dem unären Minuszeichen +Kein Leerzeichen sollte hingegen nach dem unären Minuszeichen @samp{-} stehen. Dieses sind die korrekten Formen: @samp{x - 1}, @samp{-x} und @samp{-1}. @@ -1698,14 +1697,14 @@ Ein Leerzeichen sollte vor und eines nac (@samp{(}) und (@samp{)}) stehen, solange diese nicht neben anderen Klammern, eckigen Klammern, dem Pointer-Symbol (@samp{^}), einem Semikolon oder einem Komma auftreten. Mit anderen Worten: Ein -Leerzeichen sollte zwischen Bezeichnern/Schlüsselwörtern und -der öffnenden Klammern stehen. Beispiel: +Leerzeichen sollte zwischen Bezeichnern/SchlĂźsselwĂśrtern und +der Ăśffnenden Klammern stehen. Beispiel: @smallexample Foo (Bar^(Baz[Qux * (i + 2)]), Fred (i) + 3); @end smallexample -Für Arrayindizierung wird kein Leerzeichen verwendet (schreiben Sie +FĂźr Arrayindizierung wird kein Leerzeichen verwendet (schreiben Sie @samp{Foo[42]} anstelle von @samp{Foo [42]}), jedoch schon bei Arraydeklarationen: @@ -1713,7 +1712,7 @@ Arraydeklarationen: Foo: array [1 .. 42] of Integer; @end smallexample -Bei Mengen-Konstruktoren sollte ggf. ein Blank vor der öffnenden +Bei Mengen-Konstruktoren sollte ggf. ein Blank vor der Ăśffnenden Klammer stehen -- diese eckigen Klammern sollten wie normale Klammern behandelt werden: @@ -1733,27 +1732,27 @@ Kein Leerzeichen bei @samp{.} und @samp{ Rec.List^.Next^.Field := Foo @end smallexample -Wie wir schon ausführten, soll je ein Blank nach den öffnenden und -vor den schließenden geschweiften Klammern in Kommentaren stehen. -Dies gilt jedoch nicht für Compiler-Direktiven. Außerdem sollten vor +Wie wir schon ausfĂźhrten, soll je ein Blank nach den Ăśffnenden und +vor den schließenden geschweiften Klammern in Kommentaren stehen. +Dies gilt jedoch nicht fĂźr Compiler-Direktiven. Außerdem sollten vor Kommentaren, die einer Code-Zeile folgen, zwei Leerzeichen stehen: @smallexample Inc (x); @{ Increment x. @} @end smallexample -@cindex Abstand, Einrückung -@cindex Einrückung, Abstand -Wenn Sie mögen, so fügen Sie beliebig viele Leerzeichen ein, um +@cindex Abstand, EinrĂźckung +@cindex EinrĂźckung, Abstand +Wenn Sie mĂśgen, so fĂźgen Sie beliebig viele Leerzeichen ein, um ``tabellarisch'' aussehenden Quellcode zu erzeugen. Unserer -Meinung nach erhöht dies die Lesbarkeit des Codes ungemein, weil +Meinung nach erhĂśht dies die Lesbarkeit des Codes ungemein, weil der menschliche Geist auf solche Strukturen trainiert ist, -Unterschiede in Zeilen besser gesehen werden können, und man -bei Änderungen im Quellcode verwandte Stellen nicht so leicht -übersieht. Eine Anwendung dieser Prinzipien sollte in +Unterschiede in Zeilen besser gesehen werden kĂśnnen, und man +bei Änderungen im Quellcode verwandte Stellen nicht so leicht +Ăźbersieht. Eine Anwendung dieser Prinzipien sollte in Interface-Deklarationen zu finden sein (es ist nicht leicht anwendbar, wenn jede Routine durch Kommentare getrennt wird, daher -ist in einem solchen Fall möglicherweise ein gemeinsamer Kommentar +ist in einem solchen Fall mĂśglicherweise ein gemeinsamer Kommentar empfehlenswert): @smallexample @@ -1769,7 +1768,7 @@ function PosFromCase (const SubStrin function LastPosTillCase (const SubString, s: String; Till: Integer): Integer; @end smallexample -Ebenfalls möglich: +Ebenfalls mĂśglich: @smallexample procedure Foo; @@ -1777,7 +1776,7 @@ function Bar @dots{}; procedure Baz; @end smallexample -Und natürlich: +Und natĂźrlich: @smallexample const @@ -1786,7 +1785,7 @@ const Quux = 3; @end smallexample -Dieselbe ``Tabellenanordnung'' kann man für Initialisierungen +Dieselbe ``Tabellenanordnung'' kann man fĂźr Initialisierungen gebrauchen: @smallexample @@ -1823,13 +1822,13 @@ WriteCharAt (2, 1, w - 2, Frame[2], Text WriteCharAt (w, 1, 1, Frame[3], TextAttr); @end smallexample -@node Zeilenumbrüche +@node ZeilenumbrĂźche @section Wo man seine Zeilen umbrechen sollte -@cindex Zeilenumbrüche +@cindex ZeilenumbrĂźche -Zeilenumbrüche sind nach @emph{lokalen} @samp{const}-, @samp{type}- +ZeilenumbrĂźche sind nach @emph{lokalen} @samp{const}-, @samp{type}- und @samp{var}-Deklarationen freigestellt, wenn sie nur eine -einzige Deklaration beinhalten (Sie können auch mehrere Bezeichner +einzige Deklaration beinhalten (Sie kĂśnnen auch mehrere Bezeichner in einer Zeile deklarieren/definieren): @smallexample @@ -1862,9 +1861,9 @@ begin end; @end smallexample -Wenn Sie viele Deklarationen haben, so können Sie Zeilenumbrüche +Wenn Sie viele Deklarationen haben, so kĂśnnen Sie ZeilenumbrĂźche auf verschiedene Weisen vornehmen. Folgendes Beispiel ist die -bevorzugte Fassung für @samp{var}-Deklarationen: +bevorzugte Fassung fĂźr @samp{var}-Deklarationen: @smallexample var @@ -1881,7 +1880,7 @@ var @end smallexample Die folgende Form ist eher bei der Definition von @samp{record}- -oder öffentlichen @samp{object}-Feldern gebräuchlich, besonders, +oder Ăśffentlichen @samp{object}-Feldern gebräuchlich, besonders, wenn jeder Zeile ein Kommentar folgt: @smallexample @@ -1893,8 +1892,8 @@ var @end smallexample Kein Zeilenumbruch darf nach @samp{var}-Deklarationen -innerhalb von Blöcken erfolgen. Solche Zeilenumbrüche setzen das -falsche Signal, daß hier mehrere Deklarationsgruppen erlaubt wären: +innerhalb von BlĂścken erfolgen. Solche ZeilenumbrĂźche setzen das +falsche Signal, daß hier mehrere Deklarationsgruppen erlaubt wären: @smallexample Foo := Bar; @@ -1902,15 +1901,15 @@ var Baz: array [1 .. Foo] of Integer; @end smallexample Da dieses Statement eine GNU Pascal Erweiterung ist, sollte es -selten eingesetzt werden, bei Variablen, deren Größe erst innerhalb -der Routine berechnet wird oder für Variablen innerhalb von -Modul-/Unit-Initialisierungen beispielsweise, um dafür keine -globalen Variablen zu benötigen. Denken Sie bitte bei der Anwendung -dieses Features über Unterroutinen nach. - -@cindex Einrückung von Labeln -Fügen Sie bitte keinen Zeilenumbruch nach @samp{label} durch. Sie -sollten Label folgendermaßen deklarieren: +selten eingesetzt werden, bei Variablen, deren Größe erst innerhalb +der Routine berechnet wird oder fĂźr Variablen innerhalb von +Modul-/Unit-Initialisierungen beispielsweise, um dafĂźr keine +globalen Variablen zu benĂśtigen. Denken Sie bitte bei der Anwendung +dieses Features Ăźber Unterroutinen nach. + +@cindex EinrĂźckung von Labeln +FĂźgen Sie bitte keinen Zeilenumbruch nach @samp{label} durch. Sie +sollten Label folgendermaßen deklarieren: @smallexample label Foo, Bar, Baz; @@ -1968,7 +1967,7 @@ end; @cindex Umbruch langer Zeilen Lange Zeilen sollten immer vor oder immer nach Operatoren, sowie -nach Kommata umbrochen werden, wobei die Einrückung die +nach Kommata umbrochen werden, wobei die EinrĂźckung die Gruppierungen verdeutlichen sollte: @smallexample @@ -1989,14 +1988,14 @@ if (x = y) and fred) then @end smallexample -@cindex if then else Anweisungen und Zeilenumbrüche -Hier sehen Sie, wie Sie Zeilenumbrüche innerhalb von if-then-else -Anweisungen vornehmen können. Diese Art der Einrückung sollte auch +@cindex if then else Anweisungen und ZeilenumbrĂźche +Hier sehen Sie, wie Sie ZeilenumbrĂźche innerhalb von if-then-else +Anweisungen vornehmen kĂśnnen. Diese Art der EinrĂźckung sollte auch verwendet werden, wenn Sie die @samp{case}-Anweisung verwenden -würden, dies aber nicht möglich ist (weil die Typen nicht aufzählbar +wĂźrden, dies aber nicht mĂśglich ist (weil die Typen nicht aufzählbar sind, oder die Werte nicht konstant sind oder ein Vergleich die Benutzung einer Funktion wie @samp{StrEqualCase} notwendig machen -würde, oder zusätzliche Bedingungen auftauchen): +wĂźrde, oder zusätzliche Bedingungen auftauchen): @smallexample if @dots{} then @@ -2007,8 +2006,8 @@ else c @end smallexample -Wenn @samp{a} und ``nicht @samp{a}'' die Hauptfälle sind und -@samp{b} und @samp{c} Unterfälle von ``nicht @samp{a}'', so benutzen +Wenn @samp{a} und ``nicht @samp{a}'' die Hauptfälle sind und +@samp{b} und @samp{c} Unterfälle von ``nicht @samp{a}'', so benutzen Sie bitte die folgende Form (die Unterscheidung ist manchmal Geschmackssache): @@ -2022,8 +2021,8 @@ else c @end smallexample -Das folgende (biologisch gesehen ziemlich unvollständige) Beispiel -enthält eine Mischung beider Formen, die wir für vernünftig halten: +Das folgende (biologisch gesehen ziemlich unvollständige) Beispiel +enthält eine Mischung beider Formen, die wir fĂźr vernĂźnftig halten: @smallexample if Wohnort = 'Wasser' then @@ -2040,8 +2039,8 @@ else WriteLn ('Ist es ein Gnu?') @end smallexample -Die Hauptfälle werden hier durch den Wohnort bestimmt, die Anzahl -der Beine bestimmen einige untergeordnete Fälle. +Die Hauptfälle werden hier durch den Wohnort bestimmt, die Anzahl +der Beine bestimmen einige untergeordnete Fälle. @cindex Schleifen Hier eine kurze Zusammenfassung der normalen Schleifen: @@ -2064,7 +2063,7 @@ until @dots{} Wenn nur eine einzelne Anweisung nach @samp{if} oder in einer @samp{do}- oder @samp{for}-Schleife bzw. zwischen @samp{repeat} und -@samp{until} existiert und diese Anweisung kurz genug für eine Zeile +@samp{until} existiert und diese Anweisung kurz genug fĂźr eine Zeile ist, so darf diese Anweisung in eine Zeile wie folgt geschrieben werden: @@ -2085,7 +2084,7 @@ repeat @dots{} until @dots{} @end smallexample Wenn mehrere Anweisungen mit @samp{begin} und @samp{end} in einen -Block gefaßt werden, sieht es folgendermaßen aus: +Block gefaßt werden, sieht es folgendermaßen aus: @smallexample if @dots{} then @@ -2108,16 +2107,16 @@ while @dots{} do end @end smallexample -@cindex Einrückung -Es wird nach folgenden Ausdrücken 2 Leerzeichen eingerückt: +@cindex EinrĂźckung +Es wird nach folgenden AusdrĂźcken 2 Leerzeichen eingerĂźckt: @samp{begin}, @samp{then}, @samp{else}, @samp{case}, @samp{do} (@samp{for}, @samp{while}, @samp{with}, @samp{to begin}, @samp{to end}), @samp{repeat}, @samp{record}, @samp{object}, @samp{type}, @samp{const}, @samp{var}, @samp{label}. Globale Routinen und ihre lokalen Variablen etc. werden nicht -eingerückt, ebenso wie globale Variablen etc. Jede Subroutine (Kopf -und Körper sowie ihre lokalen Variablen etc.) soll eingerückt +eingerĂźckt, ebenso wie globale Variablen etc. Jede Subroutine (Kopf +und KĂśrper sowie ihre lokalen Variablen etc.) soll eingerĂźckt werden. @smallexample @@ -2144,7 +2143,7 @@ begin end. @end smallexample -Variante Records sollten so eingerückt werden: +Variante Records sollten so eingerĂźckt werden: @smallexample type @@ -2162,12 +2161,12 @@ var end = [ Initialisierung ] @end smallexample -Größere Einrückung (mehr als zwei Leerzeichen) kann bei -Zeilenumbrüchen im Code erfolgen, um einen ``tabularen'' Code +Größere EinrĂźckung (mehr als zwei Leerzeichen) kann bei +ZeilenumbrĂźchen im Code erfolgen, um einen ``tabularen'' Code zu erzeugen. -Conditionale (@samp{@{$ifdef@}}) sollten dieselbe Einrückung wie -der zugehörige Code haben: +Conditionale (@samp{@{$ifdef@}}) sollten dieselbe EinrĂźckung wie +der zugehĂśrige Code haben: @smallexample begin @@ -2178,11 +2177,11 @@ begin end; @end smallexample -Kurze Conditionale, die sich nur auf einen Ausdruck beziehen, dürfen +Kurze Conditionale, die sich nur auf einen Ausdruck beziehen, dĂźrfen auch in eine Zeile geschrieben werden: @smallexample -Foo := @{$ifdef DEBUG@} 'Debugging' @{$else@} 'Veröffentlichung' @{$endif@}; +Foo := @{$ifdef DEBUG@} 'Debugging' @{$else@} 'VerĂśffentlichung' @{$endif@}; @end smallexample Wenn Conditionale beabsichtigterweise entgegen den normalen @@ -2191,7 +2190,7 @@ passende Stellen und schreiben Kommentar @smallexample begin - @{ Führe den Code bedingungslos aus, wenn wir debuggen @} + @{ FĂźhre den Code bedingungslos aus, wenn wir debuggen @} @{$ifndef DEBUG@} if EinigeBedingungen then @{$endif@} @@ -2201,7 +2200,7 @@ begin end; @end smallexample -Oftmals finden Sie schönere und nicht weniger effiziente Wege, +Oftmals finden Sie schĂśnere und nicht weniger effiziente Wege, dasselbe zu schreiben. In diesem Fall kann es auch so erfolgen: @smallexample @@ -2237,18 +2236,18 @@ Die meisten der bisherigen Regeln gelten Strings. Allgemein sollten Textausgaben innerhalb von Zeichenketten den GNU Coding Standards folgen. Beispielsweise sollten zitierte Namen von @samp{`} und @samp{'} begrenzt werden. In Pascal bedeutet -das, daß Sie doppelte @samp{'} benutzen müssen. Mehr Informationen: +das, daß Sie doppelte @samp{'} benutzen mĂźssen. Mehr Informationen: @xref{Errors, , , standards}. -Normalerweise sollten Strings in einfachen Anführungszeichen -so wie @samp{'dieser schöne Satz, den Sie lesen'} eingeschlossen -sein. Mit doppelten Anführungszeichen sollen nur Zeichenketten -umfaßt werden, die C-Escape-Sequenzen beinhalten, wie -@samp{"\t"}. Beachten Sie bitte, daß @samp{NewLine} (@samp{"\n"}) +Normalerweise sollten Strings in einfachen AnfĂźhrungszeichen +so wie @samp{'dieser schĂśne Satz, den Sie lesen'} eingeschlossen +sein. Mit doppelten AnfĂźhrungszeichen sollen nur Zeichenketten +umfaßt werden, die C-Escape-Sequenzen beinhalten, wie +@samp{"\t"}. Beachten Sie bitte, daß @samp{NewLine} (@samp{"\n"}) vordefiniert ist. Geben Sie daher @samp{NewLine} den Vorzug, wenn -Sie nicht gerade C-Strings für andere Zwecke benötigen. +Sie nicht gerade C-Strings fĂźr andere Zwecke benĂśtigen. -Mehrzeilige Strings können folgendermaßen genutzt werden: +Mehrzeilige Strings kĂśnnen folgendermaßen genutzt werden: @smallexample WriteLn ('Hallo @@ -2256,7 +2255,7 @@ Welt!') @end smallexample Oder (diese Form ist vor allem dann vorzuziehen, wenn der String -selbst Einrückungen und/oder Absätze enthält): +selbst EinrĂźckungen und/oder Absätze enthält): @smallexample WriteLn ( @@ -2264,23 +2263,23 @@ WriteLn ( Welt!') @end smallexample -Folgendes ist auch möglich: +Folgendes ist auch mĂśglich: @smallexample WriteLn ('Hallo' + NewLine + 'Welt!') @end smallexample -(Beachten Sie, daß obiger Code nicht ohne die Unit @code{GPC} +(Beachten Sie, daß obiger Code nicht ohne die Unit @code{GPC} kompiliert werden kann.) -Oder natürlich: +Oder natĂźrlich: @smallexample WriteLn ('Hallo'); WriteLn ('Welt!') @end smallexample -Wenn Sie testen möchten, ob ein String leer ist, benutzen Sie +Wenn Sie testen mĂśchten, ob ein String leer ist, benutzen Sie folgende Syntax: @smallexample @@ -2289,7 +2288,7 @@ if s = '' then @end smallexample Der GNU Pascal Compiler optimiert dies automatisch zu folgendem -schnelleren Test. Daher können Sie den vorhergehende, kürzere +schnelleren Test. Daher kĂśnnen Sie den vorhergehende, kĂźrzere Schreibweise ohne Bedenken verwenden: @smallexample @@ -2297,7 +2296,7 @@ if Length (s) = 0 then @dots{} @end smallexample -Dasselbe gilt natürlich auch für @samp{<>} und sogar für +Dasselbe gilt natĂźrlich auch fĂźr @samp{<>} und sogar fĂźr Zuweisungen, bei denen @samp{s := ''} die empfohlene Form ist, welche von GPC intern zu @samp{SetLength (s, 0)} optimiert wird. @@ -2313,8 +2312,8 @@ GPC-Dokumentation (@pxref{I18N, , , gpc} @findex MemoryMap Dieser Abschnitt der GNU Coding Standards kann so, wie er ist, -auf GNU Pascal übertragen werden. -Beachten Sie, daß @samp{mmap} hier @samp{MemoryMap} bedeutet. +auf GNU Pascal Ăźbertragen werden. +Beachten Sie, daß @samp{mmap} hier @samp{MemoryMap} bedeutet. @xref{Mmap, , , standards}. @node Dokumentation @@ -2323,40 +2322,40 @@ Beachten Sie, daß @samp{mmap} hier @samp Wir empfehlen Ihnen, das entsprechende Kapitel der GNU Coding Standards zu lesen @xref{Documentation, , , standards}, die -dortigen Informationen gelten auch für GNU Pascal. Einige +dortigen Informationen gelten auch fĂźr GNU Pascal. Einige Anmerkungen haben wir aber trotzdem. -Es wäre schön, eine Man-Page für jedes Programm zu haben. Diese +Es wäre schĂśn, eine Man-Page fĂźr jedes Programm zu haben. Diese Man-Page sollte auf eine Info-Dokumentation verweisen. Es existiert ein GNU Programm namens @samp{help2man}, welches Man-Pages aus der Ausgabe der @samp{--help}- und @samp{--version}-Optionen Ihres -Programmes generiert. Es funktioniert gut, bis auf die Tatsache, daß -es @samp{FSF} an den Anfang der Man-Page schreibt, was nicht für +Programmes generiert. Es funktioniert gut, bis auf die Tatsache, daß +es @samp{FSF} an den Anfang der Man-Page schreibt, was nicht fĂźr jedes mit dem GNU Pascal Compiler erzeugte Programm richtig ist. Dies kann jedoch leicht mit der Hand oder automatisch mit einem -Programm wie @samp{sed} geändert werden. +Programm wie @samp{sed} geändert werden. -Geben Sie sich mit den Man-Pages nicht zuviel Mühe. Sie +Geben Sie sich mit den Man-Pages nicht zuviel MĂźhe. Sie gleichzeitig mit der Texinfo-Dokumentation auf dem neusten Stand -zu halten, bedeutet eine Menge Arbeit und ist möglicherweise sehr -fehlerträchtig. Wenn Sie die Man-Page nicht auf dem neuesten Stand +zu halten, bedeutet eine Menge Arbeit und ist mĂśglicherweise sehr +fehlerträchtig. Wenn Sie die Man-Page nicht auf dem neuesten Stand halten, so schafft sie mehr Verwirrung als Nutzen. Auf der einen Seite fehlen wichtige Informationen, wenn Man-Pages -zu knapp ausfallen, auf der anderen Seite werden längere Man-Pages -sehr unübersichtlich. +zu knapp ausfallen, auf der anderen Seite werden längere Man-Pages +sehr unĂźbersichtlich. Mit anderen Worten: Schreiben Sie Info- (bzw. Texinfo-)Dokumentation! -@node Veröffentlichungen -@chapter Der Verlauf der Veröffentlichung -@cindex Veröffentlichung des Programmes +@node VerĂśffentlichungen +@chapter Der Verlauf der VerĂśffentlichung +@cindex VerĂśffentlichung des Programmes Bitte lesen Sie das entsprechende Kapitel der GNU Coding -Standards. Beachten Sie, daß der ganze Aufwand mit den auto-Tools +Standards. Beachten Sie, daß der ganze Aufwand mit den auto-Tools (@samp{autoconf}, @samp{automake}, @dots{}) im Rahmen von GNU -Pascal normalerweise nicht gebraucht werden. Außerdem sind Makefiles +Pascal normalerweise nicht gebraucht werden. Außerdem sind Makefiles in GNU Pascal Programmen nicht immer notwendig. @xref{Managing Releases, , , standards}. @@ -2368,14 +2367,14 @@ in GNU Pascal Programmen nicht immer not @section Wie man Makefiles schreibt @cindex Makefile-Regeln -Für Ihre Pascal-Projekte benötigen Sie keine großen @samp{Makefile}s +FĂźr Ihre Pascal-Projekte benĂśtigen Sie keine großen @samp{Makefile}s und Sie brauchen sich ebenfalls nicht in @samp{autoconf} und @samp{automake} einzuarbeiten. Sie brauchen nur die Kommandozeilenoption @samp{--automake}. Alles Weitere erledigt GNU -Pascal für Sie! (Zum Zeitpunkt des Schreibens hat GNU Pascal +Pascal fĂźr Sie! (Zum Zeitpunkt des Schreibens hat GNU Pascal einige kleinere Bugs im Zusammenhang mit der @samp{automake}-Option. Diese Fehler werden aber nachgebessert. -Außerdem wird gerade an einem Utility namens @samp{gp} gearbeitet, +Außerdem wird gerade an einem Utility namens @samp{gp} gearbeitet, welches Ihnen noch mehr Arbeit beim Kompilieren abnimmt.) Ein @emph{einfaches} Makefile wie das folgende mag angebracht sein: @@ -2403,9 +2402,9 @@ maintainer-clean: extraclean @end smallexample Sie wollen vielleicht dem @samp{Makefile} noch weitere Regeln -hinzufügen, sei es zur Erstellung der Dokumentation, Datendateien, -Paketen zur Veröffentlichung oder zu was auch immer. Diese Dinge -liegen außerhalb des Rahmens dieses Textes. Die Kompilierung eines +hinzufĂźgen, sei es zur Erstellung der Dokumentation, Datendateien, +Paketen zur VerĂśffentlichung oder zu was auch immer. Diese Dinge +liegen außerhalb des Rahmens dieses Textes. Die Kompilierung eines GNU Pascal Programmes erfolgt normalerweise mit @samp{gpc --automake}. @@ -2419,8 +2418,8 @@ Routinen sind Prozeduren (@samp{procedur Operatoren. Deklarationen sind diejenigen Bereiche des Programmes, die die -Eigenschaften irgendwelcher Objekte ``erklären'', wie Konstanten, -Typen, Variablen, Units, Module, und selbstverständlich das +Eigenschaften irgendwelcher Objekte ``erklären'', wie Konstanten, +Typen, Variablen, Units, Module, und selbstverständlich das Programm. Anweisungen bzw. Statements sind solche Teile des Programmes, die @@ -2431,26 +2430,26 @@ ein Sprungbefehl (@samp{goto}, @samp{Exi eine zusammengesetzte Anweisung (@samp{begin} @dots{} @samp{end}, @samp{if}, @samp{case}, @samp{repeat}, @samp{while}, @samp{for}, @samp{with}), die ihrerseits wieder verschiedene Anweisungen -enthalten dürfen. +enthalten dĂźrfen. Bezeichner (identifiers) sind Sprachelemente, die Objekten (Routinen, Konstanten, Variablen, Typen, Units oder Modulen) ihre -Namen geben. Sie können lokal umdefiniert werden, anders als -Schlüsselwörter (keywords), die Teil einer festen Syntax sind +Namen geben. Sie kĂśnnen lokal umdefiniert werden, anders als +SchlĂźsselwĂśrter (keywords), die Teil einer festen Syntax sind (beispielsweise @samp{if} @dots{} @samp{then} @dots{} @samp{else}) -und nicht umdefiniert werden können. Makros sind keine +und nicht umdefiniert werden kĂśnnen. Makros sind keine Sprachelemente, da sie niemals vom Compiler verarbeitet werden, -sondern von einem Präprozessor. +sondern von einem Präprozessor. Endianess ist ein Begriff, der sich auf die Reihenfolge der -Anordnung der höher- und niederwertigen Bytes bezieht. Diese +Anordnung der hĂśher- und niederwertigen Bytes bezieht. Diese Reihenfolge ist auf manchen Systeme anders als auf anderen. Schauen -Sie sich bitte die Erklärung dazu im GPC-Info Dokument an +Sie sich bitte die Erklärung dazu im GPC-Info Dokument an (@pxref{Endianness, , , gpc}). -@emph{Hinweis:} Andere Begriffe können hier eingefügt werden, +@emph{Hinweis:} Andere Begriffe kĂśnnen hier eingefĂźgt werden, sobald es sinnvoll erscheint. Wenn Sie die Definition eines -Ausdruckes wissen möchten, so teilen Sie es uns bitte mit. +Ausdruckes wissen mĂśchten, so teilen Sie es uns bitte mit. @node Index @unnumbered Index Index: gcc/p/doc/de/homepage.def =================================================================== RCS file: /cvs/gcc/gcc/p/doc/de/homepage.def,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/de/homepage.def 27 Dec 2009 16:00:55 -0000 1.1.111.1 +++ gcc/p/doc/de/homepage.def 21 May 2012 21:30:49 -0000 1.2 @@ -7,25 +7,25 @@ # Full title structure=\ 'index index.html.in Home GNU Pascal -about @Highlights About Über GNU Pascal +about @Highlights About Über GNU Pascal news @News News Neue Features in GNU Pascal -faq @FAQ FAQ Häufig gestellte Fragen +faq @FAQ FAQ Häufig gestellte Fragen install @Installation Install GNU Pascal installieren -libraries @Libraries Libraries Bilbiotheken für GPC -support @Support Support Wie Sie Unterstützung für Pascal bekommen +libraries @Libraries Libraries Bilbiotheken fĂźr GPC +support @Support Support Wie Sie UnterstĂźtzung fĂźr Pascal bekommen team @Acknowledgments Team Das GNU Pascal Entwickler-Team gnu @GNU GNU Das GNU-Projekt todo @To\ Do To\ Do Was an GNU Pascal noch zu tun ist -resources @Resources Resources Sonstige Ressourcen für GPC.' +resources @Resources Resources Sonstige Ressourcen fĂźr GPC.' -charset='iso-8859-1' +charset='utf-8' manualref='Diese Seite entstammt direkt dem GPC-Handbuch. -Wenn Sie das Handbuch lesen möchten, können Sie bei der +Wenn Sie das Handbuch lesen mĂśchten, kĂśnnen Sie bei der Hauptseite oder dem -Gegenstück dieser Seite im Handbuch beginnen.' +GegenstĂźck dieser Seite im Handbuch beginnen.' -returntomainpage='Zurück zur Hauptseite' +returntomainpage='ZurĂźck zur Hauptseite' todownloadarea='Download' mailinglistarchives='Mailinglisten-Archiv' @@ -46,12 +46,12 @@ of this information.

by this site.


Copyright © 1996-2005 GNU Pascal development team

-

Kopieren und Verbreitung in unveränderter Form in beliebigen Medien +

Kopieren und Verbreitung in unveränderter Form in beliebigen Medien ist erlaubt, vorausgesetzt, dieser Hinweis und der Haftungsausschluss unten bleiben erhalten.

-

Diese Informationen werden in der Hoffnung, dass sie nützlich sind, -verbreitet, aber ohne jede Gewährleistung. Wir schließen jede Haftung für die -Zuverlässigkeit dieser Informationen aus.

-

Wir sind nicht verantwortlich für den Inhalt angelinkter Webseiten. +

Diese Informationen werden in der Hoffnung, dass sie nützlich sind, +verbreitet, aber ohne jede Gewährleistung. Wir schließen jede Haftung für die +Zuverlässigkeit dieser Informationen aus.

+

Wir sind nicht verantwortlich fĂźr den Inhalt angelinkter Webseiten.

' Index: gcc/p/doc/en/authors.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/en/authors.texi,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/en/authors.texi 27 Dec 2009 16:00:55 -0000 1.1.111.1 +++ gcc/p/doc/en/authors.texi 21 May 2012 21:30:50 -0000 1.2 @@ -328,7 +328,7 @@ translated them to German. @item Prof.@: Phil Nelson created a bug reporting system for GPC in October 1996. -@item Robert Höhne +@item Robert HĂśhne wrote @uref{http://www.rhide.com,RHIDE}, an integrated development environment for GNU compilers running under Dos (DJGPP) and Linux, and added support for GNU Pascal in autumn 1996. Index: gcc/p/doc/en/gnu.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/en/gnu.texi,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/en/gnu.texi 27 Dec 2009 16:00:55 -0000 1.1.111.1 +++ gcc/p/doc/en/gnu.texi 7 Aug 2017 20:11:28 -0000 1.2 @@ -170,7 +170,7 @@ everything useful that normally comes wi GNU will be able to run Unix programs, but will not be identical to Unix. We will make all improvements that are convenient, based on our experience with other operating systems. In particular, we plan to have longer -file names, file version numbers, a crashproof file system, file name +file names, file version numbers, a crashproof filesystem, file name completion perhaps, terminal-independent display support, and perhaps eventually a Lisp-based window system through which several Lisp programs and ordinary Unix programs can share a screen. Both C and Lisp will be Index: gcc/p/doc/en/gpc.1 =================================================================== RCS file: /cvs/gcc/gcc/p/doc/en/gpc.1,v retrieving revision 1.1.111.1 retrieving revision 1.4 diff -u -p -r1.1.111.1 -r1.4 --- gcc/p/doc/en/gpc.1 27 Dec 2009 16:00:55 -0000 1.1.111.1 +++ gcc/p/doc/en/gpc.1 8 Apr 2017 15:22:56 -0000 1.4 @@ -1,3 +1,5 @@ +.\" $MirOS: gcc/gcc/p/doc/en/gpc.1,v 1.4 2017/04/08 15:22:56 tg Exp $ +.\" .\" Copyright (c) 1997-2006 Free Software Foundation -*-Text-*- .\" See section COPYING for conditions for redistribution .\" @@ -24,7 +26,7 @@ .SH NAME gpc \- GNU project Pascal Compiler .SH SYNOPSIS -.RB "" gpc " [ "\c +.BR gpc " [ "\c .IR option\c .RB " | " .IR filename\c @@ -79,7 +81,7 @@ is usually .B /usr/local/lib/\c .IR machine / version . .SH "SEE ALSO" -gcc(1), cpp(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1). +gpc\-run(1), mgcc(1), cpp(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1). .br .RB "`\|" gpc "\|', `\|" gcc "\|', `\|" cpp "\|', .RB "`\|" as "\|', `\|" ld "\|', @@ -87,7 +89,8 @@ and .RB "`\|" gdb "\|' entries in .B info\c -\&. +\&: +gpc(GNU), gpc\-hr(GNU), gpcs(GNU), gpcs\-de(GNU), gpcs\-hr(GNU), gcc(GNU), cpp(GNU). .br .I The GNU Pascal Manual\c Index: gcc/p/doc/en/gpc.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/en/gpc.texi,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/en/gpc.texi 27 Dec 2009 16:00:55 -0000 1.1.111.1 +++ gcc/p/doc/en/gpc.texi 21 May 2012 21:30:50 -0000 1.2 @@ -1,7 +1,6 @@ \input texinfo @setfilename gpc.info @settitle The GNU Pascal Manual -@documentencoding iso-8859-1 @c Copyright (C) 1996-2006 Free Software Foundation, Inc. @c This file is part of the GPC Manual. Index: gcc/p/doc/en/gpcs.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/en/gpcs.texi,v retrieving revision 1.1.111.1 retrieving revision 1.4 diff -u -p -r1.1.111.1 -r1.4 --- gcc/p/doc/en/gpcs.texi 27 Dec 2009 16:00:55 -0000 1.1.111.1 +++ gcc/p/doc/en/gpcs.texi 7 Aug 2017 20:11:28 -0000 1.4 @@ -1,7 +1,6 @@ \input texinfo @setfilename gpcs.info @settitle GNU Pascal Coding Standards -@documentencoding iso-8859-1 @c Copyright (C) 2001-2006 Free Software Foundation, Inc. @c @@ -348,7 +347,7 @@ adjacent underscores @item units only written for Borland Pascal compatibility. (@pxref{GPC Units, -, , GPC}) Note, @samp{CRT} and @samp{Printer} are not only for +, , gpc}) Note, @samp{CRT} and @samp{Printer} are not only for Borland Pascal compatibility, but also for general use. @end itemize @@ -705,7 +704,7 @@ characters. They are recommended in the separate logical parts of a file, but don't use them at least in Pascal code. No @samp{SUB} character (@samp{#26}) either, misused as an end-of-file indicator by DOS. Older DOS editors put that character at -the end of each file for no good reason, though even the FAT file system +the end of each file for no good reason, though even the FAT filesystem knows about the end of a file by its own. @cindex line length Index: gcc/p/doc/en/homepage.def =================================================================== RCS file: /cvs/gcc/gcc/p/doc/en/homepage.def,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/en/homepage.def 27 Dec 2009 16:00:55 -0000 1.1.111.1 +++ gcc/p/doc/en/homepage.def 21 May 2012 21:30:51 -0000 1.2 @@ -18,7 +18,7 @@ gnu @GNU GNU todo @To\ Do To\ Do Things still to do for GNU Pascal resources @Resources Resources Other resources for use with GPC.' -charset='iso-8859-1' +charset='utf-8' manualref='This page is a direct extract from the GPC Manual. If you want to browse the manual, you can start at the Index: gcc/p/doc/en/programming.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/en/programming.texi,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/en/programming.texi 27 Dec 2009 16:00:56 -0000 1.1.111.1 +++ gcc/p/doc/en/programming.texi 21 May 2012 21:30:51 -0000 1.2 @@ -4760,7 +4760,7 @@ msgstr "" "Last-Translator: Eike Lange \n" "Language-Team: de \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #hello2.pas:10 Index: gcc/p/doc/en/resources.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/en/resources.texi,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/en/resources.texi 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/en/resources.texi 21 May 2012 21:30:52 -0000 1.2 @@ -117,7 +117,7 @@ written by Frank Heckenbach. The home pa @cindex Text editor RHIDE is an integrated development environment (IDE) for GNU -Compilers on DOS (DJGPP) or Linux, written by Robert Höhne. The +Compilers on DOS (DJGPP) or Linux, written by Robert HĂśhne. The home page of RHIDE is @smallexample @uref{http://www.rhide.com}. Index: gcc/p/doc/en/todo.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/en/todo.texi,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/en/todo.texi 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/en/todo.texi 21 May 2012 21:30:52 -0000 1.2 @@ -346,7 +346,7 @@ range-checking (fjf1021[dh-k].pas) @item 20030925: initializers for types containing nested schemata don't work (fjf914*.pas) @item 20030830: open internal files with @samp{O_EXCL} on @samp{Rewrite} (as a protection against symlink attacks) @item 20030819: GPC accepts, but ignores, options with invalid suffixes (e.g. @samp{--delphi-pascal}) -@item 20030729: @samp{pow} and @samp{**} are EP conformant now (in particular @samp{x pow y = (1 div x) pow (­y)} if @samp{y} is negative and @samp{x <> 0}) (fjf908.pas) +@item 20030729: @samp{pow} and @samp{**} are EP conformant now (in particular @samp{x pow y = (1 div x) pow (­y)} if @samp{y} is negative and @samp{x <> 0}) (fjf908.pas) @item 20030714: @samp{--enable-keyword}/@samp{--disable-keyword} on the command-line makes GPC crash (david5.pas) @item 20030704: wrong type-error when applying @samp{Inc} to a type-casted pointer (peter3.pas) @item 20030702: with range checking enabled, check dynamic subrange/array size (fjf222*.pas, fjf813*.pas, fjf900*.pas) Index: gcc/p/doc/generated/fileutils.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/generated/fileutils.texi,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/generated/fileutils.texi 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/generated/fileutils.texi 7 Aug 2017 20:11:30 -0000 1.2 @@ -89,7 +89,7 @@ procedure RmDirs (const Path: String); a will be set to the same permissions Source has. In any case, Dest will be set to the modification time of Source after copying. On any error, the destination file is erased. This is to avoid - leaving partial files in case of full file systems (one of the + leaving partial files in case of full filesystems (one of the most common reasons for errors). @} procedure FileCopy (const Source, Dest: String; Mode: Integer); attribute (iocritical); Index: gcc/p/doc/generated/gpcpas.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/generated/gpcpas.texi,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/generated/gpcpas.texi 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/generated/gpcpas.texi 7 Aug 2017 20:11:31 -0000 1.2 @@ -303,7 +303,7 @@ function SetGroupID (Real: CInteger; Ef @{ Low-level file routines. Mostly for internal use. @} -@{ Get information about a file system. @} +@{ Get information about a filesystem. @} function StatFS (Path: CString; var Buf: StatFSBuffer): Boolean; external name '_p_StatFS'; function CStringOpenDir (DirName: CString): Pointer; external Index: gcc/p/doc/generated/intl.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/generated/intl.texi,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/generated/intl.texi 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/generated/intl.texi 27 Dec 2009 16:26:57 -0000 1.2 @@ -1,3 +1,5 @@ +WARNING: The intl unit is NOT part of the gpc accompanying MirOS! + @c Generated automatically from intl.pas @c DO NOT CHANGE THIS FILE MANUALLY! Index: gcc/p/doc/generated/md5.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/generated/md5.texi,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/generated/md5.texi 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/generated/md5.texi 27 Dec 2009 16:26:58 -0000 1.2 @@ -2,31 +2,34 @@ @c DO NOT CHANGE THIS FILE MANUALLY! @smallexample -@{ Functions to compute MD5 message digest of files or memory blocks, - according to the definition of MD5 in RFC 1321 from April 1992. +@{ $MirOS: gcc/gcc/p/doc/generated/md5.texi,v 1.2 2009/12/27 16:26:58 tg Exp $ - Copyright (C) 1995, 1996, 2000-2006 Free Software Foundation, Inc. - - Author: Frank Heckenbach - - Based on the C code written by Ulrich Drepper - , 1995 as part of glibc. - - This file is part of GNU Pascal. - - GNU Pascal is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - GNU Pascal is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - - Suite 330, Boston, MA 02111-1307, USA. @} + Copyright (c) 2005 + Free Software Foundation, Inc. + written by: + Thorsten "mirabilos" Glaser + Frank Heckenbach + + Licensee is hereby permitted to deal in this work without restric- + tion, including unlimited rights to use, publicly perform, modify, + merge, distribute, sell, give away or sublicence, provided all co- + pyright notices above, these terms and the disclaimer are retained + in all redistributions or reproduced in accompanying documentation + or other materials provided with binary redistributions. + + Licensor offers the work "AS IS" and WITHOUT WARRANTY of any kind, + express, or implied, to the maximum extent permitted by applicable + law, without malicious intent or gross negligence; in no event may + licensor, an author or contributor be held liable for any indirect + or other damage, or direct damage except proven a consequence of a + direct error of said person and intended use of this work, loss or + other issues arising in any way out of its use, even if advised of + the possibility of such damage or existence of a nontrivial bug. + + Replacement for the GNU md5 unit, which was licenced under the GNU + GPL, thus propagating the requirement to be GPL'd to any code that + used the old unit. The GNU md5 unit was the only one not under the + LGPL or GPL with library exception clause; this fixes it. @} @{$gnu-pascal,I-@} @{$if __GPC_RELEASE__ < 20030303@} @@ -53,24 +56,31 @@ type @{ Computes MD5 message digest for Length bytes in Buffer. @} procedure MD5Buffer (const Buffer; Length: SizeType; var MD5: TMD5); + attribute (name = '_p_MD5Buffer'); @{ Computes MD5 message digest for the contents of the file f. @} procedure MD5File (var f: File; var MD5: TMD5); attribute - (iocritical); + (iocritical, name = '_p_MD5File'); @{ Initializes a MD5 value with zeros. @} -procedure MD5Clear (var MD5: TMD5); +procedure MD5Clear (var MD5: TMD5); attribute (name + = '_p_MD5Clear'); @{ Compares two MD5 values for equality. @} -function MD5Compare (const Value1, Value2: TMD5): Boolean; +function MD5Compare (const Value1, Value2: TMD5): Boolean; attribute + (name = '_p_MD5Compare'); @{ Converts an MD5 value to a string. @} -function MD5Str (const MD5: TMD5) = s: MD5String; +function MD5Str (const MD5: TMD5) = s: MD5String; attribute (name + = '_p_MD5Str'); @{ Converts a string to an MD5 value. Returns True if successful. @} -function MD5Val (const s: String; var MD5: TMD5): Boolean; +function MD5Val (const s: String; var MD5: TMD5): Boolean; attribute + (name = '_p_MD5Val'); @{ Composes two MD5 values to a single one. @} function MD5Compose (const Value1, Value2: TMD5) = Dest: TMD5; + attribute (name = '_p_MD5Compose'); + @end smallexample Index: gcc/p/doc/hr/about.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/hr/about.texi,v retrieving revision 1.1.111.1 retrieving revision 1.3 diff -u -p -r1.1.111.1 -r1.3 --- gcc/p/doc/hr/about.texi 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/hr/about.texi 21 May 2012 21:30:53 -0000 1.3 @@ -14,31 +14,31 @@ @c maybe should try more free one ... -- MT 20011201 @node Naglasci -@chapter Neke od najinteresantnijih značajki GPC-a +@chapter Neke od najinteresantnijih značajki GPC-a @cindex highlights -GNU Pascal prevodilac (GPC) je, kao što ime govori, Pascal prevodilac (engl. -compiler) iz GNU obitelji (@uref{http://www.gnu.org/software/gcc/}). Ovo znači: +GNU Pascal prevodilac (GPC) je, kao ĹĄto ime govori, Pascal prevodilac (engl. +compiler) iz GNU obitelji (@uref{http://www.gnu.org/software/gcc/}). Ovo znači: @itemize @bullet @item GPC je 32/64-bitni prevodilac, -@item nema ograničenja kao što je 64 kB ili 640 kB limit poznat iz nekih -operacijskih sustava -- čak i na tim sustavima --, +@item nema ograničenja kao ĹĄto je 64 kB ili 640 kB limit poznat iz nekih +operacijskih sustava -- čak i na tim sustavima --, -@item radi na svim operacijskim sustavima podržanim od GNU C prevodioca, -uključujući +@item radi na svim operacijskim sustavima podrĹžanim od GNU C prevodioca, +uključujući @itemize @minus @item @uref{http://www.linux.org,Linux} na Intelu, Alphi, S390, i na svim -ostalim podržanim tipovima hardvera, +ostalim podrĹžanim tipovima hardvera, @item BSD obitelj: @uref{http://www.freebsd.org,FreeBSD}, @uref{http://www.netbsd.org,NetBSD}, @uref{http://www.openbsd.org,OpenBSD}, -@item DOS sa 32 bita, koristeći +@item DOS sa 32 bita, koristeći @uref{http://www.delorie.com/djgpp/,DJGPP} ili EMX, -@item MS-Windows 9x/NT, koristeći +@item MS-Windows 9x/NT, koristeći @uref{http://cygwin.com,Cygwin} ili @uref{http://www.mingw.org,mingw} ili @uref{http://www.mingw.org/msys.shtml,MSYS}, @@ -50,15 +50,15 @@ ostalim podržanim tipovima hardvera, @item HP/UX, @end itemize -@noindent i druge (zabilješka: runtime sistem podržava samo ASCII bazirane -sisteme; to uključuje gotovo sve današnje sustave, međutim nekoliko IBM -strojeva još uvijek koristi EBCDIC; na tima, prevodilac bi se mogao izvršavati, -ali bi runtime podrška trebala velike izmjene), +@noindent i druge (zabiljeĹĄka: runtime sistem podrĹžava samo ASCII bazirane +sisteme; to uključuje gotovo sve danaĹĄnje sustave, međutim nekoliko IBM +strojeva joĹĄ uvijek koristi EBCDIC; na tima, prevodilac bi se mogao izvrĹĄavati, +ali bi runtime podrĹĄka trebala velike izmjene), @c FIXME -- TM @c nEEd to find more suitable translation for 'native' and 'cross' compiler -@item može služiti kao nativni prevodilac ili prevodilac između sistema -(engl. cross-compiler) - između svih podržanih sistema, +@item moĹže sluĹžiti kao nativni prevodilac ili prevodilac između sistema +(engl. cross-compiler) - između svih podrĹžanih sistema, @item proizvodi visoko optimirani kod za sve te sisteme, @@ -69,18 +69,18 @@ u skladu sa @uref{http://www.gnu.org/copyleft/gpl.html,@strong{GNU General Public License}} licencom), -@item kompatibilan je sa ostalim GNU jezicima i alatima kao što su GNU C i -GNU debugger (ili, ako više volite, program za simboličko ispravljanje -pogrešaka u ispravljanom programu). +@item kompatibilan je sa ostalim GNU jezicima i alatima kao ĹĄto su GNU C i +GNU debugger (ili, ako viĹĄe volite, program za simboličko ispravljanje +pogreĹĄaka u ispravljanom programu). @end itemize @anch{lang}@c -Prevodilac podržava slijedeće jezične standarde i kvazi-standarde: +Prevodilac podrĹžava slijedeće jezične standarde i kvazi-standarde: @itemize @bullet @item ISO 7185 Pascal (@pxref{Resursi}), -@item većinu dijelova ISO 10206 Extended Pascala, +@item većinu dijelova ISO 10206 Extended Pascala, @item Borland Pascal 7.0, @item dijelove Borland Delphi, Mac Pascala i Pascal-SC (PXSC). @end itemize @@ -93,28 +93,28 @@ Neki naglasci: @itemize @bullet @item Iz Standard Pascala: Mnogi popularni Pascal prevodioci tvrde da -proširuju Standard Pascal, ali im nedostaju ove važne značajke. +proĹĄiruju Standard Pascal, ali im nedostaju ove vaĹžne značajke. @itemize @minus @item @anch{conformantdemo}@c -Polja kao konformni parametri -- standardni i komforan način prosljeđivanja -polja (ARRAY) varijabilne veličine procedurama i funkcijama. +Polja kao konformni parametri -- standardni i komforan način prosljeđivanja +polja (ARRAY) varijabilne veličine procedurama i funkcijama. @hrefexample{conformantdemo.pas} @item @anch{iteratordemo.pas}@c -Prosljeđivanje lokalnih procedura kao proceduralnih parametara -- s punim -pristupom svim varijablama ``nadređene'' procedure. +Prosljeđivanje lokalnih procedura kao proceduralnih parametara -- s punim +pristupom svim varijablama ``nadređene'' procedure. @hrefexample{iteratordemo.pas} @item @anch{filebuf1demo}@c @anch{filebuf2demo}@c @c FIXME Here I'm not resolute about meaning of the original -> I nEEd to @c look at the examples, or ask Frank: -- MT 20011201 Done 20020103 -Automatski datotečni međuspremnici (engl. file buffers) i standardne @samp{Get} -i @samp{Put} procedure. Predviđajuće čitanje (engl. read-ahead) bez privremenih +Automatski datotečni međuspremnici (engl. file buffers) i standardne @samp{Get} +i @samp{Put} procedure. Predviđajuće čitanje (engl. read-ahead) bez privremenih varijabli. @hrefexample{filebuf1demo.pas} Ovo dozvoljava, na primjer, da se -provjeri ulaz iz tekst datoteka prije čitanja bez konverzije kroz znakovne +provjeri ulaz iz tekst datoteka prije čitanja bez konverzije kroz znakovne nizove (engl. strings). @hrefexample{filebuf2demo.pas} @item @anch{packdemo}@c @@ -127,7 +127,7 @@ Interne datoteke. Ne morate se brinuti o datoteka i njihovom brisanju kasnije. @hrefexample{intfiledemo.pas} @item -Globalni @samp{goto}. (Da, @samp{goto} ima svoju ulogu kada nije ograničen +Globalni @samp{goto}. (Da, @samp{goto} ima svoju ulogu kada nije ograničen na trenutni potprogram.) @hrefexample{parserdemo.pas} @item @anch{variantedmo}@c @@ -135,7 +135,7 @@ Automatski postavlja diskriminantu varij @hrefexample{variantdemo.pas} @item @anch{bigsetsdemo}@c -Skupovi (SET) proizvoljne veličine. @hrefexample{bigsetsdemo.pas} +Skupovi (SET) proizvoljne veličine. @hrefexample{bigsetsdemo.pas} @end itemize @item Iz Extended Pascala: @@ -147,7 +147,7 @@ Znakovni nizovi (strings) proizvoljne du @hrefexample{stringschemademo.pas} @item @anch{rwstringdemo}@c -@samp{ReadStr} i @samp{WriteStr}. Čitajte iz i pišite u znakovne nizove sa +@samp{ReadStr} i @samp{WriteStr}. Čitajte iz i piĹĄite u znakovne nizove sa punim komforom @samp{ReadLn}/@samp{WriteLn}. @hrefexample{rwstringdemo.pas} @item @@ -155,10 +155,10 @@ punim komforom @samp{ReadLn}/@samp{Write Rutine za predstavljanje datuma i vremena neovisne od sistema (prenosive). @hrefexample{datetimedemo.pas} @item -Iteracija pomoću članova skupa: +Iteracija pomoću članova skupa: @samp{@w{for Ch in ['A' .. 'Z', 'a' .. 'z'] do @dots{}}} @hrefexample{bigsetsdemo.pas} -@item Proširene operacije nad skupovima (simetrična diferencija, @samp{Card}) +@item ProĹĄirene operacije nad skupovima (simetrična diferencija, @samp{Card}) @item Generalizirane @samp{Succ} i @samp{Pred} funkcije (@code{@w{foo := Succ (bar, 5);}}). @item @@ -171,7 +171,7 @@ kompleksne brojeve. @item @anch{initvardemo}@c Inicijalizirane varijable. @hrefexample{initvardemo.pas} -@item Funkcije mogu vraćati vrijednost tipa zapis ili polje (Record, Array). +@item Funkcije mogu vraćati vrijednost tipa zapis ili polje (Record, Array). @item @anch{resultvardemo}@c FIXME @c nEEd 2 look at exmpl to clean xlation @@ -184,16 +184,16 @@ Varijable za imenovanu povratnu vrijedno konstante. @item @anch{schemademo}@c -Schemata -- Pascalov način da se dobiju dinamička polja bez nestašnih +Schemata -- Pascalov način da se dobiju dinamička polja bez nestaĹĄnih trikova @hrefexample{schemademo.pas} @item @anch{dynamicarraydemo}@c -Lokalne varijable mogu imati dinamičku veličinu. +Lokalne varijable mogu imati dinamičku veličinu. @hrefexample{dynamicarraydemo.pas} @item @anch{arrayslicedemo}@c -Pristup odsječcima polja -- pristupa se dijelovima polja kao manjem polju, -čak i na lijevoj strani operacije dodjele vrijednosti (engl. assignment) +Pristup odsječcima polja -- pristupa se dijelovima polja kao manjem polju, +čak i na lijevoj strani operacije dodjele vrijednosti (engl. assignment) @hrefexample{arrayslicedemo.pas} @end itemize @@ -202,7 +202,7 @@ Pristup odsječcima polja -- pristupa se @itemize @minus @item @anch{absdemo}@c -Podržava jedinice (UNIT), objekte, @dots{}, i čini čak i stvari kao +PodrĹžava jedinice (UNIT), objekte, @dots{}, i čini čak i stvari kao @samp{absolute} varijable prenosivima. @hrefexample{absdemo.pas} @item Dolazi s prenosivim verzijama standardnih BP jedinica sa punim izvornim kodom. @@ -211,7 +211,7 @@ izvornim kodom. @html
-[CRTDemo screen] src= +[CRTDemo screen]
(PNG, 21 kB)
@@ -219,21 +219,21 @@ izvornim kodom. @end html @end ifhtml @anch{crtdemo}@c -Istinski mrežno-transparentna CRT jedinica: možete izvršavati svoje CRT +Istinski mreĹžno-transparentna CRT jedinica: moĹžete izvrĹĄavati svoje CRT aplikacije lokalno ili dok ste prijavljeni udaljeno (remote login), bez -potrebe za brigom o različitim tipovima terminala. Kompatibilna s BP -jedinicom, ali s mnogim proširenjima, kao npr. preklapajući prozori. +potrebe za brigom o različitim tipovima terminala. Kompatibilna s BP +jedinicom, ali s mnogim proĹĄirenjima, kao npr. preklapajući prozori. @hrefexample{crtdemo.pas} @item -Potpuno funkcionalna GUI (X11) verzija CRT (također potpuno mrežno +Potpuno funkcionalna GUI (X11) verzija CRT (također potpuno mreĹžno transparentna). @htmlbrclear -@item @samp{Random} funkcija koja može proizvesti iste sekvence -pseudo-slučajnih brojeva kao i ona u BP -- ako vam je to potrebno umjesto -mnogo jače elaboriranog inicijalnog algoritma. +@item @samp{Random} funkcija koja moĹže proizvesti iste sekvence +pseudo-slučajnih brojeva kao i ona u BP -- ako vam je to potrebno umjesto +mnogo jače elaboriranog inicijalnog algoritma. @item @anch{procvardemo}@c -Podržava proceduralne varijable u stilu BP-a, jednako kao i procedure kao +PodrĹžava proceduralne varijable u stilu BP-a, jednako kao i procedure kao parametre iz Standard Pascala. @hrefexample{procvardemo.pas} @item @anch{portdemo}@c @@ -241,10 +241,10 @@ parametre iz Standard Pascala. @hrefexam to ima smisla. @hrefexample{portdemo.pas} @item @anch{bigmemdemo}@c -Specijalne kompatibilnostne značajke za pomoć u migraciji s BP-a na GPC, -kao @samp{GPC for BP} jedinica koja pruža neke od GPC-ovih značajki za BP, +Specijalne kompatibilnostne značajke za pomoć u migraciji s BP-a na GPC, +kao @samp{GPC for BP} jedinica koja pruĹža neke od GPC-ovih značajki za BP, te neke rutine za pristup skupovima velikih memorijskih blokova na uniforman -način pod GPC-om i BP-om (čak i u tzv. realnom modu). +način pod GPC-om i BP-om (čak i u tzv. realnom modu). @hrefexample{bigmemdemo.pas} @item @anch{binobjdemo}@c @@ -258,8 +258,8 @@ Dolazi sa BP-kompatibilnom @samp{binobj} @item @samp{abstract} tipovi objekata i metoda @item @samp{is} i @samp{as} operatori za testiranje pripadnosti objekta tipu @item komentari s @samp{//} -@item @samp{Setlength} procedura za znakovne nizove (string) čini nepotrebnim -korištenje trikova kao što je pridodjeljivanje ``nultom karakteru''. +@item @samp{Setlength} procedura za znakovne nizove (string) čini nepotrebnim +koriĹĄtenje trikova kao ĹĄto je pridodjeljivanje ``nultom karakteru''. @item @samp{Initialize} i @samp{Finalize} za rukovanje varijablama na niskoj razini. @end itemize @@ -267,43 +267,43 @@ niskoj razini. @item Iz Pascal-SC (PXSC): @itemize @minus -@item Korisnički redefinirani (preopterećeni) operatori. Zbrajajte svoje +@item Korisnički redefinirani (preopterećeni) operatori. Zbrajajte svoje vektore sa @samp{+}. @end itemize -@item Pažljivo definirana GNU proširenja pomažu vam da učinite svoje -programe iz realnog života prenosivima: +@item PaĹžljivo definirana GNU proĹĄirenja pomaĹžu vam da učinite svoje +programe iz realnog Ĺživota prenosivima: @itemize @minus @item 64-bitni cjelobrojni tipovi sa i bez predznaka. @item @anch{c_gpc}@c Specijalni tipovi garantiraju kompatibilnost sa drugim GNU jezicima kao -što je GNU C. Direktive kao @samp{@w{@{$L foo.c@}}} čine jednostavnim -održavanje projekata pisanih u više jezika, npr. uključivanje koda pisanog +ĹĄto je GNU C. Direktive kao @samp{@w{@{$L foo.c@}}} čine jednostavnim +odrĹžavanje projekata pisanih u viĹĄe jezika, npr. uključivanje koda pisanog u drugim jezicima u Pascal programe @xhrefexample{c_gpc.pas,Primjer (Pascal dio)} @xhrefexample{c_gpc_c.c,Primjer (C dio)}, @item @anch{gpc_c_pas}@c @anch{gpc_c_unit}@c -ili uključivanje Pascal koda u programe pisane u drugim jezicima. +ili uključivanje Pascal koda u programe pisane u drugim jezicima. @xhrefexample{gpc_c_pas.pas,Primjer (Pascal dio)} @xhrefexample{gpc_c_unit.pas,Primjer (Pascal jedinica)} @xhrefexample{gpc_c_c.c,Primjer (C dio)} @item @anch{endiandemo}@c -Proširenja kao @samp{BitSizeOf} i @samp{ConvertFromBigEndian} -pomažu rješavanju problema s različitim tipovima i unutrašnjim poretkom +ProĹĄirenja kao @samp{BitSizeOf} i @samp{ConvertFromBigEndian} +pomaĹžu rjeĹĄavanju problema s različitim tipovima i unutraĹĄnjim poretkom (engl. endianess - big endian, little endian). @hrefexample{endiandemo.pas} -@item Male sitnice kao što su @samp{DirSeparator}, -@samp{PathSeparator}, @samp{GetTempDirectory} pomažu vam da pišete programe -koji izgledaju i osjećaju se ``kod kuće'' na svim operativnim sistemima. +@item Male sitnice kao ĹĄto su @samp{DirSeparator}, +@samp{PathSeparator}, @samp{GetTempDirectory} pomaĹžu vam da piĹĄete programe +koji izgledaju i osjećaju se ``kod kuće'' na svim operativnim sistemima. @item @anch{pexecutedemo}@c -@samp{PExecute} rutina dozvoljava izvođenje 'child' procesa na prenosiv -način koji u potpunosti iskorištava višezadaćne (engl. multitasking) +@samp{PExecute} rutina dozvoljava izvođenje 'child' procesa na prenosiv +način koji u potpunosti iskoriĹĄtava viĹĄezadaćne (engl. multitasking) okoline. @hrefexample{pexecutedemo.pas} @item @@ -314,11 +314,11 @@ liniji u Unix-stilu sa i bez argumenata. @item @anch{fexpanddemo}@c Rutine kao @samp{FSplit} ili @samp{FSearch} ili @samp{FExpand} znaju o -specifičnostima raznih operativnih sistema. +specifičnostima raznih operativnih sistema. @hrefexample{fexpanddemo.pas} @item @anch{formattimedemo}@c -@samp{FormatTime} funkcija pušta vas da formatirate vrijednosti datuma i +@samp{FormatTime} funkcija puĹĄta vas da formatirate vrijednosti datuma i vremena, prema raznim pravilima formatiranja. @hrefexample{formattimedemo.pas} @end itemize @@ -329,7 +329,7 @@ vremena, prema raznim pravilima formatir @item @anch{pipedemo}@c @anch{demoproc}@c -@samp{Pipes} jedinica daje međuprocesnu komunikaciju čak i pod običnim +@samp{Pipes} jedinica daje međuprocesnu komunikaciju čak i pod običnim DOS-om. @hrefexample{pipedemo.pas} @xhrefexample{demoproc.pas,Demo proces za primjer} @item @@ -338,7 +338,7 @@ DOS-om. @hrefexample{pipedemo.pas} @anch{power}@c @anch{realpower}@c @anch{pi}@c -GNU multipreciznostna @samp{GMP} jedinica omogućava aritmetiku cijelih, +GNU multipreciznostna @samp{GMP} jedinica omogućava aritmetiku cijelih, realnih i racionalnih brojeva proizvoljne preciznosti. @xhrefexample{factorial.pas,Primjer: faktorijele} @xhrefexample{fibonacci.pas,Primjer: Fibonaccijev niz} @@ -350,26 +350,26 @@ realnih i racionalnih brojeva proizvoljn @anch{statfsdemo}@c @anch{filelockdemo}@c POSIX funkcije poput @samp{ReadDir}, @samp{StatFS} ili -@samp{FileLock} pružaju efikasno, lako za korištenje i prenosivo sučelje +@samp{FileLock} pruĹžaju efikasno, lako za koriĹĄtenje i prenosivo sučelje (engl. interface) prema operacijskom sustavu. @hrefexample{readdirdemo.pas} @hrefexample{statfsdemo.pas}, @hrefexample{filelockdemo.pas} @item @anch{dosunixdemo}@c -@samp{DosUnix} jedinica kompenzira neke nekompatibilnosti između dviju +@samp{DosUnix} jedinica kompenzira neke nekompatibilnosti između dviju obitelji operacijskih sustava. @hrefexample{dosunixdemo.pas} @item @anch{md5demo}@c -@samp{MD5} jedinica izračunava MD5 sume poruka (engl. message digest), +@samp{MD5} jedinica izračunava MD5 sume poruka (engl. message digest), u skladu s RFC 1321. @hrefexample{md5demo.pas} @item @anch{findfilesdemo}@c -@samp{FileUtils} jedinica pruža neke rutine za rukovanje datotekama i -direktorijima na višoj razini. @hrefexample{findfilesdemo.pas} +@samp{FileUtils} jedinica pruĹža neke rutine za rukovanje datotekama i +direktorijima na viĹĄoj razini. @hrefexample{findfilesdemo.pas} @item @anch{stringhashdemo}@c -@samp{StringUtils} jedinica pruža neke rutine za rad sa znakovnim nizovima -na višoj razini. @hrefexample{stringhashdemo.pas} +@samp{StringUtils} jedinica pruĹža neke rutine za rad sa znakovnim nizovima +na viĹĄoj razini. @hrefexample{stringhashdemo.pas} @item @anch{gettextdemo}@c @anch{localedemo}@c @@ -377,19 +377,19 @@ na višoj razini. @hrefexample{stringhash @hrefexample{gettextdemo.pas} @hrefexample{localedemo.pas} @item @anch{trapdemo}@c -@samp{Trap} jedinica za hvatanje grešaka u vremenu izvođenja (runtime-errors) -i njihovo obrađivanje unutar programa. @hrefexample{trapdemo.pas} +@samp{Trap} jedinica za hvatanje greĹĄaka u vremenu izvođenja (runtime-errors) +i njihovo obrađivanje unutar programa. @hrefexample{trapdemo.pas} @item @anch{tfdddemo} -A @samp{TFDD} jedinica koja omogućuje neke trikove s tekst datotekama, -npr. ``tee'' datoteku koja prouzročuje da se sve pisano u nju ispisuje u dvije +A @samp{TFDD} jedinica koja omogućuje neke trikove s tekst datotekama, +npr. ``tee'' datoteku koja prouzročuje da se sve pisano u nju ispisuje u dvije druge datoteke. @hrefexample{tfdddemo.pas} -@item @samp{HeapMon} jedinica koja pomaže detektirati "curenje" memorije -(engl. memory leaks) u vašim programima. +@item @samp{HeapMon} jedinica koja pomaĹže detektirati "curenje" memorije +(engl. memory leaks) u vaĹĄim programima. @end itemize @end itemize -Demo programi spomenuti gore su raspoloživi na WWW-u jednako kao i u +Demo programi spomenuti gore su raspoloĹživi na WWW-u jednako kao i u GPC distribucijama, binarnim i source. @c DEMO-END @@ -399,16 +399,16 @@ Nedostaci: @itemize @bullet -@item GNU simbolički debugger (GDB) još ne razumije Pascal sintaksu i +@item GNU simbolički debugger (GDB) joĹĄ ne razumije Pascal sintaksu i tipove; potrebno je koristiti C sintaksu kod ispravljanja programa GDB-om. -@item Sa GPC-om prevođenje traje dulje nego s npr. Borland Pascalom. +@item Sa GPC-om prevođenje traje dulje nego s npr. Borland Pascalom. @end itemize -@strong{Suradnici dobrodošli!} +@strong{Suradnici dobrodoĹĄli!} -Sposobni, predani programeri su uvijek dobrodošli u GNU Pascal tim. Ako -želite biti nezavisni od kompanija kojima morate plaćati za prevodilac -sa mnogo restriktivnijim uvjetima licenciranja koji se izvršava na -@emph{jednom} operacijskom sustavu, budite pozvani da se pridružite +Sposobni, predani programeri su uvijek dobrodoĹĄli u GNU Pascal tim. Ako +Ĺželite biti nezavisni od kompanija kojima morate plaćati za prevodilac +sa mnogo restriktivnijim uvjetima licenciranja koji se izvrĹĄava na +@emph{jednom} operacijskom sustavu, budite pozvani da se pridruĹžite razvojnom timu, @ref{Acknowledgments}. Index: gcc/p/doc/hr/authors.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/hr/authors.texi,v retrieving revision 1.1.111.1 retrieving revision 1.3 diff -u -p -r1.1.111.1 -r1.3 --- gcc/p/doc/hr/authors.texi 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/hr/authors.texi 21 May 2012 21:30:53 -0000 1.3 @@ -25,7 +25,7 @@ @c Note: The following line gets inserted into the destination file, @c it does not apply to this Texinfo file! Ova datoteka je generirana automatski iz authors.texi.@* -@sc{NEMOJTE MIJENJATI OVU DATOTEKU RUČNO!} +@sc{NEMOJTE MIJENJATI OVU DATOTEKU RUČNO!} @settitle Popis copyrighta za GNU Pascal @node Top @@ -34,7 +34,7 @@ Ova datoteka je generirana automatski iz @table @asis @item Jukka Virtanen -izumio GNU Pascal u ožujku 1988, implementirao ISO 7185 i većinu +izumio GNU Pascal u oĹžujku 1988, implementirao ISO 7185 i većinu ISO 10206 standarda, itd. @ifset AUTHORSONLY @@ -46,35 +46,35 @@ GCC kodu. @anch{peter}@c @c 4567891123456789212345678931234567894123456789512345678961234567897 dodao je Borland Pascal korelirane i druge ekstenzije GNU Pascalu u -ljeto 1995, prenio GPC na EMX platformu, radi na najvećem dijelu +ljeto 1995, prenio GPC na EMX platformu, radi na najvećem dijelu razvoja prevoditelja (engl. compiler) od 1996-e, napisao i -održava WWW home page, održava GNU Pascal mailing listu, radi +odrĹžava WWW home page, odrĹžava GNU Pascal mailing listu, radi neke druge administrativne stvari itd. @ifset AUTHORSONLY Napisao je @file{rts/move.pas}, datoteke u @file{doc/} (zajedno -sa Jan-Jaapom), (bivše) datoteke u @file{config/emx/} i -@file{gpc-nodes.def}, i značajno modificirao sve datoteke. +sa Jan-Jaapom), (bivĹĄe) datoteke u @file{config/emx/} i +@file{gpc-nodes.def}, i značajno modificirao sve datoteke. @end ifset @item Jan-Jaap van der Heijden prenio GPC na DJGPP platformu i na Microsoft Windows 95/NT, dodao -ELF podršku u proljeće 1996, riješio mnogo problema konfiguracije +ELF podrĹĄku u proljeće 1996, rijeĹĄio mnogo problema konfiguracije i kompatibilnosti, kreirao GPC FAQ, itd. @ifset AUTHORSONLY Kreirao je @file{Make-lang.in}, @file{lang-options.h}, @file{lang-specs.h}, datoteke u @file{doc/} (zajedno s Peterom), @file{rts/Make*}, i @file{rts/config*}, te modificirao -@file{module.c} i većinu drugih datoteka. +@file{module.c} i većinu drugih datoteka. @end ifset @item @uref{http://fjf.gnu.de,Frank Heckenbach} @anch{frank}@c -ispočetka napisao i održava Run Time System od srpnja 1997, prilično -radi na razvoju od srpnja 2001, napisao je većinu jedinica (Unit), +ispočetka napisao i odrĹžava Run Time System od srpnja 1997, prilično +radi na razvoju od srpnja 2001, napisao je većinu jedinica (Unit), demo programa, skripti i utility-ja distibuiranih s GPC-om, -napisao velik broj test programa, održava GPC To-Do ("za napraviti") +napisao velik broj test programa, odrĹžava GPC To-Do ("za napraviti") listu @ifclear AUTHORSONLY (@pxref{To Do}) @@ -82,15 +82,15 @@ listu itd. @ifset AUTHORSONLY -Kreirao je @samp{gpc-options.h}, većinu datoteka u @file{units/}, @file{demos/}, +Kreirao je @samp{gpc-options.h}, većinu datoteka u @file{units/}, @file{demos/}, @file{script/}, i @samp{utils/} i @file{rts/} i mnogo datoteka u -@file{test/}; modificirao je većinu ostalih datoteka. +@file{test/}; modificirao je većinu ostalih datoteka. @end ifset -@item @uref{http://www.bigfoot.com/~african_chief/,Prof.@: Abimbola A.@: Olowofoyeku (``The African Chief'' - afrički poglavica)} +@item @uref{http://www.bigfoot.com/~african_chief/,Prof.@: Abimbola A.@: Olowofoyeku (``The African Chief'' - afrički poglavica)} kreirao originalne verzije mnogih BP kompatibilnostnih jedinica u -svibnju 1997, priložio kod drugim jedinicama i Run Time sistemu, -pomogao prenošenju GPC-a i jedinica na Cygwin i mingw platforme, +svibnju 1997, priloĹžio kod drugim jedinicama i Run Time sistemu, +pomogao prenoĹĄenju GPC-a i jedinica na Cygwin i mingw platforme, napisao izvjestan broj test programa, dodao Borland Delphi-kompatibilnu @samp{SysUtils} @uref{http://www.gnu-pascal.de/contrib/chief/,jedinicu}, itd. @@ -101,7 +101,7 @@ datoteke u @file{test/}. @end ifset @item Nick Burrett -ispravio neke bugove i počistio GPC u svibnju 1998, itd. +ispravio neke bugove i počistio GPC u svibnju 1998, itd. @ifset AUTHORSONLY Modificirao je @file{expressions.c}, @file{parse.y}, @file{module.c} i @@ -110,7 +110,7 @@ neke druge datoteke. @item Matthias Klose integrirao je GPC u EGCS i Debian GNU/Linux u svibnju 1998, -usavršio je proces instalacije, itd. +usavrĹĄio je proces instalacije, itd. @ifset AUTHORSONLY Modificirao je @file{Makefile*}, @file{configure} skripte i mnoge @@ -118,9 +118,9 @@ druge datoteke. @end ifset @item Dominik Freche -poboljšao je i proširio GPC manual u kolovozu -- rujnu 1999 i napisao +poboljĹĄao je i proĹĄirio GPC manual u kolovozu -- rujnu 1999 i napisao je rutine za konverziju za Borland kompatibilne 6 bajtne brojeve s -pomičnim zarezom (floating point numbers) u prosincu 1999. +pomičnim zarezom (floating point numbers) u prosincu 1999. @ifset AUTHORSONLY Modificirao je @file{doc/en/reference.texi}, @@ -129,10 +129,10 @@ kreirao neke datoteke u @file{test/}. @end ifset @item Alexey Volokhov -poboljšao je performanse GPC-ove podrške za module/jedinice u lipnju 1997. +poboljĹĄao je performanse GPC-ove podrĹĄke za module/jedinice u lipnju 1997. @ifset AUTHORSONLY -Značajno je modificirao @file{module.c}. +Značajno je modificirao @file{module.c}. @end ifset @item Bill Currie @@ -144,9 +144,9 @@ Modificirao je @file{parse.y}, @file{sta @item Nicola Girardi napisao je 'GNU Pascal standarde za kodiranje' u studenom 2001, -priložio je @uref{http://www.gnu-pascal.de/contrib/nicola/,GPC jedinicu} za -@samp{svgalib} grafičku biblioteku za neke platforme u veljači 2000, priložio je -neka poboljšanja koja su doprinijela prenosivosti RTS-a. +priloĹžio je @uref{http://www.gnu-pascal.de/contrib/nicola/,GPC jedinicu} za +@samp{svgalib} grafičku biblioteku za neke platforme u veljači 2000, priloĹžio je +neka poboljĹĄanja koja su doprinijela prenosivosti RTS-a. @ifset AUTHORSONLY Napisao je @file{doc/en/gpcs.texi} i modificirao @samp{rts/rts.c}, @@ -156,7 +156,7 @@ napisao neke datoteke u @file{test/}. @item Eike Lange @anch{Eike}@c je napisao jedinicu @samp{unit} za internacionalizaciju, preveo je tekst GNU -Pascal Coding Standards na njemački i radio na dokumentaciji. +Pascal Coding Standards na njemački i radio na dokumentaciji. @ifset AUTHORSONLY Kreirao je @file{doc/de/gpcs.texi}. @@ -164,18 +164,18 @@ Kreirao je @file{doc/de/gpcs.texi}. @item Francisco Javier Fernandez Serrador @anch{Francisco}@c -preveo je GPC dokumentaciju na španjolski. +preveo je GPC dokumentaciju na ĹĄpanjolski. @ifset AUTHORSONLY -Kreirao je sve datoteke u @file{doc/es/} (koje još nisu integrirane u GPC +Kreirao je sve datoteke u @file{doc/es/} (koje joĹĄ nisu integrirane u GPC na dan pisanja 21.06.2003.) @end ifset @end table @ifset AUTHORSONLY -Svi autori nabrojani iznad su prenijeli svoja copyright prava na prošle i -buduće izmjene GNU Pascala na Free Software Foundation (FSF). +Svi autori nabrojani iznad su prenijeli svoja copyright prava na proĹĄle i +buduće izmjene GNU Pascala na Free Software Foundation (FSF). @end ifset @table @asis @@ -187,12 +187,12 @@ je preveo GPC dokumentaciju na hrvatski. @ifset AUTHORSONLY Kreirao je datoteke u @file{doc/hr/}. -Prenio je copyright prava od svojih prošlih i budućih izmjena hrvatskog +Prenio je copyright prava od svojih proĹĄlih i budućih izmjena hrvatskog prijevoda GNU Pascal dokumentacije na Free Software Foundation (FSF). @end ifset @item Russ Whitaker -dopunio i održava GNU Pascal FAQ. +dopunio i odrĹžava GNU Pascal FAQ. @ifclear AUTHORSONLY (@pxref{FAQ}) @end ifclear @@ -202,7 +202,7 @@ Modificirao je @file{doc/en/faq.texi}. @end ifset @ifset AUTHORSONLY -Prenio je svoja copyright prava prošlih i budućih izmjena GNU +Prenio je svoja copyright prava proĹĄlih i budućih izmjena GNU Pascal FAQ-a na Free Software Foundation (FSF). @end ifset @@ -216,13 +216,13 @@ doprinosa: @table @asis @item Anja Gerwinski -održava GPC mailing listu, od rujna 1999. +odrĹžava GPC mailing listu, od rujna 1999. @item Berend de Boer napisao je mnogo korisne dokumentacije o Extended Pascalu u 1995. @item @uref{http://www.gerwinski.de/~markus/,Markus Gerwinski} -kreirao je crtež jednog Gnua s Blaise Pascal +kreirao je crteĹž jednog Gnua s Blaise Pascal @ifhtml @html -- mali (PNG, 1 kB) i @@ -232,7 +232,7 @@ kreirao je crtež jednog Gnua s Blaise Pa i pomogao dizajnu WWW home stranice u listopadu 1996. @item Eike Lange -priložio je +priloĹžio je @uref{http://www.gnu-pascal.de/contrib/eike/,jedinice} za pristup MySQL, GNU DBM i PostgreSQL bazama podataka u kolovozu 2000, te jedinicu (sada dio GPC-a) i alate za internacionalizaciju od @@ -240,63 +240,63 @@ listopada do prosinca 2001. @item Eike Lange i Nicola Girardi zajedno su doprinijeli skup @uref{http://www.gnu-pascal.de/contrib/nicola/,Gtk jedinica} -od veljače do svibnja 2001. +od veljače do svibnja 2001. @item Nicola Girardi napisao je standarde za kodiranje u GNU Pascalu na engleskom. Eike Lange -ih je preveo na njemački. +ih je preveo na njemački. @item Prof.@: Phil Nelson kreirao je sustav za prijavu bugova za GPC u listopadu 1996. -@item @uref{Robert Höhne} +@item Robert HĂśhne napisao je @uref{http://www.tu-chemnitz.de/~rho/rhide.html,RHIDE}, integriranu razvojnu okolinu za GNU prevoditelje koja se vrti pod -DOS-om (DJGPP) i Linuxom, te dodao podršku za GNU Pascal u jesen +DOS-om (DJGPP) i Linuxom, te dodao podrĹĄku za GNU Pascal u jesen 1996. @item Sven Hilscher -napisao (pretežno) BP kompatibilnu @samp{Graph} jedinicu za nekoliko +napisao (preteĹžno) BP kompatibilnu @samp{Graph} jedinicu za nekoliko platformi u prosincu 1996, sada dio @uref{http://www.gnu.de/software/grx/,GRX biblioteke}. @item @uref{http://www.geocities.com/SiliconValley/Vista/6573,Dario Anzani (``Predator Zeta'')} -priložio dokumentaciju o korištenju asemblera u GNU Pascalu +priloĹžio dokumentaciju o koriĹĄtenju asemblera u GNU Pascalu u svibnju 1997. @ifclear AUTHORSONLY (@pxref{Assembler}) @end ifclear @item Dieter Schmitz -postavio mailing listu na njemačkom jeziku za GPC, @ref{Mailing List}, u ožujku +postavio mailing listu na njemačkom jeziku za GPC, @ref{Mailing List}, u oĹžujku 2001. @item Adriaan van Os -pomogao je oko prenošenja GPC-a na Mac OS X i postavio +pomogao je oko prenoĹĄenja GPC-a na Mac OS X i postavio @uref{http://www.microbizz.nl/gpc.html,web site} sa source kodom, binarnim datotekama, zakrpama (patch)i instrukcijama za izgradnju na -ovoj platformi u siječnju 2003. +ovoj platformi u siječnju 2003. @item @code{(@minus{}:@minus{}@minus{}@minus{}@minus{}@minus{}@minus{}@minus{}@minus{}@minus{}:@minus{})} -Ovo mjesto je rezervirano za @emph{Vaše} ime. ;@minus{}) Molimo +Ovo mjesto je rezervirano za @emph{VaĹĄe} ime. ;@minus{}) Molimo kontaktirajte nas na GPC mailing listi, @ref{Mailing List}, ako imate -nešto interesantno za nas. +neĹĄto interesantno za nas. @end table -Zahvaljujemo svima koji nas podržavaju prijavljujući bugove, dajući -povratne informacije, doprinoseći svojim znanjem i dobrim idejama, -donacijama razvojnih alata, dajući nam priliku da testiramo GPC na -velikom broju različitih sistema. Naročito smo dužnici (abecednim redom, +Zahvaljujemo svima koji nas podrĹžavaju prijavljujući bugove, dajući +povratne informacije, doprinoseći svojim znanjem i dobrim idejama, +donacijama razvojnih alata, dajući nam priliku da testiramo GPC na +velikom broju različitih sistema. Naročito smo duĹžnici (abecednim redom, najprije pojedinci) prema @include contributors.texi @cite{BIP} na @cite{University of Birmingham}, Velika Britanija, -@cite{Institut fuer Festkoerperforschung (IFF)} na @cite{Forschungszentrum Juelich}, Njemačka, -CARNet-u (Hrvatska akademska i istraživačka mreža), Akademiji likovnih -umjetnosti i Grafičkom fakultetu na Sveučilištu u Zagrebu, Hrvatska. +@cite{Institut fuer Festkoerperforschung (IFF)} na @cite{Forschungszentrum Juelich}, Njemačka, +CARNet-u (Hrvatska akademska i istraĹživačka mreĹža), Akademiji likovnih +umjetnosti i Grafičkom fakultetu na SveučiliĹĄtu u Zagrebu, Hrvatska. -@noindent kao i svima koje smo možda zaboravili spomenuti ovdje. +@noindent kao i svima koje smo moĹžda zaboravili spomenuti ovdje. Hvala svima vama! @c The following text should appear in all versions of the manual, @@ -319,21 +319,21 @@ su doprinijeli GNU CC-u: @itemize @bullet @item -Ideja korištenja RTL-a i neke od ideja optimizacije su došle iz +Ideja koriĹĄtenja RTL-a i neke od ideja optimizacije su doĹĄle iz programa PO napisanog na University of Arizona od Jacka Davidsona i Christophera Frasera. Vidi ``Register Allocation and Exhaustive Peephole Optimization'', Software Practice and Experience 14 (9), Sept. 1984, 857-866. @item -Paul Rubin je napisao veći dio preprocesora. +Paul Rubin je napisao veći dio preprocesora. @item Leonard Tower je napisao dijelove parsera, RTL generator, i RTL definicije, te Vax deskripcije. @item -Ted Lemon je napisao dijelove RTL čitača i pisača. +Ted Lemon je napisao dijelove RTL čitača i pisača. @item Jim Wilson je implementirao 'loop strength reduction' i neke druge @@ -341,27 +341,27 @@ optimizacije petlji. @item Nobuyuki Hikichi iz Software Research Associates, Tokyo, pridonio je -podršku za Sony NEWS machine. +podrĹĄku za Sony NEWS machine. @item -Charles LaBrec doprinio je podršku za Integrated Solutions +Charles LaBrec doprinio je podrĹĄku za Integrated Solutions 68020 sistem. @item -Michael Tiemann iz Cygnus Support napisao je podršku za inline (umetnute) -funkcije i 'instruction scheduling'. Također i deskripcije +Michael Tiemann iz Cygnus Support napisao je podrĹĄku za inline (umetnute) +funkcije i 'instruction scheduling'. Također i deskripcije National Semiconductor 32000 serije procesora, SPARC procesora i dijelom Motorola 88000. @item -Jan Stein iz Chalmers Computer Society je pružio podršku za +Jan Stein iz Chalmers Computer Society je pruĹžio podrĹĄku za Genix, kao i dijelove 32000 machine deskripcija. @item -Randy Smith je dovršio Sun FPA podršku. +Randy Smith je dovrĹĄio Sun FPA podrĹĄku. @item -Robert Brown je implementirao podršku za Encore 32000 sisteme. +Robert Brown je implementirao podrĹĄku za Encore 32000 sisteme. @item David Kashtan iz SRI je prilagodio GNU CC za VMS. @@ -374,7 +374,7 @@ Greg Satz i Chris Hanson su pomogli da G za 9000 series 300 platformu. @item -William Schelter je napravio glavni dio posla na podršci za Intel 80386. +William Schelter je napravio glavni dio posla na podrĹĄci za Intel 80386. @item Christopher Smith je prenio prevodilac na Convex strojeve. @@ -383,7 +383,7 @@ Christopher Smith je prenio prevodilac n Paul Petersen je napisao machine deskripcije za Alliant FX/8. @item -Dario Dariol je doprinio četiri varijacije primjera programa koji +Dario Dariol je doprinio četiri varijacije primjera programa koji ispisuju vlastiti izvorni kod. @item @@ -403,52 +403,52 @@ Gary Miller je prenio GNU CC na Charles @item Richard Kenner s New York University Ultracomputer Research Laboratory je napisao machine deskripcije za AMD 29000, za DEC -Alphu, za IBM RT PC, te za IBM RS/6000 kao i podršku za -instrukcijske atribute. Također je načinio izmjene kako bi se bolje -podržalo RISC procesore uključujući izmjene u 'common subexpression -elimination' (eliminacija zajedničkih pod-izraza), +Alphu, za IBM RT PC, te za IBM RS/6000 kao i podrĹĄku za +instrukcijske atribute. Također je načinio izmjene kako bi se bolje +podrĹžalo RISC procesore uključujući izmjene u 'common subexpression +elimination' (eliminacija zajedničkih pod-izraza), 'strength reduction', 'function calling sequence' rukovanju, i 'condition code support', uz dodatke za generalizacije koda za 'frame pointer elimination'. @item -Richard Kenner i Michael Tiemann združeno su razvili reorg.c, +Richard Kenner i Michael Tiemann zdruĹženo su razvili reorg.c, 'delay slot scheduler'. @item -Mike Meissner i Tom Wood iz Data General završili su prijenos +Mike Meissner i Tom Wood iz Data General zavrĹĄili su prijenos na Motorolu 88000. @item Masanobu Yuhara iz Fujitsu Laboratories implementirao je machine -deskripcije za Tron architecture (točnije za Gmicro). +deskripcije za Tron architecture (točnije za Gmicro). @item James van Artsdalen napisao je kod koji efikasno upotrebljava Intel 80387 register stack (registarski slog). @item -Mike Meissner iz Open Software Foundation dovršio je prijenos -na MIPS procesor, uključujući dodavanje ECOFF debug podrške, i +Mike Meissner iz Open Software Foundation dovrĹĄio je prijenos +na MIPS procesor, uključujući dodavanje ECOFF debug podrĹĄke, i radio je prijenos na Intel 80386 procesor. @item Ron Guilmette implementirao je @code{protoize} i @code{unprotoize} -alate, podršku za Dwarf simboličke debugging informacije, i -većinu podrške za System V Release 4. Također je radio -naporno na Intel 386 i 860 podršci. +alate, podrĹĄku za Dwarf simboličke debugging informacije, i +većinu podrĹĄke za System V Release 4. Također je radio +naporno na Intel 386 i 860 podrĹĄci. @item Torbjorn Granlund je implementirao multiply- i divide-by-constant -optimizacije, poboljšao long long podršku, i poboljšao 'leaf function +optimizacije, poboljĹĄao long long podrĹĄku, i poboljĹĄao 'leaf function register allocation'. @item -Mike Stump je implementirao podršku za Elxsi 64-bitni procesor. +Mike Stump je implementirao podrĹĄku za Elxsi 64-bitni procesor. @item John Wehle je dodao machine deskripcije za Western Electric -32000 procesor korišten u nekoliko strojeva 3b serije (nema veze +32000 procesor koriĹĄten u nekoliko strojeva 3b serije (nema veze s National Semiconductor 32000 procesorom). @end itemize Index: gcc/p/doc/hr/faq.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/hr/faq.texi,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/hr/faq.texi 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/hr/faq.texi 21 May 2012 21:30:53 -0000 1.2 @@ -14,12 +14,12 @@ @ifclear FAQONLY @node FAQ -@chapter Često postavljana pitanja (FAQ) o GNU Pascalu. +@chapter Često postavljana pitanja (FAQ) o GNU Pascalu. @subheading Izdanje 0.9, kolovoz 2000 @cindex FAQ @cindex Frequently Asked Questions -@cindex često postavljana pitanja -@cindex pitanja, često postavljana +@cindex često postavljana pitanja +@cindex pitanja, često postavljana @end ifclear @ifset FAQONLY @@ -27,11 +27,11 @@ @c Note: The following line gets inserted into the destination file, @c it does not apply to this Texinfo file! Ova je datoteka generirana automatski iz faq.texi.@* -@sc{NE MIJENJAJTE OVU DATOTEKU RUČNO!} +@sc{NE MIJENJAJTE OVU DATOTEKU RUČNO!} -@settitle GPC lista često postavljanih pitanja +@settitle GPC lista često postavljanih pitanja @node Top -@top GNU Pascal lista često postavljanih pitanja, izdanje 0.9, kolovoz 2000 +@top GNU Pascal lista često postavljanih pitanja, izdanje 0.9, kolovoz 2000 @raisesections Ovaj dokument je dio GPC dokumentacije. Prije izrade, kopiranja i @@ -39,18 +39,18 @@ distribuiranja modificiranih verzija ovo dokumentaciju. @end ifset -Ovo je lista često postavljanih pitanje (FAQ) za GNU pascal. Ako -vam niti FAQ niti dokumentacija ne pomažu, detektirali ste +Ovo je lista često postavljanih pitanje (FAQ) za GNU pascal. Ako +vam niti FAQ niti dokumentacija ne pomaĹžu, detektirali ste @strong{bug} u dokumentaciji koji biste trebali prijaviti, -@ref{Mailing List}. Molimo vas da zaista to i učinite, kako -bismo mogli poboljšati dokumentaciju. +@ref{Mailing List}. Molimo vas da zaista to i učinite, kako +bismo mogli poboljĹĄati dokumentaciju. @menu * GNU Pascal:: GNU Pascal * Instaliranje GPC-a:: Instaliranje GPC-a * GPC na DJGPP-u:: GNU Pascal na DJGPP (MS-DOS) platformi * Znakovni nizovi u GPC-u:: Znakovni nizovi (strings) -* Traženje pomoći:: Traženje pomoći +* TraĹženje pomoći:: TraĹženje pomoći * FAQ "Razno":: Razno @end menu @@ -58,69 +58,69 @@ bismo mogli poboljšati dokumentaciju. @section GNU Pascal @menu -* Što i zašto:: Što i zašto? +* Ĺ to i zaĹĄto:: Ĺ to i zaĹĄto? * Trenutna verzija:: Koja je trenutna verzija? * Kompatibilnost sa Turbo Pascalom:: Da li je kompatibilan s Turbo Pascal-om (R)? -* Podržane platforme:: Na kojim platformama GNU Pascal radi? +* PodrĹžane platforme:: Na kojim platformama GNU Pascal radi? @end menu -@node Što i zašto -@subsection Što i zašto? +@node Ĺ to i zaĹĄto +@subsection Ĺ to i zaĹĄto? @include purpose.texi @node Trenutna verzija @subsection Koja je trenutna verzija? -Prije srpnja 2000 release verzije su obično slijedile nekoliko +Prije srpnja 2000 release verzije su obično slijedile nekoliko mjeseci jedna drugu. Od tada se nova verzija pojavila gotovo svakih nekoliko dana, dostupna kao source arhiva @c ili s CVS servera s GPC web sitea, @uref{http://www.gnu-pascal.de}. -Za detalje od novim mogućnostima, pogledajte sekciju @samp{News} +Za detalje od novim mogućnostima, pogledajte sekciju @samp{News} na web siteu. O bug-ovima koji su nedavno popravljeni, molimo pogledajte @samp{Done} sekciju na To-Do ("preostalo za napraviti") listi. -GPC koristi GCC kao "back-end", što znači da koristi dokazano GCC-ovo -sučelje za generiranje strojnog izvršnog koda, nakon što je "front-end" -"prožvakao" ulaznu sintaksu Pascal jezika. U distribuciji su priložene -zakrpe za GCC 2.8.1 i GCC 2.95.x, ali se preporučuje da koristite GCC 2.95.x. +GPC koristi GCC kao "back-end", ĹĄto znači da koristi dokazano GCC-ovo +sučelje za generiranje strojnog izvrĹĄnog koda, nakon ĹĄto je "front-end" +"proĹžvakao" ulaznu sintaksu Pascal jezika. U distribuciji su priloĹžene +zakrpe za GCC 2.8.1 i GCC 2.95.x, ali se preporučuje da koristite GCC 2.95.x. @c FIXME see for GCC 3.x.x @node Kompatibilnost sa Turbo Pascalom @subsection Da li je kompatibilan s Turbo Pascalom (R)? GPC nije usputni nadomjestak za Borlandov Turbo Pascal (R). -Gotovo sve jezične mogućnosti BP-a su podržane. Primjetne -iznimke su formati znakovnih nizova (kao što je diskutirano niže +Gotovo sve jezične mogućnosti BP-a su podrĹžane. Primjetne +iznimke su formati znakovnih nizova (kao ĹĄto je diskutirano niĹže u dokumentu), ili @samp{Mem} i @samp{Port} pseudo-polja, iako zamjena za potonje na IA32 platformi postoji u @samp{Ports} jedinici. -Gotovo sve mogućnosti BP-ove runtime biblioteke su podržane u GPC-u, -bilo ugrađenim mogućnostima prevodioca ili jedinicama sa istim imenima +Gotovo sve mogućnosti BP-ove runtime biblioteke su podrĹžane u GPC-u, +bilo ugrađenim mogućnostima prevodioca ili jedinicama sa istim imenima kao i korespondentne BP jedinice. Za detalje o kompatibilnosti, o nekoliko preostalih nekompatibilnosti -i nekim korisnim alternativama za mogućnosti BP-a, pogledajte -@samp{Borland Pascal} poglavlje u GPC priručniku. +i nekim korisnim alternativama za mogućnosti BP-a, pogledajte +@samp{Borland Pascal} poglavlje u GPC priručniku. @ifclear FAQONLY (@pxref{Borland Pascal}) @end ifclear -@node Podržane platforme +@node PodrĹžane platforme @subsection Na kojim platformama GNU Pascal radi? GPC koristi GCC "backend", tako da bi trebao raditi na svim sustavima -podržanim od GNU CC-a. Ovo uključuje širok raspon Unix sustava, -MS-DOS, OS/2 i Win32. Puna lista platformi podržanih od GCC-a -može se naći u datoteci @file{INSTALL} GCC distribucije. Sve +podrĹžanim od GNU CC-a. Ovo uključuje ĹĄirok raspon Unix sustava, +MS-DOS, OS/2 i Win32. Puna lista platformi podrĹžanih od GCC-a +moĹže se naći u datoteci @file{INSTALL} GCC distribucije. Sve te platforme nisu zapravo testirane, ali je poznato da radi na -slijedećim platformama: +slijedećim platformama: @multitable @columnfractions .4 .6 @item ix86-linux @tab (Linux 2.x, ELF) @@ -131,7 +131,7 @@ slijedećim platformama: @item AIX 4.3 @item DJGPP V2 @tab (Dos) @item EMX 0.9B @tab (OS/2, Dos) -@item Cygwin32 beta20 i više @tab (MS-Windows95/98, MS-Windows NT) +@item Cygwin32 beta20 i viĹĄe @tab (MS-Windows95/98, MS-Windows NT) @item mingw32 @tab (MS-Windows95/98, MS-Windows NT) @item MSYS @tab (MS-Windows) @item mips-sgi-irix5.3 @@ -147,75 +147,75 @@ slijedećim platformama: @item s390-ibm-linux-gnu @end multitable -@strong{OK narode -- šaljite nam svoje pripovjesti o uspjehu, s -kanoničkim imenima mašina!} +@strong{OK narode -- ĹĄaljite nam svoje pripovjesti o uspjehu, s +kanoničkim imenima maĹĄina!} @node Instaliranje GPC-a @section Instaliranje GPC-a -Najsvježije instrukcije za instalaciju možete naći u GPC priručniku +NajsvjeĹžije instrukcije za instalaciju moĹžete naći u GPC priručniku ili u datoteci @samp{INSTALL} u source distribucijama, ili na GPC -web poslužitelju. +web posluĹžitelju. @ifclear FAQONLY (@pxref{Installation}) @end ifclear -Slijedeća poglavlja opisuju što biste mogli trebati ili željeti +Slijedeća poglavlja opisuju ĹĄto biste mogli trebati ili Ĺželjeti osim samog GPC-a. @c FIXME -- "Libraries" left untranslated because referenced from en/install.texi @menu -* Dokumentacijske datoteke:: Što slijedeće čitati? -* Komponente:: Koje komponente trebam za prevođenje Pascal koda? +* Dokumentacijske datoteke:: Ĺ to slijedeće čitati? +* Komponente:: Koje komponente trebam za prevođenje Pascal koda? * Debugger:: Kako da ispravljam moje Pascal programe? * Libraries:: Biblioteke - koje bih dodatne biblioteke trebao imati? * Darovane jedinice:: Darovane jedinice -* IDE:: Možete li preporučiti integriranu razvojnu +* IDE:: MoĹžete li preporučiti integriranu razvojnu okolinu (IDE)? @end menu @node Dokumentacijske datoteke -@subsection Što slijedeće čitati? +@subsection Ĺ to slijedeće čitati? Nakon instaliranja GPC-a, molimo provjerite datoteke u direktoriju @file{/usr/local/doc/gpc}: @multitable @columnfractions .25 .75 -@item @file{README} @tab Opće informacije o GPC-u +@item @file{README} @tab Opće informacije o GPC-u @item @file{FAQ} @tab Ovaj FAQ :@minus{}) @item @file{NEWS} @tab Promjene od zadnjeg "release" izdanja @item @file{BUGS} @tab Kako prijavljivati bug-ove, o test zbirci programa @item @file{AUTHORS} @tab Lista GPC autora -@item @file{COPYING} @tab The GNU General Public License - GNU opća javna licenca -@item @file{COPYING.LIB} @tab The GNU Lesser General Public License - GNU manje opća javna licenca +@item @file{COPYING} @tab The GNU General Public License - GNU opća javna licenca +@item @file{COPYING.LIB} @tab The GNU Lesser General Public License - GNU manje opća javna licenca @end multitable @node Komponente -@subsection Koje komponente trebam za prevođenje Pascal koda? +@subsection Koje komponente trebam za prevođenje Pascal koda? Kompletiran sustav Pascal prevodioca bi trebao imati barem: @enumerate @item Sam prevodilac, GPC. -@item editor, asembler, linker (povezivač), program za rad s bibliotekama i prijatelje. +@item editor, asembler, linker (povezivač), program za rad s bibliotekama i prijatelje. @item C biblioteku. Ako imate C prevodilac (compiler) koji funkcionira, onda ovo -već imate. +već imate. -@item debugger (ispravljač pogrešaka), ako želite debuggirati svoje programe. +@item debugger (ispravljač pogreĹĄaka), ako Ĺželite debuggirati svoje programe. @end enumerate -Za većinu ljudi, GNU ``binutils'' i GNU debugger (@samp{gdb}) su dobar -izbor, iako biste mogli preferirati i koristiti alatke specifične za -proizvođača. +Za većinu ljudi, GNU ``binutils'' i GNU debugger (@samp{gdb}) su dobar +izbor, iako biste mogli preferirati i koristiti alatke specifične za +proizvođača. @node Debugger @subsection Kako da ispravljam moje Pascal programe? Da biste debuggirali svoje programe, (a) GNU Pascal mora biti u -mogućnosti generirati debug informacije za vašu platformu, i +mogućnosti generirati debug informacije za vaĹĄu platformu, i (b) morati imati debugger koji ju znade razumjeti. @itemize @bullet @@ -224,43 +224,43 @@ Ako @samp{gpc -g -o hello hello.p} daje: @smallexample gpc: -g not supported for this platform @end smallexample -onda to znači da GPC ne može generirati debugging informacije. Obično, +onda to znači da GPC ne moĹže generirati debugging informacije. Obično, instaliranje -@samp{gas} (dio GNU binutils) umjesto vašeg "sistemskog" asemblera -može riješiti problem. Kad konfigurirate GCC koji GPC koristi, specificirajte -@samp{--with-gnu-as}, i - po mogućnosti - @samp{--with-gnu-ld} i/ili -@samp{--with-stabs}. Više informacija može se naći u +@samp{gas} (dio GNU binutils) umjesto vaĹĄeg "sistemskog" asemblera +moĹže rijeĹĄiti problem. Kad konfigurirate GCC koji GPC koristi, specificirajte +@samp{--with-gnu-as}, i - po mogućnosti - @samp{--with-gnu-ld} i/ili +@samp{--with-stabs}. ViĹĄe informacija moĹže se naći u @file{INSTALL} datoteci u GNU CC source direktoriju. @item -Debugger vašeg sustava ne mora razumjeti debug informacije generirane -GNU alatkama. U tom slučaju može pomoći instaliranje @samp{gdb}-a. +Debugger vaĹĄeg sustava ne mora razumjeti debug informacije generirane +GNU alatkama. U tom slučaju moĹže pomoći instaliranje @samp{gdb}-a. @end itemize -U najgorem slučaju, ako možete debuggirati programe prevođene GCC-om, -onda biste to trebali moći da to napravite i s GPC-om. +U najgorem slučaju, ako moĹžete debuggirati programe prevođene GCC-om, +onda biste to trebali moći da to napravite i s GPC-om. GNU debugger (@samp{gdb}) trenutno nema ``Pascal'' mod, tako da nije -u mogućnosti prikazati neke Pascal strukture i sl. Dok debuggirate, +u mogućnosti prikazati neke Pascal strukture i sl. Dok debuggirate, molimo primijetite da je Inicijalno Slovo U Svakom Identifikatoru -Veliko Slovo A Ostatak Su Mala Slova. Ako želite prikazati varijablu +Veliko Slovo A Ostatak Su Mala Slova. Ako Ĺželite prikazati varijablu @samp{foo} u debuggeru, otipkajte @samp{show Foo} ili @samp{display Foo} namjesto toga. Iako je @samp{gdb} izvrstan debugger, njegov user-interface nije -baš svačiji prvi izbor. Ako biste željeli debuggirati pod X11, +baĹĄ svačiji prvi izbor. Ako biste Ĺželjeli debuggirati pod X11, molimo pogledajte u comp.windows.x FAQ: ``Where can I get an X-based debugger?'' na:@* @uref{http://www.faqs.org/faqs/x-faq/part6/section-2.html} -Neki korisni front-endovi uključuju: XXGDB, tGDB i XWPE. Pogledati:@* +Neki korisni front-endovi uključuju: XXGDB, tGDB i XWPE. Pogledati:@* @uref{http://www.ee.ryerson.ca:8080/~elf/xapps/Q-IV.html} Vrlo lijep, ali zahtjevan po resurse je (baziran na Motif-u) DDD:@* @uref{http://sol.ibr.cs.tu-bs.de/softech/ddd/} -Nadalje, RHIDE (@pxref{IDE}) sadrži ugrađenu debugging podršku, -sličnu onoj u IDE od BP-a. +Nadalje, RHIDE (@pxref{IDE}) sadrĹži ugrađenu debugging podrĹĄku, +sličnu onoj u IDE od BP-a. @c FIXME -- the following left untranslated because referenced from en/install.texi @node Libraries @@ -283,12 +283,12 @@ sličnu onoj u IDE od BP-a. @cindex darovane jedinice @cindex jedinice -Nekoliko programera je darovalo jedinice za GPC. One su obično -oglašene na email listi, @ref{Mailing List}. Većina njih može -se naći na @uref{http://www.gnu-pascal.de/contrib/}. +Nekoliko programera je darovalo jedinice za GPC. One su obično +oglaĹĄene na email listi, @ref{Mailing List}. Većina njih moĹže +se naći na @uref{http://www.gnu-pascal.de/contrib/}. @node IDE -@subsection Možete li preporučiti integriranu razvojnu okolinu (IDE)? +@subsection MoĹžete li preporučiti integriranu razvojnu okolinu (IDE)? @cindex IDE Korisnici Borland Pascala se mogu zapitati da li postoji neki @@ -299,30 +299,30 @@ sugestija: @cindex emacs @cindex xemacs @item (X)Emacs. Neki ljudi misle da je Emacs odgovor na pitanje -Života, Univerzuma i Svega Ostalog, drugi su odlučili da je GNUsan. -Dostupan na vašem prijateljski raspoloženom GNU mirror-u i u -većini distribucija. +Ĺ˝ivota, Univerzuma i Svega Ostalog, drugi su odlučili da je GNUsan. +Dostupan na vaĹĄem prijateljski raspoloĹženom GNU mirror-u i u +većini distribucija. @cindex PENG -@item PENG. Nije free software, ali je pisan s GPC-om. Vrlo je sličan -Borland-ovom IDE-u, ali s mnogim proširenjima. Binarne distribucije -za DJGPP, Linux i Solaris mogu se naći na +@item PENG. Nije free software, ali je pisan s GPC-om. Vrlo je sličan +Borland-ovom IDE-u, ali s mnogim proĹĄirenjima. Binarne distribucije +za DJGPP, Linux i Solaris mogu se naći na @uref{http://fjf.gnu.de/peng/}. @cindex RHIDE @item RHIDE. DJGPP korisnici mogli bi isprobati RHIDE. Posljednja -(beta) verzija je kompatibilna s GNU Pascalom i omogućava step, -trace i watch funkcije poput onih u Borland IDE-u. Može se naći na +(beta) verzija je kompatibilna s GNU Pascalom i omogućava step, +trace i watch funkcije poput onih u Borland IDE-u. MoĹže se naći na @uref{http://www.rhide.com}. @cindex DevPascal @item DevPascal. DevPascal je free software IDE za mingw32 platformu. -Može se naći na +MoĹže se naći na @uref{http://www.gnu-pascal.de/contrib/chief/} ili @uref{http://www.bloodshed.net/devpascal.html} @cindex xwpe -@item XWPE je još jedna imitacija Borland IDE-a, tako da je korisnici +@item XWPE je joĹĄ jedna imitacija Borland IDE-a, tako da je korisnici Borland Pascala mogu ocijeniti kao dobru alternativu. @end itemize @@ -330,53 +330,53 @@ Borland Pascala mogu ocijeniti kao dobru @section GNU Pascal na DJGPP (MS-DOS) platformi Ovo poglavlje raspravlja neke potencijalne probleme s GNU Pascalom -na MS-DOSu, koristeći DJGPP. +na MS-DOSu, koristeći DJGPP. @menu -* Što je DJGPP:: Što je DJGPP? -* DJGPP FAQ:: Ako trebate više informacija -* DJGPP download:: Što download-ati? +* Ĺ to je DJGPP:: Ĺ to je DJGPP? +* DJGPP FAQ:: Ako trebate viĹĄe informacija +* DJGPP download:: Ĺ to download-ati? * Instaliranje GPC-a na DJGPP:: Kako instalirati prevodilac? -* DJGPP Info reader:: Ne mogu čitati info dokumentaciju! -* DJGPP DPMI server:: GPC kaže: no DPMI +* DJGPP Info reader:: Ne mogu čitati info dokumentaciju! +* DJGPP DPMI server:: GPC kaĹže: no DPMI * Asemblerska sintaksa:: Imam problema s asemblerskim kodom @dots{} -* DJGPP-specifičan kod:: Reci mi kako da koristim DPMI, BIOS i +* DJGPP-specifičan kod:: Reci mi kako da koristim DPMI, BIOS i ostale stvari povezane s DOS-om -* Veličina stoga (stack):: Dobio sam ``exception'' kod pristupanja +* Veličina stoga (stack):: Dobio sam ``exception'' kod pristupanja @samp{array [1 .. 4000000] of Byte}. @end menu -@node Što je DJGPP -@subsection Što je DJGPP? +@node Ĺ to je DJGPP +@subsection Ĺ to je DJGPP? -Slijedeći paragraf je preuzet sa site-a +Slijedeći paragraf je preuzet sa site-a @uref{http://www.delorie.com/djgpp/}: DJGPP je kompletan 32-bit C/C++ razvojni sistem na Intel 80386 -(i višim) PC-jima koji vrte DOS. Uključuje prijenos mnogih GNU +(i viĹĄim) PC-jima koji vrte DOS. Uključuje prijenos mnogih GNU razvojnih alatki. Razvojne alatke zahtijevaju 80386 ili novije -računalo, kao i programi koje one proizvode. U najvećem broju -slučajeva, programi koje proizvodi se mogu komercijalno prodavati +računalo, kao i programi koje one proizvode. U najvećem broju +slučajeva, programi koje proizvodi se mogu komercijalno prodavati bez licence ili taksi. @node DJGPP FAQ -@subsection Ako trebate više informacija +@subsection Ako trebate viĹĄe informacija -GPC/DJGPP je DJGPP V2 aplikacija, i većina DJGPP dokumentacije se +GPC/DJGPP je DJGPP V2 aplikacija, i većina DJGPP dokumentacije se odnosi na na GPC. Izvrstan izvor informacija je DJGPP FAQ: @uref{http://www.delorie.com/djgpp/v2faq/230b.zip} -Drugo mjesto za traženje DJGPP dokumentacije je DJGPP Knowledge Base, -na slijedećem URL-u: +Drugo mjesto za traĹženje DJGPP dokumentacije je DJGPP Knowledge Base, +na slijedećem URL-u: @uref{http://www.delorie.com/djgpp/doc/kb/} @node DJGPP download -@subsection Što download-ati? +@subsection Ĺ to download-ati? -Kao što je rečeno u @ref{Komponente}, osim samog GPC-a, trebate -još i asembler, linker i prijatelje, C biblioteku i po mogućnosti -debugger. @uref{http://www.delorie.com/djgpp/} preporuča -slijedeće datoteke i oni će vam pomoći naći mirror: +Kao ĹĄto je rečeno u @ref{Komponente}, osim samog GPC-a, trebate +joĹĄ i asembler, linker i prijatelje, C biblioteku i po mogućnosti +debugger. @uref{http://www.delorie.com/djgpp/} preporuča +slijedeće datoteke i oni će vam pomoći naći mirror: @multitable {xxxxxxxxxxxxxxxxxxxxx} {xxxxxxxxxxxxxxxxxxx} @item @file{v2/djdev203.zip} @tab (C biblioteka) @@ -387,25 +387,25 @@ slijedeće datoteke i oni će vam pomoći n @item @file{v2gnu/txi40b.zip} @tab (texi) @end multitable -Ova lista čini oko 10 MB ne brojeći GPC. Možete koristiti -binarnu verziju GPC-a s web poslužitelja. +Ova lista čini oko 10 MB ne brojeći GPC. MoĹžete koristiti +binarnu verziju GPC-a s web posluĹžitelja. @node Instaliranje GPC-a na DJGPP @subsection Kako instalirati prevodilac? Ako nemate DJGPP instaliran na svom hard disku, kreirajte direktorij za GNU Pascal (@file{c:\gpc}), i raspakirajte -arhive. Pazite da sačuvate strukturu direktorija (koristite +arhive. Pazite da sačuvate strukturu direktorija (koristite npr. @samp{pkunzip -d}). Sada, dodajte direktorij gdje se -nalazi @file{gpc.exe} (@file{c:\gpc\bin}) vašem putu (@samp{$PATH}), +nalazi @file{gpc.exe} (@file{c:\gpc\bin}) vaĹĄem putu (@samp{$PATH}), zatim postavite DJGPP environment varijablu tako da pokazuje na -vašu @file{djgpp.env} datoteku: +vaĹĄu @file{djgpp.env} datoteku: @smallexample set DJGPP=c:\gpc\djgpp.env @end smallexample -Zatim, dodajte ovo u vašu @file{djgpp.env} datoteku: +Zatim, dodajte ovo u vaĹĄu @file{djgpp.env} datoteku: @smallexample --------------------------------------------------------- @@ -419,10 +419,10 @@ LIBRARY_PATH=%/>;LIBRARY_PATH%%DJDIR%/li @end smallexample GPC online dokumentacija je u GNU info formatu; potreban vam je -info-reader (@file{txi390b.zip}) da ga pročitate, ili koristite -ugrađeni info-reader iz RHIDE ili PENG IDE. Da biste dodali GPC +info-reader (@file{txi390b.zip}) da ga pročitate, ili koristite +ugrađeni info-reader iz RHIDE ili PENG IDE. Da biste dodali GPC dokumentaciju u info "directory" datoteku, editirajte datoteku -@file{c:\gpc\info\dir}, i nađite slijedeći odlomak: +@file{c:\gpc\info\dir}, i nađite slijedeći odlomak: @smallexample --------------------------------------------------------- @@ -452,22 +452,22 @@ The GNU Debugger (gdb and gdb-dpmi). --------------------------------------------------------- @end smallexample -Specifične informacije za situacije s malo memorije i još više toga -mogu se pronaći u DJGPP FAQ i dokumentaciji. +Specifične informacije za situacije s malo memorije i joĹĄ viĹĄe toga +mogu se pronaći u DJGPP FAQ i dokumentaciji. @node DJGPP Info reader -@subsection Ne mogu čitati info dokumentaciju! +@subsection Ne mogu čitati info dokumentaciju! -Da biste čitali Info dokumentaciju, potreban vam je @samp{info} +Da biste čitali Info dokumentaciju, potreban vam je @samp{info} program, @file{txi390b.zip} ili neka integrirana razvojna okolina (IDE) poput RHIDE ili PENG. @node DJGPP DPMI server -@subsection GPC kaže: no DPMI +@subsection GPC kaĹže: no DPMI Nemate instaliran DPMI server, a DJGPP v2 zatijeva da je on pokrenut. -Možete ili koristiti neki od komercijalnih DPMI servera (npr. -pokrećite @samp{gpc} u DOS prozoru pod MS-Windowsima), ili download-ajte +MoĹžete ili koristiti neki od komercijalnih DPMI servera (npr. +pokrećite @samp{gpc} u DOS prozoru pod MS-Windowsima), ili download-ajte i instalirajte CWSDPMI (@file{csdpmi3b.zip}) koji je free DPMI server napisan za DJGPP. @@ -475,37 +475,37 @@ napisan za DJGPP. @subsection Imam problema s asemblerskim kodom @dots{} GNU asembler (@file{as.exe}), ili @file{gas}, kojeg poziva GCC -prihvaća ``AT&T'' sintaksu koja je različita od ``Intel'' sintakse. -Razlike su pojašnjene u odlomku 17.1 DJGPP FAQ-a. +prihvaća ``AT&T'' sintaksu koja je različita od ``Intel'' sintakse. +Razlike su pojaĹĄnjene u odlomku 17.1 DJGPP FAQ-a. -Na rapolaganju je vodič kojeg je napisao Brennan Mr. Wacko Underwood +Na rapolaganju je vodič kojeg je napisao Brennan Mr. Wacko Underwood @email{brennan@@mack.rt66.com}, a opisuje kako koristiti "inline" asemblerske instrukcije s DJGPP-om, na ovom URL-u: @uref{http://www.delorie.com/djgpp/doc/brennan/brennan_att_inline_djgpp.html} -Postoji također i GPC asemblerski vodič, na adresi@* +Postoji također i GPC asemblerski vodič, na adresi@* @uref{http://www.gnu-pascal.de/contrib/misc/gpcasm.zip} Odlomak 17.3 DJGPP FAQ-a opisuje neke metode pretvaranja ``Intel'' sintakse u ``AT&T'' sintaksu. -Međutim, molimo primijetite da asemlerski kod nije prenosiv, tj. -radit će na IA32 (``x86'') i kompatibilnim procesorima, ali neće -se čak ni prevesti na drugim procesorima. Dakle umećući asemblerske -instrukcije u svoje programe, znatno ćete smanjiti njihovu korisnost. +Međutim, molimo primijetite da asemlerski kod nije prenosiv, tj. +radit će na IA32 (``x86'') i kompatibilnim procesorima, ali neće +se čak ni prevesti na drugim procesorima. Dakle umećući asemblerske +instrukcije u svoje programe, znatno ćete smanjiti njihovu korisnost. Ako mislite da zaiste ``trebate'' asemblerski kod radi brzine -- i -provjerili ste da se asemblerski kod zaista vrti brže nego Pascal kod -sa prikladnim optimizacijama -- mogli biste poželjeti oboje, i Pascal +provjerili ste da se asemblerski kod zaista vrti brĹže nego Pascal kod +sa prikladnim optimizacijama -- mogli biste poĹželjeti oboje, i Pascal i asemblersku verziju, i dozvoliti npr. da jedan @samp{@{$ifdef i386@}} -odlučuje koju će koristiti. Na ovaj način, program će se barem prevesti +odlučuje koju će koristiti. Na ovaj način, program će se barem prevesti na svim procesorima. -@node DJGPP-specifičan kod +@node DJGPP-specifičan kod @subsection Reci mi kako da koristim DPMI, BIOS i ostale stvari povezane s DOS-om DPMI, BIOS i ostale funkcije ne razlikuju se od ostalih sistemskih -funkcija. Pogledajte u GPC priručnik kako pristupiti C biblioteci svog -sustava. Ovaj mali primjer pokazuje kako koristiti DPMI, kopirajući +funkcija. Pogledajte u GPC priručnik kako pristupiti C biblioteci svog +sustava. Ovaj mali primjer pokazuje kako koristiti DPMI, kopirajući neke strukture i prototipove iz @samp{}: @smallexample @@ -575,23 +575,23 @@ begin end. @end smallexample -@node Veličina stoga (stack) +@node Veličina stoga (stack) @subsection Dobio sam ``exception'' kod pristupanja @samp{array [1 .. 4000000] of Byte} -Po ``default-u'', maksimalna veličina stoga DJGPP aplikacije je 256K. -Ako trebate više, to trebate podesiti sa stubedit programom, +Po ``default-u'', maksimalna veličina stoga DJGPP aplikacije je 256K. +Ako trebate viĹĄe, to trebate podesiti sa stubedit programom, npr. @smallexample stubedit your_app.exe minstack=5000K @end smallexample -Drugačiji način je da dodate slijedeći kod vašem programu kako bi -definirali minimalnu veličinu stoga (ovdje: 2 MB). Ova će vrijednost biti -poštovana čak i ako korisnik postavi manje vrijednosti koristeći stubedit, -tako da bi ova metoda mogla biti nešto sigurnija. (Ime linkera @samp{_stklen} -je esencijalno; ime korišteno u Pascalu nije od značaja. Konstanta se ne mora -koristiti bilo gdje u programu. Preporučuje se da ovu deklaraciju +Drugačiji način je da dodate slijedeći kod vaĹĄem programu kako bi +definirali minimalnu veličinu stoga (ovdje: 2 MB). Ova će vrijednost biti +poĹĄtovana čak i ako korisnik postavi manje vrijednosti koristeći stubedit, +tako da bi ova metoda mogla biti neĹĄto sigurnija. (Ime linkera @samp{_stklen} +je esencijalno; ime koriĹĄteno u Pascalu nije od značaja. Konstanta se ne mora +koristiti bilo gdje u programu. Preporučuje se da ovu deklaraciju stavite u glavnu programsku datoteku, ne u beku jedinicu/modul, tako da programi koji koriste modul/jedinicu mogu postaviti koji god limit im je potreban.) @@ -603,18 +603,18 @@ const @{$endif@} @end smallexample -Svejedno, mogla bi biti dobra ideja koristiti pokazivače (``pointer'') -na velike strukture, i alocirati memoriju dinamički za vrijeme -izvršavanja. - -DJGPP mora alocirati stog u fizičkoj memoriji za vrijeme pokretanja -programa, dakle treba biti oprezan s prevelikim proširenjima stoga. -Većina drugih sistema alocira stranice stoga ``on demand'', kada -ih program traži, pa je jedini razlog da se uopće postavi ograničenje -taj da se spriječi da podivljala rekurzija pojede svu memoriju @dots{} +Svejedno, mogla bi biti dobra ideja koristiti pokazivače (``pointer'') +na velike strukture, i alocirati memoriju dinamički za vrijeme +izvrĹĄavanja. + +DJGPP mora alocirati stog u fizičkoj memoriji za vrijeme pokretanja +programa, dakle treba biti oprezan s prevelikim proĹĄirenjima stoga. +Većina drugih sistema alocira stranice stoga ``on demand'', kada +ih program traĹži, pa je jedini razlog da se uopće postavi ograničenje +taj da se spriječi da podivljala rekurzija pojede svu memoriju @dots{} -Na Unix-olikim sustavima, možete postaviti ``resource limit'', ali -to obično ne radite u normalnim programima, nego radije u postavkama +Na Unix-olikim sustavima, moĹžete postaviti ``resource limit'', ali +to obično ne radite u normalnim programima, nego radije u postavkama ljuske (bash: @samp{ulimit}; csh: @samp{limit}; sistemski poziv: @samp{setrlimit}(2)). @@ -622,23 +622,23 @@ ljuske (bash: @samp{ulimit}; csh: @samp{ @section Nizovi @menu -* String schema:: Čemu sva ta zbrka oko nizova? +* String schema:: Čemu sva ta zbrka oko nizova? * Nizovi u variant record-ima:: Preklapanje nizova u variant record-ima -* Bajt za duljinu:: Zašto @samp{s[0]} ne sadržava duljinu? -* Nizovi kao parametri po vrijednosti:: Pažnja sa znakovnim nizovima kao +* Bajt za duljinu:: ZaĹĄto @samp{s[0]} ne sadrĹžava duljinu? +* Nizovi kao parametri po vrijednosti:: PaĹžnja sa znakovnim nizovima kao parametrima -* Kratki znakovni nizovi:: Podrška za BP kompatibilne kratke +* Kratki znakovni nizovi:: PodrĹĄka za BP kompatibilne kratke znakovne nizove -* C znakovni nizovi:: Što sa C znakovnim nizovima? +* C znakovni nizovi:: Ĺ to sa C znakovnim nizovima? @end menu @node String schema -@subsection Čemu sva ta zbrka oko nizova? +@subsection Čemu sva ta zbrka oko nizova? -Znakovni nizovi u Turbo Pascalu imaju bajt koji označava duljinu, na -samom početku. Kako je vrijednost bajta u opsegu 0 .. 255, to ograničava -znakovne nizove na 255 znakova. Međutim, u Pascal shemi znakovni niz je, -kao što je definirano odlomkom 6.4.3.3.3 ISO 10206 Extended Pascal +Znakovni nizovi u Turbo Pascalu imaju bajt koji označava duljinu, na +samom početku. Kako je vrijednost bajta u opsegu 0 .. 255, to ograničava +znakovne nizove na 255 znakova. Međutim, u Pascal shemi znakovni niz je, +kao ĹĄto je definirano odlomkom 6.4.3.3.3 ISO 10206 Extended Pascal standarda, ``schema record'': @smallexample @@ -649,24 +649,24 @@ type end; @end smallexample -Ovaj @samp{+ 1} je GPC ekstenzija da bi se učinilo mogućim da se -automatski dodaje @samp{#0} ``terminator'' kad se proslijeđuje ili -ih se dodjeljuje CString-ovima. Tako uz trošak od malo dodatne +Ovaj @samp{+ 1} je GPC ekstenzija da bi se učinilo mogućim da se +automatski dodaje @samp{#0} ``terminator'' kad se proslijeđuje ili +ih se dodjeljuje CString-ovima. Tako uz troĹĄak od malo dodatne kompleksnosti (mora se deklarirati kapacitet niza, ne koristite -@samp{GetMem} bez eksplicitne inicijalizacije člana @samp{Capacity}, -i dodatnog zahtjeva na prostor) sada možete imati vrlo dugačke +@samp{GetMem} bez eksplicitne inicijalizacije člana @samp{Capacity}, +i dodatnog zahtjeva na prostor) sada moĹžete imati vrlo dugačke znakovne nizove. @node Nizovi u variant record-ima @subsection Preklapanje nizova u variant record-ima -Q: Da li bi različite varijante u varijant record-u trebale +Q: Da li bi različite varijante u varijant record-u trebale zapadati u istu memorijsku lokaciju? Prethodni Pascali koje sam koristio su ovo garantirali, i napisao sam low-level kod koji se oslanja na to. Varijante nisu iste duljine, niti je bila namjera da budu. -A: Ne, namjerno je učinjeno da diskriminante nisu preklopljene +A: Ne, namjerno je učinjeno da diskriminante nisu preklopljene u memoriji, da bi se one mogle biti ispravno inicijalizirati prije svega. Razmotrite: @@ -680,23 +680,23 @@ end; Ako bi se nizovi preklapali, posebno bi njihove diskriminante zauzimale isto mjesto u memoriji. Kako bi onda trebale biti -inicijalizirane? Na bilo koji način, bilo bi krivo za barem jednu od +inicijalizirane? Na bilo koji način, bilo bi krivo za barem jednu od varijanti @dots{} Dakle, nakon diskusije u @uref{news:comp.lang.pascal.ansi-iso,ISO Pascal newsgroup-i} gdje -se ovo pitanje pojavilo u vezi s varijablama (koje također zahtijevaju -nešto automatske inicijalizacije i finalizacije), odlučili smo +se ovo pitanje pojavilo u vezi s varijablama (koje također zahtijevaju +neĹĄto automatske inicijalizacije i finalizacije), odlučili smo da napravimo ovo u GPC-u za sve tipove s automatskom inicijalizacijom i finalizacijom (trenutno datoteke, objekti i sheme (schemata), -uključujući i znakovne nizove, u budućnosti bi to također mogle biti -i Delphi kompatibilne klase i finalizirani tipovi), budući da +uključujući i znakovne nizove, u budućnosti bi to također mogle biti +i Delphi kompatibilne klase i finalizirani tipovi), budući da standard ionako ne garantira za iste da su u preklapanom memorijskom -području (engl. overlay) @dots{} +području (engl. overlay) @dots{} -Postoje dva načina u GPC-u da se dobije garantirano preklapanje -memorije (oba nestandardna, naravno, budući da standard ne pretpostavlja -ništa o internim reprezentacijama; ali su oba BP-kompatibilna), +Postoje dva načina u GPC-u da se dobije garantirano preklapanje +memorije (oba nestandardna, naravno, budući da standard ne pretpostavlja +niĹĄta o internim reprezentacijama; ali su oba BP-kompatibilna), @samp{absolute} deklaracije i varijabilno dodjeljivanje tipova (variable type casts). Npr. da bi se preklapalo polje bajtova @samp{b} sa varijablom @samp{v}: @@ -706,89 +706,89 @@ var b: array [1 .. SizeOf (v)] of Byte absolute v; @end smallexample -Ili možete koristiti dodjelu tipa: +Ili moĹžete koristiti dodjelu tipa: @smallexample type t = array [1 .. SizeOf (v)] of Byte; @end smallexample -nakon čega @samp{t (v)} može biti korišten kao polje preklopljeno +nakon čega @samp{t (v)} moĹže biti koriĹĄten kao polje preklopljeno (u memoriji se nalazi na istom mjestu) sa @samp{v}. @node Bajt za duljinu -@subsection Zašto @samp{s[0]} ne sadržava duljinu? +@subsection ZaĹĄto @samp{s[0]} ne sadrĹžava duljinu? -Q: U standardnom Pascalu možete očekivati da se @samp{s[1]} podudara +Q: U standardnom Pascalu moĹžete očekivati da se @samp{s[1]} podudara sa pozicijom prvog znaka u nizu @samp{s} i tako jedan znak ulijevo je duljina od @samp{s}. Tako je @samp{s[0]} jednak duljini od @samp{s}. Istina? -A: Ovo stoji za UCSD/BP znakovne nizove (koje GPC još ne implementira, -ali to je u planu). Jedini nizovi koje Standard Pascal podržava +A: Ovo stoji za UCSD/BP znakovne nizove (koje GPC joĹĄ ne implementira, +ali to je u planu). Jedini nizovi koje Standard Pascal podrĹžava su polja znakova bez ikakvog polja za duljinu. -GPC također podržava Extended Pascal znakovnu shemu -(@pxref{String schema}), ali one također nemaju bajt koji sadrži -duljinu na ``poziciji 0'', nego radije jedan @samp{Length} član -(koji je veći od jednog bajta). +GPC također podrĹžava Extended Pascal znakovnu shemu +(@pxref{String schema}), ali one također nemaju bajt koji sadrĹži +duljinu na ``poziciji 0'', nego radije jedan @samp{Length} član +(koji je veći od jednog bajta). @node Nizovi kao parametri po vrijednosti -@subsection Pažnja sa znakovnim nizovima kao parametrima +@subsection PaĹžnja sa znakovnim nizovima kao parametrima Q: Postoje li neki skriveni problemi s parametrima - znakovnim nizovima? @c FIXME -- does this "string literal" mean it has to be a string constant, @c like "string1", "string2", "GPC" etc.? -A: Budite oprezni kad prosljeđujete znakovne nizove potprogramima -koje prihvaćaju znakovni niz kao parametar po vrijednosti i onda +A: Budite oprezni kad prosljeđujete znakovne nizove potprogramima +koje prihvaćaju znakovni niz kao parametar po vrijednosti i onda interno modificiraju vrijednost parametra. Unutar rutine, parametar po vrijednosti dobiva fiksan kapacitet -- duljinu znakovnog niza u -navodnicima koja mi je proslijeđena. Bilo kakav pokušaj da se -dodijeli duža vrijednost neće uspjeti. +navodnicima koja mi je proslijeđena. Bilo kakav pokuĹĄaj da se +dodijeli duĹža vrijednost neće uspjeti. Ovo vrijedi samo ako je parametar po vrijednosti deklariran kao @samp{String}. Ako je deklariran kao znakovni niz sa danim kapacitetom (npr. @samp{String (255)}), tada dobiva ovaj kapacitet unutar rutine. @node Kratki znakovni nizovi -@subsection Podrška za BP kompatibilne kratke znakovne nizove +@subsection PodrĹĄka za BP kompatibilne kratke znakovne nizove -Q: Dvije različite vrste znakovnih nizova nose isto ime -- -@samp{String} -- to radi malo konfuzije. Možda bi znakovni nizovi +Q: Dvije različite vrste znakovnih nizova nose isto ime -- +@samp{String} -- to radi malo konfuzije. MoĹžda bi znakovni nizovi u starom stilu trebali biti preimenovani u @samp{short string}? -A: Kada implementiramo kratke nizove, morat ćemo napraviti ovakvu -razliku. Naš trenutačan plan ide ovako: +A: Kada implementiramo kratke nizove, morat ćemo napraviti ovakvu +razliku. NaĹĄ trenutačan plan ide ovako: @samp{String (@var{n})}: string shema (EP kompatibilna) @samp{String [@var{n}]}: kratki znakovni niz (UCSD/BP kompatibilan, gdje @var{n} mora biti <= 255) -@samp{String}: zavisno od prekidača i zastavica prevodioca, po defaultu -shema bez diskriminante, ali u BP modu (ili sa specijalnim prekidačem) +@samp{String}: zavisno od prekidača i zastavica prevodioca, po defaultu +shema bez diskriminante, ali u BP modu (ili sa specijalnim prekidačem) kratki niz kapaciteta 255 (UCSD/BP kompatibilan). -Q: Kada će ti kratki nizovi biti na raspolaganju? +Q: Kada će ti kratki nizovi biti na raspolaganju? -A: Planira se već duže od godine. Zakašnjenje je uzrokovano problemima -koji su više pritiskali tim. +A: Planira se već duĹže od godine. ZakaĹĄnjenje je uzrokovano problemima +koji su viĹĄe pritiskali tim. @node C znakovni nizovi -@subsection Što sa C znakovnim nizovima? +@subsection Ĺ to sa C znakovnim nizovima? -C znakovni niz (@samp{char *}) je polje znakova, završeno s +C znakovni niz (@samp{char *}) je polje znakova, zavrĹĄeno s @samp{#0} znakom. Funkcije C biblioteke zahtijevaju C, ne Pascal string argumente. -Međutim, znakovni nizovi u Pascal stilu se automatski pretvaraju -u one u C stilu kada se prosljeđuju rutinama koje očekuju znakovne -nizove u C stilu. Ovo radi jedino ako rutina samo čita iz znakovnog +Međutim, znakovni nizovi u Pascal stilu se automatski pretvaraju +u one u C stilu kada se prosljeđuju rutinama koje očekuju znakovne +nizove u C stilu. Ovo radi jedino ako rutina samo čita iz znakovnog niza, ne ako ga ona modificira. -Npr. to je način kako ćete pozvati @samp{system()} poziv u vašoj -C biblioteci (što više nije neophodno, otkad je već ugrađen +Npr. to je način kako ćete pozvati @samp{system()} poziv u vaĹĄoj +C biblioteci (ĹĄto viĹĄe nije neophodno, otkad je već ugrađen @samp{Execute}): @smallexample @@ -807,49 +807,49 @@ end. Mogli biste koristiti tip @samp{PChar} umjesto @samp{CString}. I @samp{CString} i @samp{PChar} su oboje definirani kao @samp{^Char} -- -iako mi preporučujemo @samp{CString} jer to čini jasnijim da +iako mi preporučujemo @samp{CString} jer to čini jasnijim da govorimo o nekakvom nizu prije nego o jednom jedinom znaku. Mnogo rutina iz biblioteke u Pascalu za mnoge aplikacije postoji u -GPC jedinici i u nekim drugim jedinicama. Kad god je to moguće, +GPC jedinici i u nekim drugim jedinicama. Kad god je to moguće, trebalo bi ove koristiti (npr. @samp{Execute} radije nego @samp{system()}, i tada se ne trebate brinuti o @samp{CString}-ovima. -Molimo @strong{NE} prosljeđivati C znakovne nizove kao @samp{const} -ili @samp{var} parametar ako C prototip kaže @samp{const char *} -ili ćete vjerojatno dobiti "Segmentation fault" pogrešku. +Molimo @strong{NE} prosljeđivati C znakovne nizove kao @samp{const} +ili @samp{var} parametar ako C prototip kaĹže @samp{const char *} +ili ćete vjerojatno dobiti "Segmentation fault" pogreĹĄku. @c FIXME -- why is this illegal, should be made more clear! -@node Traženje pomoći -@section Traženje pomoći +@node TraĹženje pomoći +@section TraĹženje pomoći -Molimo pročitajte GPC priručnik (info datoteke ili drugi format) +Molimo pročitajte GPC priručnik (info datoteke ili drugi format) kao i @file{README} i @file{BUGS} datoteke koje dolaze s GPC-om -(obično instalirane u direktoriju @file{/usr/local/doc/gpc}), plus -ostalu dokumentaciju koja bi mogla pomoći (DJGPP FAQ ako koristite -DJGPP, i sl.) prije nego pošaljete email timu za održavanje ili na mailing +(obično instalirane u direktoriju @file{/usr/local/doc/gpc}), plus +ostalu dokumentaciju koja bi mogla pomoći (DJGPP FAQ ako koristite +DJGPP, i sl.) prije nego poĹĄaljete email timu za odrĹžavanje ili na mailing listu. -Posebno, @file{BUGS} datoteka sadrži informacije kako poslati -prijavu buga na najefikasniji način. +Posebno, @file{BUGS} datoteka sadrĹži informacije kako poslati +prijavu buga na najefikasniji način. -@samp{Support} poglavlje GPC priručnika reći će vam gdje da nađete -više informacija o GPC-u u kako kontaktirati GPC razvojni tim. +@samp{Support} poglavlje GPC priručnika reći će vam gdje da nađete +viĹĄe informacija o GPC-u u kako kontaktirati GPC razvojni tim. @ifclear FAQONLY (@pxref{Support}) @end ifclear @ifset FAQONLY -Slijedeće informacije su iz tog poglavlja. +Slijedeće informacije su iz tog poglavlja. @c FIXME -- "Mailing List" is left untranslated because of xrefs @menu -* Mailing List:: Pridružite se GPC mailing listi +* Mailing List:: PridruĹžite se GPC mailing listi * Arhive mailing listi:: Pogledajte u arhivama mailing liste * Newsgroups:: Pitajte na newsgroupi (grupa vijesti na USENETu) -* Profesionalna podrška:: Potražite individualnu podršku za GPC -* Krahovi prevodioca:: Kad se compiler skrši @dots{} -* Reporting Bugs:: Pronađite kako prijaviti GPC bugove -* Testing:: Testiranje - ako imate GPC source, naučite kako +* Profesionalna podrĹĄka:: PotraĹžite individualnu podrĹĄku za GPC +* Krahovi prevodioca:: Kad se compiler skrĹĄi @dots{} +* Reporting Bugs:: Pronađite kako prijaviti GPC bugove +* Testing:: Testiranje - ako imate GPC source, naučite kako pokrenuti Test Suite (kolekciju testova) da testirate bugove koje prijavljujete. @end menu @@ -863,37 +863,37 @@ Slijedeće informacije su iz tog poglavlj @section Razno @menu -* Suradnja na projektu:: Želio bih doprinijeti projektu; što sad? -* GPC web poslužitelj:: Gdje je GNU Pascal web poslužitelj? +* Suradnja na projektu:: Ĺ˝elio bih doprinijeti projektu; ĹĄto sad? +* GPC web posluĹžitelj:: Gdje je GNU Pascal web posluĹžitelj? * O ovom FAQ-u:: O ovom FAQ-u. @end menu @node Suradnja na projektu -@subsection Želio bih doprinijeti projektu; što sad? +@subsection Ĺ˝elio bih doprinijeti projektu; ĹĄto sad? -Ako biste željeli surađivati na projektu, molimo pišite na mailing listu, +Ako biste Ĺželjeli surađivati na projektu, molimo piĹĄite na mailing listu, @ref{Mailing List}. -@node GPC web poslužitelj -@subsection Gdje je GNU Pascal web poslužitelj? +@node GPC web posluĹžitelj +@subsection Gdje je GNU Pascal web posluĹžitelj? GPC homepage na webu, za informacije i download, je na@* @uref{http://www.gnu-pascal.de}. -GPC "To-Do" lista, sa najnovijim mogućnostima i ispravljenim -bugovima može se naći tamo. +GPC "To-Do" lista, sa najnovijim mogućnostima i ispravljenim +bugovima moĹže se naći tamo. @node O ovom FAQ-u @subsection O ovom FAQ-u -Trenutno održava: Russ Whitaker, @email{russ@@ashlandhome.net} +Trenutno odrĹžava: Russ Whitaker, @email{russ@@ashlandhome.net} Ovo je druga inkarnacija GNU Pascal FAQ liste, bazirano na prethodnom FAQ-u kojeg je napisao J.J. van der Heijden. Komentari, sugestije ili -korekcije ovoj listi često postavljanih pitanja su uvijek dobrodošle. +korekcije ovoj listi često postavljanih pitanja su uvijek dobrodoĹĄle. -Molimo uključite u svoju email poruku i broj verzije dokumenta na -koji se vaši komentari odnose (možete naći broj verzije na početku ove +Molimo uključite u svoju email poruku i broj verzije dokumenta na +koji se vaĹĄi komentari odnose (moĹžete naći broj verzije na početku ove FAQ liste). Mnogi su ljudi doprinijeli ovom FAQ-u, samo neki od njih su Index: gcc/p/doc/hr/gpc.1 =================================================================== RCS file: /cvs/gcc/gcc/p/doc/hr/gpc.1,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/hr/gpc.1 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/hr/gpc.1 21 May 2012 21:30:53 -0000 1.2 @@ -31,20 +31,20 @@ gpc \- GNU projekt Pascal Prevodilac (Co .IR filename\c .RB " ].\|.\|. .SH OPIS -Ova man stranica ne sadrži previše informacija o GNU Pascalu +Ova man stranica ne sadrĹži previĹĄe informacija o GNU Pascalu jer nestrukturiran format man stranice nije prikladan za -dokumentiranje tako velikog programa kao što je GNU Pascal. -Relevantne informacije možete pronaći u GNU Pascal priručniku koji -je raspoloživ u Texinfo formatu i formatima proizvedenima iz njega, +dokumentiranje tako velikog programa kao ĹĄto je GNU Pascal. +Relevantne informacije moĹžete pronaći u GNU Pascal priručniku koji +je raspoloĹživ u Texinfo formatu i formatima proizvedenima iz njega, kao npr. HTML, Info i DVI. Za gledanje Info dokumentacije, molimo pokrenite `\|\c .B info -f gpc-hr\c \&\|' ili otvorite info datoteku `\|\c .B gpc-hr.info\c -\&\|' u vašem najdražem info readeru. +\&\|' u vaĹĄem najdraĹžem info readeru. .PP -Aktualne verzije priručnika u raznim formatima kao i prevodilac (compiler) -sam mogu se uvijek naći na WWW-u na adresi +Aktualne verzije priručnika u raznim formatima kao i prevodilac (compiler) +sam mogu se uvijek naći na WWW-u na adresi .B http://www.gnu-pascal.de\c \&. .SH DATOTEKE @@ -64,20 +64,20 @@ file.o objektna datoteka .br file.gpi GNU Pascal interface datoteka .br -a.out povezani izvršni kod (po defaultu) +a.out povezani izvrĹĄni kod (po defaultu) .br \fILIBDIR\fR/gpcpp preprocesor .br \fILIBDIR\fR/gpc1 sam prevodilac .br -\fILIBDIR\fR/collect2 sučelje povezivača (linker front end) potrebno na nekim strojevima +\fILIBDIR\fR/collect2 sučelje povezivača (linker front end) potrebno na nekim strojevima .br \fILIBDIR\fR/libgcc.a GCC biblioteka potprograma (subroutine library) .br \fILIBDIR\fR/libgpc.dda GPC runtime biblioteka .sp .I LIBDIR -je obično +je obično .B /usr/local/lib/\c .IR machine / version . .SH "SEE ALSO" @@ -110,25 +110,12 @@ Using as: the GNU Assembler\c gld: the GNU linker\c , Steve Chamberlain i Roland Pesch. -.SH NAPOMENA -Ako na ovoj man stranici ne vidite ispravno 'naše' znakove i nakon što ste -propisno instalirali iso-8859-2 font (ili je već bio na sistemu), probajte -slijedeće: -.PP -.B setenv PAGER less; setenv LESSCHARSET iso8859 -.PP -ili -.PP -.B PAGER=less; LESSCHARSET=iso8859; export PAGER LESSCHARSET -.PP -već prema ljusci koju koristite. - .SH BUGOVI -Za instrukcije kako prijavljivati bugove, vidite GNU Pascal priručnik. +Za instrukcije kako prijavljivati bugove, vidite GNU Pascal priručnik. .SH KOPIRANJE -(Licenca je na engleskom, u tijeku je traženje odobrenog hrvatskog +(Licenca je na engleskom, u tijeku je traĹženje odobrenog hrvatskog prijevoda koji bi bio pravno utemeljen.) Copyright (c) 1997-2006 Free Software Foundation, Inc. @@ -149,5 +136,5 @@ translations approved by the Free Softwa the original English. .SH AUTORI -Pogledajte GNU Pascal priručnik za listu suradnike i onih koji su doprinijeli +Pogledajte GNU Pascal priručnik za listu suradnike i onih koji su doprinijeli GNU Pascalu. Index: gcc/p/doc/hr/gpc.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/hr/gpc.texi,v retrieving revision 1.1.111.1 retrieving revision 1.3 diff -u -p -r1.1.111.1 -r1.3 --- gcc/p/doc/hr/gpc.texi 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/hr/gpc.texi 21 May 2012 21:30:54 -0000 1.3 @@ -1,9 +1,6 @@ \input texinfo @setfilename gpc-hr.info -@settitle GNU Pascal priručnik. -@c We use Latin 2 charset for hr_HR language. -@set charset iso-8859-2 -@documentencoding iso-8859-2 +@settitle GNU Pascal priručnik. @c Copyright (C) 1996-2006 Free Software Foundation, Inc. @c This file is part of the GPC Manual. @@ -109,7 +106,7 @@ instead of in the original English. @image{GnuPascal,,12cm} @sp 2 @end iftex -@center @titlefont{GNU Pascal priručnik} +@center @titlefont{GNU Pascal priručnik} @sp 2 @center Jan-Jaap van der Heijden, @sp 1 @@ -168,8 +165,8 @@ instead of in the original English. @node Top @top GNU Pascal -Ovaj priručnik dokumentira kako se pokreće, instalira i održava GNU Pascal -Compiler (GPC), kao i njegove nove značajke i eventualne nekompatibilnosti, +Ovaj priručnik dokumentira kako se pokreće, instalira i odrĹžava GNU Pascal +Compiler (GPC), kao i njegove nove značajke i eventualne nekompatibilnosti, te kako prijavljivati bugove. Odgovara GPC-u @value{GPCVersion} (GCC @value{GCCVersion}). @@ -177,56 +174,56 @@ te kako prijavljivati bugove. Odgovara @menu Uvod: -* Dobrodošli:: Dobrodošli na GNU Pascal @dots{} -* Naglasci:: Neke od GPC-ovih interesantnih značajki. +* DobrodoĹĄli:: DobrodoĹĄli na GNU Pascal @dots{} +* Naglasci:: Neke od GPC-ovih interesantnih značajki. * News:: Novosti - Nova svojstva GNU Pascala (engleski). -* FAQ:: Lista često postavljanih pitanja o GNU Pascalu. +* FAQ:: Lista često postavljanih pitanja o GNU Pascalu. Instalacija: * Installation:: Instalacija - kako obaviti download, prevesti i instalirati GNU Pascal (engleski). -Korištenje GNU Pascala: +KoriĹĄtenje GNU Pascala: -* Invoking GPC:: Pozivanje GPC-a (opcije komandne linije podržane od GNU +* Invoking GPC:: Pozivanje GPC-a (opcije komandne linije podrĹžane od GNU Pascala). -* Programming:: Programerov vodič u GPC (engleski). -* Borland Pascal:: Brzi vodič za prelaz sa Borland Pascala na GNU Pascal. -* Reference:: Abecedni GPC jezični referentni priručnik (engleski). -* Keywords:: Pascalove ključne riječi i operatori podržani u GPC-u. -* Support:: Gdje dobiti podršku za GNU Pascal; kako prijaviti bug. +* Programming:: Programerov vodič u GPC (engleski). +* Borland Pascal:: Brzi vodič za prelaz sa Borland Pascala na GNU Pascal. +* Reference:: Abecedni GPC jezični referentni priručnik (engleski). +* Keywords:: Pascalove ključne riječi i operatori podrĹžani u GPC-u. +* Support:: Gdje dobiti podrĹĄku za GNU Pascal; kako prijaviti bug. Razvoj: * To Do:: GNU Pascalova "za napraviti" lista (engleski). -* Internals:: Interne strukture - kako dobiti više informacija o samom +* Internals:: Interne strukture - kako dobiti viĹĄe informacija o samom GPC-ovom kodu (engleski). Licence: * Copying:: Kopiranje -- GNU General Public License -- licenca, - vaša prava i obaveze kad koristite GPC (engl.). + vaĹĄa prava i obaveze kad koristite GPC (engl.). * Library Copying:: Kopiranje biblioteka -- GNU Lesser General Public - License -- licenca, vaša prava i obaveze kod - korištenja pojedinih biblioteka (engl.). -* Demo Copying:: GPL uz iznimku -- vaša prava i obaveze kod korištenja + License -- licenca, vaĹĄa prava i obaveze kod + koriĹĄtenja pojedinih biblioteka (engl.). +* Demo Copying:: GPL uz iznimku -- vaĹĄa prava i obaveze kod koriĹĄtenja ili modifikacije demo programa. Dodatak: * Acknowledgments:: Suradnici na GNU Pascal projektu. -* Resursi:: resursi za korištenje s GPC-om. +* Resursi:: resursi za koriĹĄtenje s GPC-om. * GNU:: GNU projekt. -* Indeks:: Indeks koncepta i imena simbola (nedovršeno). +* Indeks:: Indeks koncepta i imena simbola (nedovrĹĄeno). + +@end menu (Napomena: naslovi nekih poglavlja nisu prevedeni zbog unakrsnih referenci iz - neprevedenih poglavlja priručnika i prema njima. Ponegdje u - izborniku bi se mogao pojaviti problem oko `č' i sl. zbog buga + neprevedenih poglavlja priručnika i prema njima. Ponegdje u + izborniku bi se mogao pojaviti problem oko `č' i sl. zbog buga u starijim verzijama - <= 4.0f - GNU `info' programa.) -@end menu - @include welcome.texi @include about.texi @include news.texi Index: gcc/p/doc/hr/gpcs.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/hr/gpcs.texi,v retrieving revision 1.1.111.1 retrieving revision 1.4 diff -u -p -r1.1.111.1 -r1.4 --- gcc/p/doc/hr/gpcs.texi 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/hr/gpcs.texi 7 Aug 2017 20:11:33 -0000 1.4 @@ -1,9 +1,6 @@ \input texinfo @setfilename gpcs-hr.info @settitle GNU Pascal Coding Standards (hrvatski) -@c We use Latin 2 charset for hr_HR language. -@set charset iso-8859-2 -@documentencoding iso-8859-2 @c Copyright (C) 2001-2006 Free Software Foundation, Inc. @c @@ -90,13 +87,13 @@ Odgovara originalu od: @value{lastupdate @menu * Uvod:: O GNU Pascal Coding Standards -* Pravne začkoljice:: ... Ili kako zadržati software slobodnim ... -* Savjeti glede dizajna:: Općenito o dizajnu programa -* Ponašanje programa:: Kako bi se programi trebali ponašati +* Pravne začkoljice:: ... Ili kako zadrĹžati software slobodnim ... +* Savjeti glede dizajna:: Općenito o dizajnu programa +* PonaĹĄanje programa:: Kako bi se programi trebali ponaĹĄati * Programiranje u Pascalu:: Kako najbolje upotrijebiti Pascal * Dokumentacija:: Dokumentiranje programa * Izdanja programa:: Proces izdanja verzija softwarea -* Rječnik pojmova:: Rječnik pojmova korištenih kroz tekst +* Rječnik pojmova:: Rječnik pojmova koriĹĄtenih kroz tekst * Indeks:: @end menu @@ -105,29 +102,29 @@ Odgovara originalu od: @value{lastupdate Napomena prevodioca: -Ovaj dokument sadrži prijevod teksta ``GNU Pascal Coding Standards''. -Za neke originalne engleske termine i izraze nisu nađeni zadovoljavajući +Ovaj dokument sadrĹži prijevod teksta ``GNU Pascal Coding Standards''. +Za neke originalne engleske termine i izraze nisu nađeni zadovoljavajući prijevodi, pa se koriste ili engleski originalni izrazi, ili pak -izrazi korišteni u žargonu struke. Za sva pitanja i povratne +izrazi koriĹĄteni u Ĺžargonu struke. Za sva pitanja i povratne informacije glede prijevoda molimo kontaktirajte M. Todorovac @email{mtodorov@@alu.hr}. Zahvaljujemo se svima koji su pomogli ovaj -rad savjetima ili na drugi način. Kako se GPC intenzivno razvija, +rad savjetima ili na drugi način. Kako se GPC intenzivno razvija, gdje god se pojavila razlika u ovom prijevodu u odnosu na engleski -izvornik, treba uzeti izvornik kao točniji. Iznimke od ovoga će -biti samo slučaj i samo iznimke. +izvornik, treba uzeti izvornik kao točniji. Iznimke od ovoga će +biti samo slučaj i samo iznimke. GNU Pascal Coding Standards ("Standarde kodiranja u GNU Pascalu") je dizajnirala grupa volontera s GNU Pascal projekta. Cilj ovog -dokumenta je proširivanje "GNU standarda kodiranja" (GNU Coding -Standards) specifičnim informacijama o Pascal programiranju. -Istini za volju, informacije sadržane u "GNU standardima kodiranja" +dokumenta je proĹĄirivanje "GNU standarda kodiranja" (GNU Coding +Standards) specifičnim informacijama o Pascal programiranju. +Istini za volju, informacije sadrĹžane u "GNU standardima kodiranja" uglavnom su relevantne za programe pisane u C jeziku. -S druge strane, ta pravila također objašnjavaju mnoga pravila i +S druge strane, ta pravila također objaĹĄnjavaju mnoga pravila i principe koji su korisni za pisanje prenosivih, robustnih i pouzdanih -programa. Mnoge od tih općenitih tema bi mogle biti dijeljene s -ovim dokumentom uz samo nekoliko specifičnih primjedbi, tako da -su pružene unakrsne reference koje će čitatelja povesti do općenitije -informacije sadržane u "GNU standardima kodiranja". +programa. Mnoge od tih općenitih tema bi mogle biti dijeljene s +ovim dokumentom uz samo nekoliko specifičnih primjedbi, tako da +su pruĹžene unakrsne reference koje će čitatelja povesti do općenitije +informacije sadrĹžane u "GNU standardima kodiranja". Ovo izdanje GNU Pascal Coding Standards (GPCS) je nadopunjeno na dan @value{lastupdate}. @@ -135,41 +132,41 @@ Ovo izdanje GNU Pascal Coding Standards @cindex gdje nabaviti GPCS @cindex download standarda kodiranja -Dokument GNU Pascal Coding Standards je raspoloživ kao dio GPC +Dokument GNU Pascal Coding Standards je raspoloĹživ kao dio GPC distribucije -- u binarnim distribucijama kao info datoteke, u -distribucijama izvornog koda (source) također i kao Texinfo datoteke -iz kojih se dodatni formati kao što su HTML, PostScript i PDF mogu -generirati. HTML verzija je također raspoloživa na GPC matičnoj +distribucijama izvornog koda (source) također i kao Texinfo datoteke +iz kojih se dodatni formati kao ĹĄto su HTML, PostScript i PDF mogu +generirati. HTML verzija je također raspoloĹživa na GPC matičnoj stranici, @uref{http://www.gnu-pascal.de}. @cindex feedback -@cindex Vaš doprinos ovom dokumentu +@cindex VaĹĄ doprinos ovom dokumentu Ispravke ili sugestije u vezi ovog dokumenta bi trebalo slati na GNU Pascal Compiler Documentation mailing listu, @email{gpc-doc@@gnu.de}. -Ako imate sugestiju, molimo uključite željenu verziju rečenica kako ih -zamišljate u dokumentu; naše vrijeme je ograničeno. Context 'diff' -izvorne Texinfo datoteke bi bio vrlo dobrodošao, ako je ikako moguće. -Ako pak ne možete poslati 'context diff', molimo osjećajte se pozvanim -da ipak svakako pošaljete svoju sugestiju. +Ako imate sugestiju, molimo uključite Ĺželjenu verziju rečenica kako ih +zamiĹĄljate u dokumentu; naĹĄe vrijeme je ograničeno. Context 'diff' +izvorne Texinfo datoteke bi bio vrlo dobrodoĹĄao, ako je ikako moguće. +Ako pak ne moĹžete poslati 'context diff', molimo osjećajte se pozvanim +da ipak svakako poĹĄaljete svoju sugestiju. -Slijedeći ljudi su tirani, koji nameću svoj stil kodiranja zajednici +Slijedeći ljudi su tirani, koji nameću svoj stil kodiranja zajednici programera: Peter Gerwinski @samp{peter(at)gerwinski.de}, Frank Heckenbach @samp{frank(at)pascal.gnu.de}, Markus Gerwinski @samp{markus(at)gerwinski.de}, Dominik Freche @samp{dominik.freche(at)gmx.net}, Nicola Girardi @samp{nicola(at)g-n-u.de}. -@node Pravne začkoljice -@chapter ... Ili kako zadržati software slobodnim ... +@node Pravne začkoljice +@chapter ... Ili kako zadrĹžati software slobodnim ... @cindex pravni aspekti -Ovo poglavlje iz 'GNU Coding Standards' raspravlja o tome kako učiniti -sigurnim da GNU software ne zapadne u pravne poteškoće, i ostala srodna +Ovo poglavlje iz 'GNU Coding Standards' raspravlja o tome kako učiniti +sigurnim da GNU software ne zapadne u pravne poteĹĄkoće, i ostala srodna pitanja. @xref{Intellectual Property, , , standards}. @node Savjeti glede dizajna -@chapter Općenito o dizajnu programa +@chapter Općenito o dizajnu programa @cindex dizajn programa Ovo poglavlje raspravlja o nekim pitanjima koja biste trebali uzeti u @@ -178,48 +175,48 @@ obzir kod dizajna vlastitog programa. @menu * Programski jezik:: Koji jezik koristiti? * Pascal i C:: Povezivanje s bibliotekama C funkcija -* Korištenje ekstenzija:: Korištenje nestandardnih značajki +* KoriĹĄtenje ekstenzija:: KoriĹĄtenje nestandardnih značajki @end menu @node Programski jezik @section Koji jezik koristiti? @cindex programski jezici -Osobno podržavamo ideju da je raznovrsnost programskih jezika dobra -stvar i da su različiti jezici pogodniji za različite tipove -zadataka. Za razliku od 'GNU Coding Standards', nećemo čitatelja -pokušati uvjeravati da koristi C, Pascal niti bilo koji drugi jezik za +Osobno podrĹžavamo ideju da je raznovrsnost programskih jezika dobra +stvar i da su različiti jezici pogodniji za različite tipove +zadataka. Za razliku od 'GNU Coding Standards', nećemo čitatelja +pokuĹĄati uvjeravati da koristi C, Pascal niti bilo koji drugi jezik za @strong{sve} zadatke. -Ako čitate ovaj tekst, već ste vjerojatno odlučili koristiti Pascal -za neki projekt ili razmatrate njegovo korištenje. Ovaj dokument će -sugerirati @emph{kako} oblikovati vlastiti Pascal kod kad ste već -odlučili da koristite GNU Pascal. +Ako čitate ovaj tekst, već ste vjerojatno odlučili koristiti Pascal +za neki projekt ili razmatrate njegovo koriĹĄtenje. Ovaj dokument će +sugerirati @emph{kako} oblikovati vlastiti Pascal kod kad ste već +odlučili da koristite GNU Pascal. @node Pascal i C @section Povezivanje s bibliotekama C funkcija @cindex Pascal i C @cindex povezivanje s C bibliotekama -Možete povezivati s C bibliotekama ili s C objektnim kodom vaše +MoĹžete povezivati s C bibliotekama ili s C objektnim kodom vaĹĄe Pascal programe ili jedinice (@samp{unit}). Molimo nadjite u -GPC priručniku upute o tome kako se to izvodi. +GPC priručniku upute o tome kako se to izvodi. (@pxref{Other Languages, , , gpc}) @cindex wrapperi -Napose, za pristup C bibliotekama snažno preporučamo korištenje C +Napose, za pristup C bibliotekama snaĹžno preporučamo koriĹĄtenje C wrappera. Ovo je pitanje prenosivosti. Mogu se pojaviti promjene -između različitih verzija biblioteka koje bi utjecale na direktne +između različitih verzija biblioteka koje bi utjecale na direktne @samp{external} deklaracije u Pascal kodu. Trebali biste uskladiti wrappere tako da Pascal programi ili jedinice (@samp{unit}) rade s bilo kojom verzijom biblioteke koja vam je na raspolaganju. @c FIXME -- what does this actually mean??? - Ask Frank!, MT 20020115 -U nekim situacijama kad rukujete s velikim paketima ne možete -lako zadržati kompatibilnost između različitih verzija samih paketa. -U ovakovom slučaju, možete povezivati (engl. linking) izravno s -bibliotekom s kojom planirate raditi, te povežite u paket dodatnu -C datoteku koja ne radi ništa osim provjere verzije. Evo primjera +U nekim situacijama kad rukujete s velikim paketima ne moĹžete +lako zadrĹžati kompatibilnost između različitih verzija samih paketa. +U ovakovom slučaju, moĹžete povezivati (engl. linking) izravno s +bibliotekom s kojom planirate raditi, te poveĹžite u paket dodatnu +C datoteku koja ne radi niĹĄta osim provjere verzije. Evo primjera (na engleskom jeziku): @smallexample @@ -231,68 +228,68 @@ C datoteku koja ne radi ništa osim provj #endif @end smallexample -Primijeti korištenje @samp{!=} umjesto @samp{<} ili @samp{>}, kako bi -se izvršila vrlo striktna provjera verzije. Molimo držite na umu da je +Primijeti koriĹĄtenje @samp{!=} umjesto @samp{<} ili @samp{>}, kako bi +se izvrĹĄila vrlo striktna provjera verzije. Molimo drĹžite na umu da je ovo u redu ako postoji samo jedna implementacija biblioteke, npr. ovo -možete s bibliotekom GTK, ali ne možete s libc, libm, curses itd. +moĹžete s bibliotekom GTK, ali ne moĹžete s libc, libm, curses itd. @cindex header translator @cindex prevodilac header datoteka -Automatski prevodilac header datoteka je u planu koji bi učinio C -wrappere suvišnima. Ovo je, međutim, nimalo trivijalan zadatak i -nije sigurno da je u potpunosti moguć, tako da će potrajati neko -vrijeme prije nego što bude na raspolaganju. +Automatski prevodilac header datoteka je u planu koji bi učinio C +wrappere suviĹĄnima. Ovo je, međutim, nimalo trivijalan zadatak i +nije sigurno da je u potpunosti moguć, tako da će potrajati neko +vrijeme prije nego ĹĄto bude na raspolaganju. -@cindex prevođenje C koda +@cindex prevođenje C koda @cindex kompajliranje C koda -Možete uzeti kao pretpostavku da se GNU C prevodilac (engl. compiler) -koristi da se prevedu wrapperi, kao i općenito bilo koji isječak C +MoĹžete uzeti kao pretpostavku da se GNU C prevodilac (engl. compiler) +koristi da se prevedu wrapperi, kao i općenito bilo koji isječak C koda koji povezujete sa svojim Pascal kodom. Razlog za ovakvu pretpostavku je da jedino GNU C prevodilac garantirano ima sve konvencije kompatibilne s GNU Pascal prevodiocem na svakoj platformi -na kojoj se oni vrte, s obzirom da dijele isti 'backend'. Također, -GNU Pascal prevodilac je uvijek izgrađen zajedno s GNU C prevodiocem, -tako da se može očekivati da je @samp{gcc} raspoloživ uvijek kad je to -slučaj i s @samp{gpc}-om +na kojoj se oni vrte, s obzirom da dijele isti 'backend'. Također, +GNU Pascal prevodilac je uvijek izgrađen zajedno s GNU C prevodiocem, +tako da se moĹže očekivati da je @samp{gcc} raspoloĹživ uvijek kad je to +slučaj i s @samp{gpc}-om -@node Korištenje ekstenzija -@section Korištenje nestandardnih značajki +@node KoriĹĄtenje ekstenzija +@section KoriĹĄtenje nestandardnih značajki @cindex nestandardne ekstenzije -Pružene su mnoge GNU Pascal olakšice koje proširuju standardni Pascal +PruĹžene su mnoge GNU Pascal olakĹĄice koje proĹĄiruju standardni Pascal jezik. Da li koristiti te ekstenzije u svojim programima je zamorno pitanje. -S jedne strane, korištenje ekstenzija može proizvesti čišći program. -S druge strane - ljudi neće moći prevesti program ako GNU Pascal -prevodilac nije na raspolaganju. One mogu prouzročiti da se program -neće uspješno prevesti s drugim prevodiocima. - -Općenito, najbolje je zadržati kompatibilnost prema drugim prevodiocima -ili jezičnim standardima, @emph{ako je tu kompatibilnost lako postići}. -Međutim, na našu žalost, uz postizanje kompatibilnosti dobivate znatne -poteškoće, pa i unazađenja. Na primjer, mogli biste morati dodati gomile +S jedne strane, koriĹĄtenje ekstenzija moĹže proizvesti čišći program. +S druge strane - ljudi neće moći prevesti program ako GNU Pascal +prevodilac nije na raspolaganju. One mogu prouzročiti da se program +neće uspjeĹĄno prevesti s drugim prevodiocima. + +Općenito, najbolje je zadrĹžati kompatibilnost prema drugim prevodiocima +ili jezičnim standardima, @emph{ako je tu kompatibilnost lako postići}. +Međutim, na naĹĄu Ĺžalost, uz postizanje kompatibilnosti dobivate znatne +poteĹĄkoće, pa i unazađenja. Na primjer, mogli biste morati dodati gomile @samp{@{$ifdef@}}-ova da biste providjeli za neke nestandardne prevodioce, -a oni pak čine kod težim sa čitanje, pisanje i održavanje. Još gore, +a oni pak čine kod teĹžim sa čitanje, pisanje i odrĹžavanje. JoĹĄ gore, @samp{@{$ifdef@}}-ovi su sami po sebi nestandardna ekstenzija, tako da -ne dobivate jako mnogo na ovaj način. +ne dobivate jako mnogo na ovaj način. -Na kraju, sugeriramo da se ne brinete previše za kompatibilnost. Sva -sučelja (engl. interface) GNU Pascal prevodioca (sam prevodilac i -tzv. Run Time System) su otvorena. To znači da ih se može implementirati -za druge prevodioce kad je potrebno, ili se čak i sam izvorni kod -može koristiti uz uvjet da je licenca poštovana (čitajte više o GNU -General Public License - GNU općoj javnoj licenci na adresi +Na kraju, sugeriramo da se ne brinete previĹĄe za kompatibilnost. Sva +sučelja (engl. interface) GNU Pascal prevodioca (sam prevodilac i +tzv. Run Time System) su otvorena. To znači da ih se moĹže implementirati +za druge prevodioce kad je potrebno, ili se čak i sam izvorni kod +moĹže koristiti uz uvjet da je licenca poĹĄtovana (čitajte viĹĄe o GNU +General Public License - GNU općoj javnoj licenci na adresi @uref{http://www.gnu.org/copyleft/gpl.html}), radije nego da se -osakaćuje kod nekorištenjem proširenih značajki. Jedan (ograničen) +osakaćuje kod nekoriĹĄtenjem proĹĄirenih značajki. Jedan (ograničen) primjer ove strategije je @samp{gpc-bp} jedinica za Borland Pascal, -distribuirana s GNU Pascal prevodiocem. Mogli biste poželjeti pogledati -njeno sučelje da vidite što točno sadrži. Lako ju je proširiti s -dodatnim mogućnostima za kompatibilnost prema potrebi, iako postoje -značajke koje nije lako emulirati (posebno one koje imaju specijalnu +distribuirana s GNU Pascal prevodiocem. Mogli biste poĹželjeti pogledati +njeno sučelje da vidite ĹĄto točno sadrĹži. Lako ju je proĹĄiriti s +dodatnim mogućnostima za kompatibilnost prema potrebi, iako postoje +značajke koje nije lako emulirati (posebno one koje imaju specijalnu sintaksu). -Molimo da ne koristite slijedeće mogućnosti, osobito one koje su +Molimo da ne koristite slijedeće mogućnosti, osobito one koje su implementirane samo zbog kompatibilnosti prema unatrag: @itemize @bullet @@ -302,25 +299,25 @@ Ovakvi @samp{(* *)} komentari za stare t @item @samp{#} direktive i @samp{//} komentari, kao u C-u/Delphi-ju. Ako -datoteka također mora biti korištena u C-u, može koristiti @samp{#} +datoteka također mora biti koriĹĄtena u C-u, moĹže koristiti @samp{#} direktive, C sintaksu u uvjetnim izrazima (engl. conditionals), te @samp{//} komentare. Primjeri (u trenutku pisanja ovog teksta - -može se promijeniti u budućnosti) su @file{p/rts/constants.h} u +moĹže se promijeniti u budućnosti) su @file{p/rts/constants.h} u izvornom kodu GNU Pascal prevodioca. @item @c FIXME not clear about most of this items -- consult GPC manual, MT 20020115 -pogrešno korištenje tipiziranih konstanti kao varijabli, što je -loša značajka Borland Pascala. +pogreĹĄno koriĹĄtenje tipiziranih konstanti kao varijabli, ĹĄto je +loĹĄa značajka Borland Pascala. @item Znakovne konstante tipa @samp{^A}. Koristite @samp{#1} ili @samp{Chr (1)} namjesto njih. @item -@samp{CString}-ove (osim za C sučelja, naravno) +@samp{CString}-ove (osim za C sučelja, naravno) @item -komplicirani Borland Pascal kod poput slijedećeg umjesto korištenja +komplicirani Borland Pascal kod poput slijedećeg umjesto koriĹĄtenja @samp{WriteStr}: @c FIXME -- clarify!!! MT, 20020115 @@ -330,15 +327,15 @@ s := 'Hello ' + s; @end smallexample @item -većinu slučajeva @samp{FillChar} i @samp{Move}, osim za low-level kod -i osim kad se odnosi na znakove unutar znakovnog niza. Korištenje: +većinu slučajeva @samp{FillChar} i @samp{Move}, osim za low-level kod +i osim kad se odnosi na znakove unutar znakovnog niza. KoriĹĄtenje: @smallexample FillChar (s, SizeOf (s), 0); @end smallexample -za pražnjenje niza znakova - pogrešno je u GNU Pascalu i neefikasno -čak i u Borland Pascalu, jer bi se mogla koristiti slijedeća naredba: +za praĹžnjenje niza znakova - pogreĹĄno je u GNU Pascalu i neefikasno +čak i u Borland Pascalu, jer bi se mogla koristiti slijedeća naredba: @smallexample s := ''; @@ -348,97 +345,97 @@ Ovo bi resetiralo samo polje duljine zna @c FIXME -- clarify "schemata" MT, 20020115 @item -većina slučajeva korištenja @samp{GetMem} i @samp{FreeMem} -- oni su -obično 'work-around' za nedostajuće sheme deklariranja tipa +većina slučajeva koriĹĄtenja @samp{GetMem} i @samp{FreeMem} -- oni su +obično 'work-around' za nedostajuće sheme deklariranja tipa (orig. @samp{schemata}) u drugim prevodiocima. @item -mnoge slučajeve parametara bez tipa +mnoge slučajeve parametara bez tipa @item -većinu priručne rutine povezane s imenima datoteka. (One pisane u -Borland Pascalu su obično primjenljive jedino na DOS-u, dok rutine -u @samp{GPC} jedinici pružaju prenosivu alternativu za većinu +većinu priručne rutine povezane s imenima datoteka. (One pisane u +Borland Pascalu su obično primjenljive jedino na DOS-u, dok rutine +u @samp{GPC} jedinici pruĹžaju prenosivu alternativu za većinu stvari.) @item -asemblerski kod, osim u vrlo malim područjima za specijalne -optimizacije, omeđene uz pomoć specifičnih @samp{@{$ifdef@}} -(na primjer, za tip procesora). Međutim, tada priložite +asemblerski kod, osim u vrlo malim područjima za specijalne +optimizacije, omeđene uz pomoć specifičnih @samp{@{$ifdef@}} +(na primjer, za tip procesora). Međutim, tada priloĹžite ekvivalentnu Pascal verziju u @samp{@{$else@}} dijelu -- i testirajte je! @item -sve što zahtjeva @samp{System} jedinicu +sve ĹĄto zahtjeva @samp{System} jedinicu @item -sve uvriježene pretpostavke o veličini tipova +sve uvrijeĹžene pretpostavke o veličini tipova @item pretpostavke o poretku bajtova (orig. 'endianness') (neki sistemi -imaju bajt veće težine i bajt manje težine u drugačijem poretku -nego drugi sistemi; molimo pogledajte rječnik @xref{Rječnik pojmova}, -za objašnjenje) +imaju bajt veće teĹžine i bajt manje teĹžine u drugačijem poretku +nego drugi sistemi; molimo pogledajte rječnik @xref{Rječnik pojmova}, +za objaĹĄnjenje) @item -imena koja počinju ili završavaju s podvlakom (engl. underscore, _) -ili imaju nekoliko uzastopnih znakova za podvlačenje +imena koja počinju ili zavrĹĄavaju s podvlakom (engl. underscore, _) +ili imaju nekoliko uzastopnih znakova za podvlačenje @item jedinice samo pisane za Borland Pascal kompatibilnost (@pxref{GPC Units, -, , GPC}). Primijetimo međutim, @samp{CRT} i @samp{Printer} nisu samo za -Borland Pascal kompatibilnost, već također i za generalnu uporabu. +, , gpc}). Primijetimo međutim, @samp{CRT} i @samp{Printer} nisu samo za +Borland Pascal kompatibilnost, već također i za generalnu uporabu. @end itemize Tekst GNU Coding Standards ima lijepih primjedbi na ovu temu. @xref{Using Extensions, , , standards}. -@node Ponašanje programa -@chapter Kako bi se programi trebali ponašati +@node PonaĹĄanje programa +@chapter Kako bi se programi trebali ponaĹĄati Ovo poglavlje iz teksta GNU Coding Standards opisuje konvencije za -pisanje robustnog softwarea. Također opisuje opće standarde za poruke -o greškama, sučelje naredbene linije (engl. command line interface), -te kako bi se biblioteke trebale ponašati. Ohrabrujemo vas da -slobodno pročitate taj dio teksta GNU Coding Standards. +pisanje robustnog softwarea. Također opisuje opće standarde za poruke +o greĹĄkama, sučelje naredbene linije (engl. command line interface), +te kako bi se biblioteke trebale ponaĹĄati. Ohrabrujemo vas da +slobodno pročitate taj dio teksta GNU Coding Standards. @xref{Program Behavior, , , standards}. -Ovdje su, međutim, posebne dodatne upute za programiranje u Pascalu. +Ovdje su, međutim, posebne dodatne upute za programiranje u Pascalu. @cindex signalne funkcije -Izbor između signalnih funkcija, o kojem se govori u GNU Coding +Izbor između signalnih funkcija, o kojem se govori u GNU Coding Standards, se obavlja u Run Time System-u tako da ne trebate brinuti o tome. -@cindex provjere grešaka -Slijedeće odstupanje od GNU Coding Standards je podrazumno ponašanje -za provjere grešaka koje detektiraju ``nemoguća'' stanja. Mi +@cindex provjere greĹĄaka +Slijedeće odstupanje od GNU Coding Standards je podrazumno ponaĹĄanje +za provjere greĹĄaka koje detektiraju ``nemoguća'' stanja. Mi sugeriramo da ne napravite samo abort programa. Ovo bi pretpostavljalo -da svaki korisnik može biti programer, ali mi ne vjerujemo da je -to realistično. Naš je savjet da ispišete razumnu poruku o grešci +da svaki korisnik moĹže biti programer, ali mi ne vjerujemo da je +to realistično. NaĹĄ je savjet da ispiĹĄete razumnu poruku o greĹĄci tako da korisnici mogu prijaviti opis buga programerima koji nisu sami primijetili bug ili ga ne mogu reproducirati. -Također, tekst GNU standardi kodiranja preporučuju provjeru -povratne vrijednosti svakog sistemskog poziva da li je možda -završio s pogreškom. To se odnosi na C. U Pascalu, provjera grešaka -je često automatska, tako da se ne trebate mučiti s tim provjerama. -Mnoge ulazno/izlazne (I/O) rutine ne vraćaju status (npr. @samp{Reset}), -ali one koje vraćaju bi obično trebalo provjeriti. - -Naravno možete onemogućiti automatske provjere pogrešaka i obaviti -provjeru sami. Istini za volju, neke greške mogu prouzročiti da program -automatski prekine (abort) izvođenje s porukom o grešci. Umjesto toga, -naročito u jedinicama (@samp{unit}) i modulima, mogli biste željeti -prijaviti pogrešku i dati korisniku priliku da intervenira i popravi -stvari. Da biste to učinili, morate koristiti @samp{@{$I-@}} direktivu +Također, tekst GNU standardi kodiranja preporučuju provjeru +povratne vrijednosti svakog sistemskog poziva da li je moĹžda +zavrĹĄio s pogreĹĄkom. To se odnosi na C. U Pascalu, provjera greĹĄaka +je često automatska, tako da se ne trebate mučiti s tim provjerama. +Mnoge ulazno/izlazne (I/O) rutine ne vraćaju status (npr. @samp{Reset}), +ali one koje vraćaju bi obično trebalo provjeriti. + +Naravno moĹžete onemogućiti automatske provjere pogreĹĄaka i obaviti +provjeru sami. Istini za volju, neke greĹĄke mogu prouzročiti da program +automatski prekine (abort) izvođenje s porukom o greĹĄci. Umjesto toga, +naročito u jedinicama (@samp{unit}) i modulima, mogli biste Ĺželjeti +prijaviti pogreĹĄku i dati korisniku priliku da intervenira i popravi +stvari. Da biste to učinili, morate koristiti @samp{@{$I-@}} direktivu prevodioca, i provjeriti vrijednost @samp{IOResult} (@pxref{IOResult, , , gpc}) ili globalnih varijabli -za pogreške kao što je @samp{InOutRes} (@pxref{InOutRes, , , gpc}). -Primijetite da se pozivi I/O rutina trenutno vraćaju ako je @samp{InOutRes} +za pogreĹĄke kao ĹĄto je @samp{InOutRes} (@pxref{InOutRes, , , gpc}). +Primijetite da se pozivi I/O rutina trenutno vraćaju ako je @samp{InOutRes} postavljen, tako da ga nije neophodno provjeravati nakon svake -operacije, pa je moguće slijedeće: +operacije, pa je moguće slijedeće: @smallexample @{$local I-@} @@ -455,26 +452,26 @@ if InOutRes <> 0 then end; @end smallexample -Bilo kako bilo, u vašem kodu biste mogli poželjeti provjeriti +Bilo kako bilo, u vaĹĄem kodu biste mogli poĹželjeti provjeriti @samp{Rewrite} i druge sistemske pozive sa zadatkom otvaranja, za -koje je najveća vjerojatnost da bi mogli završiti neuspješno; +koje je najveća vjerojatnost da bi mogli zavrĹĄiti neuspjeĹĄno; tako da izbjegnete daljnje nepotrebne pozive. Postoji skup rutina u GPC jedinici za imenovanje privremenih (temporary) datoteka, konfiguracijskih datoteka, i mnogo drugih stvari -povezanih s imenima datoteka. Prednosti korištenja ovih je da rade -na različitim vrstama sistema (na primjer Unix i DOS), pa se eventualni -budući problemi mogu riješiti na jednom mjestu u Run Time System-u -radije nego u nekoliko različitih programa ili jedinica (unit). - -Što se tiče biblioteka, sugeriramo da ne stavljate svaku rutinu u -posebnu datoteku. Nadamo se da će jednog dana GNU Pascal prevodilac -znati to napraviti automatski na nivou linkera (povezivača). Trenutno, -vjerujemo da je ugodnost programera znatno važnija nego veličina -proizvedene binarne datoteke. Također ne preporučamo korištenje -prefiksa u imenima, budući da će konflikti biti razriješeni upotrebom -kvalificiranih identifikatora (@samp{UnitName.RoutineName}) u budućnosti. -Dotada, molimo, koristite privremena zaobilazna rješenja (engl. work-around) +povezanih s imenima datoteka. Prednosti koriĹĄtenja ovih je da rade +na različitim vrstama sistema (na primjer Unix i DOS), pa se eventualni +budući problemi mogu rijeĹĄiti na jednom mjestu u Run Time System-u +radije nego u nekoliko različitih programa ili jedinica (unit). + +Ĺ to se tiče biblioteka, sugeriramo da ne stavljate svaku rutinu u +posebnu datoteku. Nadamo se da će jednog dana GNU Pascal prevodilac +znati to napraviti automatski na nivou linkera (povezivača). Trenutno, +vjerujemo da je ugodnost programera znatno vaĹžnija nego veličina +proizvedene binarne datoteke. Također ne preporučamo koriĹĄtenje +prefiksa u imenima, budući da će konflikti biti razrijeĹĄeni upotrebom +kvalificiranih identifikatora (@samp{UnitName.RoutineName}) u budućnosti. +Dotada, molimo, koristite privremena zaobilazna rjeĹĄenja (engl. work-around) kad se pojave konflikti. @node Programiranje u Pascalu @@ -482,26 +479,26 @@ kad se pojave konflikti. Ovo poglavlje daje savjete o tome kako najbolje iskoristi jezik Pascal kod pisanja softwarea. Naravno, pravila se odnose samo na kod koji se -objavljuje -- ako na primjer želite zakomentirati stvari sa staromodnim -komentarima poput @samp{(* ovoga *)}, to biste trebali učiniti privremeno +objavljuje -- ako na primjer Ĺželite zakomentirati stvari sa staromodnim +komentarima poput @samp{(* ovoga *)}, to biste trebali učiniti privremeno i ukloniti to prije distribuiranja koda. Ali s obzirom da nikad ne znate -da li ćete i kada objaviti svoj kod, dobra je ideja prionuti uz pravila -od početka. +da li ćete i kada objaviti svoj kod, dobra je ideja prionuti uz pravila +od početka. @menu * Izabrane natuknice:: Natuknice za programiranje u Pascalu -* Provjera konzistentnosti:: Korištenje @code{Assert} za prekid - programa ako se dogodi nešto ``nemoguće'' +* Provjera konzistentnosti:: KoriĹĄtenje @code{Assert} za prekid + programa ako se dogodi neĹĄto ``nemoguće'' * Formatiranje:: Formatiranje izvornog koda -* Komentari:: Komentiranje vašeg rada +* Komentari:: Komentiranje vaĹĄeg rada * Redoslijed:: Redoslijed blokova koda * Velika i mala slova:: Velika i mala slova u imenima -* Direktive prevodiocu:: Korištenje naredbi prevodiocu +* Direktive prevodiocu:: KoriĹĄtenje naredbi prevodiocu * Razmaci:: Kako koristiti razmake u kodu * Lomljenje redaka:: Gdje prelamati retke koda * Znakovni nizovi:: Znakovni nizovi (stringovi) * Internacionalizacija:: Tehnike za internacionalizaciju -* MemoryMap:: Kako možete sigurno koristiti @samp{MemoryMap} +* MemoryMap:: Kako moĹžete sigurno koristiti @samp{MemoryMap} @end menu @node Izabrane natuknice @@ -509,7 +506,7 @@ od početka. @cindex izabrane natuknice Pascal izvorne datoteke trebaju imati @samp{.pas} sufiks. Ime datoteke -bez sufiksa treba obično odgovarati imenu programa/jedinice/modula, +bez sufiksa treba obično odgovarati imenu programa/jedinice/modula, ali sve malim slovima. U jednoj datoteci bi trebao biti samo jedan program/jedinica/modul. @@ -518,49 +515,49 @@ opcije i to bez upozorenja. (@xref{Direk namjerno zabraniti neka upozorenja ako je stvarno neophodno.) Ne koristite automatske @samp{Result} varijable u funkcijama. Ako -želite jednu, deklarirajte ju: +Ĺželite jednu, deklarirajte ju: @smallexample function Foo (@dots{}) = Bar: Integer; @end smallexample -Koristite deklaraciju sa @samp{=}, ne bez, osim ako ne želite striktnu +Koristite deklaraciju sa @samp{=}, ne bez, osim ako ne Ĺželite striktnu PXSC kompatibilnost. -Ako funkcija vraća @samp{Boolean} da indicira uspješnu operaciju, -@samp{True} treba značiti uspjeh, a @samp{False} grešku, za razliku -od nekih C funkcija gdje @samp{0} znači uspjeh. +Ako funkcija vraća @samp{Boolean} da indicira uspjeĹĄnu operaciju, +@samp{True} treba značiti uspjeh, a @samp{False} greĹĄku, za razliku +od nekih C funkcija gdje @samp{0} znači uspjeh. -Izbjegavajte @samp{goto} i slične naredbe, kao što su @samp{Exit}, +Izbjegavajte @samp{goto} i slične naredbe, kao ĹĄto su @samp{Exit}, @samp{Return}, @samp{Break}, @samp{Continue}. Izbjegavajte -@samp{goto} pod svaku cijenu (osim @emph{možda} ne-lokalni @samp{goto} -za povratak iz @emph{duboko} ugniježđenih funkcija u slučaju pogreške). -Izbjegavajte ostale ako je moguće uz razuman uloženi napor. Ako bi to +@samp{goto} pod svaku cijenu (osim @emph{moĹžda} ne-lokalni @samp{goto} +za povratak iz @emph{duboko} ugniježđenih funkcija u slučaju pogreĹĄke). +Izbjegavajte ostale ako je moguće uz razuman uloĹženi napor. Ako bi to zahtijevalo dodatnu @samp{Boolean} varijablu, ovo se broji kao izgovor -za korištenje ovih naredbi ako to stvarno želite. Primijetite da često -kod postaje znatno @emph{jednostavniji} izbjegavanjem korištenja -@samp{Break} itd. i korištenjem umjesto toga boljih uvjeta za petlje -i drugačijih vrsta petlje. +za koriĹĄtenje ovih naredbi ako to stvarno Ĺželite. Primijetite da često +kod postaje znatno @emph{jednostavniji} izbjegavanjem koriĹĄtenja +@samp{Break} itd. i koriĹĄtenjem umjesto toga boljih uvjeta za petlje +i drugačijih vrsta petlje. -Nikad ne modificirajte brojače @samp{for} petlji, niti se oslanjajte +Nikad ne modificirajte brojače @samp{for} petlji, niti se oslanjajte na njihovu vrijednost nakon izlaska iz petlje (Ovo nije samo pitanje stila, to je definicija Pascala. Ti postupci proizvode nedefinirane rezultate.) -Nikad se ne oslanjajte na nedefinirano ponašanje. Na primjer, na to da su -globalne varijable inicijalizirane na @samp{0} na početku programa, -ili možda na novo alociranu memoriju koja se čini kao inicijalizirana, ili -na memoriju koja nakon dealociranja naizgled zadržava neke vrijednosti, -ili na to da brojači @samp{for} for petlji izgledaju kao da imaju neku -vrijednost nakon petlje -- ništa od ovoga nije garantirano, i ponašanje -se može promijeniti kad promijenite prevodilac ili njegovu verziju, +Nikad se ne oslanjajte na nedefinirano ponaĹĄanje. Na primjer, na to da su +globalne varijable inicijalizirane na @samp{0} na početku programa, +ili moĹžda na novo alociranu memoriju koja se čini kao inicijalizirana, ili +na memoriju koja nakon dealociranja naizgled zadrĹžava neke vrijednosti, +ili na to da brojači @samp{for} for petlji izgledaju kao da imaju neku +vrijednost nakon petlje -- niĹĄta od ovoga nije garantirano, i ponaĹĄanje +se moĹže promijeniti kad promijenite prevodilac ili njegovu verziju, ili ako promijenite platformu. -Nedefinirano znači NEDEFINIRANO, i činjenica da takve stvari izgledaju +Nedefinirano znači NEDEFINIRANO, i činjenica da takve stvari izgledaju kao da rade na svim sistemima koje ste provjerili, kao i sa 42 druga -prevodioca, ne znači točno ništa. +prevodioca, ne znači točno niĹĄta. -U komparacijama stavite ``jače promjenljiv'' izraz na lijevu stranu: +U komparacijama stavite ``jače promjenljiv'' izraz na lijevu stranu: @smallexample for i := 1 to 10 do @@ -571,39 +568,39 @@ for i := 1 to 10 do Ako promatramo drugi redak iz gornjeg primjera, izraz na lijevoj strani (@code{a[i]}) se mijenja svakom iteracijom petlje, -dok s desnom stranom (@code{Foo}) to nije slučaj. (U ovom slučaju +dok s desnom stranom (@code{Foo}) to nije slučaj. (U ovom slučaju pretpostavljamo da je @code{Foo} konstanta ili funkcija koja ne -ovisi o @code{i} ili nekim drugim globalnim podacima. Inače bi +ovisi o @code{i} ili nekim drugim globalnim podacima. Inače bi moglo imati smisla da se @code{Foo} stavi na lijevu stranu, i -možda stavi još jedan komentar da se to istakne.) +moĹžda stavi joĹĄ jedan komentar da se to istakne.) -Zadnji redak gornjeg primjera može izgledati čudno, jer @code{b[j]} +Zadnji redak gornjeg primjera moĹže izgledati čudno, jer @code{b[j]} i @code{a[i]} mogu izgledati kao da imaju isti stupanj ``promjenljivosti''. -Međutim, u stvari se @code{j} mijenja češće nego @code{i}, tj. svaki -put kad se @code{i} promijeni, @code{j} se već promijenio 10 puta. +Međutim, u stvari se @code{j} mijenja češće nego @code{i}, tj. svaki +put kad se @code{i} promijeni, @code{j} se već promijenio 10 puta. -Izbjegavajte dupliciranje koda. Lako je podleći iskušenju kopiranja -koda, ali postaje noćna mora održavanja da se kasnije promjene izvode -na nekoliko sličnih mjesta. Koristite rutine ili potprograme, -jedinice ili module, bilo što. Planirajte svaki dio koda tako da -taj dio može biti proširen. Nemojte posezati za previše dosjetljivim -trikovima na mjestima koja će vjerojatno kasnije biti mijenjana. - -Ne okružujte pojedinačne naredbe s @samp{begin} i @samp{end}, osim -ako nemate problem s visećim @samp{else} ili pojedinačna naredba -čini čitavo tijelo funkcije! Vidi slijedeće primjere: +Izbjegavajte dupliciranje koda. Lako je podleći iskuĹĄenju kopiranja +koda, ali postaje noćna mora odrĹžavanja da se kasnije promjene izvode +na nekoliko sličnih mjesta. Koristite rutine ili potprograme, +jedinice ili module, bilo ĹĄto. Planirajte svaki dio koda tako da +taj dio moĹže biti proĹĄiren. Nemojte posezati za previĹĄe dosjetljivim +trikovima na mjestima koja će vjerojatno kasnije biti mijenjana. + +Ne okruĹžujte pojedinačne naredbe s @samp{begin} i @samp{end}, osim +ako nemate problem s visećim @samp{else} ili pojedinačna naredba +čini čitavo tijelo funkcije! Vidi slijedeće primjere: @smallexample if foo then begin if bar then baz - end @{ Izbjegni problem s visećim else. @} + end @{ Izbjegni problem s visećim else. @} else qux @{ Jedno-linijska naredba. @} @end smallexample -Ne pišite prazne inicijalizatore jedinica. Ovo je primjer što @emph{ne} +Ne piĹĄite prazne inicijalizatore jedinica. Ovo je primjer ĹĄto @emph{ne} raditi: @smallexample @@ -631,37 +628,37 @@ end; end. @end smallexample -Ne pišite neiskorištene deklaracije, osim u sučeljima (@samp{interface}) -koja su namijenjena za korištenje od strane programa koji ih importira. +Ne piĹĄite neiskoriĹĄtene deklaracije, osim u sučeljima (@samp{interface}) +koja su namijenjena za koriĹĄtenje od strane programa koji ih importira. @cindex Booleove varijable Sjetite se da su @samp{Boolean}i @samp{Boolean}i. Molimo koristite @samp{if Foo then} umjesto @samp{if Foo = True then}, te @samp{if not Foo -then} umjesto @samp{if Foo = False then}. Također, koristite @samp{until +then} umjesto @samp{if Foo = False then}. Također, koristite @samp{until False} na mjesto @samp{until 1 = 0} -- ovo izgleda pametnije. Druga -uobičajena situacija je @samp{Foo := Expression} umjesto @samp{if +uobičajena situacija je @samp{Foo := Expression} umjesto @samp{if Expression then Foo := True else Foo := False}. Izbjegavajte dupliciranje globalnih identifikatora, tj. nemojte -preopterećivati (engl. overload) ugrađene identifikatore, (čak iako +preopterećivati (engl. overload) ugrađene identifikatore, (čak iako GNU Pascal prevodilac to dozvoljava) te ne koristite isti globalni identifikator u nekoliko jedinica (@samp{unit}) ili modula. (Ovo -svojstvo će biti prisutno u GNU Pascal prevodiocu u budućnosti pod +svojstvo će biti prisutno u GNU Pascal prevodiocu u budućnosti pod imenom ``kvalificirani identifikatori'' (engl. ``qualified identifiers'' ali ga svejedno nemojte koristiti. @cindex globalne varijable -Obeshrabrujemo korištenje globalnih varijabli za ne-globalne svrhe -(npr. korištenje varijable @code{Counter} korištene kao brojač -u raznim lokalnim potprogramima). Umjesto toga, deklarirajte brojačke -varijable za svaki potprogram koji ih treba. Ovo generalno također -omogućava bolju optimizaciju generiranog koda. +Obeshrabrujemo koriĹĄtenje globalnih varijabli za ne-globalne svrhe +(npr. koriĹĄtenje varijable @code{Counter} koriĹĄtene kao brojač +u raznim lokalnim potprogramima). Umjesto toga, deklarirajte brojačke +varijable za svaki potprogram koji ih treba. Ovo generalno također +omogućava bolju optimizaciju generiranog koda. -@cindex beskonačne petlje -Kada trebate beskonačnu petlju (iz koje se može iskočiti sa +@cindex beskonačne petlje +Kada trebate beskonačnu petlju (iz koje se moĹže iskočiti sa @samp{Break}), sugeriramo da koristite @code{repeat} petlju -radije nego @code{while} petlju jer ona pomiče kod manje udesno -(barem tamo gdje je više od jedne naredbe u petlji). Preciznije: +radije nego @code{while} petlju jer ona pomiče kod manje udesno +(barem tamo gdje je viĹĄe od jedne naredbe u petlji). Preciznije: @smallexample repeat @@ -684,20 +681,20 @@ while True do @cindex assert @cindex provjera konzistentnosti -Kao što je navedeno u dokumentaciji GNU C biblioteke (@pxref{Consistency -Checking, , , libc}) - dok pišete program, često je dobra ideja ubaciti -u njega provjere da li su prekršene neke osnovne pretpostavke. +Kao ĹĄto je navedeno u dokumentaciji GNU C biblioteke (@pxref{Consistency +Checking, , , libc}) - dok piĹĄete program, često je dobra ideja ubaciti +u njega provjere da li su prekrĹĄene neke osnovne pretpostavke. -Razmotrite slijedeću proceduru u Pascalu: +Razmotrite slijedeću proceduru u Pascalu: @smallexample procedure DoSomethingOnAPString (StrPtr: PString); @end smallexample -Možete implicitno pretpostaviti da gornja procedura nikad neće biti +MoĹžete implicitno pretpostaviti da gornja procedura nikad neće biti pozvana sa @code{nil} kao argumentom, ali je sigurnije provjeravati -da li je došlo do ``nemogućeg stanja'', tj. provjeriti da li je -@samp{StrPtr} različito od @code{nil}, kao ovdje: +da li je doĹĄlo do ``nemogućeg stanja'', tj. provjeriti da li je +@samp{StrPtr} različito od @code{nil}, kao ovdje: @smallexample procedure DoSomethingOnAPString (StrPtr: PString); @@ -707,37 +704,37 @@ begin end; @end smallexample -Ako ova provjera ne uspije, program proizvodi @samp{runtime} pogrešku --- pogrešku za vrijeme izvođenja. Mogli biste zaključiti da je kod koji -zove ovu proceduru pogrešan (ili da trebate proširiti nevedenu rutinu), -dakle bi ovo mogla biti pomoć u lociranju problema. Drugim riječima, -provjera bazičnih pretpostavki na početku tijela potprograma je -pravi način da se učini sigurnim da funkcija nije korištena na krivi -način. +Ako ova provjera ne uspije, program proizvodi @samp{runtime} pogreĹĄku +-- pogreĹĄku za vrijeme izvođenja. Mogli biste zaključiti da je kod koji +zove ovu proceduru pogreĹĄan (ili da trebate proĹĄiriti nevedenu rutinu), +dakle bi ovo mogla biti pomoć u lociranju problema. Drugim riječima, +provjera bazičnih pretpostavki na početku tijela potprograma je +pravi način da se učini sigurnim da funkcija nije koriĹĄtena na krivi +način. GNU C biblioteka daje @code{assert} makro naredbu za ove vrste provjera. -GNU Pascal proviđa Pascal ekvivalent koji se zove @code{Assert}, ali se -ponaša malo drugačije. @code{Assert} neće prekinuti vaš program, nego -će radije prouzročiti pogrešku u vremenu izvođenja, @samp{runtime error}, -(@pxref{Assert, , , gpc}) koju možete "uhvatiti" npr. @samp{Trap} +GNU Pascal proviđa Pascal ekvivalent koji se zove @code{Assert}, ali se +ponaĹĄa malo drugačije. @code{Assert} neće prekinuti vaĹĄ program, nego +će radije prouzročiti pogreĹĄku u vremenu izvođenja, @samp{runtime error}, +(@pxref{Assert, , , gpc}) koju moĹžete "uhvatiti" npr. @samp{Trap} jedinicom (@pxref{Trap, , , gpc}). -Jednom kad mislite da je vaš program debugiran, možete zabraniti provjere -grešaka izvođene @code{Assert} rutinom jednostavnim ponovnim prevođenjem +Jednom kad mislite da je vaĹĄ program debugiran, moĹžete zabraniti provjere +greĹĄaka izvođene @code{Assert} rutinom jednostavnim ponovnim prevođenjem s @samp{--no-assertions} opcijom. Nikakve promjene source koda nisu potrebne da bi se zabranile ove provjere. Izrazi sa side-efektima u argumentima za -@samp{Assert} se i dalje izračunavaju (za razliku od C-a), tako da je u +@samp{Assert} se i dalje izračunavaju (za razliku od C-a), tako da je u redu napisati: @smallexample Assert (MyFunction (Foo, Bar) > 0) @end smallexample -Ovim će se uvijek pozvati @code{MyFunction}, ali samo da se učini sigurnim +Ovim će se uvijek pozvati @code{MyFunction}, ali samo da se učini sigurnim da je njen rezultat pozitivan ako @samp{--no-assertions} nije dan. -Svejedno, preporuča se da ne zabranjujete provjere konzistentnosti, osim -ako nikako ne možete podnijeti da se vaš program izvodi nešto sporije. +Svejedno, preporuča se da ne zabranjujete provjere konzistentnosti, osim +ako nikako ne moĹžete podnijeti da se vaĹĄ program izvodi neĹĄto sporije. @node Formatiranje @section Formatiranje izvornog koda @@ -745,41 +742,41 @@ ako nikako ne možete podnijeti da se vaš @cindex spaces @cindex blanks -Najprije, izbjegavajte nepotrebne razmake na krajevima redaka. Također +Najprije, izbjegavajte nepotrebne razmake na krajevima redaka. Također zapamtite da ne snimate datoteke s TAB karakterima, s obzirom na -činjenicu da će ih razni editori ili različite konfiguracije -interpretirati kao različite količine razmaka, time lomeći -uvučenost (engl. indentation) programa. (Ako koristite GNU Emacs, -funkcija @samp{untabify} dobro dođe pri ruci; ako koristite VIM, -opcija @samp{expandtab} (@samp{:set et}); u PENG-u se može koristiti +činjenicu da će ih razni editori ili različite konfiguracije +interpretirati kao različite količine razmaka, time lomeći +uvučenost (engl. indentation) programa. (Ako koristite GNU Emacs, +funkcija @samp{untabify} dobro dođe pri ruci; ako koristite VIM, +opcija @samp{expandtab} (@samp{:set et}); u PENG-u se moĹže koristiti opcija @samp{Expand tabs}). @cindex kontrolni znakovi -Molimo izbjegavajte korištenje bilo kakvih kontrolnih znakova, osim -newline (znak za novi redak), naravno. Ovo znači nema form feed -(@samp{#12}), znakova za novu stranicu. Oni su preporučeni u GNU -Coding Standards da razdvajaju logično odvojene dijelove, ali ih -nemojte koristiti barem u Pascal kodu. Također nemojte koristiti -ni znak @samp{SUB}, (@samp{#26}), koji se pogrešno koristi kao +Molimo izbjegavajte koriĹĄtenje bilo kakvih kontrolnih znakova, osim +newline (znak za novi redak), naravno. Ovo znači nema form feed +(@samp{#12}), znakova za novu stranicu. Oni su preporučeni u GNU +Coding Standards da razdvajaju logično odvojene dijelove, ali ih +nemojte koristiti barem u Pascal kodu. Također nemojte koristiti +ni znak @samp{SUB}, (@samp{#26}), koji se pogreĹĄno koristi kao end-of-file (kraj datoteke) indikator u DOS-u. Stariji DOS editori stavljaju taj znak na kraj svake datoteke bez dobrog razloga, jer -čak i FAT file system zna pronaći kraj datoteke sam po sebi. +čak i FAT filesystem zna pronaći kraj datoteke sam po sebi. @cindex duljina retka -Preporučujemo maksimalnu duljinu retka od 68 znakova, tako da se može +Preporučujemo maksimalnu duljinu retka od 68 znakova, tako da se moĹže otisnuti u @TeX{}-u sa default fontom na A4 papiru, ili 78 znakova, za ekrane sa 80 stupaca. Ovo nije fiksno pravilo, jer lomljenje redaka -često smanjuje čitljivost koda. +često smanjuje čitljivost koda. @cindex prazni retci -Koristite prazne retke između blokova. Blokovi su dugi komentari, -@samp{type}, @samp{const}, @samp{var}, @samp{label} odsječci, tijela +Koristite prazne retke između blokova. Blokovi su dugi komentari, +@samp{type}, @samp{const}, @samp{var}, @samp{label} odsječci, tijela potprograma, inicijalizatori i finalizatori jedinica (@samp{unit}) i modula, @samp{program}, @samp{unit}, @samp{interface}, @samp{implementation}, @samp{module}, @samp{export}, @samp{uses}, @samp{import} retci, globalne direktive prevodioca. Ako se dugi -komentar odnosi na prateću deklaraciju, stavite samo prazni redak -prije komentara, ne između komentara i same deklaracije. Posebna +komentar odnosi na prateću deklaraciju, stavite samo prazni redak +prije komentara, ne između komentara i same deklaracije. Posebna iznimka su blokovi unutar istog potprograma -- ne koristite prazne retke na tim mjestima. Na primjer: @@ -794,14 +791,14 @@ end; @end smallexample Ali se sjetite staviti prazne retke da razdvojite potprograme, kao -u slijedećem primjeru: +u slijedećem primjeru: @smallexample procedure Long; const @dots{} var - varijable korištene od Sub @dots{} + varijable koriĹĄtene od Sub @dots{} procedure Sub; var @@ -811,61 +808,61 @@ var end; var - varijable koje nisu korištene od Sub @dots{} + varijable koje nisu koriĹĄtene od Sub @dots{} begin @dots{} end; @end smallexample Primijetite da ne biste trebali koristiti prazan redak nakon -deklaracije glavnog potprograma, osim ako deklaracija ugniježđenog -potprograma slijedi odmah. Inače bi deklaracija glavnog potprograma +deklaracije glavnog potprograma, osim ako deklaracija ugniježđenog +potprograma slijedi odmah. Inače bi deklaracija glavnog potprograma izgledala kao forward deklaracija. -Primijetite da smo u odsječku koda odvojili lokalne varijable +Primijetite da smo u odsječku koda odvojili lokalne varijable (ili konstante) prije i poslije potprograma -- ovo nije obavezno. -Naravno, ono što smo rekli za potprograme je također ispravno za +Naravno, ono ĹĄto smo rekli za potprograme je također ispravno za pod-potprograme na bilo kojoj dubini. -Prazni redak bi trebao biti među varijablama istog tipa, gdje je -to prikladno, da ih se logički razdvoji. U slučaju da se komentar +Prazni redak bi trebao biti među varijablama istog tipa, gdje je +to prikladno, da ih se logički razdvoji. U slučaju da se komentar pojavljuje prije deklaracije, prazna linija mora biti prije komentara. -Inače prazna linija dolazi prije deklaracije. +Inače prazna linija dolazi prije deklaracije. Prazni retci se mogu koristiti u dugim komentarima da razdvoje paragrafe. -Bez praznih redaka na početku ili kraju datoteke, samo znak za novi -red na kraju. Bez višestrukih praznih redaka. +Bez praznih redaka na početku ili kraju datoteke, samo znak za novi +red na kraju. Bez viĹĄestrukih praznih redaka. @node Komentari -@section Komentiranje vašeg rada +@section Komentiranje vaĹĄeg rada @cindex komentiranje -Komentare treba staviti u vitičaste zagrade kao ovdje: +Komentare treba staviti u vitičaste zagrade kao ovdje: @smallexample @{ Ovo je lijepi komentar. :-) @} @end smallexample -Ne koristite komentare starog stila između okruglih zagrada i zvjezdica, +Ne koristite komentare starog stila između okruglih zagrada i zvjezdica, kao npr. ove: @smallexample -(* Ovo je ružan komentar :-(, kakav ne biste smjeli koristiti. *) +(* Ovo je ruĹžan komentar :-(, kakav ne biste smjeli koristiti. *) @end smallexample -Također, ne koristite komentare započete s dvostrukom kosom crtom: +Također, ne koristite komentare započete s dvostrukom kosom crtom: @smallexample -// Još jedan primjer komentara koji ne koristiti. +// JoĹĄ jedan primjer komentara koji ne koristiti. @end smallexample -Iako ISO Pascal eksplicitno dozvoljava miješane komentare, GNU Pascal -prevodilac ih uopće ni ne prihvaća, ako ih ne uključite opcijom ili -odgovarajućom direktivom prevodiocu @samp{@{$mixed-comments@}} -- ali -to ne želite učiniti. Ovdje je nekoliko primjera miješanih komentara, +Iako ISO Pascal eksplicitno dozvoljava mijeĹĄane komentare, GNU Pascal +prevodilac ih uopće ni ne prihvaća, ako ih ne uključite opcijom ili +odgovarajućom direktivom prevodiocu @samp{@{$mixed-comments@}} -- ali +to ne Ĺželite učiniti. Ovdje je nekoliko primjera mijeĹĄanih komentara, koje ne biste smjeli slijediti: @smallexample @@ -873,47 +870,47 @@ koje ne biste smjeli slijediti: @{ ... and that. *) @end smallexample -@cindex ugniježđeni komentari -Također, nastojte izbjegavati ugniježđene (engl. nested) komentare, kao -@samp{@{ @{ Ovaj ovdje @} @}}. Ovi su u redu ako želite staviti -nešto @TeX{} naredbi u komentar ili nešto više egzotično. Koji god -razlog imate za korištenje ugniježđenih komentara, potrebno je da ih -omogućite direktivom prevodiocu, @samp{@{$nested-comments@}}. Ne +@cindex ugniježđeni komentari +Također, nastojte izbjegavati ugniježđene (engl. nested) komentare, kao +@samp{@{ @{ Ovaj ovdje @} @}}. Ovi su u redu ako Ĺželite staviti +neĹĄto @TeX{} naredbi u komentar ili neĹĄto viĹĄe egzotično. Koji god +razlog imate za koriĹĄtenje ugniježđenih komentara, potrebno je da ih +omogućite direktivom prevodiocu, @samp{@{$nested-comments@}}. Ne koristite @samp{--nested-comments} opciju naredbene linije. Stavite -sve takve opcije u izvorni kod, tako da netko pokušavajući prevesti +sve takve opcije u izvorni kod, tako da netko pokuĹĄavajući prevesti ga ne mora ispitivati koje su opcije naredbene linije potrebne, te zato jer bi opcije komandne linije pogodile @emph{sve} izvorne -datoteke, npr. kad se prevodi projekt sa više jedinica/modula. +datoteke, npr. kad se prevodi projekt sa viĹĄe jedinica/modula. -@cindex jezik korišten u komentarima -Molimo pišite vaše komentare na engleskom, jer je engleski jedini jezik -kojeg gotovo svi programeri u svim zemljama mogu čitati. Ako ne pišete -dobro engleski, molimo pišite komentare na engleskom najbolje što možete, -pa onda tražite druge ljude da vam pomognu preformulirati ih. Ako ne -možete pisati komentare na engleskom, molimo pronađite nekoga da radi -s vama i prevede vaše komentare na engleski. +@cindex jezik koriĹĄten u komentarima +Molimo piĹĄite vaĹĄe komentare na engleskom, jer je engleski jedini jezik +kojeg gotovo svi programeri u svim zemljama mogu čitati. Ako ne piĹĄete +dobro engleski, molimo piĹĄite komentare na engleskom najbolje ĹĄto moĹžete, +pa onda traĹžite druge ljude da vam pomognu preformulirati ih. Ako ne +moĹžete pisati komentare na engleskom, molimo pronađite nekoga da radi +s vama i prevede vaĹĄe komentare na engleski. @cindex razmaci u komentarima trebali biste usvojiti ``French Spacing'', tj. samo jedan razmak na -kraju rečenice. Tako ne možete koristiti GNU Emacs @samp{M-a} i @samp{M-e} -kombinacije tipki za kretanje između rečenica. Nadamo se da možete -živjeti bez toga. Također, molimo stavite samo jedan razmak nakon vitičaste -zagrade koja otvara komentar i prije zatvarajuće zagrade. - -@cindex izmještanje komentara -Ako se komentar odnosi samo na jednu liniju koda, napišite ga ako je -moguće nakon linije koda, u istom retku, odvojenog od koda s dva razmaka. -Ovo je također dozvoljeno za @samp{interface} odsječak jedinice -(@samp{unit}) i za globalne varijable. Često je vjerojatno da ćete +kraju rečenice. Tako ne moĹžete koristiti GNU Emacs @samp{M-a} i @samp{M-e} +kombinacije tipki za kretanje između rečenica. Nadamo se da moĹžete +Ĺživjeti bez toga. Također, molimo stavite samo jedan razmak nakon vitičaste +zagrade koja otvara komentar i prije zatvarajuće zagrade. + +@cindex izmjeĹĄtanje komentara +Ako se komentar odnosi samo na jednu liniju koda, napiĹĄite ga ako je +moguće nakon linije koda, u istom retku, odvojenog od koda s dva razmaka. +Ovo je također dozvoljeno za @samp{interface} odsječak jedinice +(@samp{unit}) i za globalne varijable. Često je vjerojatno da ćete pisati ovu vrstu komentara uz @samp{record} i @samp{object} polja. -U ostalim slučajevima, komentari idu u jedan ili više vlastitih redaka, +U ostalim slučajevima, komentari idu u jedan ili viĹĄe vlastitih redaka, ako npr.: @smallexample @{ foo bar baz @} @end smallexample -Ili duže: +Ili duĹže: @smallexample @{ foo bar @@ -929,8 +926,8 @@ Ili s paragrafima: qux @} @end smallexample -Komentari trebaju biti smješteni prije koda koji opisuju, i trebaju -imati isti nivo uvlačenja retka. Slijedeći primjer bi to trebao pojasniti: +Komentari trebaju biti smjeĹĄteni prije koda koji opisuju, i trebaju +imati isti nivo uvlačenja retka. Slijedeći primjer bi to trebao pojasniti: @smallexample @{ Moji tipovi. @} @@ -945,11 +942,11 @@ type begin @{ Moja prva naredba. @} Bla; - @{ Početak petlje. @} + @{ Početak petlje. @} repeat @{ Tijelo petlje. @} @dots{} - @{ Završi kad se Nesto desi @} + @{ ZavrĹĄi kad se Nesto desi @} until Nesto end; @end smallexample @@ -957,18 +954,18 @@ end; Primijeti poziciju komentara uz @samp{until}. Komentari koji opisuju globalnu deklaraciju bi trebali biti u jednoj -ili više vlastitih linija, neposredno prije deklaracije. Na primjer: +ili viĹĄe vlastitih linija, neposredno prije deklaracije. Na primjer: @smallexample @{ Ovo je Foo. Radi ovo i ono. @} procedure Foo; @end smallexample -@cindex smiješni komentari +@cindex smijeĹĄni komentari @cindex trivijalni komentari -Ne pišite ``trivijalne'' komentare, poput onih u gornjim primjerima. -Trebali biste izbjegavati komentare pišući jasan kod. Linus Torvalds -ističe ovo snažno u 'Kernel Coding Style': +Ne piĹĄite ``trivijalne'' komentare, poput onih u gornjim primjerima. +Trebali biste izbjegavati komentare piĹĄući jasan kod. Linus Torvalds +ističe ovo snaĹžno u 'Kernel Coding Style': @quotation Comments are good, but there is also a danger of over-commenting. @@ -982,53 +979,53 @@ not @strong{how}. Prijevod: @quotation -Komentari su dobri, ali postoji također opasnost od prekomjernog -komentiranja. @strong{Nikad} ne pokušavajte objasniti @strong{kako} -vaš kod radi u komentaru: mnogo je bolje napisati kod tako da je njegovo -@samp{funkcioniranje} očito, i gubitak je vremena komentiranje loše -napisanog koda. Općenito, možete željeti za vaše komentare da kažu -@strong{što} vaš kod radi, ne @strong{kako}. +Komentari su dobri, ali postoji također opasnost od prekomjernog +komentiranja. @strong{Nikad} ne pokuĹĄavajte objasniti @strong{kako} +vaĹĄ kod radi u komentaru: mnogo je bolje napisati kod tako da je njegovo +@samp{funkcioniranje} očito, i gubitak je vremena komentiranje loĹĄe +napisanog koda. Općenito, moĹžete Ĺželjeti za vaĹĄe komentare da kaĹžu +@strong{ĹĄto} vaĹĄ kod radi, ne @strong{kako}. @end quotation -(Primijetite da mi inače poprilično odstupamo od Linusovog stila +(Primijetite da mi inače poprilično odstupamo od Linusovog stila kodiranja.) -@cindex komentari o kodu koji nije očigledan -@cindex zakučasti (``tricky'') komentari +@cindex komentari o kodu koji nije očigledan +@cindex zakučasti (``tricky'') komentari ``Tricky'' kod je vrijedan komentiranja. ``Tricky'' kod definiramo -kao kod koji radi ne tako očite stvari, podrazumijeva pretpostavke koje -nisu očigledne, postoji nešto o čemu se mora voditi računa prilikom -njegovog mijenjanja, nije ono što izgleda na prvi pogled, postoje +kao kod koji radi ne tako očite stvari, podrazumijeva pretpostavke koje +nisu očigledne, postoji neĹĄto o čemu se mora voditi računa prilikom +njegovog mijenjanja, nije ono ĹĄto izgleda na prvi pogled, postoje nuspojave (@emph{side-effect}) ili zahtijeva druge dijelove koda da budu promijenjeni simultano s njim. Tricky kod bi se trebao -koristiti vrlo štedljivo. +koristiti vrlo ĹĄtedljivo. @cindex komentari eksternog izvornog koda -U slučaju da se komentar odnosi na neko drugo mjesto u kodu, +U slučaju da se komentar odnosi na neko drugo mjesto u kodu, bilo u istoj ili u drugoj datoteci, molimo referirajte na to -mjesto ne s brojem retka (ovaj će se previše često mijenjati), -nego pomoću imena potprograma ili pomoću konteksta. Također, +mjesto ne s brojem retka (ovaj će se previĹĄe često mijenjati), +nego pomoću imena potprograma ili pomoću konteksta. Također, razmislite da je korisno staviti komentar na to drugo mjesto koji pokazuje natrag. (Ne uvijek, ali ponekad se to pokazalo korisnim za nas.) @cindex zakomentiranje Da se zakomentira dio koda, koji se ne bi trebao prevesti, trebate ga -omeđiti sa @samp{@{$if False@} @dots{} @{$endif@}} radije nego da +omeđiti sa @samp{@{$if False@} @dots{} @{$endif@}} radije nego da koristite komentar. -@cindex komentari za razdvajanje logičnih dijelova -Da se razdvoje logični dijelovi unutar velikih modula ili jedinica, -možete koristiti specijalni komentar -- mi predlažemo fiksan uzorak -jer ga je lako pronaći: +@cindex komentari za razdvajanje logičnih dijelova +Da se razdvoje logični dijelovi unutar velikih modula ili jedinica, +moĹžete koristiti specijalni komentar -- mi predlaĹžemo fiksan uzorak +jer ga je lako pronaći: @smallexample -@{@@section Ime odsječka@} -@{@@subsection Ime pododsječka@} +@{@@section Ime odsječka@} +@{@@subsection Ime pododsječka@} @end smallexample -Primijeti da nema razmaka iza otvorene vitičaste zagrade, niti -ispred zatvorene u ovom slučaju. +Primijeti da nema razmaka iza otvorene vitičaste zagrade, niti +ispred zatvorene u ovom slučaju. @cindex deskripcijski komentari @cindex opisni komentari @@ -1040,33 +1037,33 @@ dijelu ili u @samp{program}ima. Naravno, (npr. grupe konstanti) mogu dijeliti komentar. @cindex komentari s formatiranjem -Utility nazvan @samp{pas2texi} će biti napisan da omogući izgradnju -Texinfo datoteka iz Pascal komentara. Ovo će omogućiti pojedine -vrste formatiranja i naglašavanja unutar komentara. Oni će biti -opisani u dokumentaciji @samp{pas2texi} programa i/ili u budućim +Utility nazvan @samp{pas2texi} će biti napisan da omogući izgradnju +Texinfo datoteka iz Pascal komentara. Ovo će omogućiti pojedine +vrste formatiranja i naglaĹĄavanja unutar komentara. Oni će biti +opisani u dokumentaciji @samp{pas2texi} programa i/ili u budućim verzijama ovog dokumenta. @cindex fixme komentari -Možete koristiti ``fixme'' komentare, da biste ukazali na stvari koje +MoĹžete koristiti ``fixme'' komentare, da biste ukazali na stvari koje treba ispraviti u kodu, ili u biblioteci (ili modulu, ili jedinici, -ili korištenom prevodiocu) koje direktno pogađaju kod, zahtijevajući +ili koriĹĄtenom prevodiocu) koje direktno pogađaju kod, zahtijevajući zaobilazni pristup (engl. work-around). Ovi komentari trebaju imati -na početku barem dva @samp{@@} -- dodajte toliko @samp{@@} koliko +na početku barem dva @samp{@@} -- dodajte toliko @samp{@@} koliko je urgentno pitanje koje opisuju. -Ovi komentari mogu sadržavati manje ili više opskurne detalje o -problemu, naročito ako je korijen problema negdje drugdje. Na -primjer, komentar @samp{@{ @@@@fjf226 @}} deklarira prateći kod +Ovi komentari mogu sadrĹžavati manje ili viĹĄe opskurne detalje o +problemu, naročito ako je korijen problema negdje drugdje. Na +primjer, komentar @samp{@{ @@@@fjf226 @}} deklarira prateći kod kao zaobilaznicu za problem koji je demonstriran u GNU Pascal -prevodiočevom test programu @samp{fjf226.pas}. (To je datoteka koju -možete pronaći u source distribuciji GNU Pascal prevodioca.) +prevodiočevom test programu @samp{fjf226.pas}. (To je datoteka koju +moĹžete pronaći u source distribuciji GNU Pascal prevodioca.) -``Fixme'' komentare ne bi se smjelo miješati s običnim komentarima. -Ako trebate obje vrste, koristite ih odvojeno, čak i ako direktno -slijede jedan drugoga. Oni se mogu koristiti bilo gdje, čak i unutar -naredbi, jer su privremeni po naravi. Većina normalno pada u područje -tijela, osim ako utječu na sučelja (@samp{interface}). Specijalno -sučelja za koja je vjerojatno da će biti promijenjena trebaju imati +``Fixme'' komentare ne bi se smjelo mijeĹĄati s običnim komentarima. +Ako trebate obje vrste, koristite ih odvojeno, čak i ako direktno +slijede jedan drugoga. Oni se mogu koristiti bilo gdje, čak i unutar +naredbi, jer su privremeni po naravi. Većina normalno pada u područje +tijela, osim ako utječu na sučelja (@samp{interface}). Specijalno +sučelja za koja je vjerojatno da će biti promijenjena trebaju imati @samp{@@@@} komentar neposredno prije njihovog opisnog (deskripcijskog) komentara. @@ -1074,25 +1071,25 @@ komentara. @section Redoslijed blokova koda @cindex redoslijed -Molimo započnite svaku datoteku sa komentarom koji sadrži, u slijedećem +Molimo započnite svaku datoteku sa komentarom koji sadrĹži, u slijedećem redoslijedu: @itemize @bullet @item -kratki opis koji govori što kod u source datoteci radi +kratki opis koji govori ĹĄto kod u source datoteci radi @item -duži opis koji ide u detalje o kodu i specificira izvore informacija +duĹži opis koji ide u detalje o kodu i specificira izvore informacija i koda @item -copyright obavijest o pravima koja pridržavaju autori koda +copyright obavijest o pravima koja pridrĹžavaju autori koda @item -licenca -- naravno, možete poželjeti koristiti GNU General Public License -ili Lesser General Public License za vaše programe i jedinice, zar ne? +licenca -- naravno, moĹžete poĹželjeti koristiti GNU General Public License +ili Lesser General Public License za vaĹĄe programe i jedinice, zar ne? @end itemize @cindex declaracijski blokovi -Općenito, mogli biste pratiti slijedeći redoslijed deklaracijskih blokova: +Općenito, mogli biste pratiti slijedeći redoslijed deklaracijskih blokova: @itemize @bullet @item @@ -1107,8 +1104,8 @@ Općenito, mogli biste pratiti slijedeći potprogrami @end itemize -Možete odstupiti od ovog poretka kad je neophodno ili to čini kod više -čitljivim. Ovo je jedan primjer gdje poredak ne može biti poštovan: +MoĹžete odstupiti od ovog poretka kad je neophodno ili to čini kod viĹĄe +čitljivim. Ovo je jedan primjer gdje poredak ne moĹže biti poĹĄtovan: @smallexample type @@ -1122,31 +1119,31 @@ const Gornja pravila se primjenjuju na deklaracijske blokove i u potprogramima. -Kad postoji nekoliko više ili manje neovisnih dijelova, posebno u velikim -jedinicama ili modulima, možete primijeniti ovaj redoslijed unutar +Kad postoji nekoliko viĹĄe ili manje neovisnih dijelova, posebno u velikim +jedinicama ili modulima, moĹžete primijeniti ovaj redoslijed unutar svakog dijela. Ne stavljajte, na primjer, konstante svih dijelova -zajedno. Morate održati kod čitljivim. +zajedno. Morate odrĹžati kod čitljivim. @cindex deklaracije varijabli Varijable koje se koriste samo u glavnim programima moraju biti deklarirane globalnim u Pascalu, iako GNU Pascal nudi ekstenziju koja dozvoljava deklariranje varijabli na proizvoljnim mjestima -u kodu (@pxref{var, , , gpc}). U ovom slučaju, kao kontrast -prethodnom općem pravilu, često je bolje staviti njihovu deklaraciju +u kodu (@pxref{var, , , gpc}). U ovom slučaju, kao kontrast +prethodnom općem pravilu, često je bolje staviti njihovu deklaraciju upravo prije @samp{begin} glavnog programa, nakon svih potprograma itd., -naročito kad je više nego nekoliko takvih varijabli i veličina +naročito kad je viĹĄe nego nekoliko takvih varijabli i veličina izvorne datoteke nije malena. Tako, blok deklaracije varijabli je -lakše uočljiv i lakše se mijenja od strane programera dok se -uređuje glavni program, i tako činite sigurnim da ih potprogrami -slučajno ne bi upotrijebili. +lakĹĄe uočljiv i lakĹĄe se mijenja od strane programera dok se +uređuje glavni program, i tako činite sigurnim da ih potprogrami +slučajno ne bi upotrijebili. @cindex deklaracije unutar type deklaracija -Kada definirate tip zajedno s njegovim pokazivačkim tipom, najprije -deklarirajte pokazivač. Lakše ih je prepoznati osobito ako je tip -dugački @code{record} ili @code{object}. Također, time postaje -moguće korištenje rekurzivnih struktura (npr., korištenje pokazivača +Kada definirate tip zajedno s njegovim pokazivačkim tipom, najprije +deklarirajte pokazivač. LakĹĄe ih je prepoznati osobito ako je tip +dugački @code{record} ili @code{object}. Također, time postaje +moguće koriĹĄtenje rekurzivnih struktura (npr., koriĹĄtenje pokazivača na tip unutar tog istog tipa). Trebali biste staviti predmetak @samp{T} -imenu tipa i @samp{P} asociranom imenu tipa pokazivača. Pogledajmo +imenu tipa i @samp{P} asociranom imenu tipa pokazivača. Pogledajmo primjer: @smallexample @@ -1162,17 +1159,17 @@ type @end smallexample Primijetite da je @samp{Next} polje specificirano prvo. Sugeriramo da -ga uvijek stavljate kao prvo polje kod rekurzivnih tipova, budući da -to dozvoljava nekim generičkim potprogramima za rad s listama da budu -nešto malo efikasniji dok 'putuju' listom, tj. nema offseta. +ga uvijek stavljate kao prvo polje kod rekurzivnih tipova, budući da +to dozvoljava nekim generičkim potprogramima za rad s listama da budu +neĹĄto malo efikasniji dok 'putuju' listom, tj. nema offseta. -Sugeriramo stavljanje svih pokazivačkih tipova unutar svake @samp{type} +Sugeriramo stavljanje svih pokazivačkih tipova unutar svake @samp{type} deklaracije na prvo mjesto, iako to ne smatramo obaveznim. Ovo je primjer: @smallexample type - @{ Pokazivački tipovi @} + @{ Pokazivački tipovi @} PFoo = ^TFoo; PBar = ^TBar; PBaz = ^TBaz; @@ -1184,10 +1181,10 @@ type @end smallexample @cindex deklaracije unutar object tipova -Unutar objektnih tipova možete imati tri deklaracijska područja. Postoje -tri rezervirane riječi za započinjanje takvih područja: @samp{public}, -@samp{protected}, @samp{private}. Unutar svakog od tih područja -slijedite slijedeći redoslijed: +Unutar objektnih tipova moĹžete imati tri deklaracijska područja. Postoje +tri rezervirane riječi za započinjanje takvih područja: @samp{public}, +@samp{protected}, @samp{private}. Unutar svakog od tih područja +slijedite slijedeći redoslijed: @itemize @bullet @item @@ -1203,10 +1200,10 @@ metode @cindex redoslijed u implementation dijelu U @samp{implemetation} dijelu objekta, stavite tijela potprograma u istom redoslijedu u kojem se pojavljuju u deklaraciji u @samp{interface} -dijelu. Ovo se također odnosi na jedinice i module, u kojima -implementacija treba odražavati @samp{interface} deklaracije. +dijelu. Ovo se također odnosi na jedinice i module, u kojima +implementacija treba odraĹžavati @samp{interface} deklaracije. -Nemojte koristiti završni @samp{;} na kraju bloka, tj. ispred +Nemojte koristiti zavrĹĄni @samp{;} na kraju bloka, tj. ispred @samp{end}, @samp{until}, itd. osim @samp{case} -- zadnja grana prije @samp{else} grane bi @emph{trebala} imati @samp{;}, da se izbjegnu problemi poput: @@ -1218,45 +1215,45 @@ case @dots{} begin @dots{} end @{ ako ovdje nema @samp{;} @dots{} @} - else @{ @dots{} ovo će biti pogrešno uzeto kao @samp{then}-ov @samp{else} @} + else @{ @dots{} ovo će biti pogreĹĄno uzeto kao @samp{then}-ov @samp{else} @} @dots{} @end smallexample -(Isto ako je @samp{if} bio tamo duže i @samp{else} grana od @samp{case} +(Isto ako je @samp{if} bio tamo duĹže i @samp{else} grana od @samp{case} je kasnije umetnuta.) -U objektu, može izgledati čudno da se izostavi @samp{;} nakon zadnjeg -člana koji je najčešće metoda. Stoga ga dozvoljavamo, a radi -konzistentnosti također i u @samp{record}-ima. +U objektu, moĹže izgledati čudno da se izostavi @samp{;} nakon zadnjeg +člana koji je najčešće metoda. Stoga ga dozvoljavamo, a radi +konzistentnosti također i u @samp{record}-ima. @node Velika i mala slova @section Velika i mala slova u imenima @cindex velika i mala slova -Rezervirane riječi bi trebale biti kompletno u malim slovima, -uključivo direktive, tj. riječi koje su rezervirane samo u nekim +Rezervirane riječi bi trebale biti kompletno u malim slovima, +uključivo direktive, tj. riječi koje su rezervirane samo u nekim kontekstima, kao @samp{protected}. Ako koristite direktive kao -identifikatore (za što je vjerojatno da će vam nanijeti bol) -izvan njihovog konteksta, pišite ih kao identifikatore. +identifikatore (za ĹĄto je vjerojatno da će vam nanijeti bol) +izvan njihovog konteksta, piĹĄite ih kao identifikatore. -Kao specijalnu iznimku, možete koristiti @samp{File} pisan velikim -početim slovom kad je korišten kao tip sam po sebi tj. netipizirana -datoteka, za razliku od @samp{file of Char}. Isto se ne može reći za -@samp{procedure} kao tip (u stilu Borland Pascala), budući da @samp{File} -može biti valjan tip, dok je @samp{procedure} konstruktor tipa, tj.: +Kao specijalnu iznimku, moĹžete koristiti @samp{File} pisan velikim +početim slovom kad je koriĹĄten kao tip sam po sebi tj. netipizirana +datoteka, za razliku od @samp{file of Char}. Isto se ne moĹže reći za +@samp{procedure} kao tip (u stilu Borland Pascala), budući da @samp{File} +moĹže biti valjan tip, dok je @samp{procedure} konstruktor tipa, tj.: @smallexample procedure Foo (var a: File); @{ Ovo radi. @} -procedure Foo (var a: procedure); @{ Ovo baš i ne. @} +procedure Foo (var a: procedure); @{ Ovo baĹĄ i ne. @} @end smallexample @cindex velika i mala slova u identifikatorima -Slijedeći problem su velika i mala slova u identifikatorima. Nema -razlike između ugrađenih (built-in) i korisnički definiranih +Slijedeći problem su velika i mala slova u identifikatorima. Nema +razlike između ugrađenih (built-in) i korisnički definiranih (user-defined) identifikatora. Samo prvo slovo bi trebalo biti -veliko, ili ako se sastoji od više spojenih riječi ili kratica, -početno slovo svake od riječi bi trebalo biti veliko -- ne koristite -znak za podvlačenje (underscore). Kratice koje su postale dio +veliko, ili ako se sastoji od viĹĄe spojenih riječi ili kratica, +početno slovo svake od riječi bi trebalo biti veliko -- ne koristite +znak za podvlačenje (underscore). Kratice koje su postale dio govornog jezika mogu biti pisane kao takve. Na primjer, @samp{Dos} ili @samp{DOS}; ali uvijek @samp{GPC}, ne @samp{Gpc}. Ovdje su neki primjeri identifikatora: @samp{Copy}, @samp{SubStr}, @@ -1264,28 +1261,28 @@ neki primjeri identifikatora: @samp{Copy @samp{SqRt}, @samp{EOF}, @samp{EOLn}. @cindex velika i mala slova u imenima konstanti -Ova se pravila primjenjuju i na identifikatore konstanti, također +Ova se pravila primjenjuju i na identifikatore konstanti, također -- za razliku od C makroa. -Također primijetite da se vrlo mali identifikatori mogu pisati u cijelosti +Također primijetite da se vrlo mali identifikatori mogu pisati u cijelosti malim slovima, kao @samp{i} ili @samp{s1} ili @samp{xx}. Takve kratke -identifikatore bi trebalo koristiti samo lokalno. Mogu biti korišteni -kao parametri globalnih potprograma, jer je područje valjanosti (engl. scope) -takvih identifikatora također lokalno, i njihova imena zapravo nisu od -nikakva značaja pozivanom potprogramu. Korištenje ovakvih identifikatora -u globalnom kontekstu bi svakako trebalo izbjeći, posebno u jedinicama -(unit), modulima ili bibliotekama (jer autor ne zna u kojem će se kontekstu +identifikatore bi trebalo koristiti samo lokalno. Mogu biti koriĹĄteni +kao parametri globalnih potprograma, jer je područje valjanosti (engl. scope) +takvih identifikatora također lokalno, i njihova imena zapravo nisu od +nikakva značaja pozivanom potprogramu. KoriĹĄtenje ovakvih identifikatora +u globalnom kontekstu bi svakako trebalo izbjeći, posebno u jedinicama +(unit), modulima ili bibliotekama (jer autor ne zna u kojem će se kontekstu koristiti). -Molimo budite konzistentni sa vašim izborom velikih i malih slova. -Znate da vas Pascal neće ozlijediti ako mijenjate taj izbor kroz -kod, ali molimo vas držite se istog izbora. +Molimo budite konzistentni sa vaĹĄim izborom velikih i malih slova. +Znate da vas Pascal neće ozlijediti ako mijenjate taj izbor kroz +kod, ali molimo vas drĹžite se istog izbora. @cindex enum tipovi @cindex konstante Za identifikatore za vrijednosti pobrojanih (@samp{enum}) tipova i za blokove konstanti, tj. mjesta gdje uvodite mnogo identifikatora -može biti korisno koristiti dvoslovni prefiks malim slovima i @samp{_}, +moĹže biti korisno koristiti dvoslovni prefiks malim slovima i @samp{_}, kao kontrast prethodnim pravilima: @smallexample @@ -1302,39 +1299,39 @@ const @end smallexample @cindex OOP -U objektno-orijentiranom kodu (posebno u konstruktorima), često +U objektno-orijentiranom kodu (posebno u konstruktorima), često postoji potreba da parametar korespondira polju objekta (npr., -da se proslijedi vrijednost kojom se inicijalizira polje). Budući +da se proslijedi vrijednost kojom se inicijalizira polje). Budući da se oba ne mogu zvati istim imenom, polje bi trebalo imati -``prirodno'' ime budući da se obično koristi u više rutina, a +``prirodno'' ime budući da se obično koristi u viĹĄe rutina, a ime parametra bi trebalo biti promijenjeno (engl. ``mangled'') -FIXME: Još nismo pronašli zaista zadovoljavajuće pravilo za +FIXME: JoĹĄ nismo pronaĹĄli zaista zadovoljavajuće pravilo za ovu modifikaciju (neki koriste @samp{a} kao prefiks), i ako imate bilo kakvu dobru ideju, javite nam. @cindex velika i mala slova u imenima makroa -Što se makroa tiče, izričito preporučujemo da ih uopće ne koristite. -Molimo, ne koristite makroe u svojih programima. Pokušajte izbjeći +Ĺ to se makroa tiče, izričito preporučujemo da ih uopće ne koristite. +Molimo, ne koristite makroe u svojih programima. PokuĹĄajte izbjeći makroe u svojim programima, jer su oni zli. Vjerujemo da ne smijete -koristiti makroe u svojem kodu. Nakon svega rečenog, ako se i dalje -usudite koristiti makro, pišite ih potpuno velikim slovima i -razdvojite riječi znakom za podvlačenje, @samp{_}. Kako makroi -ne poštuju Pascalove domene deklarirarnosti (engl. scope), ima -smisla pisati ih drugačije. Ovo se odnosi na uvjetne direktive, -također. +koristiti makroe u svojem kodu. Nakon svega rečenog, ako se i dalje +usudite koristiti makro, piĹĄite ih potpuno velikim slovima i +razdvojite riječi znakom za podvlačenje, @samp{_}. Kako makroi +ne poĹĄtuju Pascalove domene deklarirarnosti (engl. scope), ima +smisla pisati ih drugačije. Ovo se odnosi na uvjetne direktive, +također. @node Direktive prevodiocu -@section Korištenje naredbi prevodiocu +@section KoriĹĄtenje naredbi prevodiocu @cindex direktive prevodiocu -Općenito sugeriramo korištenje direktiva prevodiocu toliko malo -dok je to još moguće i razumno, jer one čine kod težim za razumijevanje +Općenito sugeriramo koriĹĄtenje direktiva prevodiocu toliko malo +dok je to joĹĄ moguće i razumno, jer one čine kod teĹžim za razumijevanje (npr. kad provjeravate nuspojave (side-effects)) i modificiranje -(npr. kad se pomiču dijelovi koda iz ili u područje djelovanja +(npr. kad se pomiču dijelovi koda iz ili u područje djelovanja direktiva prevodiocu). Direktive bi trebalo pozivati kao u primjeru: @smallexample -@{$vaša-direktiva-prevodiocu@} +@{$vaĹĄa-direktiva-prevodiocu@} @end smallexample Definitivno ne ovako (@pxref{Komentari}): @@ -1343,28 +1340,28 @@ Definitivno ne ovako (@pxref{Komentari}) (*$nemoj-koristiti-ovakvu-direktivu*) @end smallexample -Također, definitivno ne na ovaj način, koji ovisi o lomljenju linija, -što sa Pascalom normalno nije slučaj: +Također, definitivno ne na ovaj način, koji ovisi o lomljenju linija, +ĹĄto sa Pascalom normalno nije slučaj: @smallexample -#vaša-direktiva-prevodiocu +#vaĹĄa-direktiva-prevodiocu @end smallexample -Slično vrijedi za makro definicije: +Slično vrijedi za makro definicije: @smallexample @{$define @dots{}@} @end smallexample -Ovo također ušteđuje pisanje obrnute kose crte prije prekidanja linija, -kao kontrast prema @samp{#define}. Ali vi ionako nećete koristiti +Ovo također uĹĄteđuje pisanje obrnute kose crte prije prekidanja linija, +kao kontrast prema @samp{#define}. Ali vi ionako nećete koristiti makroe, zar ne? (@pxref{Velika i mala slova}) @cindex razmaci u direktivama -Što se razmaka tiče, ne tipkajte razmak ispred zatvarajuće vitice, -kako ne može biti jednoga niti poslije otvarajuće vitice. Ako spajate -mnogo direktiva zajedno, ne stavljajte razmake između svake, jedan +Ĺ to se razmaka tiče, ne tipkajte razmak ispred zatvarajuće vitice, +kako ne moĹže biti jednoga niti poslije otvarajuće vitice. Ako spajate +mnogo direktiva zajedno, ne stavljajte razmake između svake, jedan zarez je dovoljan. @c FIXME @@ -1372,25 +1369,25 @@ zarez je dovoljan. @c Maybe someone has good reasons to use the space after the commas. @cindex direktive i komentari -Unutar direktiva ne bi trebalo biti komentara. Pišite ih odvojeno +Unutar direktiva ne bi trebalo biti komentara. PiĹĄite ih odvojeno umjesto toga, kao ovdje: @smallexample @{$X+@} @{ Trebamo extended sintaksu. @} @end smallexample -Borland Pascal dozvoljava miješanje komentara s direktivama, no realno -gledano to je pogrešno korištenje. +Borland Pascal dozvoljava mijeĹĄanje komentara s direktivama, no realno +gledano to je pogreĹĄno koriĹĄtenje. Kratke forme pozivanja direktiva su u redu, no duge forme su barem -jednako dobre, ako već nećemo reći preferirane. Kratke forme se moraju -pisati velikim slovima, a duže malim (osim za argumente osjetljive -na 'veličinu' slova (engl. case-sensitive), kao što su poruke i imena +jednako dobre, ako već nećemo reći preferirane. Kratke forme se moraju +pisati velikim slovima, a duĹže malim (osim za argumente osjetljive +na 'veličinu' slova (engl. case-sensitive), kao ĹĄto su poruke i imena datoteka -- naravno, imena datoteka moraju uvijek biti tretirana -kao case-sensitive, čak i na DOSu, da se sačuva prenosivost koda). +kao case-sensitive, čak i na DOSu, da se sačuva prenosivost koda). -Možete kombinirati nekoliko direktiva, također i miješati duge i kratke, -u jednom jedinom pozivu, na primjer kao u slijedećem: +MoĹžete kombinirati nekoliko direktiva, također i mijeĹĄati duge i kratke, +u jednom jedinom pozivu, na primjer kao u slijedećem: @smallexample @{$gnu-pascal,I-,X+@} @@ -1398,15 +1395,15 @@ u jednom jedinom pozivu, na primjer kao @cindex standardne direktive Svaka jedinica ili modul bi trebala imati @samp{@{$gnu-pascal,I-@}} ili -@samp{@{$gnu-pascal,I+@}} blizu početka (nakon komentara u zaglavlju -s opisom i licencom). @samp{@{$gnu-pascal@}} omogućuje jedinici -da bude prevedena bez opcija za dijalekte čak i ako je glavni program +@samp{@{$gnu-pascal,I+@}} blizu početka (nakon komentara u zaglavlju +s opisom i licencom). @samp{@{$gnu-pascal@}} omogućuje jedinici +da bude prevedena bez opcija za dijalekte čak i ako je glavni program preveden s nekima od njih. @samp{@{$I-@}} ili @samp{@{$I+@}} govori korisniku (iako je jedno od ovog podrazumno stanje) da li jedinica -obrađuje sama ulazno/izlazne pogreške ili im dozvoljava da one izazovu -pogreške u vremenu izvođenja (@samp{runtime error}). Prvi pristup je -poželjniji za većinu jedinica. Za programe, ova stavka je opcionalna. -Rutine koji vraćaju ulazno/izlazne pogreške bi trebale imati atribut +obrađuje sama ulazno/izlazne pogreĹĄke ili im dozvoljava da one izazovu +pogreĹĄke u vremenu izvođenja (@samp{runtime error}). Prvi pristup je +poĹželjniji za većinu jedinica. Za programe, ova stavka je opcionalna. +Rutine koji vraćaju ulazno/izlazne pogreĹĄke bi trebale imati atribut @samp{iocritical} (@pxref{attribute, , , gpc}): @smallexample @@ -1418,13 +1415,13 @@ procedure CriticalRoutine; attribute (io lokalno, i mora imati ``fixme'' (popravi me) komentar (@pxref{Komentari}), jer situacija indicira problem s kodom ili s prevodiocem. -Molimo, nemojte onemogućivati upozorenja kad ste samo prelijeni da napišete +Molimo, nemojte onemogućivati upozorenja kad ste samo prelijeni da napiĹĄete kod koji ne proizvodi upozorenja. @cindex lokalne direktive Svaka zastavica prevodioca koja nije postavljena globalno (na primjer, zajedno s @samp{@{$gnu-pascal@}}, vidi gore) treba biti postavljena s -@samp{@{$local @dots{}@}}. Drugim riječima, ne ovako: +@samp{@{$local @dots{}@}}. Drugim riječima, ne ovako: @smallexample @{$I-@} Reset (f); @{$I+@} @@ -1436,72 +1433,72 @@ Nego ovako: @{$local I-@} Reset (f); @{$endlocal@} @end smallexample -Prvo je pogrešno ako je @samp{@{$I-@}} već bio postavljen. Čak i ako -programer može znati i uzeti u obzir koje je globalno postavljeno stanje, -ovo se može u neko vrijeme promijeniti, ili se dio koda može kopirati -ili premjestiti. Zadnja forma je sigurnija u ovim slučajevima. +Prvo je pogreĹĄno ako je @samp{@{$I-@}} već bio postavljen. Čak i ako +programer moĹže znati i uzeti u obzir koje je globalno postavljeno stanje, +ovo se moĹže u neko vrijeme promijeniti, ili se dio koda moĹže kopirati +ili premjestiti. Zadnja forma je sigurnija u ovim slučajevima. -Da bi to učinili još i jasnijim, iz zadnja dva pravila slijedi: +Da bi to učinili joĹĄ i jasnijim, iz zadnja dva pravila slijedi: @smallexample -@{$local W-@} Foo; @{$endlocal@} @{ @@ GPC proizvodi suvišno upozorenje @} +@{$local W-@} Foo; @{$endlocal@} @{ @@ GPC proizvodi suviĹĄno upozorenje @} @end smallexample Opet, nastojte izbjegavati lokalne direktive. @samp{@{$I-@}} je ponekad -potreban. @samp{@{$X+@}} može biti korišten ako je @emph{stvarno}, -@emph{stvarno} neophodan (što je više moguće lokalnije): izbjegavajte -aritmetiku pokazivača. +potreban. @samp{@{$X+@}} moĹže biti koriĹĄten ako je @emph{stvarno}, +@emph{stvarno} neophodan (ĹĄto je viĹĄe moguće lokalnije): izbjegavajte +aritmetiku pokazivača. @cindex provjera povratnih vrijednosti funkcija Ne koristite @samp{@{$X+@}} da ignorira rezultate funkcija, ne koristite -@samp{@{$ignore-function-results@}}, također. Previše je lako da se +@samp{@{$ignore-function-results@}}, također. PreviĹĄe je lako da se ignorira rezultat koji se ne bi trebao. Ponekad, posebno kad se povezuje s stranim C bibliotekama, mogli biste se susresti sa funkcijama koje -imaju suvišan rezultat, koji vjerojatno ne biste željeli -provjeravati. Možete deklarirati takve funkcije s @samp{ignorable} -specijalnim atributom, tako da će njihove povratne vrijednosti biti +imaju suviĹĄan rezultat, koji vjerojatno ne biste Ĺželjeli +provjeravati. MoĹžete deklarirati takve funkcije s @samp{ignorable} +specijalnim atributom, tako da će njihove povratne vrijednosti biti tiho ignorirane. -Koristite dummy varijable ako želite ignorirati rezultat -pojedinog poziva rekurzivne funkcije čiji rezultat ne bi trebalo -ignorirati generalno. Ali u takvim slučajevima provjerite pažljivo -da li se rezultat može sigurno ignorirati. Ako bi, međutim, neočekivan -rezultat indicirao ``nemoguću'' situaciju, obično je bolje provjeriti -rezultat i ispisati upozorenje o neočekivanom slučaju, barem ako je +Koristite dummy varijable ako Ĺželite ignorirati rezultat +pojedinog poziva rekurzivne funkcije čiji rezultat ne bi trebalo +ignorirati generalno. Ali u takvim slučajevima provjerite paĹžljivo +da li se rezultat moĹže sigurno ignorirati. Ako bi, međutim, neočekivan +rezultat indicirao ``nemoguću'' situaciju, obično je bolje provjeriti +rezultat i ispisati upozorenje o neočekivanom slučaju, barem ako je @samp{DEBUG} definiran (@pxref{Direktive prevodiocu}). -@cindex direktive povezivaču (linkeru) -Direktive povezivaču (engl. linker) tj. @samp{@{$L@}} za biblioteke +@cindex direktive povezivaču (linkeru) +Direktive povezivaču (engl. linker) tj. @samp{@{$L@}} za biblioteke i C (ili drugi jezik) izvorne datoteke bi trebalo staviti blizu -početka i brzo nakon @samp{implementation} retka u jedinicama i +početka i brzo nakon @samp{implementation} retka u jedinicama i modulima. Nekoliko biblioteka i C datoteka u jednoj direktivi su -mogući ako logički pripadaju zajedno (na primjer, biblioteka i +mogući ako logički pripadaju zajedno (na primjer, biblioteka i njezini C wrapperi), ali ne za odvojene stvari. Ovu se direktivu ne -bi smjelo miješati s drugim direktivama (što čak niti ne funkcionira +bi smjelo mijeĹĄati s drugim direktivama (ĹĄto čak niti ne funkcionira ako @samp{L} dolazi prvi -- suprotno bi moglo raditi, ali se ne bi trebalo koristiti). Eksterne deklaracije biblioteke ili C rutina bi trebale neposredno slijediti direktivu (osim u jedinici ili -modulu za one koje ulaze u sučelje - interface). Korištenje @samp{@{$L@}} -u programima često nije dobra ideja, pisanje jedinice (@samp{unit}) -je često dobro za apstrakciju i mogućnost ponovnog korištenja koda. - -@cindex uvjetno prevođenje -Uvjetno prevođenje bi ponekad moglo biti korisno, ali biste trebali -koristiti toliko malo @samp{@{$ifdef@}}-ova koliko je to moguće, -budući da oni smanjuju čitljivost. Kad se kondicionali koriste zbog -razlika među sistemima, provjerite značajke (na primjer, +modulu za one koje ulaze u sučelje - interface). KoriĹĄtenje @samp{@{$L@}} +u programima često nije dobra ideja, pisanje jedinice (@samp{unit}) +je često dobro za apstrakciju i mogućnost ponovnog koriĹĄtenja koda. + +@cindex uvjetno prevođenje +Uvjetno prevođenje bi ponekad moglo biti korisno, ali biste trebali +koristiti toliko malo @samp{@{$ifdef@}}-ova koliko je to moguće, +budući da oni smanjuju čitljivost. Kad se kondicionali koriste zbog +razlika među sistemima, provjerite značajke (na primjer, @samp{__BYTES_LITTLE_ENDIAN__}) ili grupe sistema (na primjer, @samp{__OS_DOS__}) radije nego pojedine sisteme, da biste bolje -providjeli za sisteme koje ne poznajete ili koji možda još i ne +providjeli za sisteme koje ne poznajete ili koji moĹžda joĹĄ i ne postoje. -Ako je moguće (ovo možda još nije na raspolaganju), koristite predefinirane +Ako je moguće (ovo moĹžda joĹĄ nije na raspolaganju), koristite predefinirane konstante (na primjer, @samp{BytesBigEndian}, @samp{OSDosFlag}) -radije nego @samp{define} konstrukte za kod gdje je to moguće -- (``uvijek -netočne'' grane će biti dokinute u optimizatoru, ali ćete još uvijek -dobiti provjeru sintakse kao dodatnu dobrobit pored činjenice da niste -koristili preprocesor); za deklaracije tipova ovo obično nije moguće -i morat ćete koristiti @samp{define} konstrukcije. Dobar primjer je deklaracija +radije nego @samp{define} konstrukte za kod gdje je to moguće -- (``uvijek +netočne'' grane će biti dokinute u optimizatoru, ali ćete joĹĄ uvijek +dobiti provjeru sintakse kao dodatnu dobrobit pored činjenice da niste +koristili preprocesor); za deklaracije tipova ovo obično nije moguće +i morat ćete koristiti @samp{define} konstrukcije. Dobar primjer je deklaracija tipa @samp{TWindowXY} u CRT jedinici. Pogledajte: @smallexample @@ -1521,41 +1518,41 @@ end; @end smallexample @cindex debug zastavica -@samp{DEBUG} zastavica bi se trebala koristiti samo (i baš samo) za -kod koji pomaže uklanjanju bugova, tj. kod koji ne mijenja realnu -funkcionalnost. Programi se moraju moći uspješno prevesti sa -postavljanjem @samp{DEBUG} i bez njega. Prvo se može izvršavati -sporije i može pružiti korisne dodatne poruke u pogodnom obliku, -tj. jasno označene kao debug poruke, na primjer prefiksom @samp{DEBUG: }, -i @emph{mogu} prekinuti program kad detektiraju pogrešna ili dubiozna +@samp{DEBUG} zastavica bi se trebala koristiti samo (i baĹĄ samo) za +kod koji pomaĹže uklanjanju bugova, tj. kod koji ne mijenja realnu +funkcionalnost. Programi se moraju moći uspjeĹĄno prevesti sa +postavljanjem @samp{DEBUG} i bez njega. Prvo se moĹže izvrĹĄavati +sporije i moĹže pruĹžiti korisne dodatne poruke u pogodnom obliku, +tj. jasno označene kao debug poruke, na primjer prefiksom @samp{DEBUG: }, +i @emph{mogu} prekinuti program kad detektiraju pogreĹĄna ili dubiozna stanja. -@cindex kondicionali i različite verzije -Kondicionali se mogu također koristiti da se naprave različite verzije -nekog koda, npr. koristeći GMP brojeve ako je uvjet zadovoljen odnosno -normalne cijele ili realne brojeve u drugom slučaju (GMP je biblioteka -za rad s proizvoljno velikim brojevima). U ovom slučaju, ime i značenje -svih takvih define konstrukcija mora biti objašnjeno pri vrhu. +@cindex kondicionali i različite verzije +Kondicionali se mogu također koristiti da se naprave različite verzije +nekog koda, npr. koristeći GMP brojeve ako je uvjet zadovoljen odnosno +normalne cijele ili realne brojeve u drugom slučaju (GMP je biblioteka +za rad s proizvoljno velikim brojevima). U ovom slučaju, ime i značenje +svih takvih define konstrukcija mora biti objaĹĄnjeno pri vrhu. (Na primjer, vidi @samp{__BP_TYPE_SIZES__}, @samp{__BP_RANDOM__} i @samp{__BP_PARAMSTR_0__} u System jedinici.) Kod se mora ispravno -prevesti s bilo kojom kombinacijom postavljenih kondicionala, što -znači da morate testirati eksponencijalno rastući broj slučajeva --- ovdje leži dobar razlog da se njihov broj drži toliko malim -koliko je to moguće. +prevesti s bilo kojom kombinacijom postavljenih kondicionala, ĹĄto +znači da morate testirati eksponencijalno rastući broj slučajeva +-- ovdje leĹži dobar razlog da se njihov broj drĹži toliko malim +koliko je to moguće. -@cindex kondicionali i različite implementacije -Druga slična upotreba kondicionala je da se izabere između različitih +@cindex kondicionali i različite implementacije +Druga slična upotreba kondicionala je da se izabere između različitih implementacija. Ovu biste strategiju smjeli koristiti @emph{samo} -ako su sve implementacije podržane ili ih planirate podržati. -U drugim slučajevima, bolje je premjestiti staru implementaciju u -``muzej'' i držati kod čistim. Sve primjedbe o prevođenju koda iz -prethodnog pravila se također primjenjuju i ovdje. +ako su sve implementacije podrĹžane ili ih planirate podrĹžati. +U drugim slučajevima, bolje je premjestiti staru implementaciju u +``muzej'' i drĹžati kod čistim. Sve primjedbe o prevođenju koda iz +prethodnog pravila se također primjenjuju i ovdje. -@cindex složeni kondicionali +@cindex sloĹženi kondicionali Kad trebate koristiti komplicirane kondicionale, koristite Pascal sintaksu, tj. formatirajte kondicionale u skladu s pravilima Pascal -koda, radije nego prema C sintaksi. Ovo je smiješan primjer: +koda, radije nego prema C sintaksi. Ovo je smijeĹĄan primjer: @smallexample @{$if defined (Foo) or False@} @@ -1567,7 +1564,7 @@ Namjesto toga, ovo je primjer koji ne sl @{$if defined (Foo) || 0@} @end smallexample -Ili još gore: +Ili joĹĄ gore: @smallexample #if defined (Foo) || 0 @@ -1583,8 +1580,8 @@ kod. Ovdje je prikladna sintaksa: @cindex kondicionali i GPC verzija Standardno bi se uvjetna naredba trebala koristiti u programima ili -jedinicama ili modulima koje distribuirate kako biste učinili sigurnim -da je korištena ispravna verzija GNU Pascal prevodioca. Možete slijediti +jedinicama ili modulima koje distribuirate kako biste učinili sigurnim +da je koriĹĄtena ispravna verzija GNU Pascal prevodioca. MoĹžete slijediti ovaj obrazac: @smallexample @@ -1596,12 +1593,12 @@ ovaj obrazac: @node Razmaci @section Kako koristiti razmake u kodu -Općenito, nikakvi se višestruki razmaci ne bi trebali koristiti osim -za uvlačenje redaka (indentation) i osim slučajeva opisanih niže. +Općenito, nikakvi se viĹĄestruki razmaci ne bi trebali koristiti osim +za uvlačenje redaka (indentation) i osim slučajeva opisanih niĹže. Jedan razmak ide prije i poslije operatora, poslije @samp{:=} i @samp{..}, kao i @samp{:} u @samp{Write}, @samp{WriteLn} i -@samp{WriteStr}; nakon zareza i drugih upotreba @samp{:}. Slijedeći +@samp{WriteStr}; nakon zareza i drugih upotreba @samp{:}. Slijedeći primjer bi to trebao pojasniti: @smallexample @@ -1617,10 +1614,10 @@ end; Ne bi trebalo stavljati razmak prije unarnog @samp{-}. U stvari, ove su forme korektne: @samp{x - 1}, @samp{-x}, @samp{-1}. -Razmak mora ići prije otvorene zagrade (@samp{(}) i nakon zatvarajuće +Razmak mora ići prije otvorene zagrade (@samp{(}) i nakon zatvarajuće zagrade (@samp{)}), osim ako nije susjedna drugoj zagradi, uglatoj -zagradi, @samp{^}, @samp{;}, ili @samp{,}. Drugim riječima, razmak -ide između identifikatora ili ključnih riječi i otvorene zagrade +zagradi, @samp{^}, @samp{;}, ili @samp{,}. Drugim riječima, razmak +ide između identifikatora ili ključnih riječi i otvorene zagrade (@samp{(}). (Svi ostali razmaci u ovom primjeru se podrazumijevaju po prethodnom pravilu.) Pogledaj: @@ -1630,7 +1627,7 @@ Foo (Bar^(Baz[Qux * (i + 2)]), Fred (i) Za indeksiranje polja zapravo nemojte koristiti razmak prije otvorene uglaste zagrade, tj. @samp{Foo[42]} radije nego @samp{Foo [42]}. -Međutim, umetnite razmak prije otvorene uglaste zagrade u deklaracijama +Međutim, umetnite razmak prije otvorene uglaste zagrade u deklaracijama polja, kao ovdje: @smallexample @@ -1659,9 +1656,9 @@ Nema razmaka uz @samp{.} i @samp{^}: Rec.List^.Next^.Field := Foo @end smallexample -Kao što smo već istaknuli, jedan razmak ide nakon otvorene vitice i -nakon zatvarajuće vitice u komentarima, ali ne i u direktivama -prevodiocu. Također, i rekli smo to već negdje u priručniku, dva +Kao ĹĄto smo već istaknuli, jedan razmak ide nakon otvorene vitice i +nakon zatvarajuće vitice u komentarima, ali ne i u direktivama +prevodiocu. Također, i rekli smo to već negdje u priručniku, dva razmaka idu prije komentara nakon retka koda. Na primjer: @smallexample @@ -1670,14 +1667,14 @@ Inc (x); @{ Increment x. @} @cindex tabularni kod, razmaci @cindex razmaci, tabularni kod -Opcionalno možete koristiti dodatne razmake da učinite kod ``tabularnim''. -Naše je mišljenje da ovo jako povećava čitljivost koda jer su ljudsko -oko i mozak trenirani da prepoznaju takve strukture, te se sličnosti i -razlike između redaka lakše uočavaju. Također, kad se kod mijenja, -lakše se pronalaze povezana mjesta. Primjena ovog principa može se -vidjeti u deklaracijama sučelja (engl. interface) (ne toliko +Opcionalno moĹžete koristiti dodatne razmake da učinite kod ``tabularnim''. +NaĹĄe je miĹĄljenje da ovo jako povećava čitljivost koda jer su ljudsko +oko i mozak trenirani da prepoznaju takve strukture, te se sličnosti i +razlike između redaka lakĹĄe uočavaju. Također, kad se kod mijenja, +lakĹĄe se pronalaze povezana mjesta. Primjena ovog principa moĹže se +vidjeti u deklaracijama sučelja (engl. interface) (ne toliko primjenljivo kad su razdvojeni komentarima, ali, na primjer, kad su -opisani zajedničkim komentarom iznad svih metoda): +opisani zajedničkim komentarom iznad svih metoda): @smallexample function Pos (const SubString, s: String): Integer; @@ -1692,7 +1689,7 @@ function PosFromCase (const SubStrin function LastPosTillCase (const SubString, s: String; Till: Integer): Integer; @end smallexample -Također je moguće: +Također je moguće: @smallexample procedure Foo; @@ -1709,8 +1706,8 @@ const Quux = 3; @end smallexample -Ista ``tabularna'' strategija korištena u deklaracijama sučelja i -konstanti može se koristiti i u inicijalizatorima: +Ista ``tabularna'' strategija koriĹĄtena u deklaracijama sučelja i +konstanti moĹže se koristiti i u inicijalizatorima: @smallexample const @@ -1751,8 +1748,8 @@ WriteCharAt (w, 1, 1, Frame[3], Text @cindex lomljenje redaka Prijelom retka je opcionalan nakon @emph{lokalnih} @samp{const}, -@samp{type}, @samp{var} deklaracija ako one sadrže jedinu deklaraciju -(ali je moguće imati višestruke identifikatore u jednom retku). +@samp{type}, @samp{var} deklaracija ako one sadrĹže jedinu deklaraciju +(ali je moguće imati viĹĄestruke identifikatore u jednom retku). @smallexample procedure Baz; @@ -1762,7 +1759,7 @@ begin end; @end smallexample -Naravno, slijedeće je također prihvatljivo: +Naravno, slijedeće je također prihvatljivo: @smallexample procedure Baz; @@ -1784,7 +1781,7 @@ begin end; @end smallexample -Ako imate mnogo deklaracija možete prelomiti linije na nekoliko načina. +Ako imate mnogo deklaracija moĹžete prelomiti linije na nekoliko načina. Slijedi preferirani oblik za @samp{var} deklaracije: @smallexample @@ -1801,7 +1798,7 @@ var Fred, Plugh, Xyzzy, Thud: Integer; @end smallexample -Slijedeća je, međutim, pogodnija za polja @samp{record}a i javnih +Slijedeća je, međutim, pogodnija za polja @samp{record}a i javnih @samp{object} polja, posebno ako uz mnoge od njih ili sve stoji komentar. of them: @@ -1822,21 +1819,21 @@ Foo := Bar; var Baz: array [1 .. Foo] of Integer; @end smallexample -Budući da su to GNU Pascal ekstenzije, koristite ovakve deklaracije -štedljivo, na primjer za varijable čija veličina ovisi o vrijednostima -izračunatim unutar potprograma, ili za varijable unutar inicijalizatora -jedinica (unit) ili modula, iako biste mogli poželjeti koristiti +Budući da su to GNU Pascal ekstenzije, koristite ovakve deklaracije +ĹĄtedljivo, na primjer za varijable čija veličina ovisi o vrijednostima +izračunatim unutar potprograma, ili za varijable unutar inicijalizatora +jedinica (unit) ili modula, iako biste mogli poĹželjeti koristiti potprogram. @cindex razmaci i labele -Ne umećite prijelom retka nakon @samp{label}. Pogledajte kako bi trebali +Ne umećite prijelom retka nakon @samp{label}. Pogledajte kako bi trebali deklarirati labele: @smallexample label Foo, Bar, Baz; @end smallexample -I, radi kompletnosti, ovdje je kako to @emph{ne} činiti: +I, radi kompletnosti, ovdje je kako to @emph{ne} činiti: @smallexample label @@ -1845,7 +1842,7 @@ label Baz; @end smallexample -Nekoliko deklaracija u različitim linijama ponekad čak i ne funkcioniraju: +Nekoliko deklaracija u različitim linijama ponekad čak i ne funkcioniraju: @smallexample label @@ -1886,9 +1883,9 @@ end; @cindex lomljenje dugih redaka Duge naredbe ili deklaracije bi trebale biti prelomljene ili uvijek -prije operatora ili uvijek poslije njih (gdje je područje tog 'uvijek' -barem jedan potprogram) ili nakon zareza, s uvlačenjem redaka takvim -da se značenje učini jasnim: +prije operatora ili uvijek poslije njih (gdje je područje tog 'uvijek' +barem jedan potprogram) ili nakon zareza, s uvlačenjem redaka takvim +da se značenje učini jasnim: @c FIXME @c @@ -1914,10 +1911,10 @@ if (x = y) and @cindex if then else naredbe i prelamanje redaka Ovdje je kako koristiti lomljenje redaka u if-then-else naredbama. -Drugo korištenje za njih je gdje bi koristili @samp{case} naredbu da -je moguće, ali to nije slučaj (na primjer jer tipovi nisu cjelobrojni +Drugo koriĹĄtenje za njih je gdje bi koristili @samp{case} naredbu da +je moguće, ali to nije slučaj (na primjer jer tipovi nisu cjelobrojni (ordinal), ili jer vrijednosti koje treba usporediti nisu konstantne, -ali ako usporedba uključuje funkciju (@samp{StrEqualCase}), ili +ali ako usporedba uključuje funkciju (@samp{StrEqualCase}), ili postoje dodatne usporedbe). @smallexample @@ -1929,8 +1926,8 @@ else c @end smallexample -Ako su @samp{a} i ne-@samp{a} glavni slučajevi, a @samp{b} i @samp{c} -pod-slučajevi od ne-@samp{a}, koristite slijedeće (iako razlika može +Ako su @samp{a} i ne-@samp{a} glavni slučajevi, a @samp{b} i @samp{c} +pod-slučajevi od ne-@samp{a}, koristite slijedeće (iako razlika moĹže ponekada biti stvar ukusa): @smallexample @@ -1943,29 +1940,29 @@ else c @end smallexample -Slijedeći (biologijski prilično nepotpun) primjer sadrži mješavinu +Slijedeći (biologijski prilično nepotpun) primjer sadrĹži mjeĹĄavinu obaju formi koju smatramo razumnom: @smallexample if Staniste = 'Voda' then - @{ Životinje koje žive u vodi @} + @{ Ĺ˝ivotinje koje Ĺžive u vodi @} WriteLn ('Da li je to riba?') else if Staniste = 'Zrak' then - @{ Životinje koje žive u zraku @} + @{ Ĺ˝ivotinje koje Ĺžive u zraku @} WriteLn ('Da li je to ptica?') else - @{ Životinje koje žive na kopnu @} + @{ Ĺ˝ivotinje koje Ĺžive na kopnu @} if BrojNogu = 8 then WriteLn ('Da li je to pauk?') else WriteLn ('Da li je to gnu?') @end smallexample -Glavni slučajevi su određeni staništem, a broj nogu razdvaja neke -pod-slučajeve. +Glavni slučajevi su određeni staniĹĄtem, a broj nogu razdvaja neke +pod-slučajeve. @cindex kontrolne petlje -Za normalne kontrolne petlje ovdje je kratka lista mogućnosti: +Za normalne kontrolne petlje ovdje je kratka lista mogućnosti: @smallexample for @dots{} do @@ -1984,8 +1981,8 @@ until @dots{} @end smallexample Ako je samo jedna naredba nakon @samp{if}, ili u @samp{for} ili u -@samp{while} petlji, ili između @samp{repeat} i @samp{until}, te -ako je ta naredba dovoljno kratka, možete staviti naredbu u samo jedan +@samp{while} petlji, ili između @samp{repeat} i @samp{until}, te +ako je ta naredba dovoljno kratka, moĹžete staviti naredbu u samo jedan redak, ovako: @smallexample @@ -2004,7 +2001,7 @@ while @dots{} do @dots{} repeat @dots{} until @dots{} @end smallexample -Ovdje je kako se ponašati ako su umiješani @samp{begin} i @samp{end}. +Ovdje je kako se ponaĹĄati ako su umijeĹĄani @samp{begin} i @samp{end}. @smallexample if @dots{} then @@ -2027,17 +2024,17 @@ while @dots{} do end @end smallexample -@cindex uvlačenje redaka ili indentacija -Indentacija (uvlačenje redaka) je 2 znaka široka, za svako od @samp{begin}, +@cindex uvlačenje redaka ili indentacija +Indentacija (uvlačenje redaka) je 2 znaka ĹĄiroka, za svako od @samp{begin}, @samp{then}, @samp{else}, @samp{case}, @samp{do} (@samp{for}, @samp{while}, @samp{with}, @samp{to begin}, @samp{to end}), @samp{repeat}, @samp{record}, @samp{object}, @samp{type}, @samp{const}, @samp{var}, @samp{label}. Tijela i lokalne varijable i sl. globalnih potprograma se ne smiju -uvlačiti, kao niti globalne deklaracije. Svaki ugniježđeni potprogram +uvlačiti, kao niti globalne deklaracije. Svaki ugniježđeni potprogram (zaglavlje i tijelo) i njegove deklaracije, nasuprot tome, moraju biti -uvučeni. +uvučeni. @smallexample program Prog; @@ -2063,8 +2060,8 @@ begin end. @end smallexample -Zapisi s promjenljivim tipom (variant record) bi trebali biti uvučeni -kao što slijedi: +Zapisi s promjenljivim tipom (variant record) bi trebali biti uvučeni +kao ĹĄto slijedi: @smallexample type @@ -2079,14 +2076,14 @@ type var Foo: record [ kao iznad ] - end = [ inicijalizirajući dio ] + end = [ inicijalizirajući dio ] @end smallexample -Veća indentacija, tj. više od 2 znaka široka, može se koristiti da +Veća indentacija, tj. viĹĄe od 2 znaka ĹĄiroka, moĹže se koristiti da se prelamaju naredbe ili deklaracije ili da se postigne ``tabularnost'' koda. Kondicionali (@samp{@{$ifdef@}}) trebaju biti na istom nivou indentacije -kao i kod na koji utječu: +kao i kod na koji utječu: @smallexample begin @@ -2097,20 +2094,20 @@ begin end; @end smallexample -Kratki kondicionali koji pogađaju samo jedan izraz mogu se napisati +Kratki kondicionali koji pogađaju samo jedan izraz mogu se napisati unutar jednog retka: @smallexample Foo := @{$ifdef DEBUG@} 'debug' @{$else@} 'release verzija' @{$endif@}; @end smallexample -Ako ih se namjerno koristi na način protivan normalnim sintaksnim +Ako ih se namjerno koristi na način protivan normalnim sintaksnim pravilima, stavite ih tamo gdje izgleda da najbolje pristaju i -napišite komentar: +napiĹĄite komentar: @smallexample begin - @{ Izvrši kod bezuvjetno ako je debugging verzija @} + @{ IzvrĹĄi kod bezuvjetno ako je debugging verzija @} @{$ifndef DEBUG@} if NekiUvjet then @{$endif@} @@ -2120,8 +2117,8 @@ begin end; @end smallexample -U većini ćete situacija pronaći ljepši i ne manje efikasan način pisanja -istih naredbi. U ovom slučaju, to se može učiniti na ovaj način: +U većini ćete situacija pronaći ljepĹĄi i ne manje efikasan način pisanja +istih naredbi. U ovom slučaju, to se moĹže učiniti na ovaj način: @smallexample begin @@ -2132,7 +2129,7 @@ begin end; @end smallexample -Ili još bolje: +Ili joĹĄ bolje: @smallexample @{ globally @} @@ -2152,29 +2149,29 @@ end; @cindex Znakovni nizovi @cindex stringovi -Većina pravila koja smo pokrili dosad ne djeluju unutar znakovnih -nizova. Općenito, poruke sadržane u nizovima trebaju slijediti pravila +Većina pravila koja smo pokrili dosad ne djeluju unutar znakovnih +nizova. Općenito, poruke sadrĹžane u nizovima trebaju slijediti pravila iz teksta GNU Coding standards, na primjer, stavite citirana imena -unutar @samp{`} i @samp{'}, iako to znači da ćete morati podvostručiti -@samp{'} u Pascal nizovima. @xref{Errors, , , standards}, za više +unutar @samp{`} i @samp{'}, iako to znači da ćete morati podvostručiti +@samp{'} u Pascal nizovima. @xref{Errors, , , standards}, za viĹĄe informacija. -Normalno biste trebali koristiti nizove omeđene jednostrukim navodnicima, -kao @samp{'ovo je lijep niz kojeg čitate'}. Koristite nizove u +Normalno biste trebali koristiti nizove omeđene jednostrukim navodnicima, +kao @samp{'ovo je lijep niz kojeg čitate'}. Koristite nizove u dvostrukim navodnicima kad trebate escape sekvence u C stilu kao npr. @samp{"\t"}. Primijetite da je @samp{NewLine} (@samp{"\n"}) -predefiniran, tako da je preporučljivo koristiti @samp{NewLine} +predefiniran, tako da je preporučljivo koristiti @samp{NewLine} osim ako ne morate koristiti niz u C stilu za druge svrhe. -Niz koji zauzima više redaka možete koristiti ovako: +Niz koji zauzima viĹĄe redaka moĹžete koristiti ovako: @smallexample WriteLn ('Bok svijete') @end smallexample -ili (možda bolje, posebno ako tekst u nizu sadrži paragrafe i/ili -uvlačenje redaka sam po sebi): +ili (moĹžda bolje, posebno ako tekst u nizu sadrĹži paragrafe i/ili +uvlačenje redaka sam po sebi): @smallexample WriteLn ( @@ -2182,13 +2179,13 @@ WriteLn ( svijete') @end smallexample -Međutim, također je moguće koristiti: +Međutim, također je moguće koristiti: @smallexample WriteLn ('Pozdrav' + NewLine + 'svijete') @end smallexample -(Primijetite da se gornji primjer neće prevesti bez korištenja +(Primijetite da se gornji primjer neće prevesti bez koriĹĄtenja @code{GPC} jedinice (unit)). Ili, naravno: @@ -2198,43 +2195,43 @@ WriteLn ('Pozdrav'); WriteLn ('svijete') @end smallexample -Ako želite provjeriti da li je niz prazan, koristite slijedeću sintaksu: +Ako Ĺželite provjeriti da li je niz prazan, koristite slijedeću sintaksu: @smallexample if s = '' then @dots{} @end smallexample -GNU Pascal prevodilac će ovo optimizirati u slijedeći više efikasan -test, stoga možete koristiti prethodni, kraći, bez kajanja: +GNU Pascal prevodilac će ovo optimizirati u slijedeći viĹĄe efikasan +test, stoga moĹžete koristiti prethodni, kraći, bez kajanja: @smallexample if Length (s) = 0 then @dots{} @end smallexample -Ovo se odnosi i na @samp{<>}, naravno, čak i za pridruživanja gdje -je @samp{s := ''} preporučeni oblik i biti će optimiran od strane +Ovo se odnosi i na @samp{<>}, naravno, čak i za pridruĹživanja gdje +je @samp{s := ''} preporučeni oblik i biti će optimiran od strane GPC-a u @samp{SetLength (s, 0)}. @node Internacionalizacija @section Tehnike za internacionalizaciju @cindex internacionalizacija -@c Pogledajte @samp{gettext} priručnik za informacije o +@c Pogledajte @samp{gettext} priručnik za informacije o @c internacionalizaciji i lokalizaciji. @c -@c U pogonu je projekt vođen od Eike Lange (@samp{eike(at)g-n-u.de}) -@c koji teži da proizvede internacionalizacijske rutine za GNU Pascal. -@c Možete dobaviti distribuciju izvornog koda u .tar obliku sa +@c U pogonu je projekt vođen od Eike Lange (@samp{eike(at)g-n-u.de}) +@c koji teĹži da proizvede internacionalizacijske rutine za GNU Pascal. +@c MoĹžete dobaviti distribuciju izvornog koda u .tar obliku sa @c @uref{http://www.gnu-pascal.de/contrib/eike/}. @c -@c Osim internacionalizacijske jedinice, možete pronaći drugi paket -@c koji sadrži alat nazvan @code{pas2po}, korišten za ekstrakciju -@c nizova iz GNU Pascal source koda tj. slično onome što @code{xgettext} +@c Osim internacionalizacijske jedinice, moĹžete pronaći drugi paket +@c koji sadrĹži alat nazvan @code{pas2po}, koriĹĄten za ekstrakciju +@c nizova iz GNU Pascal source koda tj. slično onome ĹĄto @code{xgettext} @c radi za C i C++ programe. @code{pas2po} nije tako komforan kao -@c @code{xgettext}, ali na programu se još uvijek radi. Molimo -@c pročitajte dokumentaciju isporučenu u .tar paketu i držite se čvrsto. +@c @code{xgettext}, ali na programu se joĹĄ uvijek radi. Molimo +@c pročitajte dokumentaciju isporučenu u .tar paketu i drĹžite se čvrsto. Molimo pogledajte u GPC manualu o tome kako se internacionalizacija programa izvodi (@pxref{I18N, , , gpc}). @@ -2242,45 +2239,45 @@ programa izvodi (@pxref{I18N, , , gpc}). @section MemoryMap @findex MemoryMap -Ovaj se odsječak GNU Coding Standards također odnosi na GNU Pascal. -Samo se prisjetite da @samp{mmap} zapravo znači @samp{MemoryMap} +Ovaj se odsječak GNU Coding Standards također odnosi na GNU Pascal. +Samo se prisjetite da @samp{mmap} zapravo znači @samp{MemoryMap} u tom kontekstu. @xref{Mmap, , , standards}. @node Dokumentacija @chapter Dokumentiranje programa @cindex dokumentacija -Preporučujemo čitanje odgovarajućih poglavlja u tekstu GNU Coding Standards, -kako se ona primjenjuju također i u ovom kontekstu. -@xref{Documentation, , , standards}. Međutim, postoje neke primjedbe +Preporučujemo čitanje odgovarajućih poglavlja u tekstu GNU Coding Standards, +kako se ona primjenjuju također i u ovom kontekstu. +@xref{Documentation, , , standards}. Međutim, postoje neke primjedbe vrijedne spominjanja ovdje. -Što se man stranica tiče, bilo bi dobro imati jednu koja ukazuje na +Ĺ to se man stranica tiče, bilo bi dobro imati jednu koja ukazuje na Info dokumentaciju. Postoji GNU program, zvan @samp{help2man}, koji generira man stranicu na osnovi @samp{--help} ispisa programa. -Radi dobro, osim što uvijek ispisuje @samp{FSF} što nije točno za sve -programe prevedene s GNU Pascal prevodiocem, ali se izlaz lako može -promijeniti (na primjer, automatski, koristeći @samp{sed}). - -Međutim, ne ulažite previše napora u man stranice. One mogu -biti rješiv problem u početku, ali održavati ih konzistentnim s -Texinfo datotekama znači mnogo posla. Povrh svega, ako ih ne držite -ažurnim vjerojatnije je da će kreirati više konfuzije nego što će -biti od pomoći. - -S jedne strane, ako su man stranice previše skraćene vjerojatno će -im nedostajati važne informacije. S druge strane, ako nisu skraćene, -postaju teške za navigaciju. +Radi dobro, osim ĹĄto uvijek ispisuje @samp{FSF} ĹĄto nije točno za sve +programe prevedene s GNU Pascal prevodiocem, ali se izlaz lako moĹže +promijeniti (na primjer, automatski, koristeći @samp{sed}). + +Međutim, ne ulaĹžite previĹĄe napora u man stranice. One mogu +biti rjeĹĄiv problem u početku, ali odrĹžavati ih konzistentnim s +Texinfo datotekama znači mnogo posla. Povrh svega, ako ih ne drĹžite +aĹžurnim vjerojatnije je da će kreirati viĹĄe konfuzije nego ĹĄto će +biti od pomoći. + +S jedne strane, ako su man stranice previĹĄe skraćene vjerojatno će +im nedostajati vaĹžne informacije. S druge strane, ako nisu skraćene, +postaju teĹĄke za navigaciju. -Drugim riječima, posvetite se Info (tj. Texinfo) dokumentaciji. +Drugim riječima, posvetite se Info (tj. Texinfo) dokumentaciji. @node Izdanja programa @chapter Proces izdanja verzija softwarea @cindex izdanja -Molimo pročitajte odgovarajuće poglavlje u GNU Coding Standards. +Molimo pročitajte odgovarajuće poglavlje u GNU Coding Standards. Primijetite da veliki napori sa auto-alatkama C-a nisu neophodni -za normalne GNU Pascal programe. Makefile datoteke također često +za normalne GNU Pascal programe. Makefile datoteke također često nisu neophodne u GNU Pascalu. @xref{Managing Releases, , , standards}. @menu @@ -2291,17 +2288,17 @@ nisu neophodne u GNU Pascalu. @xref{Mana @section Konvencije Makefile datoteka @cindex makefile konvencije -Za vaš Pascal projekt vjerojatno nećete trebati velike @samp{Makefile} -datoteke i nećete trebati koristiti @samp{autoconf} ili @samp{automake}. -Možete proslijediti @samp{--automake} GNU Pascal prevodiocu tako da -prevodilac vodi brigu o međusobnim zavisnostima za vas. (U vrijeme dok -ovo pišemo, GNU Pascalov @samp{automake} ima nekih manjih bugova, -ali će oni biti ispravljeni. Također, postoji i plan za alatku zvanu -@samp{gp}, koja je u razvoju, koja bi još uvelike pojednostavnila -proces kompilacije. Ostanite na vezi. U svakom slučaju, obično nećete +Za vaĹĄ Pascal projekt vjerojatno nećete trebati velike @samp{Makefile} +datoteke i nećete trebati koristiti @samp{autoconf} ili @samp{automake}. +MoĹžete proslijediti @samp{--automake} GNU Pascal prevodiocu tako da +prevodilac vodi brigu o međusobnim zavisnostima za vas. (U vrijeme dok +ovo piĹĄemo, GNU Pascalov @samp{automake} ima nekih manjih bugova, +ali će oni biti ispravljeni. Također, postoji i plan za alatku zvanu +@samp{gp}, koja je u razvoju, koja bi joĹĄ uvelike pojednostavnila +proces kompilacije. Ostanite na vezi. U svakom slučaju, obično nećete trebati pisati kompleksne @samp{Makefile} datoteke sami.) -@emph{Jednostavan} Makefile može biti u redoslijedu kao: +@emph{Jednostavan} Makefile moĹže biti u redoslijedu kao: @smallexample GPC_FLAGS=-O2 @@ -2325,47 +2322,47 @@ extraclean: distclean maintainer-clean: extraclean @end smallexample -Mogli biste, međutim, poželjeti da stavite druga pravila u @samp{Makefile} +Mogli biste, međutim, poĹželjeti da stavite druga pravila u @samp{Makefile} za izgradnju dokumentacije, podatkovnih datoteka, izradu distribucija -i slično. Takve stvari su izvan područja ovog teksta. Obično možete +i slično. Takve stvari su izvan područja ovog teksta. Obično moĹžete izvesti Pascal kompilacije s jednim jedinim @samp{gpc --automake} pozivom po programu. -@node Rječnik pojmova -@chapter Rječnik pojmova korištenih kroz tekst -@cindex rječnik pojmova +@node Rječnik pojmova +@chapter Rječnik pojmova koriĹĄtenih kroz tekst +@cindex rječnik pojmova Rutine (potprogrami) su ili @samp{procedure}, ili funkcije (@samp{function}), ili konstruktori (@samp{constructor}), ili -destruktori (@samp{destructor}), ili korisnički definirani operatori. +destruktori (@samp{destructor}), ili korisnički definirani operatori. Deklaracije su oni dijelovi programa koji ``najavljuju'' postojanje -i svojstva određenih objekata kao što su konstante, tipovi, +i svojstva određenih objekata kao ĹĄto su konstante, tipovi, varijable, rutine, jedinice (unit), moduli i sam program. -Naredbe su dijelovi programa koji zapravo ``rade'' nešto. +Naredbe su dijelovi programa koji zapravo ``rade'' neĹĄto. Pojedina naredba je ili dodjela vrijednosti, ili poziv procedure, ili naredba za skok (@samp{goto}, @samp{Exit}, @samp{Return}, @samp{Break}, @samp{Continue}), ili asemblerska naredba, ili -složena naredba (@samp{begin} @dots{} @samp{end}, @samp{if}, +sloĹžena naredba (@samp{begin} @dots{} @samp{end}, @samp{if}, @samp{case}, @samp{repeat}, @samp{while}, @samp{for}, @samp{with}) -koja opet može sadržavati jednu ili nekoliko naredbi. +koja opet moĹže sadrĹžavati jednu ili nekoliko naredbi. -Identifikatori su takvi jezični elementi koji daju imena objektima kao -što su rutine, konstante, tipovi, varijable, jedinice (unit), moduli. -Oni mogu biti (lokalno) redefinirani, za razliku od ključnih riječi -koje su dio fiksnih sintaktičkih konstrukcija (na primjer @samp{if} @dots{} +Identifikatori su takvi jezični elementi koji daju imena objektima kao +ĹĄto su rutine, konstante, tipovi, varijable, jedinice (unit), moduli. +Oni mogu biti (lokalno) redefinirani, za razliku od ključnih riječi +koje su dio fiksnih sintaktičkih konstrukcija (na primjer @samp{if} @dots{} @samp{then} @dots{} @samp{else}) i ne mogu biti redefinirani. Makro -naredbe nisu jezički elementi budući da su ekspandirani u preprocesoru +naredbe nisu jezički elementi budući da su ekspandirani u preprocesoru i prevodilac ih nikada niti ne vidi. -Endianness znači poredak u kojem su bajtovi vrijednosti dužih od -jedne riječi smještene u memoriju. Ovo pogađa, npr. cjelobrojne -vrijednosti i pokazivače dok, npr. polja jednobajtnih znakova nisu -time pogođena. (@pxref{Endianness, , , gpc}) +Endianness znači poredak u kojem su bajtovi vrijednosti duĹžih od +jedne riječi smjeĹĄtene u memoriju. Ovo pogađa, npr. cjelobrojne +vrijednosti i pokazivače dok, npr. polja jednobajtnih znakova nisu +time pogođena. (@pxref{Endianness, , , gpc}) -@emph{Primijeti:} I druge se stavke mogu dodati ovdje ako vam se to čini -korisnim. Ako biste željeli definiciju nekog drugog pojma, dajte nam +@emph{Primijeti:} I druge se stavke mogu dodati ovdje ako vam se to čini +korisnim. Ako biste Ĺželjeli definiciju nekog drugog pojma, dajte nam do znanja. @node Indeks Index: gcc/p/doc/hr/homepage.def =================================================================== RCS file: /cvs/gcc/gcc/p/doc/hr/homepage.def,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/hr/homepage.def 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/hr/homepage.def 21 May 2012 21:30:54 -0000 1.2 @@ -8,22 +8,22 @@ structure=\ 'index index.html.in Home GNU Pascal about @Naglasci About O GNU Pascalu -news @News News Nove mogućnosti u GNU Pascalu -faq @FAQ FAQ Često postavljana pitanja +news @News News Nove mogućnosti u GNU Pascalu +faq @FAQ FAQ Često postavljana pitanja install @Installation Install Kako instalirati GNU Pascal -libraries @Libraries Libraries Biblioteke koje možete koristiti uz GPC -support @Support Podr\ška Kako dobiti podršku za GNU Pascal +libraries @Libraries Libraries Biblioteke koje moĹžete koristiti uz GPC +support @Support Podr\ĹĄka Kako dobiti podrĹĄku za GNU Pascal team @Acknowledgments Tim GNU Pascal razvojni tim gnu @GNU GNU GNU projekt todo @To\ Do To\ Do Stvari preostale za napraviti u GNU Pascalu -resources @Resursi Resursi Resursi za korištenje s GPC-om.' +resources @Resursi Resursi Resursi za koriĹĄtenje s GPC-om.' -charset='iso-8859-2' +charset='utf-8' -manualref='Ova stranica je direktan izvadak iz GPC priručnika. -Ako želite pregledavati priručnik možete početi na -vrhu priručnika ili na -odgovarajućoj stranici u priručniku.' +manualref='Ova stranica je direktan izvadak iz GPC priručnika. +Ako Ĺželite pregledavati priručnik moĹžete početi na +vrhu priručnika ili na +odgovarajućoj stranici u priručniku.' returntomainpage='Povratak na vrh' @@ -47,9 +47,9 @@ by this site.


Copyright © 1996-2006 GNU Pascal development team

Kopiranje bez izmjena i distribucija je dozvoljena na svakom mediju, -uz uvjet da je ova obavijest i ograda niže sačuvana.

-

Ova informacija je pružena u nadi da će biti korisna, ali bez -ikakve garancije. Negiramo svaku pravnu odgovornost za točnost ove +uz uvjet da je ova obavijest i ograda niĹže sačuvana.

+

Ova informacija je pružena u nadi da će biti korisna, ali bez +ikakve garancije. Negiramo svaku pravnu odgovornost za točnost ove informacije.

-

Nismo odgovorni za sadržaj web stranica referenciranih s našeg +

Nismo odgovorni za sadrĹžaj web stranica referenciranih s naĹĄeg sitea.

' Index: gcc/p/doc/hr/index.html.in =================================================================== RCS file: /cvs/gcc/gcc/p/doc/hr/index.html.in,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/hr/index.html.in 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/hr/index.html.in 21 May 2012 21:30:54 -0000 1.2 @@ -4,7 +4,7 @@

GNU Pascal

-

Dobrodošli na WWW home site GNU Pascala,
+

DobrodoĹĄli na WWW home site GNU Pascala,
slobodnog 32/64-bitnog Pascal prevodioca (compilera)!

Copyright © 1987-2006 Free Software Foundation, Inc.

@@ -12,95 +12,95 @@ slobodnog 32/64-bitnog Pascal prevodioca

GNU Pascal je Free Software (Open-Source Software). -Dobrodošli ste da ga redistribuirate i/ili modificirate pod uvjetima -GNU General Public License - GNU opće javne licence; -vidi GNU za više detalja.

+Dobrodošli ste da ga redistribuirate i/ili modificirate pod uvjetima +GNU General Public License - GNU opće javne licence; +vidi GNU za više detalja.

-

Sadržaj

+

SadrĹžaj


-

Svi zaštitni znakovi korišteni na ovim WWW stranicama su vlasništvo +

Svi zaĹĄtitni znakovi koriĹĄteni na ovim WWW stranicama su vlasniĹĄtvo njihovih pravnih nositelja.

-

Crtež: Copyright © 1996 by Markus Gerwinski,
+

CrteĹž: Copyright © 1996 by Markus Gerwinski,
markus@gerwinski.de
Kolor gradijent: Copyright © 1996, 2000, 2002 by Peter Gerwinski, Frank Heckenbach

Index: gcc/p/doc/hr/invoke.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/hr/invoke.texi,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/hr/invoke.texi 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/hr/invoke.texi 21 May 2012 21:30:54 -0000 1.2 @@ -9,7 +9,7 @@ @c Translator: Mirsad Todorovac @node Invoking GPC -@chapter Opcije u naredbenoj liniji koje podržava GNU Pascal. +@chapter Opcije u naredbenoj liniji koje podrĹžava GNU Pascal. @cindex GNU Pascal opcije komandne linije @cindex opcije komandne linije @cindex opcije naredbene linije @@ -17,34 +17,34 @@ (Pozivanje GPC-a). GPC je prevodilac (engl. compiler) koji se poziva iz naredbene (komandne) -linije tj. potrebno je pozvati @file{gpc} prosljeđujući mu ime datoteke koju -želite da prevede, plus (eventualne) opcije. +linije tj. potrebno je pozvati @file{gpc} prosljeđujući mu ime datoteke koju +Ĺželite da prevede, plus (eventualne) opcije. -GPC podržava sve opcije komandne linije (engl. command-line options) koje +GPC podrĹžava sve opcije komandne linije (engl. command-line options) koje poznaje GCC prevodilac, osim velikog broja opcija za preprocesor. Za kompletni referentni popis i opis svih opcija pogledajte @ref{Invoking GCC,,GCC Command Options,gcc,the GCC Manual}. -Niže ćete naći listu dodatnih opcija koje GPC podržava, kao i listu -najvažnijih opcija koje GPC podržava (uključujući i neke on onih koje podržava +NiĹže ćete naći listu dodatnih opcija koje GPC podrĹžava, kao i listu +najvaĹžnijih opcija koje GPC podrĹžava (uključujući i neke on onih koje podrĹžava jednako i GCC). -Moguće je miješati opcije i imena datoteka u komandnoj liniji. U većini -slučajeva poredak nije bitan. Poredak postaje bitan npr. kad koristite više -opcija istog tipa; za primjer, ako navedete @samp{-L} više nego jednom, -direktoriji (kazala) se pretražuju u poretku u kojem su specificirani. -@emph{Note:} Kako mnoge opcije imaju višeslovna imena, višestruke jednoslovne -opcije @emph{ne} mogu se grupirati na način koji je moguć u mnogim drugim -programima: @samp{-dr} je vrlo različito od @w{@samp{-d -r}}. - -Mnoge opcije imaju duga imena koja započinju sa @samp{--} ili, potpuno -ekvivalentno @samp{-f}. Npr. @samp{--mixed-comments} je isto što i -@samp{-fmixed-comments}. Neke opcije upućuju GPC da daje upozorenja (engl. -warnings) tj. dijagnostičke poruke koje izvještavaju o konstrukcijama koje -nisu same u sebi pogrešne, ali su rizične; ili može sugerirati da je možda -došlo do pogreške. Te opcije započinju s @samp{-W}. +Moguće je mijeĹĄati opcije i imena datoteka u komandnoj liniji. U većini +slučajeva poredak nije bitan. Poredak postaje bitan npr. kad koristite viĹĄe +opcija istog tipa; za primjer, ako navedete @samp{-L} viĹĄe nego jednom, +direktoriji (kazala) se pretraĹžuju u poretku u kojem su specificirani. +@emph{Note:} Kako mnoge opcije imaju viĹĄeslovna imena, viĹĄestruke jednoslovne +opcije @emph{ne} mogu se grupirati na način koji je moguć u mnogim drugim +programima: @samp{-dr} je vrlo različito od @w{@samp{-d -r}}. + +Mnoge opcije imaju duga imena koja započinju sa @samp{--} ili, potpuno +ekvivalentno @samp{-f}. Npr. @samp{--mixed-comments} je isto ĹĄto i +@samp{-fmixed-comments}. Neke opcije upućuju GPC da daje upozorenja (engl. +warnings) tj. dijagnostičke poruke koje izvjeĹĄtavaju o konstrukcijama koje +nisu same u sebi pogreĹĄne, ali su rizične; ili moĹže sugerirati da je moĹžda +doĹĄlo do pogreĹĄke. Te opcije započinju s @samp{-W}. -Većina za GPC specifičnih opcija mogu također biti promijenjene tijekom -jedne kompilacije korištenjem naredbi prevodiocu (engl. compiler directives) +Većina za GPC specifičnih opcija mogu također biti promijenjene tijekom +jedne kompilacije koriĹĄtenjem naredbi prevodiocu (engl. compiler directives) u izvornom kodu (engl. source), npr. @samp{@{$X+@}} ili @samp{@{$extended-syntax@}} za @samp{--extended-syntax} (@pxref{Compiler Directives}). @@ -52,9 +52,9 @@ u izvornom kodu (engl. source), npr. @sa GPC razumije iste varijable okoline (engl. environment variables) koje razumije i GCC (@pxref{Environment variables,,Environment Variables Affecting GCC,gcc,the GCC manual}). -Dodatno, GPC prepoznaje @samp{GPC_EXEC_PREFIX} sa istim značenjem koje -@samp{GCC_EXEC_PREFIX} ima za GCC. GPC također prepoznaje -@samp{GCC_EXEC_PREFIX}, ali @samp{GPC_EXEC_PREFIX} ima veći prioritet. +Dodatno, GPC prepoznaje @samp{GPC_EXEC_PREFIX} sa istim značenjem koje +@samp{GCC_EXEC_PREFIX} ima za GCC. GPC također prepoznaje +@samp{GCC_EXEC_PREFIX}, ali @samp{GPC_EXEC_PREFIX} ima veći prioritet. Neke od dugih opcija (npr. @samp{--unit-path}) trebaju argument (parametar). Ovaj je parametar odvojen jednim @samp{=} znakom, npr. @@ -65,11 +65,11 @@ Ovaj je parametar odvojen jednim @samp{= @menu * GPC Command Line Options:: GPC opcije komandne linije osim GCC-ovih. -* GPC Options:: Najčešće korištene opcije GPC-a. +* GPC Options:: Najčešće koriĹĄtene opcije GPC-a. @end menu (Napomena: naslovi poglavlja su neprevedeni zbog unakrsnih referenci iz -neprevedenih poglavlja priručnika i prema njima.) +neprevedenih poglavlja priručnika i prema njima.) @c ========================================================================== @@ -77,10 +77,10 @@ neprevedenih poglavlja priručnika i prem @node GPC Command Line Options @section GPC opcije osim GCC-ovih. -Slijedeća tablica navodi opcije komandne linije osim onih koje također +Slijedeća tablica navodi opcije komandne linije osim onih koje također razumije i GCC. -(Sadržaj se automatski generira na engleskom.) +(SadrĹžaj se automatski generira na engleskom.) @include lang-options.texi @@ -89,7 +89,7 @@ razumije i GCC. @node GPC Options -@section Najčešće korištene opcije GPC-a +@section Najčešće koriĹĄtene opcije GPC-a Kao najjednostavniji primjer, pozivanje @@ -97,158 +97,158 @@ Kao najjednostavniji primjer, pozivanje gpc foo.pas @end smallexample -kaže GPC-u da prevede izvorni kod u datoteci @file{foo.pas} i da proizvede -izvršnu (engl. executable) datoteku sa podrazumijevanim (engl. default) +kaĹže GPC-u da prevede izvorni kod u datoteci @file{foo.pas} i da proizvede +izvrĹĄnu (engl. executable) datoteku sa podrazumijevanim (engl. default) imenom, koje je @file{foo.exe} na EMX platformi, @file{a.exe} na CygWin, -ujedno @file{a.out} i @file{a.exe} na DJGPP, te @file{a.out} na većini +ujedno @file{a.out} i @file{a.exe} na DJGPP, te @file{a.out} na većini ostalih platformi. -Korisnik blizak s BP-om (Borland Pascalom) može uočiti da je neophodno dati -datoteci ekstenziju (sufiks) @samp{.pas}: GPC je zajedničko sučelje (engl. +Korisnik blizak s BP-om (Borland Pascalom) moĹže uočiti da je neophodno dati +datoteci ekstenziju (sufiks) @samp{.pas}: GPC je zajedničko sučelje (engl. interface) za Pascal prevodilac, ali i za C, ObjC, i C++ prevodilac, -asembler, linker; a možda i za Adu i Fortran prevodilac. Prema ekstenziji -vaše izvorne datoteke GPC određuje koji prevodilac treba pokrenuti. GPC +asembler, linker; a moĹžda i za Adu i Fortran prevodilac. Prema ekstenziji +vaĹĄe izvorne datoteke GPC određuje koji prevodilac treba pokrenuti. GPC prepoznaje Pascal programe prema ekstenziji @file{.pas}, @file{.p}, @file{.pp} -ili @file{.dpr}. GPC također prihvaća izvorne kodove u drugim jezicima (npr. -@file{.c} for C) i poziva odgovarajuće prevoditelje za njih. Datoteke s +ili @file{.dpr}. GPC također prihvaća izvorne kodove u drugim jezicima (npr. +@file{.c} for C) i poziva odgovarajuće prevoditelje za njih. Datoteke s ekstenzijom @file{.o} ili bez ijedne poznate se smatraju objektnim datotekama ili bibliotekama funkcija (engl. library) koje treba povezati (engl. link). -Još jedan primjer: +JoĹĄ jedan primjer: @smallexample gpc -O2 -Wall --executable-file-name --automake --unit-path=units foo.pas @end smallexample -Ovo će prevesti izvornu datoteku @file{foo.pas} u u izvršnu datoteku imena +Ovo će prevesti izvornu datoteku @file{foo.pas} u u izvrĹĄnu datoteku imena @file{foo} (@samp{--executable-file-name}) sa relativno dobrom optimizacijom (@samp{-O2}), uz upozorenja o potencijalnim problemima @samp{-Wall}. Ako -program koristi jedinice (UNIT) ili importira module, njih će prevodilac -potražiti u direktoriju imena @file{units} (@samp{--unit-path}) i automatski +program koristi jedinice (UNIT) ili importira module, njih će prevodilac +potraĹžiti u direktoriju imena @file{units} (@samp{--unit-path}) i automatski prevesti i povezati (@samp{--automake}). -Slijedeća tablica navodi najčešće korištene opcije GPC-a. +Slijedeća tablica navodi najčešće koriĹĄtene opcije GPC-a. @table @code @item --automake -Provjerava da li korišteni moduli/jedinice moraju biti ponovno prevedeni -i vrši ponovno prevođenje ako je to neophodno. +Provjerava da li koriĹĄteni moduli/jedinice moraju biti ponovno prevedeni +i vrĹĄi ponovno prevođenje ako je to neophodno. @item --unit-path=@var{dir}[:@var{dir}@dots{}] -Traži jedinice (engl. i Pascal UNIT) i objektne datoteke u danim direktorijima. +TraĹži jedinice (engl. i Pascal UNIT) i objektne datoteke u danim direktorijima. @item --object-path=@var{dir}[:@var{dir}@dots{}] -Traži objektne datoteke u navedenim direktorijima. +TraĹži objektne datoteke u navedenim direktorijima. @item --unit-destination-path=@var{dir} -Smješta prevedene jedinice (GPI i objektne datoteke) u direktorij @var{dir}. -Podrazumna (engl. default) vrijednost u slučaju izostavljanja opcije je +SmjeĹĄta prevedene jedinice (GPI i objektne datoteke) u direktorij @var{dir}. +Podrazumna (engl. default) vrijednost u slučaju izostavljanja opcije je trenutni direktorij. @item --object-destination-path=@var{dir} -Smješta prevedene objektne datoteke (npr. od C datoteka, ali ne od Pascal +SmjeĹĄta prevedene objektne datoteke (npr. od C datoteka, ali ne od Pascal jedinica) u direktorij @var{dir}. Podrazumijevana (default) vrijednost je direktorij dan sa @samp{--unit-destination-path}. @item --executable-path=@var{dir} -Smješta proizvedenu izvršnu datoteku u direktorij @var{dir}. Podrazumna +SmjeĹĄta proizvedenu izvrĹĄnu datoteku u direktorij @var{dir}. Podrazumna vrijednost je direktorij u kojem se nalazi glavna izvorna datoteka. @item -o @var{file} @cindex opcija ime izlazne datoteke Smjesti izlaz u datoteku @var{file}. Ovo vrijedi bez obzira na tip izlaza -koji je proizveden, bio on izvršna datoteka, objektna datoteka, asemblerski +koji je proizveden, bio on izvrĹĄna datoteka, objektna datoteka, asemblerski listing itd. -Kako samo jedna izlazna datoteka može biti navedena, nema smisla koristiti -@samp{-o} opciju kad se prevodi više od jedne ulazne datoteke, osim ako se -proizvodi izvršna datoteka kao izlaz. +Kako samo jedna izlazna datoteka moĹže biti navedena, nema smisla koristiti +@samp{-o} opciju kad se prevodi viĹĄe od jedne ulazne datoteke, osim ako se +proizvodi izvrĹĄna datoteka kao izlaz. @item --executable-file-name[=@var{name}] @cindex opcija izlazna datoteka -Proizvodi ime izvršne datoteke iz imena izvorne datoteke, ili koristi -@var{name} kao ime izvršne datoteke. Razlika u odnosu na @samp{-o} opciju +Proizvodi ime izvrĹĄne datoteke iz imena izvorne datoteke, ili koristi +@var{name} kao ime izvrĹĄne datoteke. Razlika u odnosu na @samp{-o} opciju je da @samp{--executable-file-name} uzima u obzir @samp{--executable-path}, -dok @samp{-o} to ne čini i prihvaća ime datoteke koje uključuje direktorij. -Dalje, @samp{--executable-file-name} se odnosi samo na izvršne datoteke, ne +dok @samp{-o} to ne čini i prihvaća ime datoteke koje uključuje direktorij. +Dalje, @samp{--executable-file-name} se odnosi samo na izvrĹĄne datoteke, ne na ostale izabrane oblike izlaznih datoteka. @item -L@var{dir} -Traži biblioteke funkcija (eng. libraries) u direktoriju @var{dir}. Može se -navesti više puta. +TraĹži biblioteke funkcija (eng. libraries) u direktoriju @var{dir}. MoĹže se +navesti viĹĄe puta. @item -I@var{dir} -Traži include (uključne) datoteke u direktoriju @var{dir}. Može se navesti -više puta. +TraĹži include (uključne) datoteke u direktoriju @var{dir}. MoĹže se navesti +viĹĄe puta. @item -l@var{library} @cindex Libraries -Potraži biblioteku funkcija @var{library} kod povezivanja. Ova se opcija +PotraĹži biblioteku funkcija @var{library} kod povezivanja. Ova se opcija mora nalaziti u komandnoj liniji @emph{iza} svih izvornih ili objektnih datoteka te drugih biblioteka koje referenciraju @var{library}. @item -O[@var{n}] -Izaberi nivo optimizacije. Bez optimizacije (ili @samp{-O0} što je podrazumna --default- vrijednost), cilj prevoditelja je da smanji vrijeme prevođenja i -da proces otkrivanja pogrešaka (engl. debugging) da očekivane rezultate. -Naredbe su neovisne: ako zaustavite program prekidnom točkom (engl. breakpoint) -između naredbi, možete dodijeliti novu vrijednost nekoj varijabli ili -promijeniti programski brojač na bilo koju drugu naredbu u istoj rutini i -dobiti točno rezultate koje očekujete od izvornog koda. - -S optimizacijom, prevodilac nastoji reducirati veličinu izvršnog koda i -trajanje izvršavanja. Što veća vrijednost @var{n}, više će se optimizacija -izvesti, ali će prevođenje trajati dulje. +Izaberi nivo optimizacije. Bez optimizacije (ili @samp{-O0} ĹĄto je podrazumna +-default- vrijednost), cilj prevoditelja je da smanji vrijeme prevođenja i +da proces otkrivanja pogreĹĄaka (engl. debugging) da očekivane rezultate. +Naredbe su neovisne: ako zaustavite program prekidnom točkom (engl. breakpoint) +između naredbi, moĹžete dodijeliti novu vrijednost nekoj varijabli ili +promijeniti programski brojač na bilo koju drugu naredbu u istoj rutini i +dobiti točno rezultate koje očekujete od izvornog koda. + +S optimizacijom, prevodilac nastoji reducirati veličinu izvrĹĄnog koda i +trajanje izvrĹĄavanja. Ĺ to veća vrijednost @var{n}, viĹĄe će se optimizacija +izvesti, ali će prevođenje trajati dulje. -Ako koristite više @samp{-O} opcija, sa ili bez @var{n}, zadnja opcija je -ona koja je važeća. +Ako koristite viĹĄe @samp{-O} opcija, sa ili bez @var{n}, zadnja opcija je +ona koja je vaĹžeća. @item -g -Proizvedi informacije za debugging (ispravljanje progrešaka) prikladne za +Proizvedi informacije za debugging (ispravljanje progreĹĄaka) prikladne za @samp{gdb}. Za razliku od nekih drugih prevoditelja, GNU Pascal dozvoljava -da koristite @samp{-g} sa @samp{-O}. Prečice poduzete od strane optimiziranog -koda mogu povremeno proizvesti iznenađujuće rezultate: neke varijable koje -ste deklarirali mogu uopće ne postojati; tijek programa može se skokovito -premjestiti gdje ga niste očekivali; neke naredbe se mogu ne izvršiti jer -izračunavaju konstantnu vrijednost ili su njihove vrijednosti već bile pri -ruci; neke se naredbe mogu izvršiti na drugim mjestima jer su pomaknute -izvan petlji. Međutim, pokazuje se mogućim debuggirati optimizirani izlaz. -Ovo čini razumnim koristiti optimizer za programe još i u testnoj fazi. +da koristite @samp{-g} sa @samp{-O}. Prečice poduzete od strane optimiziranog +koda mogu povremeno proizvesti iznenađujuće rezultate: neke varijable koje +ste deklarirali mogu uopće ne postojati; tijek programa moĹže se skokovito +premjestiti gdje ga niste očekivali; neke naredbe se mogu ne izvrĹĄiti jer +izračunavaju konstantnu vrijednost ili su njihove vrijednosti već bile pri +ruci; neke se naredbe mogu izvrĹĄiti na drugim mjestima jer su pomaknute +izvan petlji. Međutim, pokazuje se mogućim debuggirati optimizirani izlaz. +Ovo čini razumnim koristiti optimizer za programe joĹĄ i u testnoj fazi. @item -s -Ukloni sve simbol tablice i relokacijske informacije iz izvršne datoteke. -Primjedba: ovo nema utjecaja na performanse prevedene izvršne datoteke. +Ukloni sve simbol tablice i relokacijske informacije iz izvrĹĄne datoteke. +Primjedba: ovo nema utjecaja na performanse prevedene izvrĹĄne datoteke. @item -Wall -Daj upozorenja za izvjestan broj konstrukata koji nisu po sebi pogrešni ali -su rizični ili sugeriraj da je možda učinjena pogreška u kodiranju. Postoje -dodatne opcije upozorenja koje nisu uključene sa @samp{-Wall}, vidi GCC +Daj upozorenja za izvjestan broj konstrukata koji nisu po sebi pogreĹĄni ali +su rizični ili sugeriraj da je moĹžda učinjena pogreĹĄka u kodiranju. Postoje +dodatne opcije upozorenja koje nisu uključene sa @samp{-Wall}, vidi GCC opcije upozorenja (engl. warnings) (@pxref{Warning Options,,Options to Request or Suppress Warnings,gcc,the GCC manual}), -dok @samp{-Wall} samo upozorava na takve konstrukte koje je lako izbjeći -u programima. Dakle, savjetujemo koristiti @samp{-Wall} na većini programa. +dok @samp{-Wall} samo upozorava na takve konstrukte koje je lako izbjeći +u programima. Dakle, savjetujemo koristiti @samp{-Wall} na većini programa. Primijetimo da neka upozorenja (npr. ona o neinicijaliziranim varijablama) nisu nikad dana ako se ne prevodi s optimizacijom (vidi gore), jer prevodilac -inače ne analizira uzorke korištenja varijabli. +inače ne analizira uzorke koriĹĄtenja varijabli. @item -Werror -Pretvara sva upozorenja u pogreške. +Pretvara sva upozorenja u pogreĹĄke. @item -S -Zaustavi se nakon prevođenja; ne asembliraj. Izlaz je u obliku asemblerskog +Zaustavi se nakon prevođenja; ne asembliraj. Izlaz je u obliku asemblerskog koda za svaku izvornu datoteku. Podrazumno (default), ime asemblerske datoteke za datu izvornu datoteku nastaje zamjenom ekstenzije sa @samp{.s}. @item -c Prevedi i asembliraj izvornu datoteku, ali ne povezuj. Izlaz je u obliku -objektne datoteke za svaku izvornu datoteku. Podrazumno, ukoliko se drugačije +objektne datoteke za svaku izvornu datoteku. Podrazumno, ukoliko se drugačije ne navede, ime objektne datoteke za izvornu datoteku nastaje zamjenom ekstenzije izvorne datoteke sa @samp{.o}. @item -static -Na sistemima koji podržavaju dinamičko povezivanje, ovo zabranjuje povezivanje -sa dijeljenim bibliotekama (engl. shared libraries), tj. traži statičko +Na sistemima koji podrĹžavaju dinamičko povezivanje, ovo zabranjuje povezivanje +sa dijeljenim bibliotekama (engl. shared libraries), tj. traĹži statičko povezivanje. Na ostalim sistemima ova opcija nema efekta. @item -D@var{macro}[=@var{def}] @@ -256,13 +256,13 @@ Definiraj makro i uvjetni simbol @var{ma ako je @var{def} izostavljen). @item -b @var{machine} -Parametar @var{machine} specificira ciljni stroj za prevođenje. Ovo je korisno +Parametar @var{machine} specificira ciljni stroj za prevođenje. Ovo je korisno ako je GNU Pascal instaliran kao prevodilac za drugu platformu (engl. cross- compiler). @item -v -Ispiši (na tok pogreški) naredbe izvršavane da se pokrenu pojedini stupnjevi -prevođenja. Također ispiši broj verzije pogonskog programa prevoditelja, +IspiĹĄi (na tok pogreĹĄki) naredbe izvrĹĄavane da se pokrenu pojedini stupnjevi +prevođenja. Također ispiĹĄi broj verzije pogonskog programa prevoditelja, preprocesora i samog prevoditelja. @item --classic-pascal-level-0 @@ -275,42 +275,42 @@ preprocesora i samog prevoditelja. @c @c Mirsad: unhappy with Croatian translation for "typed constant"!!! @c -GNU Pascal podržava svojstva nekoliko različitih Pascal standarda i dijalekata. -Inicijalno, oni su svi omogućeni. Ovi prekidači upućuju GPC da ograniči sebe -na svojstva specificiranog standarda; ne omogućuju bilo kakva dodatna +GNU Pascal podrĹžava svojstva nekoliko različitih Pascal standarda i dijalekata. +Inicijalno, oni su svi omogućeni. Ovi prekidači upućuju GPC da ograniči sebe +na svojstva specificiranog standarda; ne omogućuju bilo kakva dodatna svojstva. Upozorenja o nekim opasnim konstruktima koji bi bili legalni za specificirani dijalekt (npr.@: operacija dodjele vrijednosti tipiziranoj konstanti uz @samp{--borland-pascal}) se potiskuju. -Inicijalno, GNU Pascal dozvoljava redefiniciju inekih ključnih riječi jezika. Svaki -od ovih prekidača prouzročuje da GNU Pascal zabrani redefiniciju ključnih -riječi specificiranog standarda. +Inicijalno, GNU Pascal dozvoljava redefiniciju inekih ključnih riječi jezika. Svaki +od ovih prekidača prouzročuje da GNU Pascal zabrani redefiniciju ključnih +riječi specificiranog standarda. Ispravni ISO 7185 Pascal programi bi se trebali prevesti ispravno sa ili -bez @samp{--classic-pascal}. Međutim, bez ove opcije neka GNU proširenja -i značajke drugih dijalekata Pascala su također podržane. Sa ovom opcijom, -ta proširenja su odbijena. +bez @samp{--classic-pascal}. Međutim, bez ove opcije neka GNU proĹĄirenja +i značajke drugih dijalekata Pascala su također podrĹžane. Sa ovom opcijom, +ta proĹĄirenja su odbijena. Ove opcije nisu tu s namjerom da budu @i{korisne}, one postoje samo da -zadovolje pedantne koji bi inače tvrdili da GNU Pascal ne ispunjava ISO -standard ili nije @i{zaista} kompatibilan sa Borland Pascalom, ili što već. -Mi preporučujemo, radije, da korisnici iskoriste prednosti ekstenzija -GNU Pascala i zanemare ograničenja drugih prevodilaca. +zadovolje pedantne koji bi inače tvrdili da GNU Pascal ne ispunjava ISO +standard ili nije @i{zaista} kompatibilan sa Borland Pascalom, ili ĹĄto već. +Mi preporučujemo, radije, da korisnici iskoriste prednosti ekstenzija +GNU Pascala i zanemare ograničenja drugih prevodilaca. @item -pedantic-errors -Proizvedi greške radije nego upozorenja za kršenja prenosivosti koda +Proizvedi greĹĄke radije nego upozorenja za krĹĄenja prenosivosti koda (engl. portability). Za razliku od C-a, ovo @emph{ne} implicira -@samp{-pedantic} opciju, pa možete, na primjer, koristiti +@samp{-pedantic} opciju, pa moĹžete, na primjer, koristiti @samp{-pedantic-errors} bez @samp{-pedantic}, ali sa @samp{--extended-pascal}. @item --gpc-main=@var{name} -Imenuj ulaznu točku glavnog programa @samp{@var{name}} umjesto @samp{main} -na nivou povezivača. Ovo je korisno npr. kad se radi s nekim C bibliotekama -funkcija koje definiraju svoju vlastitu @samp{main} funkciju i traže da -se programska ulazna točka (engl. entry point) nazove drugačije. +Imenuj ulaznu točku glavnog programa @samp{@var{name}} umjesto @samp{main} +na nivou povezivača. Ovo je korisno npr. kad se radi s nekim C bibliotekama +funkcija koje definiraju svoju vlastitu @samp{main} funkciju i traĹže da +se programska ulazna točka (engl. entry point) nazove drugačije. -(Preferira se korištenje ove direktive prevodiocu u jedinici ili modulu -koji se povezuje s tom čudnom C bibliotekom, radije nego da se direktiva +(Preferira se koriĹĄtenje ove direktive prevodiocu u jedinici ili modulu +koji se povezuje s tom čudnom C bibliotekom, radije nego da se direktiva daje u naredbenoj (komandnoj) liniji.) @end table Index: gcc/p/doc/hr/keywords.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/hr/keywords.texi,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/hr/keywords.texi 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/hr/keywords.texi 21 May 2012 21:30:55 -0000 1.2 @@ -9,17 +9,17 @@ @c Translator: Mirsad Todorovac @node Keywords -@chapter Pascalove ključne riječi i operatori podržani u GNU Pascalu. +@chapter Pascalove ključne riječi i operatori podrĹžani u GNU Pascalu. -Ovo poglavlje daje popis svih ključnih riječi koje GNU Pascal razumije. +Ovo poglavlje daje popis svih ključnih riječi koje GNU Pascal razumije. -@c Bez posebnih specificiranih opcija, ključne riječi mogu biti redefinirane -@c kako bi se učinilo mogućim da se svaki korektni ISO 7185 program uspješno -@c prevede. Međutim, možete koristiti prekidače prevodiočevog (engl. compiler) +@c Bez posebnih specificiranih opcija, ključne riječi mogu biti redefinirane +@c kako bi se učinilo mogućim da se svaki korektni ISO 7185 program uspjeĹĄno +@c prevede. Međutim, moĹžete koristiti prekidače prevodiočevog (engl. compiler) @c dijalekta (npr. @code{--extended-pascal} ili @code{--borland-pascal} da bi -@c se naznačilo GPC-u da se riječi danog standarda ne smiju redefinirati. +@c se naznačilo GPC-u da se riječi danog standarda ne smiju redefinirati. -Ključne riječi su preuzete iz slijedećih standarda: +Ključne riječi su preuzete iz slijedećih standarda: @itemize @bullet @item ISO 7185 Pascal (CP) @@ -28,27 +28,27 @@ Ključne riječi su preuzete iz slijedećih @item Borland Pascal 7.0 (BP) @item Borland Delphi (BD) @item Pascal-SC (PXSC, Pascal eXtensions for Scientific Calculations - Pascal -proširenja za znanstvene proračune) +proĹĄirenja za znanstvene proračune) @item VAX Pascal (VP) @item Sun Pascal (SP) @item Traditional Macintosh Pascal (MP) -@item GNU Pascal proširenja (GPC) +@item GNU Pascal proĹĄirenja (GPC) @end itemize -Tablica niže navodi sve poznate ključne riječi s kratkim opisom svake. -Link pokazuje prema duljem opisu u referentnom priručniku. +Tablica niĹže navodi sve poznate ključne riječi s kratkim opisom svake. +Link pokazuje prema duljem opisu u referentnom priručniku. -Inicijalno (uz korištenje GPC ekstenzija) su sve riječi omogućene. -Samo one označene sa @samp{GPC} su ispravne @emph{samo} u GPC ekstenzijama. +Inicijalno (uz koriĹĄtenje GPC ekstenzija) su sve riječi omogućene. +Samo one označene sa @samp{GPC} su ispravne @emph{samo} u GPC ekstenzijama. -Sve ključne riječi koje su specifične za neke dijalekte (odnosno nisu -označene sa ``svi'' mogu se također koristiti kao identifikatori (uz -nekoliko izuzetaka, vidi niže). Ipak, one se općenito više ne mogu -koristiti kao ključne riječi nakon toga. Tako možete prevoditi kod iz dijalekata -koji ih koriste kao ključne riječi i kod koji ih koristi kao identifikatore, -tj. ne morate modificirati vaše korektne ISO 7185 programe da biste ih -preveli s GPC-om bez ijedne opcije za dijalekt. Neke riječi se čak mogu -koristiti kao ključne riječi i kao identifikatori paralelno, uključujući +Sve ključne riječi koje su specifične za neke dijalekte (odnosno nisu +označene sa ``svi'' mogu se također koristiti kao identifikatori (uz +nekoliko izuzetaka, vidi niĹže). Ipak, one se općenito viĹĄe ne mogu +koristiti kao ključne riječi nakon toga. Tako moĹžete prevoditi kod iz dijalekata +koji ih koriste kao ključne riječi i kod koji ih koristi kao identifikatore, +tj. ne morate modificirati vaĹĄe korektne ISO 7185 programe da biste ih +preveli s GPC-om bez ijedne opcije za dijalekt. Neke riječi se čak mogu +koristiti kao ključne riječi i kao identifikatori paralelno, uključujući @samp{forward} (prema ISO 7185 Pascalu), te @samp{near} i @samp{far} (prema Borland Pascalu). @@ -56,40 +56,40 @@ Izuzeci su: @itemize bullet -@item @samp{Operator} ne može biti korišten kao tip, netipizirana konstanta -niti kao eksportirano sučelje, tj. tamo gdje bi bio @samp{=} iza njega -(ako nije zabranjen kao ključna riječ ili opcijom dijalekta, vidi niže). -Ovo je zbog konflikta s definicijom operatora @samp{=}. (Može se koristiti +@item @samp{Operator} ne moĹže biti koriĹĄten kao tip, netipizirana konstanta +niti kao eksportirano sučelje, tj. tamo gdje bi bio @samp{=} iza njega +(ako nije zabranjen kao ključna riječ ili opcijom dijalekta, vidi niĹže). +Ovo je zbog konflikta s definicijom operatora @samp{=}. (MoĹže se koristiti kao tipizirana konstanta, ali bi moglo stvoriti konfuziju ako je poslije -učinite netipiziranom, dakle koristiti vrlo pažljivo.) +učinite netipiziranom, dakle koristiti vrlo paĹžljivo.) -@item Prva naredba nakon @samp{initialization} (Delphi-specifična -inicijalizacija) ne smije započeti sa @samp{(}. (Naredbe koje -započinju s @samp{(} su ionako rijetke, ali ne i nemoguće.) Ovo ne -ograničava korištenje @samp{Initialization} kao identifikatora. +@item Prva naredba nakon @samp{initialization} (Delphi-specifična +inicijalizacija) ne smije započeti sa @samp{(}. (Naredbe koje +započinju s @samp{(} su ionako rijetke, ali ne i nemoguće.) Ovo ne +ograničava koriĹĄtenje @samp{Initialization} kao identifikatora. -@item Slijedeće ključne riječi ne mogu biti korištene @emph{neposredno} +@item Slijedeće ključne riječi ne mogu biti koriĹĄtene @emph{neposredno} nakon @samp{import} dijela: @samp{uses}, @samp{implementation}, -@samp{operator}, @samp{constructor}, @samp{destructor}. Tu pomaže -korištenje @samp{uses} umjesto @samp{import}, ili stavljanje druge -deklaracije između @samp{import} i problematične ključne riječi. +@samp{operator}, @samp{constructor}, @samp{destructor}. Tu pomaĹže +koriĹĄtenje @samp{uses} umjesto @samp{import}, ili stavljanje druge +deklaracije između @samp{import} i problematične ključne riječi. @end itemize -@c GPC dozvoljava da slobodno re-definirate sve što nije rezervirana riječ u -@c ISO 7185 Pascalu u vašem programu ili izabranom dijalektu. Npr. ne morate +@c GPC dozvoljava da slobodno re-definirate sve ĹĄto nije rezervirana riječ u +@c ISO 7185 Pascalu u vaĹĄem programu ili izabranom dijalektu. Npr. ne morate @c mijenjati svoj kod ako koristite ime poput @code{Restricted} ili @code{Value} -@c ili neko slično, osim ako prevodite sa @samp{--extended-pascal} opcijom. +@c ili neko slično, osim ako prevodite sa @samp{--extended-pascal} opcijom. @c -@c U slijedećoj je tablici popis svih poznatih ključnih riječi s kratkim -@c opisom. Linkovi upućuju na duže opise u referentnom priručniku. +@c U slijedećoj je tablici popis svih poznatih ključnih riječi s kratkim +@c opisom. Linkovi upućuju na duĹže opise u referentnom priručniku. -Opcija dijalekta onemogućuje sve ključne riječi koje ne pripadaju dotičnom -dijalektu. Osim toga, svaka ključna riječ može biti omogućena i onemogućena +Opcija dijalekta onemogućuje sve ključne riječi koje ne pripadaju dotičnom +dijalektu. Osim toga, svaka ključna riječ moĹže biti omogućena i onemogućena opcijama prevodioca @samp{@{$enable-keyword@}} i @samp{@{$disable-keyword@}}. (Napomena: Tablica nije prevedena jer se generira automatski, kao i zbog -stručnosti termina i izraza, za koje je teško pronaći adekvatni prijevod). +stručnosti termina i izraza, za koje je teĹĄko pronaći adekvatni prijevod). @include keyword.texi Index: gcc/p/doc/hr/libs.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/hr/libs.texi,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/hr/libs.texi 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/hr/libs.texi 21 May 2012 21:30:55 -0000 1.2 @@ -7,16 +7,16 @@ @c Last modification: 2006-02-02 (file up to date) @c Translator: Mirsad Todorovac -Bit će vam potrebne dodatne biblioteke (engl. library) dok prevodite neke -od jedinica (engl. unit). Ove se mogu naći u direktoriju +Bit će vam potrebne dodatne biblioteke (engl. library) dok prevodite neke +od jedinica (engl. unit). Ove se mogu naći u direktoriju @uref{http://www.gnu-pascal.de/libs/}. -Trenutno, tamo su slijedeće biblioteke: +Trenutno, tamo su slijedeće biblioteke: @table @asis @item gmp Aritmetika za cijele brojeve, racionalne i realne brojeve s -proizvoljnom veličinom i preciznošću. Koristi ju GMP jedinica. +proizvoljnom veličinom i preciznošću. Koristi ju GMP jedinica. @item rx Regularni izrazi - podudaranje i supstitucija. Koristi ju RegEx @@ -24,26 +24,26 @@ jedinica. @item ncurses @itemx PDCurses -Rukovanje terminalom. Koristi ju CRT jedinica. Zavisno od vašeg sistema, -možete imati slijedeći izbor: +Rukovanje terminalom. Koristi ju CRT jedinica. Zavisno od vaĹĄeg sistema, +moĹžete imati slijedeći izbor: -Unix: Možete prevesti terminalske aplikacije s ncurses i aplikacije koje -rade u X11 prozoru s PDCurses (iako i terminalska aplikacija može, naravno, -raditi i pod X11 u xterm-u). Ako želite koristiti PDCurses (tj. XCurses), -dajte opciju @samp{-DX11} kod prevođenja CRT-a. +Unix: MoĹžete prevesti terminalske aplikacije s ncurses i aplikacije koje +rade u X11 prozoru s PDCurses (iako i terminalska aplikacija moĹže, naravno, +raditi i pod X11 u xterm-u). Ako Ĺželite koristiti PDCurses (tj. XCurses), +dajte opciju @samp{-DX11} kod prevođenja CRT-a. Dos sa DJGPP i MS-Windows sa mingw: Samo PDCurses je -na raspolaganju i bit će podrazumno korišten. +na raspolaganju i bit će podrazumno koriĹĄten. MS-Windows i Cygwin: PDCurses i ncurses su oboje na raspolaganju. -PDCurses se koristi podrazumno. Ako želite koristiti ncurses, postavite -opciju @samp{-DUSE_NCURSES} kod prevođenja CRT-a. +PDCurses se koristi podrazumno. Ako Ĺželite koristiti ncurses, postavite +opciju @samp{-DUSE_NCURSES} kod prevođenja CRT-a. Drugi sistemi: Molim pogledajte @file{README} datoteke i instalacijske instrukcije PDCurses i ncurses kako bi ste ustanovili koje (odnosno koje) -se mogu izgraditi na vašem sistemu. Pogledajte uvjetne direktive na kraju -crt.inc i crtc.h (i promijenite ih ako je neophodno) koje odlučuju koja -će biblioteka biti podrazumno korištena (odnosno engl. default). +se mogu izgraditi na vaĹĄem sistemu. Pogledajte uvjetne direktive na kraju +crt.inc i crtc.h (i promijenite ih ako je neophodno) koje odlučuju koja +će biblioteka biti podrazumno koriĹĄtena (odnosno engl. default). @item intl Internationalizacija. Koristi ju Intl jedinica. Na nekim sistemima to @@ -51,48 +51,48 @@ je dio sistemske biblioteke (libc). @item ElectricFence Ova se biblioteka ne koristi ni od jedne GPC jedinice. Ona je debugging -alat namijenjen da vam pomogne u pronalaženju bugova s alokacijom -memorije. Da bi ju koristili samo je povežite ("polinkajte") u svoj +alat namijenjen da vam pomogne u pronalaĹženju bugova s alokacijom +memorije. Da bi ju koristili samo je poveĹžite ("polinkajte") u svoj program, bilo s komandne linije (@samp{-lefence}), bilo u samom kodu -(@samp{@{$L efence@}}) što biste mogli poželjeti staviti unutar -jednog @samp{@{$ifdef DEBUG@}} ili nečeg sličnog jer se korištenje -libefence preporuča samo za debugging (odnosno ispravljanje pogrešaka). +(@samp{@{$L efence@}}) ĹĄto biste mogli poĹželjeti staviti unutar +jednog @samp{@{$ifdef DEBUG@}} ili nečeg sličnog jer se koriĹĄtenje +libefence preporuča samo za debugging (odnosno ispravljanje pogreĹĄaka). @end table Izvorni kod biblioteka je na raspolaganju u glavnom -@samp{libs} direktoriju. Većina biblioteka dolazi s jednom ili nekoliko -patcheva (zakrpa, nadopuna) koje treba aplicirati prije njihovog prevođenja. +@samp{libs} direktoriju. Većina biblioteka dolazi s jednom ili nekoliko +patcheva (zakrpa, nadopuna) koje treba aplicirati prije njihovog prevođenja. Binarne distribucije za neke platforme su na raspolaganju u @file{binary/@var{platform}} poddirektorijima. Ako prevodite biblioteke -za druge platforme, osjećajte se dobrodošli da stavite binarne datoteke -nama na raspolaganje za distribuciju na WWW poslužitelju. +za druge platforme, osjećajte se dobrodoĹĄli da stavite binarne datoteke +nama na raspolaganje za distribuciju na WWW posluĹžitelju. -Tamo su također slijedeće datoteke: +Tamo su također slijedeće datoteke: @table @file @item terminfo-linux.tar.gz -Ovo je patch (zakrpa) koja omogućava ncurses programima da iskoriste +Ovo je patch (zakrpa) koja omogućava ncurses programima da iskoriste sposobnost Linux 2.2 i novijih kernela (jezgri operacijskog sustava) -da proizvedu blok kursor kad je potrebno. Dani patch može biti -instaliran bez potrebe da se išta ponovno prevodi, samo kopiranjem -nekih datoteka na njihovo mjesto. Više detalja može se naći u -@file{README} datoteci uključenoj u ovu arhivu. Patch neće naškoditi +da proizvedu blok kursor kad je potrebno. Dani patch moĹže biti +instaliran bez potrebe da se iĹĄta ponovno prevodi, samo kopiranjem +nekih datoteka na njihovo mjesto. ViĹĄe detalja moĹže se naći u +@file{README} datoteci uključenoj u ovu arhivu. Patch neće naĹĄkoditi starijim kernelima. Molimo primijetite da @strong{nije} samo na Linux strojevima korisno instalirati patch. Instaliranje na ostale strojeve -će omogućiti korisnicima koji koriste telnet sa Linux konzole da +će omogućiti korisnicima koji koriste telnet sa Linux konzole da profitiraju od blok kurzor sposobnosti. Osim toga, neki Unix sistemi -imaju instalirane starije Linux terminfo zapise ili čak nikakve, -tako da je dobra stvar, u svakom slučaju, dati im trenutnu verziju. -Patch je uključen u terminfo bazu podataka ncurses verzije 5.0, tako +imaju instalirane starije Linux terminfo zapise ili čak nikakve, +tako da je dobra stvar, u svakom slučaju, dati im trenutnu verziju. +Patch je uključen u terminfo bazu podataka ncurses verzije 5.0, tako da ako instalirate ncurses 5.0 (iz source ili binarne distribucije), -ne trebate posebno dobavljati patch. Ali ga možete instalirati na -sistem sa starijom ncurses verzijom ako se ne osjećate raspoloženi +ne trebate posebno dobavljati patch. Ali ga moĹžete instalirati na +sistem sa starijom ncurses verzijom ako se ne osjećate raspoloĹženi za nadogradnju kompletnih ncurses. @item tsort-2.9i.zip -Mali utility programčić (ekstrahiran iz util-linux-2.9i, ali ne -Linux-specifičan, potreban za konfiguraciju rx biblioteke. Potreban -vam je samo ako prevodite rx sami (i nije već prisutan na vašem +Mali utility programčić (ekstrahiran iz util-linux-2.9i, ali ne +Linux-specifičan, potreban za konfiguraciju rx biblioteke. Potreban +vam je samo ako prevodite rx sami (i nije već prisutan na vaĹĄem sistemu), ne ako koristite rx binarnu distribuciju. @end table Index: gcc/p/doc/hr/purpose.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/hr/purpose.texi,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/hr/purpose.texi 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/hr/purpose.texi 21 May 2012 21:30:55 -0000 1.2 @@ -13,40 +13,40 @@ Svrha GNU Pascal projekta je da proizved (zvan GNU Pascal ili GPC) koji @itemize @bullet -@item kombinira jasnoću Pascala s moćnim alatima pogodnim za programiranje -iz realnog života, +@item kombinira jasnoću Pascala s moćnim alatima pogodnim za programiranje +iz realnog Ĺživota, -@item podržava jednako Pascal standard i Extended Pascal standard standard +@item podrĹžava jednako Pascal standard i Extended Pascal standard standard kao definiran od ISO, ANSI i IEEE (ISO 7185:1990, ISO/IEC 10206:1991, ANSI/IEEE 770X3.160-1989), -@item podržava druge Pascal standarde (UCSD Pascal, Borland Pascal, -dijelove Borland Delphija i Pascal-SC) toliko dok to služi jasnoći i +@item podrĹžava druge Pascal standarde (UCSD Pascal, Borland Pascal, +dijelove Borland Delphija i Pascal-SC) toliko dok to sluĹži jasnoći i korisnosti, -@item može biti distribuiran pod GNU licencnim uvjetima, i +@item moĹže biti distribuiran pod GNU licencnim uvjetima, i -@item može generirati kod i izvršavati se na svakom računalu za koje -GNU C prevodilac može generirati kod i vrtiti se na njemu. +@item moĹže generirati kod i izvrĹĄavati se na svakom računalu za koje +GNU C prevodilac moĹže generirati kod i vrtiti se na njemu. @end itemize -Pascal je originalno dizajniran za učenje. GNU Pascal donosi pogodan -način da se prijeđe na izazovne programerske zadatke bez učenja +Pascal je originalno dizajniran za učenje. GNU Pascal donosi pogodan +način da se prijeđe na izazovne programerske zadatke bez učenja potpuno novog jezika. Trenutno izdanje implementira Standard Pascal (ISO 7185, razine 0 i 1), -većinu Extended Pascala (ISO 10206, težeći potpunom ispunjavanju +većinu Extended Pascala (ISO 10206, teĹžeći potpunom ispunjavanju standarda), visoko je kompatibilan sa Borland Pascalom (verzija 7.0), te ima neka pogodnosti za kompatibilnost sa drugim prevodiocima -(kao što je VAX Pascal, Sun Pascal, Mac Pascal, Borland Delphi i Pascal-SC). +(kao ĹĄto je VAX Pascal, Sun Pascal, Mac Pascal, Borland Delphi i Pascal-SC). -Trenutno izdanje također pruža mnogo korisnih GNU ekstenzija koje se -ne nalaze u ostalim Pascal prevodiocima, npr. da se olakša povezivanje -sa sučeljima u C i drugim jezicima na prenosiv način, zatim da se radi -sa datotekama, direktorijima, datumima i još toga, uglavnom bez +Trenutno izdanje također pruĹža mnogo korisnih GNU ekstenzija koje se +ne nalaze u ostalim Pascal prevodiocima, npr. da se olakĹĄa povezivanje +sa sučeljima u C i drugim jezicima na prenosiv način, zatim da se radi +sa datotekama, direktorijima, datumima i joĹĄ toga, uglavnom bez ovisnosti o operacijskom sustavu u podlozi. -Uključene jedinice pružaju podršku za regularne izraze, cjelobrojnu -aritmetiku, racionalne i realne brojeve neograničene veličine, -za internacionalizaciju, za međuprocesnu komunikaciju, sa tzv. -message-digest i još mnoge dodatne značajke prevodioca. +Uključene jedinice pruĹžaju podrĹĄku za regularne izraze, cjelobrojnu +aritmetiku, racionalne i realne brojeve neograničene veličine, +za internacionalizaciju, za međuprocesnu komunikaciju, sa tzv. +message-digest i joĹĄ mnoge dodatne značajke prevodioca. Index: gcc/p/doc/hr/resources.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/hr/resources.texi,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/hr/resources.texi 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/hr/resources.texi 21 May 2012 21:30:55 -0000 1.2 @@ -11,12 +11,12 @@ @include macros.texi @node Resursi -@appendix Resursi za korištenje s GPC-om +@appendix Resursi za koriĹĄtenje s GPC-om @cindex Resursi -@cindex Priloženi sadržaji +@cindex PriloĹženi sadrĹžaji Mnogi od programa spomenutih ovdje, plus neki dodatni, mogu se -naći na +naći na @smallexample @uref{http://www.gnu-pascal.de/contrib/} @end smallexample @@ -34,8 +34,8 @@ naći na
@end html @end ifhtml -@subheading GNU Pascal crtež -@cindex Crtež +@subheading GNU Pascal crteĹž +@cindex CrteĹž @cindex Blaise Pascal @cindex Pascal, Blaise @@ -46,9 +46,9 @@ naći na Here is @end ifhtml @ifnothtml -Na webu možete naći +Na webu moĹžete naći @end ifnothtml -naš GNU Pascal crtež kao +naĹĄ GNU Pascal crteĹž kao @localuref{images/GnuPascal-small.png,mali PNG slika (1 KB)} i kao jedna @localuref{images/GnuPascal.png,velika PNG slika (10 KB)} i kao jedna @localuref{images/GnuPascal.eps,EPS datoteka (45 KB)} i kao jedna @@ -56,15 +56,15 @@ naš GNU Pascal crtež kao Zbog @uref{http://www.gnu.org/philosophy/gif.html,patentnih problema} -ne koristimo GIF datoteke. Srećom +ne koristimo GIF datoteke. Srećom @uref{http://www.libpng.org,PNG format}, nasljednik GIF-a, nema ovaj -problem -- i ionako uvodi bolju kompresiju i više naprednih -mogućnosti. +problem -- i ionako uvodi bolju kompresiju i viĹĄe naprednih +mogućnosti. @c DEMO-START @anch{gradient}@c -Inače, @localuref{images/gradient.png,kolor gradijent} sa -pozadine naše web stranice je PNG datoteka od samo 632 bajtova. +Inače, @localuref{images/gradient.png,kolor gradijent} sa +pozadine naĹĄe web stranice je PNG datoteka od samo 632 bajtova. Generirana je Pascal programom prevedenim s GPC-om i @samp{pnmtopng}. @hrefexample{gradient.pas} @c DEMO-END @@ -91,8 +91,8 @@ Generirana je Pascal programom prevedeni @cindex Tekst editor PENG je integrirana razvojna okolina (IDE) za GNU prevodioce -i ostale svrhe na svakoj platformi koju podržava GPC, koju je -napisao Frank Heckenbach. Matična stranica za PENG je +i ostale svrhe na svakoj platformi koju podrĹžava GPC, koju je +napisao Frank Heckenbach. Matična stranica za PENG je @smallexample @uref{http://fjf.gnu.de/peng/}. @end smallexample @@ -119,8 +119,8 @@ napisao Frank Heckenbach. Matična strani @cindex Tekst editor RHIDE je integrirana razvojna okolina (IDE) za GNU prevodioce -na DOS-u (DJGPP) ili Linuxu, napisao ju je Robert Höhne. -Matična stranica RHIDE je +na DOS-u (DJGPP) ili Linuxu, napisao ju je Robert HĂśhne. +Matična stranica RHIDE je @smallexample @uref{http://www.rhide.com}. @end smallexample @@ -137,7 +137,7 @@ Matična stranica RHIDE je @cindex Tekst editor DevPascal je integrirana razvojna okolina (IDE) za GNU Pascal na mingw32 -platformi. Matična stranica Devpascal-a je +platformi. Matična stranica Devpascal-a je @smallexample @uref{http://www.bloodshed.net/devpascal.html}. @@ -162,8 +162,8 @@ platformi. Matična stranica Devpascal-a @cindex GRX @cindex Grafika -GRX je grafička biblioteka za C i GNU Pascal, koja uključuje i uglavnom -BP kompatibilnu @samp{Graph} jedinicu (unit). Raspoloživa je na +GRX je grafička biblioteka za C i GNU Pascal, koja uključuje i uglavnom +BP kompatibilnu @samp{Graph} jedinicu (unit). RaspoloĹživa je na @smallexample @uref{http://www.gnu.de/software/grx/} @end smallexample @@ -197,7 +197,7 @@ Jedinice i alati za internacionalizaciju @cindex GDBM @cindex PostgreSQL GNU Pascal jedinice (units) za pristup MySQL, GNU DBM i PostgreSQL -bazama podataka se mogu naći na +bazama podataka se mogu naći na @smallexample @uref{http://www.gnu-pascal.de/contrib/eike/} @end smallexample @@ -209,7 +209,7 @@ bazama podataka se mogu naći na @cindex GTK @cindex GUI -GNU Pascal jedinice za GTK+ i GTK+ GL biblioteke se mogu naći na +GNU Pascal jedinice za GTK+ i GTK+ GL biblioteke se mogu naći na @smallexample @uref{http://www.gnu-pascal.de/contrib/nicola/} @end smallexample @@ -220,21 +220,21 @@ GNU Pascal jedinice za GTK+ i GTK+ GL bi @subheading SysUtils unit @cindex SysUtils Prof.@: Abimola A.@: Olowofoyeku (``The African Chief'') je napisao -Delphi-kompatibilnu (iako neke značajke još uvijek nedostaju) +Delphi-kompatibilnu (iako neke značajke joĹĄ uvijek nedostaju) @samp{SysUtils} jedinicu. Bila je testirana pod Cygwin, mingw, Linux -(Mandrake 7.0) i Solaris 7 platformama. Može se naći na +(Mandrake 7.0) i Solaris 7 platformama. MoĹže se naći na @uref{http://www.gnu-pascal.de/contrib/chief/}. @htmlhrule @anch{Crystal}@c -@subheading Crystal, program za vođenje arhive mailing listi +@subheading Crystal, program za vođenje arhive mailing listi @cindex Crystal @cindex Arhive mailing listi Crystal je arhiva za mailing liste bazirana na webu, napisana za -GNU Pascal i korištena za arhive GPC mailing listi (@pxref{Arhive -mailing listi}). Izvorni kod može se naći na +GNU Pascal i koriĹĄtena za arhive GPC mailing listi (@pxref{Arhive +mailing listi}). Izvorni kod moĹže se naći na @uref{http://fjf.gnu.de/crystal/} @htmlhrule @@ -250,7 +250,7 @@ mailing listi}). Izvorni kod može se nać @cindex Standardi @cindex Pascal standardi -Specifikacije Pascal standarda su raspoložive u PostScript +Specifikacije Pascal standarda su raspoloĹžive u PostScript formatu na @smallexample @uref{http://ftp.digital.com/pub/Digital/Pascal/} @@ -264,7 +264,7 @@ Alternativne adrese su @uref{ftp://ftp.digital.com/pub/DEC/Pascal/} @end smallexample -Postoje također i kopije na +Postoje također i kopije na @smallexample @uref{http://www.moorecad.com/standardpascal/iso7185.ps} (ISO 7185 Pascal) @@ -274,44 +274,44 @@ Postoje također i kopije na (ISO 10206 Extended Pascal) @end smallexample -PRIMJEDBA: Ovi dokumenti su ponešto teži za pregledavanje (npr. +PRIMJEDBA: Ovi dokumenti su poneĹĄto teĹži za pregledavanje (npr. u ghostview-u), jer im nedostaju tzv. ``document structuring -comments'' (DSC). GPC distribucija izvornog koda sadrži malu -skriptu @file{ps2dsc} koja dodaje DSC ponovno i čini dokumente -lakšim za pregledavanje i navigaciju. Primijetite da zbog -copyright problema ćete vjerojatno to moći učiniti samo za sebe -i nećete moći distribuirati modificirane datoteke. +comments'' (DSC). GPC distribucija izvornog koda sadrĹži malu +skriptu @file{ps2dsc} koja dodaje DSC ponovno i čini dokumente +lakĹĄim za pregledavanje i navigaciju. Primijetite da zbog +copyright problema ćete vjerojatno to moći učiniti samo za sebe +i nećete moći distribuirati modificirane datoteke. -Možete naći lak za čitanje uvod u Extended Pascal od Prospero +MoĹžete naći lak za čitanje uvod u Extended Pascal od Prospero Software-a na @smallexample @uref{http://www.prosperosoftware.com/epintro.html} @end smallexample -Molimo vas primijetite da Standard Pascal @strong{nije} isto što i +Molimo vas primijetite da Standard Pascal @strong{nije} isto ĹĄto i Borland Pascal niti njegov podskup. Pogledati poglavlje @ref{Naglasci} za -primjere mogućnosti Standard Pascala koje nedostaju u Borland Pascalu. +primjere mogućnosti Standard Pascala koje nedostaju u Borland Pascalu. @uref{http://www.moorecad.com/standardpascal/ansiiso.faq,ANSI-ISO Pascal FAQ (132 KB)} -od Scott A. Moore-a objašnjava razlike između dva dijalekta u +od Scott A. Moore-a objaĹĄnjava razlike između dva dijalekta u detalje. -Draft standard ``Objektno-orijentirana proširenja Pascala'' mogu se naći na +Draft standard ``Objektno-orijentirana proĹĄirenja Pascala'' mogu se naći na @smallexample @uref{http://pascal-central.com/OOE-stds.html} @end smallexample @htmlhrule -@subheading Zaštitite svoju slobodu! +@subheading ZaĹĄtitite svoju slobodu! @cindex Sloboda -Programerske aktivnosti malih kompanija i pojedinaca su ugrožene +Programerske aktivnosti malih kompanija i pojedinaca su ugroĹžene software-skim patentima. Ako ste programer, vi ste u opasnosti, -također! Vaš poslodavac ili vi možete biti tuženi od strane velike -kompanije koja drži patent na neke @emph{ideje} koje vi koristite -u svojim programima. (Nije potrebno da koristite tuđi kod da biste -postali podložni tim tužbama.) +također! VaĹĄ poslodavac ili vi moĹžete biti tuĹženi od strane velike +kompanije koja drĹži patent na neke @emph{ideje} koje vi koristite +u svojim programima. (Nije potrebno da koristite tuđi kod da biste +postali podloĹžni tim tuĹžbama.) Za daljnje informacije pogledajte @smallexample Index: gcc/p/doc/hr/support.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/hr/support.texi,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/hr/support.texi 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/hr/support.texi 21 May 2012 21:30:55 -0000 1.2 @@ -15,25 +15,25 @@ @ifclear FAQONLY @ifclear TESTREADMEONLY @node Support -@chapter Gdje dobiti podršku za GNU Pascal; kako prijaviti bugove +@chapter Gdje dobiti podrĹĄku za GNU Pascal; kako prijaviti bugove @cindex support -@cindex podrška -@cindex pomoć +@cindex podrĹĄka +@cindex pomoć @cindex bugovi @end ifclear -(Podrška) +(PodrĹĄka) @ifset TESTREADMEONLY @include version.texi @c Note: The following line gets inserted into the destination file, @c it does not apply to this Texinfo file! Ova je datoteka generirana automatski iz support.texi.@* -@sc{NE MIJENJAJTE OVU DATOTEKU RUČNO!} +@sc{NE MIJENJAJTE OVU DATOTEKU RUČNO!} @paragraphindent 0 -Zabilješka: Ova datoteka je @file{README} datoteka @file{test} -direktorija u GPC source distribuciji, @emph{a također i} datoteka +ZabiljeĹĄka: Ova datoteka je @file{README} datoteka @file{test} +direktorija u GPC source distribuciji, @emph{a također i} datoteka @file{BUGS} u GPC binarnim distribucijama. GPC @value{GPCMajor}.@value{GPCMinor}, @value{GPCVersion} @@ -43,36 +43,36 @@ GPC @value{GPCMajor}.@value{GPCMinor}, @ @chapter GPC Test kolekcija @end ifset -Ovdje možete pronaći informaciju o tome gdje potražiti najsvježije -informacije o GPC-u, kako dobiti podršku (profesionalnu ili +Ovdje moĹžete pronaći informaciju o tome gdje potraĹžiti najsvjeĹžije +informacije o GPC-u, kako dobiti podrĹĄku (profesionalnu ili dobrovoljnu), kako koristiti GPC-ovu test kolekciju, i kako -prijavljivati nove bugove s na koje bi mogli naići. +prijavljivati nove bugove s na koje bi mogli naići. Ako imate problema s GNU Pascalom, molimo pogledajte relevantne -dijelove GPC priručnika. Najnovija verzija priručnika je +dijelove GPC priručnika. Najnovija verzija priručnika je na raspolaganju na adresi @uref{http://www.gnu-pascal.de/gpc-hr/index.html} za online pregledavanje. -Također možete napraviti download -@localuref{gpc-html.tar.bz2,kompletnog priručnika u HTML formatu (tar.bz2)}. -Ovaj je priručnik također dostupan i u +Također moĹžete napraviti download +@localuref{gpc-html.tar.bz2,kompletnog priručnika u HTML formatu (tar.bz2)}. +Ovaj je priručnik također dostupan i u @localuref{gpc.dvi.bz2,DVI formatu (bzip2)} i -@localuref{gpc.ps.bz2,PostScript formatu (bzip2)} za ispis na štampač. +@localuref{gpc.ps.bz2,PostScript formatu (bzip2)} za ispis na ĹĄtampač. -Ako vam priručnik ne pomaže, evo što vam predlažemo: +Ako vam priručnik ne pomaĹže, evo ĹĄto vam predlaĹžemo: @ifclear TESTREADMEONLY @noindent @ref{FAQ} Provjerite u GPC FAQ-u @end ifclear @ifset TESTREADMEONLY @itemize @bullet -@item Provjerite u GPC FAQ-u (vidi datoteku @samp{FAQ} ili GPC priručnik) -@item Pridružite se GPC mailing listi +@item Provjerite u GPC FAQ-u (vidi datoteku @samp{FAQ} ili GPC priručnik) +@item PridruĹžite se GPC mailing listi @item Pogledajte u arhivama mailing liste @item Pitajte na newsgroupi (grupa vijesti na USENETu) -@item Potražite individualnu podršku za GPC -@item Pronađite kako prijaviti GPC bugove -@item Ako imate GPC source, naučite kako pokrenuti Test Suite (kolekciju testova) da testirate bugove koje prijavljujete. +@item PotraĹžite individualnu podrĹĄku za GPC +@item Pronađite kako prijaviti GPC bugove +@item Ako imate GPC source, naučite kako pokrenuti Test Suite (kolekciju testova) da testirate bugove koje prijavljujete. @end itemize @end ifset @@ -80,13 +80,13 @@ Ako vam priručnik ne pomaže, evo što vam @c from en/faq.texi (historical, now it's translated and waiting @c for approval @menu -* Mailing List:: Pridružite se GPC mailing listi +* Mailing List:: PridruĹžite se GPC mailing listi * Arhive mailing listi:: Pogledajte u arhivama mailing liste * Newsgroups:: Pitajte na newsgroupi (grupa vijesti na USENETu) -* Profesionalna podrška:: Potražite individualnu podršku za GPC -* Krahovi prevodioca:: Kad se compiler skrši @dots{} -* Reporting Bugs:: Pronađite kako prijaviti GPC bugove -* Testing:: Testiranje - ako imate GPC source, naučite kako +* Profesionalna podrĹĄka:: PotraĹžite individualnu podrĹĄku za GPC +* Krahovi prevodioca:: Kad se compiler skrĹĄi @dots{} +* Reporting Bugs:: Pronađite kako prijaviti GPC bugove +* Testing:: Testiranje - ako imate GPC source, naučite kako pokrenuti Test Suite (kolekciju testova) da testirate bugove koje prijavljujete. @end menu @@ -100,65 +100,65 @@ Ako vam priručnik ne pomaže, evo što vam (Mailing lista) -Postoji posebna mailing lista posvećena GNU Pascalu. Možete pisati +Postoji posebna mailing lista posvećena GNU Pascalu. MoĹžete pisati na listu, npr. ako imate probleme s instaliranjem GPC-a ili ako -ste našli problem u vezi s GPC-om (molim pogledajte @ref{Reporting Bugs}). -Možete također diskutirati i davati sugestije za poboljšanje GPC-a -i, vrlo dobrodošli, ponuditi svoju pomoć ili doprinijeti kod, +ste naĹĄli problem u vezi s GPC-om (molim pogledajte @ref{Reporting Bugs}). +MoĹžete također diskutirati i davati sugestije za poboljĹĄanje GPC-a +i, vrlo dobrodoĹĄli, ponuditi svoju pomoć ili doprinijeti kod, dokumentaciju ili drugi rad. Poruke na listu bi trebale biti na engleskom. -Da biste se pretplatili na listu, pošaljite naredbu +Da biste se pretplatili na listu, poĹĄaljite naredbu @smallexample -subscribe gpc vaša@@email.adresa +subscribe gpc vaĹĄa@@email.adresa @end smallexample u tijelu poruke na @email{majordomo@@gnu.de} (@strong{ne} na @samp{gpc@@gnu.de}!). Subject: polje poruke se ignorira. (Molimo -zamijenite @samp{vaša@@email.adresa} vašom pravom email adresom.) -Za više informacija, pošaljite redak @samp{help} na +zamijenite @samp{vaĹĄa@@email.adresa} vaĹĄom pravom email adresom.) +Za viĹĄe informacija, poĹĄaljite redak @samp{help} na @email{majordomo@@gnu.de}. -Nakon prijavljivanja na listu, možete poslati poruku na mailing listu -šaljući email na adresu liste @email{gpc@@gnu.de} kao da je riječ o osobi. +Nakon prijavljivanja na listu, moĹžete poslati poruku na mailing listu +ĹĄaljući email na adresu liste @email{gpc@@gnu.de} kao da je riječ o osobi. -Za napuštanje mailing liste, pošaljite naredbu +Za napuĹĄtanje mailing liste, poĹĄaljite naredbu @smallexample -unsubscribe gpc vaša@@email.adresa +unsubscribe gpc vaĹĄa@@email.adresa @end smallexample na @email{majordomo@@gnu.de}. Postoji posebna lista za diskutiranje o GPC dokumentaciji, -@email{gpc-doc@@gnu.de}. Za prijavljivanje, pošaljite naredbu +@email{gpc-doc@@gnu.de}. Za prijavljivanje, poĹĄaljite naredbu @smallexample subscribe gpc-doc your@@email.address @end smallexample na @email{majordomo@@gnu.de}. -Postoji još jedna (malog prometa) najavna lista, -@email{gpc-announce@@gnu.de} na koju se možete pretplatiti +Postoji joĹĄ jedna (malog prometa) najavna lista, +@email{gpc-announce@@gnu.de} na koju se moĹžete pretplatiti da biste ostali informirani. Da se pretplatite na listu, -napišite email s +napiĹĄite email s @smallexample -subscribe gpc-announce vaša@@email.adresa +subscribe gpc-announce vaĹĄa@@email.adresa @end smallexample -u tijelu poruke na @email{majordomo@@gnu.de}. Ako biste željeli -najaviti doprinos, servis ili događaj u relaciji s GPC-om, pozvani -ste da šaljete na ovu listu radije nego na @samp{gpc@@gnu.de}, ali +u tijelu poruke na @email{majordomo@@gnu.de}. Ako biste Ĺželjeli +najaviti doprinos, servis ili događaj u relaciji s GPC-om, pozvani +ste da ĹĄaljete na ovu listu radije nego na @samp{gpc@@gnu.de}, ali molimo vas ne koristite najavnu listu za pitanja ili diskusije. -Molimo uočite da se sva pošta pristigla na najavnu listu preusmjerava -također i na regularnu listu, tako da se nećete morati pretplatiti -na obje liste u slučaju da ne želite ništa propustiti. Zbog istog razloga, +Molimo uočite da se sva poĹĄta pristigla na najavnu listu preusmjerava +također i na regularnu listu, tako da se nećete morati pretplatiti +na obje liste u slučaju da ne Ĺželite niĹĄta propustiti. Zbog istog razloga, molimo ne cross-postajte poruke na obje liste. -Postoji i mailing lista za njemačko govorno područje, -@email{gpc-de@@gnu.de}. Za pretplaćivanje pošaljite naredbu +Postoji i mailing lista za njemačko govorno područje, +@email{gpc-de@@gnu.de}. Za pretplaćivanje poĹĄaljite naredbu @smallexample -subscribe gpc-de vaša@@email.adresa +subscribe gpc-de vaĹĄa@@email.adresa @end smallexample u tijelu poruke na @email{majordomo@@gnu.de} (vrijede natuknice odozgo). -Ljudskog moderatora možete kontaktirati na @emph{gpc-owner@@gnu.de}. +Ljudskog moderatora moĹžete kontaktirati na @emph{gpc-owner@@gnu.de}. @node Arhive mailing listi @@ -166,8 +166,8 @@ Ljudskog moderatora možete kontaktirati @cindex Arhive mailing listi @cindex Arhive, mailing listi -Možda se o vašem problemu već diskutiralo na listi. Postoji pretraživa -arhiva mailing liste na WWW-u. Može se pregledavati ili pretraživati na +MoĹžda se o vaĹĄem problemu već diskutiralo na listi. Postoji pretraĹživa +arhiva mailing liste na WWW-u. MoĹže se pregledavati ili pretraĹživati na @smallexample @uref{http://www.gnu-pascal.de/crystal/gpc/en/} (engleski) @end smallexample @@ -182,9 +182,9 @@ Arhiva liste najavne liste je na @uref{http://www.gnu-pascal.de/crystal/gpc-announce/en/} @end smallexample -Arhiva njemačke GPC liste je na +Arhiva njemačke GPC liste je na @smallexample -@uref{http://www.gnu-pascal.de/crystal/gpc-de/de/} (njemački) +@uref{http://www.gnu-pascal.de/crystal/gpc-de/de/} (njemački) @end smallexample @node Newsgroups @@ -192,11 +192,11 @@ Arhiva njemačke GPC liste je na @cindex Newsgroups @cindex USENET grupe vijesti -Za dobivanje podrške, možete također pitati Usenet grupu vijesti -za pomoć. Postoji više grupa u vezi s Pascalom, ali nijedna nije +Za dobivanje podrĹĄke, moĹžete također pitati Usenet grupu vijesti +za pomoć. Postoji viĹĄe grupa u vezi s Pascalom, ali nijedna nije specijalizirana samo za GNU Pascal, pa koristite onu koja najbolje -odgovara vašem problemu. Za opća pitanja o Pascalu, preporučujemo -slijedeću: +odgovara vaĹĄem problemu. Za opća pitanja o Pascalu, preporučujemo +slijedeću: @multitable @columnfractions .5 .5 @item @uref{news://comp.lang.pascal.misc} @tab Pascal in general and ungrouped Pascals. @@ -208,51 +208,51 @@ Pitanja glede Pascal sintakse mogu biti @item @uref{news://comp.lang.pascal.ansi-iso} @tab Pascal according to ANSI and ISO standards. @end multitable -Slijedeća grupa je sklonište za početnike, odgovarajući pitanja -koja se mogu primijeniti za gotovo bilo koji Pascal. Međutim, ako -imate GPC-specifično pitanje ne postavljajte ga tamo -- koristite +Slijedeća grupa je skloniĹĄte za početnike, odgovarajući pitanja +koja se mogu primijeniti za gotovo bilo koji Pascal. Međutim, ako +imate GPC-specifično pitanje ne postavljajte ga tamo -- koristite GPC mailing listu. A i kada ste u nedoumici koristite GPC maling listu. @multitable @columnfractions .5 .5 @item @uref{news://comp.lang.pascal.borland} @tab Borland Pascal questions. @end multitable -Ne zaboravite vratiti nazad što ste pribavili. Nitko od nas ne -dobiva novac za odgovaranje na vaša pitanja (ukoliko nas sami ne -platite). Molimo dajte svoj udio odgovarajući na pitanja drugih. - -@node Profesionalna podrška -@section Gdje naći profesionalnu podršku za GPC -@cindex Profesionalna podrška -@cindex Komercijalna podrška -@cindex Podrška, profesionalna +Ne zaboravite vratiti nazad ĹĄto ste pribavili. Nitko od nas ne +dobiva novac za odgovaranje na vaĹĄa pitanja (ukoliko nas sami ne +platite). Molimo dajte svoj udio odgovarajući na pitanja drugih. + +@node Profesionalna podrĹĄka +@section Gdje naći profesionalnu podrĹĄku za GPC +@cindex Profesionalna podrĹĄka +@cindex Komercijalna podrĹĄka +@cindex PodrĹĄka, profesionalna GPC je slobodan software i dolazi @strong{bez ikakve garancije}. -Ako želite potražiti profesionalnu podršku, možete unajmiti pojedinca -ili poduzeće koja pruža takvu uslugu. +Ako Ĺželite potraĹžiti profesionalnu podrĹĄku, moĹžete unajmiti pojedinca +ili poduzeće koja pruĹža takvu uslugu. @uref{http://www.g-n-u.de,G-N-U GmbH} izvodi velike dijelove razvoja -GNU Pascala. Ova kompanija nudi specijalnu podršku za GPC i može se +GNU Pascala. Ova kompanija nudi specijalnu podrĹĄku za GPC i moĹže se kontaktirati na @email{info@@g-n-u.de}. -Više općenito, za pronalaženje kompanije ili pojedinca koji nudi -podršku i ostale savjetodavne usluge za free software, pogledajte u +ViĹĄe općenito, za pronalaĹženje kompanije ili pojedinca koji nudi +podrĹĄku i ostale savjetodavne usluge za free software, pogledajte u @uref{http://www.gnu.org/prep/service.html,GNU Service Directory}. @node Krahovi prevodioca -@section Kad se compiler skrši @dots{} +@section Kad se compiler skrĹĄi @dots{} @cindex Krahovi prevodioca @cindex Krah, prevodioca -Ako se prevodilac skrši u radu, otkrili ste bug. Pouzdan prevodilac -se nikad ne ruši. Da biste ljudima koji održavaju pomogli ispraviti -bug, važno je da nam pošaljete problem report. - -Ako ste na Unixu, možete pronaći gdje se prevodilac srušio ako -omogućite coredumpove, zatim učitate prevodilac (@file{gpc1}) plus -core datoteku u debugger (@samp{gdb /vaš_put_ovdje/gpc1 core}), -da bi se dobio ispis stoga (engl. stacktrace). Uključite ovaj +Ako se prevodilac skrĹĄi u radu, otkrili ste bug. Pouzdan prevodilac +se nikad ne ruĹĄi. Da biste ljudima koji odrĹžavaju pomogli ispraviti +bug, vaĹžno je da nam poĹĄaljete problem report. + +Ako ste na Unixu, moĹžete pronaći gdje se prevodilac sruĹĄio ako +omogućite coredumpove, zatim učitate prevodilac (@file{gpc1}) plus +core datoteku u debugger (@samp{gdb /vaĹĄ_put_ovdje/gpc1 core}), +da bi se dobio ispis stoga (engl. stacktrace). Uključite ovaj ispis stoga u svoju prijavu buga. @node Reporting Bugs @@ -264,7 +264,7 @@ ispis stoga u svoju prijavu buga. (Prijava bugova) Ako se susretnete s bugom u GPC-u, molimo provjerite da li je to jedan -od već poznatih bugova@c +od već poznatih bugova@c @ifclear TESTREADMEONLY @ifclear FAQONLY (@pxref{Known Bugs})@c @@ -274,164 +274,164 @@ od već poznatih bugova@c @ifclear TESTREADMEONLY (@pxref{Mailing List})@c @end ifclear -. Na taj način, oni uvijek stižu održavateljima. Molimo primijetite -slijedeće točke. +. Na taj način, oni uvijek stiĹžu odrĹžavateljima. Molimo primijetite +slijedeće točke. @itemize @bullet @item -Molimo vas pošaljite deskripciju problema. Nastojte dati koliko -god je više informacija moguće, s punim tekstom eventualnih -poruka o greškama s kojima ste se susreli, ili opisom kako se -neki izlaz razlikuje od očekivanoga. Uvijek specificirajte +Molimo vas poĹĄaljite deskripciju problema. Nastojte dati koliko +god je viĹĄe informacija moguće, s punim tekstom eventualnih +poruka o greĹĄkama s kojima ste se susreli, ili opisom kako se +neki izlaz razlikuje od očekivanoga. Uvijek specificirajte operacijski sustav i tip stroja (npr. izlaz @samp{uname -a} -ako niste sigurni) kao i verziju GPC-a koju ćete dobiti ako +ako niste sigurni) kao i verziju GPC-a koju ćete dobiti ako otkucate @samp{gpc -v}. @item -Dobar članak o podnošenju prijave buga može se naći na@* +Dobar članak o podnoĹĄenju prijave buga moĹže se naći na@* @uref{http://www.chiark.greenend.org.uk/~sgtatham/bugs.html} ili@* @uref{http://freshmeat.net/news/2000/02/26/951627540.html} -Još jedan dobar članak ``How To Ask Questions The Smart Way'' -(Postavljati pitanja na mudar način) je na raspolaganju na adresi +JoĹĄ jedan dobar članak ``How To Ask Questions The Smart Way'' +(Postavljati pitanja na mudar način) je na raspolaganju na adresi @uref{http://www.catb.org/~esr/faqs/smart-questions.html} @end itemize Ako je problem u samom prevodiocu, ne u procesu instalacije ili -nečem poput toga, molimo priložite test program koji reproducira -problem, i uočite donje natuknice. Možete također slati test -programe za mogućnosti koje rade u GPC-u kako bi osigurali da -se neće pokvariti u budućim izdanjima. +nečem poput toga, molimo priloĹžite test program koji reproducira +problem, i uočite donje natuknice. MoĹžete također slati test +programe za mogućnosti koje rade u GPC-u kako bi osigurali da +se neće pokvariti u budućim izdanjima. @itemize @bullet @item -Test program treba biti što je moguće kraći, ali -@strong{u svakom slučaju}, molimo pošaljite @strong{kompletan} -program i @strong{učinite sigurnim} da isti još uvijek reproducira -problem prije nego što nam ga pošaljete. Prečesto, korisnici su -nam slali kod koji je sadržavao očite sintaksne pogreške daleko +Test program treba biti ĹĄto je moguće kraći, ali +@strong{u svakom slučaju}, molimo poĹĄaljite @strong{kompletan} +program i @strong{učinite sigurnim} da isti joĹĄ uvijek reproducira +problem prije nego ĹĄto nam ga poĹĄaljete. Prečesto, korisnici su +nam slali kod koji je sadrĹžavao očite sintaksne pogreĹĄke daleko prije aktualnog problema, ili samo fragmente koda o kojima smo -mogli samo izdaleka nagađati. To je neproduktivno za nas, a i -vama ne pomaže da riješite svoj problem. +mogli samo izdaleka nagađati. To je neproduktivno za nas, a i +vama ne pomaĹže da rijeĹĄite svoj problem. @end itemize @ifclear FAQONLY Preferirani oblik test programa je forma koju automatizirani -GPC Test Suite razumije. Molimo, ako je ikako moguće, šaljite -svoje test programe u ovoj formi što bi trebalo biti lako za učiniti, +GPC Test Suite razumije. Molimo, ako je ikako moguće, ĹĄaljite +svoje test programe u ovoj formi ĹĄto bi trebalo biti lako za učiniti, kako mi ne bi morali gubiti vrijeme da ih prilagodimo toj formi, -te da se možemo koncentrirati na rješenje problema. +te da se moĹžemo koncentrirati na rjeĹĄenje problema. @itemize @bullet @item -Datoteka koja sadrži glavni program @emph{mora} imati ime koje -završava sa @file{.pas} i mora sadržavati riječ @samp{program} -(case-insensitive, tj. veliko i odgovarajuće malo slovo se smatraju -istim) te @samp{;} u istom retku da uopće bude prepoznata od test -skripte. Ostale datoteke koje završavaju sa @file{.pas} (npr. moduli -i jedinice ili podatke koje program treba) ne smiju to sadržavati. +Datoteka koja sadrĹži glavni program @emph{mora} imati ime koje +zavrĹĄava sa @file{.pas} i mora sadrĹžavati riječ @samp{program} +(case-insensitive, tj. veliko i odgovarajuće malo slovo se smatraju +istim) te @samp{;} u istom retku da uopće bude prepoznata od test +skripte. Ostale datoteke koje zavrĹĄavaju sa @file{.pas} (npr. moduli +i jedinice ili podatke koje program treba) ne smiju to sadrĹžavati. @item -Kako Test Suite mora raditi vrlo @dots{} hmph @dots{} čudnim -operacijskim sustavima, također imena se datoteka moraju razlikovati -u prvih osam (8) znakova (case-insensitive) i ne bi smjela sadržavati -ništa osim slova, znamenki, crtice, podvlake (engl. underscore) -i jedne točke. Dalje, sve pomoćne datoteke (jedinice (unit), moduli, -include i podatkovne datoteke) ne smije imati imena duža od ``8+3'' -znakova; isto se odnosi i na imena sučelja jedinica/modula (jer će GPC +Kako Test Suite mora raditi vrlo @dots{} hmph @dots{} čudnim +operacijskim sustavima, također imena se datoteka moraju razlikovati +u prvih osam (8) znakova (case-insensitive) i ne bi smjela sadrĹžavati +niĹĄta osim slova, znamenki, crtice, podvlake (engl. underscore) +i jedne točke. Dalje, sve pomoćne datoteke (jedinice (unit), moduli, +include i podatkovne datoteke) ne smije imati imena duĹža od ``8+3'' +znakova; isto se odnosi i na imena sučelja jedinica/modula (jer će GPC kreirati @file{.gpi} imena datoteka bazirana na njihovim imenima). -Često je dobra ideja koristiti vlastito ime, nadimak ili inicijale -iza čega slijedi broj kao ime datoteke. +Često je dobra ideja koristiti vlastito ime, nadimak ili inicijale +iza čega slijedi broj kao ime datoteke. @item -Ako vaš test program zahtijeva nake jedinice (units) ili module, -nemojte im davati (odnosno njihovim 'interface' sučeljima u slučaju -modula) uobičajena imena puput @samp{Test}, @samp{Foo} ili -@samp{MyUnit}, osim ako imate vrlo posebne razloge za to, budući +Ako vaĹĄ test program zahtijeva nake jedinice (units) ili module, +nemojte im davati (odnosno njihovim 'interface' sučeljima u slučaju +modula) uobičajena imena puput @samp{Test}, @samp{Foo} ili +@samp{MyUnit}, osim ako imate vrlo posebne razloge za to, budući da bi se mogli pojaviti suptilni problemi ako nekoliko testnih programa -koristi isto ime. Umjesto toga, preporučen pristup je da se imenima +koristi isto ime. Umjesto toga, preporučen pristup je da se imenima jedinica/modula/interface-a nadoda prefiks (predmetak) -- ime glavnog -testnog programa ili njegova skraćenica (to je neophodno zbog restrikcija -na imenima datoteka). Nadalje, molimo izbjegavajte korištenje jedinica -i modula uopće, ako bug nije specifičan za njih; kako bi se test održavao -što je moguće jednostavnijim. - -@item -Test program, kada se izvršava, treba proizvesti liniju izlaza -koja se sastoji od niza @samp{OK} (praćenog znakom za novi red, -newline) ako je sve prošlo kao što je očekivano, ili bilo što -drugo (npr. @samp{failed}, potencijalno praćeno razlogom pada -na testu) ako je nešto pošlo krivo. U tom posljednjem slučaju -mogli biste poželjeti ispisati dodatnu informaciju kao što su -vrijednosti važnih varijabli ili indikaciju u kom je dijelu -došlo do pogreške u programu ako se to moglo desiti na nekoliko -mogućih mjesta. - -@item -Međutim, ako je program namijenjen da provjeri da li GPC prepoznaje -(namjernu) grešku u programu, stavite niz @samp{WRONG} negdje u -test programu, najbolje u komentaru u retku koji sadrži namjernu -pogrešku. @samp{WRONG} testovi će biti pokrenuti s opcijom @samp{-w} -da se potisnu sva upozorenja, tako da će samo prave pogreške biti +testnog programa ili njegova skraćenica (to je neophodno zbog restrikcija +na imenima datoteka). Nadalje, molimo izbjegavajte koriĹĄtenje jedinica +i modula uopće, ako bug nije specifičan za njih; kako bi se test odrĹžavao +ĹĄto je moguće jednostavnijim. + +@item +Test program, kada se izvrĹĄava, treba proizvesti liniju izlaza +koja se sastoji od niza @samp{OK} (praćenog znakom za novi red, +newline) ako je sve proĹĄlo kao ĹĄto je očekivano, ili bilo ĹĄto +drugo (npr. @samp{failed}, potencijalno praćeno razlogom pada +na testu) ako je neĹĄto poĹĄlo krivo. U tom posljednjem slučaju +mogli biste poĹželjeti ispisati dodatnu informaciju kao ĹĄto su +vrijednosti vaĹžnih varijabli ili indikaciju u kom je dijelu +doĹĄlo do pogreĹĄke u programu ako se to moglo desiti na nekoliko +mogućih mjesta. + +@item +Međutim, ako je program namijenjen da provjeri da li GPC prepoznaje +(namjernu) greĹĄku u programu, stavite niz @samp{WRONG} negdje u +test programu, najbolje u komentaru u retku koji sadrĹži namjernu +pogreĹĄku. @samp{WRONG} testovi će biti pokrenuti s opcijom @samp{-w} +da se potisnu sva upozorenja, tako da će samo prave pogreĹĄke biti detektirane. -@strong{Primijeti:} Dok je moguće kombinirati nekoliko @samp{OK} -testova u jednom test programu (ako učinite sigurnim da ispisuje -@samp{OK} samo ako svi testovi uspješno prođu), ne možete staviti -nekoliko @samp{WRONG} testova u isti program. Razlog tome je što -prevodilac neće uspjeti prevođenje (i test će se smatrati uspješnim) -već i kad se pojavi samo @samp{jedna} od očekivanih grešaka. Dakle, +@strong{Primijeti:} Dok je moguće kombinirati nekoliko @samp{OK} +testova u jednom test programu (ako učinite sigurnim da ispisuje +@samp{OK} samo ako svi testovi uspjeĹĄno prođu), ne moĹžete staviti +nekoliko @samp{WRONG} testova u isti program. Razlog tome je ĹĄto +prevodilac neće uspjeti prevođenje (i test će se smatrati uspjeĹĄnim) +već i kad se pojavi samo @samp{jedna} od očekivanih greĹĄaka. Dakle, za @samp{WRONG} testove, postavite samo jednu provjeru u testni -program. Također, nastojite održavati takav test program što je -moguće jednostavnijim, zbog izbjegavanja mogućnosti da ne bi pao -zbog drugih problema (i zbog toga bi test pogrešno bio smatran -uspješnim). +program. Također, nastojite odrĹžavati takav test program ĹĄto je +moguće jednostavnijim, zbog izbjegavanja mogućnosti da ne bi pao +zbog drugih problema (i zbog toga bi test pogreĹĄno bio smatran +uspjeĹĄnim). @item Ako bi test trebao samo provocirati GPC upozorenje, koristite -@samp{WARN} umjesto @samp{WRONG}. Ovo će pokrenuti test bez @samp{-w}, -ali sa @samp{-Werror}. Međutim, ovakvi testovi će se također činiti -uspješnim i ako proizvode grešku kod prevođenja, ne samo kod upozorenja. -Stoga, kod provjeravanja za upozorenja, često je dobra ideja priložiti -komplemetarni test (za kojeg se očekuje da uspije) +@samp{WARN} umjesto @samp{WRONG}. Ovo će pokrenuti test bez @samp{-w}, +ali sa @samp{-Werror}. Međutim, ovakvi testovi će se također činiti +uspjeĹĄnim i ako proizvode greĹĄku kod prevođenja, ne samo kod upozorenja. +Stoga, kod provjeravanja za upozorenja, često je dobra ideja priloĹžiti +komplemetarni test (za kojeg se očekuje da uspije) i sa @samp{-w} u @samp{FLAG} ili direktivi prevodioca @samp{@{$W-@}} -da bi se osiguralo da je riječ zaista samo o upozorenju, a ne o -pogrešci. +da bi se osiguralo da je riječ zaista samo o upozorenju, a ne o +pogreĹĄci. @item -Za test koji reproducira postojeći problem (za koji se ne očekuje da će -se brzo riješiti), molimo stavite komentar na vrh datoteke koji opisuje -problem u par riječi, i započnite ga sa @samp{BUG}. Ovo se ne traži od -test skripti, to je samo da se učini lakšim onima koji će pokušati -riješiti problem kako bi se isprve i odmah vidjelo što test želi -pokazati. Testovi za nove (planirane) značajke ne bi smjeli reći +Za test koji reproducira postojeći problem (za koji se ne očekuje da će +se brzo rijeĹĄiti), molimo stavite komentar na vrh datoteke koji opisuje +problem u par riječi, i započnite ga sa @samp{BUG}. Ovo se ne traĹži od +test skripti, to je samo da se učini lakĹĄim onima koji će pokuĹĄati +rijeĹĄiti problem kako bi se isprve i odmah vidjelo ĹĄto test Ĺželi +pokazati. Testovi za nove (planirane) značajke ne bi smjeli reći @samp{BUG}. @end itemize -Slijedeće specijalne mogućnosti testne aplikacije mogu biti korisne za -konstruiranje ponešto neuobičajenih testova: +Slijedeće specijalne mogućnosti testne aplikacije mogu biti korisne za +konstruiranje poneĹĄto neuobičajenih testova: @itemize @bullet @item -Ako je očekivani ispis programa nešto osim @samp{OK}, stavite to u +Ako je očekivani ispis programa neĹĄto osim @samp{OK}, stavite to u datoteku @file{.out} (gdje je @file{} ime testnog programa bez @file{.pas} nastavka). @item -Ako program očekuje neki ulaz, stavite ga u datoteku -@file{.in}. Biti će automatski preusmjerena na standardni +Ako program očekuje neki ulaz, stavite ga u datoteku +@file{.in}. Biti će automatski preusmjerena na standardni ulaz programa. @item -Ako test treba neke specijalne opcije proslijeđene GPC naredbenoj +Ako test treba neke specijalne opcije proslijeđene GPC naredbenoj liniji, stavite ih u komentar sa prefiksom @samp{FLAG}, npr. @smallexample @@ -439,49 +439,49 @@ liniji, stavite ih u komentar sa prefiks @end smallexample @item -Ime izvorne datoteke test programa bit će proslijeđeno kao prvi -argument naredbene linije do test programa koji se izvršava. +Ime izvorne datoteke test programa bit će proslijeđeno kao prvi +argument naredbene linije do test programa koji se izvrĹĄava. @item -Ako test treba biti pokrenut na specijalan način, možete popratiti -program sa skriptom @file{.run} koja će pokrenuti stvarni -test nakon što je testni program preveden. Ova skripta će biti +Ako test treba biti pokrenut na specijalan način, moĹžete popratiti +program sa skriptom @file{.run} koja će pokrenuti stvarni +test nakon ĹĄto je testni program preveden. Ova skripta će biti pokrenuta od @file{sh} (bez obzira na prvu liniju). Da bi bila -prenosiva, trebala bi koristiti samo standardne alate i značajke +prenosiva, trebala bi koristiti samo standardne alate i značajke prisutne u svim @file{sh} kompatibilnim ljuskama (npr. @samp{ash}, @samp{bash}, ali ne neophodno i @samp{csh}). Ime izvorne datoteke -test programa će biti proslijeđeno kao prvi argument komandnoj -liniji za izvršenje skripte u tom slučaju. Prevedena -datoteka se uvijek naziva @file{./a.out} na većini sistema, ali, +test programa će biti proslijeđeno kao prvi argument komandnoj +liniji za izvrĹĄenje skripte u tom slučaju. Prevedena +datoteka se uvijek naziva @file{./a.out} na većini sistema, ali, npr. @file{./a.exe} na Cygwin platformi. Environment varijabla -@samp{A_OUT} sadrži ime (npr. @file{a.out} ili @file{a.exe}, tako da -uvijek možete pozvati program sa @samp{./"$A_OUT"}). +@samp{A_OUT} sadrĹži ime (npr. @file{a.out} ili @file{a.exe}, tako da +uvijek moĹžete pozvati program sa @samp{./"$A_OUT"}). @item -Ako test treba biti preveden na specijalan način (npr. da se odluči -da li preskočiti test), smjestite naredbe u skriptu (najbolje +Ako test treba biti preveden na specijalan način (npr. da se odluči +da li preskočiti test), smjestite naredbe u skriptu (najbolje nazvanu @file{.cmp}), i staviti ime datoteke sa skriptom -u komentar ispred čega dolazi @samp{COMPILE-CMD:} u source test -programa. Skripta za prevođenje će biti pokrenuta @strong{umjesto} +u komentar ispred čega dolazi @samp{COMPILE-CMD:} u source test +programa. Skripta za prevođenje će biti pokrenuta @strong{umjesto} prevodioca i bilo koje druge akcije poduzete za taj test program, -tako da vam to daje maksimalnu fleksibilnost u čemu god što trebate -napraviti. Skripta će biti pokrenuta od @file{sh} (bez obzira na njenu +tako da vam to daje maksimalnu fleksibilnost u čemu god ĹĄto trebate +napraviti. Skripta će biti pokrenuta od @file{sh} (bez obzira na njenu prvu liniju). Da bi bila prenosiva, najbolje da koristi samo standardne -alatke i značajke @file{sh} kompatibilnih ljusaka (vidi gore). -Prvi argument naredbene linije proslijeđen skripti za -prevođenje bit će prevodilac kojeg treba koristiti, uključivo sve -opcije. Drugi argument bit će ime izvorne datoteke sa test programom. -Za neke tipične testove postoje standardne skripte za prevođenje, -npr. @file{asmtest.cmp} koje će preskočiti test osim ako se pokrene -na platformi podržanoj za nekoliko testova koji će sadržavati `asm' -naredbe. Naravno, općenito je bolje izbjegavati situaciju da se mora -koristiti takve skripte kad je god moguće. +alatke i značajke @file{sh} kompatibilnih ljusaka (vidi gore). +Prvi argument naredbene linije proslijeđen skripti za +prevođenje bit će prevodilac kojeg treba koristiti, uključivo sve +opcije. Drugi argument bit će ime izvorne datoteke sa test programom. +Za neke tipične testove postoje standardne skripte za prevođenje, +npr. @file{asmtest.cmp} koje će preskočiti test osim ako se pokrene +na platformi podrĹžanoj za nekoliko testova koji će sadrĹžavati `asm' +naredbe. Naravno, općenito je bolje izbjegavati situaciju da se mora +koristiti takve skripte kad je god moguće. @item -U nekim biste slučajevima mogli poželjeti napisati "poslučajene" testove. -Ovo se u normalnim uvjetima ne preporuča, jer čini probleme težim za -reproducirati, ali ponekad može biti korisno (npr. kad želimo pokriti -velik raspon parametara). U takvim slučajevima može se koristiti slijedeća +U nekim biste slučajevima mogli poĹželjeti napisati "poslučajene" testove. +Ovo se u normalnim uvjetima ne preporuča, jer čini probleme teĹžim za +reproducirati, ali ponekad moĹže biti korisno (npr. kad Ĺželimo pokriti +velik raspon parametara). U takvim slučajevima moĹže se koristiti slijedeća strategija: @smallexample @@ -496,28 +496,28 @@ begin RandomSeed := Random (MaxInt); SeedRandom (RandomSeed); - @dots{} @{ vaši normalni testovi ovdje @} + @dots{} @{ vaĹĄi normalni testovi ovdje @} - @{ kad se ispisuje poruka o grešci: @} + @{ kad se ispisuje poruka o greĹĄci: @} if @dots{} then begin WriteLn ('failed (', RandomSeed, ') ', - @dots{} @{ možebitne dodatne informacije @} ); + @dots{} @{ moĹžebitne dodatne informacije @} ); Halt end end. @end smallexample -Ovo je pomalo neprirodno jer se pseudo-slučajni broj koristi za -(ponovno) postavi 'sjeme' (inicijalno stanje) pseudo-slučajnog -generatora, ali trenutno nema načina da se dobavi interno stanje -istog (i zapravo niti nije predstavljeno jednim brojem, već stanjem +Ovo je pomalo neprirodno jer se pseudo-slučajni broj koristi za +(ponovno) postavi 'sjeme' (inicijalno stanje) pseudo-slučajnog +generatora, ali trenutno nema načina da se dobavi interno stanje +istog (i zapravo niti nije predstavljeno jednim brojem, već stanjem jednog polja). -Dajući vrijednost @samp{RandomSeed} u poruci o grešci, bit će lako -reproducirati problem stavljajući ovu vrijednost umesto @samp{Random (MaxInt)}. +Dajući vrijednost @samp{RandomSeed} u poruci o greĹĄci, bit će lako +reproducirati problem stavljajući ovu vrijednost umesto @samp{Random (MaxInt)}. Samo budite sigurni da ste ispisali ovu vrijednost u @strong{svakoj} -poruci o bugu koju test program može proizvesti. +poruci o bugu koju test program moĹže proizvesti. @end itemize @@ -528,50 +528,50 @@ poruci o bugu koju test program može pro (Testiranje). -@emph{Opaska:} Ako imate instaliranu binarnu distribuciju, obično -nemate Test Suite instaliran (možete napraviti download source -distribucije da ga pribavite, međutim), tako da se ovaj odlomak -ne odnosi na vas. Ipak, još uvijek možete pronaći u odlomku +@emph{Opaska:} Ako imate instaliranu binarnu distribuciju, obično +nemate Test Suite instaliran (moĹžete napraviti download source +distribucije da ga pribavite, međutim), tako da se ovaj odlomak +ne odnosi na vas. Ipak, joĹĄ uvijek moĹžete pronaći u odlomku @samp{Prilaganje programa u Test Suite} kako prijaviti GPC bugove -u obliku novih test programa kako bismo ih mogli ispraviti što je -prije moguće. +u obliku novih test programa kako bismo ih mogli ispraviti ĹĄto je +prije moguće. -Datoteke u test direktoriju i podstablima služe samo za testiranje +Datoteke u test direktoriju i podstablima sluĹže samo za testiranje GPC-a i ne bi se smjele koristiti za druge svrhe. Opaska: Neki od testova nemaju smisla na svim sistemima. Oni su -opremljeni provjerama i bit će preskočeni ako pronađu sistem -nepogodnim. Preskočeni testovi @strong{ne znače} GPC bug, osim -ako mislite da bi pojedini test imao smisla na vašem sistemu. +opremljeni provjerama i bit će preskočeni ako pronađu sistem +nepogodnim. Preskočeni testovi @strong{ne znače} GPC bug, osim +ako mislite da bi pojedini test imao smisla na vaĹĄem sistemu. @itemize @bullet @item -Da se pokrene čitava test kolekcija, otipkajte @samp{make} u test +Da se pokrene čitava test kolekcija, otipkajte @samp{make} u test direktoriju (ili @samp{make check} u @samp{p} objektnom direktoriju nakon izgradnje GPC-a). @item -Ispis će pokazati sve uočene greške (poželjno nijednu) i preskočene -testove, i konačno sažetak dajući broj uspješnih, testova s greškom i -preskočenih testova. Svaki test s greškom znači bug u GPC-u koji bi +Ispis će pokazati sve uočene greĹĄke (poĹželjno nijednu) i preskočene +testove, i konačno saĹžetak dajući broj uspjeĹĄnih, testova s greĹĄkom i +preskočenih testova. Svaki test s greĹĄkom znači bug u GPC-u koji bi trebao biti prijavljen na GPC mailing listu, @email{gpc@@gnu.de}. Ne zaboravite napomenuti operacijski sustav na kojem ste pokrenuli -testove i ostale relevantne informacije o tome što ste radili. +testove i ostale relevantne informacije o tome ĹĄto ste radili. @item -Također možete otipkati @samp{make pascal.check-long} da dobijete -dugi ispis koji je niz imena datoteka praćenih sa @samp{OK} za uspješne -testove, @samp{SKIPPED} za preskočene testove (oboje velikim slovima), -i ništa dodatno za testove koji su pali. +Također moĹžete otipkati @samp{make pascal.check-long} da dobijete +dugi ispis koji je niz imena datoteka praćenih sa @samp{OK} za uspjeĹĄne +testove, @samp{SKIPPED} za preskočene testove (oboje velikim slovima), +i niĹĄta dodatno za testove koji su pali. @item -Da pokrenete samo određene testove, možete otipkati nešto poput +Da pokrenete samo određene testove, moĹžete otipkati neĹĄto poput @samp{make MASK="foo[1-7]*.pas"} ili @samp{make MASK="foo42.pas" pascal.check-long}. @item -Da počistite rezultate testova, otipkajte @samp{make clean}. +Da počistite rezultate testova, otipkajte @samp{make clean}. @end itemize Index: gcc/p/doc/hr/welcome.texi =================================================================== RCS file: /cvs/gcc/gcc/p/doc/hr/welcome.texi,v retrieving revision 1.1.111.1 retrieving revision 1.2 diff -u -p -r1.1.111.1 -r1.2 --- gcc/p/doc/hr/welcome.texi 27 Dec 2009 16:00:57 -0000 1.1.111.1 +++ gcc/p/doc/hr/welcome.texi 21 May 2012 21:30:56 -0000 1.2 @@ -10,8 +10,8 @@ @ifclear READMEONLY @ifclear NEWSONLY -@node Dobrodošli -@unnumbered Dobrodošli na GNU Pascal @dots{} +@node DobrodoĹĄli +@unnumbered DobrodoĹĄli na GNU Pascal @dots{} @dots{} @end ifclear @end ifclear @@ -20,23 +20,23 @@ @c Note: The following line gets inserted into the destination file, @c it does not apply to this Texinfo file! Ova datoteka se generira automatski iz welcome.texi.@* -@sc{NE MIJENJAJTE OVU DATOTEKU RUČNO!} +@sc{NE MIJENJAJTE OVU DATOTEKU RUČNO!} @settitle README @node Top @paragraphindent 0 -@center Dobrodošli na GNU Pascal, +@center DobrodoĹĄli na GNU Pascal, @end ifset @ifset NEWSONLY -Dobrodošli na GNU Pascal, +DobrodoĹĄli na GNU Pascal, @end ifset slobodni 32/64-bitni Pascal prevodilac (engl. compiler) iz kolekcije GNU prevodilaca (GNU CC ili GCC), koji kombinira Pascal "front-end" s dokazanim GCC "back-end"-om za generiranje -koda i optimizaciju. Osim njega kolekcija trenutno uključuje +koda i optimizaciju. Osim njega kolekcija trenutno uključuje prevodioce za Adu, C, C++, Objective C, Chill, FORTRAN, i Javu. -Za razliku od konvertera koda kao što je p2c, ovo je istinski -prevodilac, ne samo konverter (u drugi jezik, najčešće C). +Za razliku od konvertera koda kao ĹĄto je p2c, ovo je istinski +prevodilac, ne samo konverter (u drugi jezik, najčešće C). Ova verzija GPC-a odgovara GCC verziji @value{GCCVersion}. @@ -44,7 +44,7 @@ Ova verzija GPC-a odgovara GCC verziji @ @ifclear READMEONLY @ifclear NEWSONLY -Ovaj priručnik sadrži +Ovaj priručnik sadrĹži @itemize @bullet @item @@ -52,51 +52,51 @@ pregled nekih od GPC-ovih najinteresantn @item listu novih svojstava od zadnjeg izdanja, vidi @ref{News}, @item -GNU Pascal često postavljana pitanja, vidi @ref{FAQ}, +GNU Pascal često postavljana pitanja, vidi @ref{FAQ}, @item instrukcije za instaliranje, vidi @ref{Installation}, @item -QuickStart Guide - brzi vodič za programere vične Turbo Pascal/Borland +QuickStart Guide - brzi vodič za programere vične Turbo Pascal/Borland Pascal prevodiocima, vidi @ref{Borland Pascal}, @item listu opcija komandne linije za pozivanje prevodioca, vidi "Pozivanje GPC-a" (@ref{Invoking GPC}), @item -Programerski vodič u GPC, koji opisuje Pascal programski jezik općenito -i GPC specifične aspekte. Vidi @ref{Programming}, +Programerski vodič u GPC, koji opisuje Pascal programski jezik općenito +i GPC specifične aspekte. Vidi @ref{Programming}, @item abecednu referencu GPC jezika, vidi @ref{Reference}, @item -listu ključnih riječi i operatora podržanih od GNU Pascala, vidi -Ključne riječi @ref{Keywords}, +listu ključnih riječi i operatora podrĹžanih od GNU Pascala, vidi +Ključne riječi @ref{Keywords}, @item informacije o tome kako prijavljivati bugove u GNU Pascalu i kako dobiti -podršku, vidi @ref{Support}, +podrĹĄku, vidi @ref{Support}, @item -listu poznatih bugova i stvari za napraviti, također listu ispravljenih +listu poznatih bugova i stvari za napraviti, također listu ispravljenih bugova i nedavno implementiranih svojstava, see @ref{To Do}, @item neke informacije za one koji su zainteresirani kako GNU Pascal radi iznutra, see @ref{Internals}, @item -listu ljudi koji su doprinijeli koja kaže tko je razvijao i tko -održava GNU Pascal, vidi @ref{Acknowledgments}, +listu ljudi koji su doprinijeli koja kaĹže tko je razvijao i tko +odrĹžava GNU Pascal, vidi @ref{Acknowledgments}, @item -GNU General Public License - GNU Opću javnu licencu, koja vas informira -o vašim pravima i odgovornostima za korištenja, modificiranja i +GNU General Public License - GNU Opću javnu licencu, koja vas informira +o vaĹĄim pravima i odgovornostima za koriĹĄtenja, modificiranja i distribucije GNU Pascala, vidi @ref{Copying}, @item ostale tekstove o Free Softwareu i GNU Projektu kojima se namjeravalo -odgovoriti na pitanja kao ``što je GNU?'' koja bi sada mogli imati +odgovoriti na pitanja kao ``ĹĄto je GNU?'' koja bi sada mogli imati u umu, vidi @ref{GNU}. @end itemize @c !!!! how to translate more precisely "structured value initializers" Ako ste upoznati s programiranjem u Standard Pascalu (ISO 7185), -vjerojatno ćete moći jednostavno početi i prevesti svoje programe. -Također, većina ISO Extended Pascal standarda (ISO 10206) je -ugrađena u GNU Pascal. Extended Pascal svojstva koja još uvijek +vjerojatno ćete moći jednostavno početi i prevesti svoje programe. +Također, većina ISO Extended Pascal standarda (ISO 10206) je +ugrađena u GNU Pascal. Extended Pascal svojstva koja joĹĄ uvijek nedostaju iz GPC-a su @code{qualified} module import, @code{protected} module export, skupovni tipovi s promjenljivim granicama, inicijalizatori strukturiranih vrijednosti (engl. structured value @@ -107,20 +107,20 @@ bounds). @c lower bound must now be an identifier, a constant or a @c variable name. -Ako ste Borland Pascal programer, vjerojatno biste trebali početi -čitati QuickStart vodič od BP do GNU Pascala, -vidi @ref{Borland Pascal}. Ako ste radoznali o novim mogućnostima -koje GPC nudi, možete dobiti ideju iz pregleda GPC naglasaka -(@pxref{Naglasci}), i čitati više detalja o njima u Programmer's +Ako ste Borland Pascal programer, vjerojatno biste trebali početi +čitati QuickStart vodič od BP do GNU Pascala, +vidi @ref{Borland Pascal}. Ako ste radoznali o novim mogućnostima +koje GPC nudi, moĹžete dobiti ideju iz pregleda GPC naglasaka +(@pxref{Naglasci}), i čitati viĹĄe detalja o njima u Programmer's Guide to GPC (@pxref{Programming}) i u abecednom GPC referentnom -priručniku (@pxref{Reference}). +priručniku (@pxref{Reference}). -I, molimo vas, razmislite također kako biste doprinijeli GNU Pascal -projektu. Molimo podržite naš rad doprinoseći GNU Pascalu programskim -primjerima, prijavama bugova, dokumentiranjem, ali čak i vlastitim -poboljšanjima prevodioca. +I, molimo vas, razmislite također kako biste doprinijeli GNU Pascal +projektu. Molimo podrĹžite naĹĄ rad doprinoseći GNU Pascalu programskim +primjerima, prijavama bugova, dokumentiranjem, ali čak i vlastitim +poboljĹĄanjima prevodioca. -Sva registrirana imena korištena u ovom priručniku pripadaju njihovim +Sva registrirana imena koriĹĄtena u ovom priručniku pripadaju njihovim respektivnim vlasnicima. @end ifclear @end ifclear @@ -132,37 +132,37 @@ GNU Pascal ima home site na World Wide W @uref{http://www.gnu-pascal.de} @end smallexample -GNU Pascal distribucije se tamo uvijek mogu naći. +GNU Pascal distribucije se tamo uvijek mogu naći. Preferiramo distribuiranje GNU Pascala u source obliku jer vam to -daje mogućnost da prilagođavate, poboljšavate, i održavate prevodilac -sami (ili da unajmite programera da to učini za vas). Međutim, mi -pružamo binarne distribucije za neke platforme radi vašeg komfora, +daje mogućnost da prilagođavate, poboljĹĄavate, i odrĹžavate prevodilac +sami (ili da unajmite programera da to učini za vas). Međutim, mi +pruĹžamo binarne distribucije za neke platforme radi vaĹĄeg komfora, u poddirektoriju @file{binary}. -Prevođenje GNU Pascala traži GCC izvorne datoteke, ne samo instaliranu +Prevođenje GNU Pascala traĹži GCC izvorne datoteke, ne samo instaliranu kopiju GCC-a. -Instaliranje GPC-a (iz izvornih ili binarnih datoteka) će kreirati +Instaliranje GPC-a (iz izvornih ili binarnih datoteka) će kreirati razne datoteke u podstablima do @file{/usr/local/lib}, koje koristi -prevodilac. Također će kreirati datoteku @file{/usr/local/bin/gpc}, -koji je korisnička naredba za pokretanje kompilacije. +prevodilac. Također će kreirati datoteku @file{/usr/local/bin/gpc}, +koji je korisnička naredba za pokretanje kompilacije. -Molimo šaljite komentare, sugestije, i izvještaje o bugovima na GNU +Molimo ĹĄaljite komentare, sugestije, i izvjeĹĄtaje o bugovima na GNU Pascal mailing listu, @email{gpc@@gnu.de}. Pogledajte FAQ za detalje. -GNU Pascal priručnik koji sadrži detaljnu dokumentaciju o GPC-u je -sadržan u datotekama gpc.info* (GNU info format) u source i binarnim -distribucijama. Možete ih čitati s bilo kojim info readerom, npr. -tipkajući @samp{info -f gpc}. Izvornik priručnika je priložen -u Texinfo formatu u GPC source distribucijama. Iz njega možete -regenerirati info verziju, i također možete kreirati HTML i -PostScript verzije. HTML i PostScript verzije su također priložene +GNU Pascal priručnik koji sadrĹži detaljnu dokumentaciju o GPC-u je +sadrĹžan u datotekama gpc.info* (GNU info format) u source i binarnim +distribucijama. MoĹžete ih čitati s bilo kojim info readerom, npr. +tipkajući @samp{info -f gpc}. Izvornik priručnika je priloĹžen +u Texinfo formatu u GPC source distribucijama. Iz njega moĹžete +regenerirati info verziju, i također moĹžete kreirati HTML i +PostScript verzije. HTML i PostScript verzije su također priloĹžene na GPC-ovim web stranicama. -Datoteka @file{FAQ} sadrži GNU Pascal FAQ (Frequently Asked Questions --- učestalo postavljana pitanja) listu. Ona bi trebala odgovoriti -na većinu pitanja koja imate o GNU Pascalu. +Datoteka @file{FAQ} sadrĹži GNU Pascal FAQ (Frequently Asked Questions +-- učestalo postavljana pitanja) listu. Ona bi trebala odgovoriti +na većinu pitanja koja imate o GNU Pascalu. Datoteka @file{NEWS} popisuje promjene u GNU Pascalu od zadnjeg izdanja. @@ -170,50 +170,50 @@ izdanja. Datoteka @file{AUTHORS} popisuje autore i one koji su doprinijeli GNU Pascalu. -Datoteka @file{COPYING} sadrži GNU General Public License - GNU opću +Datoteka @file{COPYING} sadrĹži GNU General Public License - GNU opću javnu licencu, pod kojom je GNU Pascal distribuiran. -Datoteka @file{COPYING.LIB} sadrži GNU Lesser General Public License, +Datoteka @file{COPYING.LIB} sadrĹži GNU Lesser General Public License, pod kojom su distribuirane pojedince biblioteke (vidjeti individualne primjedbe o licenciranju). -Datoteka @file{INSTALL} sadrži instalacijske instrukcije. +Datoteka @file{INSTALL} sadrĹži instalacijske instrukcije. -Datoteka @file{BUGS} objašnjava kako pokrenuti GPC test kolekciju -i kako prijaviti bugove (pogreške u programu). +Datoteka @file{BUGS} objaĹĄnjava kako pokrenuti GPC test kolekciju +i kako prijaviti bugove (pogreĹĄke u programu). -Datoteke spomenute niže su sastavni dio distribucija izvornog koda +Datoteke spomenute niĹže su sastavni dio distribucija izvornog koda GNU Pascala. -Datoteka @file{ChangeLog} sadrži povijest izmjena. +Datoteka @file{ChangeLog} sadrĹži povijest izmjena. -Direktorij @file{rts} sadrži izvorni kod GNU Pascalovog Run Time -Systema. Njegovo sučelje (engl. interface) prema Pascal programima -je sadržano u datoteci @file{gpc.pas}. +Direktorij @file{rts} sadrĹži izvorni kod GNU Pascalovog Run Time +Systema. Njegovo sučelje (engl. interface) prema Pascal programima +je sadrĹžano u datoteci @file{gpc.pas}. -Direktorij @file{script} sadrži neke skripte korištene od GPC -održavatelja i neke skripte korištene tijekom procesa izgradnje GPC-a. +Direktorij @file{script} sadrĹži neke skripte koriĹĄtene od GPC +odrĹžavatelja i neke skripte koriĹĄtene tijekom procesa izgradnje GPC-a. -U direktoriju @file{doc} možete naći GNU Pascal dokumentaciju u -GNU Texinfo formatu. Vidi @file{doc/README} za više o tome. +U direktoriju @file{doc} moĹžete naći GNU Pascal dokumentaciju u +GNU Texinfo formatu. Vidi @file{doc/README} za viĹĄe o tome. -Direktorij @file{units} sadrži GNU Pascalove standardne jedinice +Direktorij @file{units} sadrĹži GNU Pascalove standardne jedinice (unit) neke od kojih su prenosive zamjene za Borland Pascal jedinice istog imena. -Direktorij @file{utils} koristi neke korisne programčiće korištene +Direktorij @file{utils} koristi neke korisne programčiće koriĹĄtene od ili u vezi s GNU Pascalom. -Direktorij @file{demos} sadrži demo programe koji ilustriraju neke +Direktorij @file{demos} sadrĹži demo programe koji ilustriraju neke od sposobnosti GNU Pascala. -Direktorij @file{test} sadrži programe koji testiraju prevodilac +Direktorij @file{test} sadrĹži programe koji testiraju prevodilac za vrijeme razvoja i instalacije. Sve ostalo pripada izvornom kodu GNU Pascala. -Slijedi izvorni engleski "disclaimer", zatim neslužbeni prijevod. -Gdje god dolazi do nejasnoća ili razlika, engleski izvornik je +Slijedi izvorni engleski "disclaimer", zatim nesluĹžbeni prijevod. +Gdje god dolazi do nejasnoća ili razlika, engleski izvornik je mjerodavan. All parts of the compiler are copyrighted (C) 1987-2005 @@ -239,22 +239,22 @@ Free Software Foundation, 59 Temple Plac Svi dijelovi prevodioca su copyright (C) 1987, 1989, 1992-2000 by the Free Software Foundation, Inc.@: (FSF). -GNU Pascal je slobodan softver; možete ga redistribuirati i/ili -modificirati pod terminima GNU General Public License kao što je +GNU Pascal je slobodan softver; moĹžete ga redistribuirati i/ili +modificirati pod terminima GNU General Public License kao ĹĄto je objavljena od Free Software Foundation; ili verzija 2, ili (po -vašoj želji) novija verzija. +vaĹĄoj Ĺželji) novija verzija. -GNU Pascal se distribuira u nadi da će biti koristan, ali BEZ -IKAKVE GARANCIJE; bez čak i implicirane garancije TRŽIŠNE KORISNOSTI -ili POGODNOSTI ZA BILO KOJU POJEDINAČNU SVRHU. Vidi GNU General +GNU Pascal se distribuira u nadi da će biti koristan, ali BEZ +IKAKVE GARANCIJE; bez čak i implicirane garancije TRĹ˝IĹ NE KORISNOSTI +ili POGODNOSTI ZA BILO KOJU POJEDINAČNU SVRHU. Vidi GNU General Public License za detalje. Trebali ste dobiti kopiju licence GNU General Public License -zajedno s GNU Pascalom; pogledajte datoteku COPYING. Ako ne, pišite +zajedno s GNU Pascalom; pogledajte datoteku COPYING. Ako ne, piĹĄite na Free Software Foundation, 59 Temple Place -- Suite 330, Boston, MA 02111-1307, USA. -Uživajte, +UĹživajte, GNU Pascal razvojni tim @end ifset Index: gcc/p/rts/Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/p/rts/Makefile.in,v retrieving revision 1.1.111.3 retrieving revision 1.12 diff -u -p -r1.1.111.3 -r1.12 --- gcc/p/rts/Makefile.in 27 Mar 2006 11:51:07 -0000 1.1.111.3 +++ gcc/p/rts/Makefile.in 3 Apr 2017 02:37:02 -0000 1.12 @@ -1,3 +1,4 @@ +# $MirOS: gcc/gcc/p/rts/Makefile.in,v 1.12 2017/04/03 02:37:02 tg Exp $ # Makefile for the GNU Pascal Run Time System # # Copyright (C) 1995-2006 Free Software Foundation, Inc. @@ -46,18 +47,20 @@ DESTDIR=. GCC_VERSION=unknown WITH_SHARED=@with_shared@ +WITH_SHARED_LIBGPC?=$(WITH_SHARED) VERSION_FILENAME=$(srcdir)/rts-version gpc_major=2 gpc_minor=1 rts_version=`cat $(VERSION_FILENAME)` GPCSOLIBSHORTNAME=libgpc.so -GPCSOLIBNAME=$(GPCSOLIBSHORTNAME).$(gpc_major).$(gpc_minor).$(rts_version) +GPCSOLIBNAME=$(GPCSOLIBSHORTNAME).$(gpc_major).$(gpc_minor) GPCLIB=$(DESTDIR)/libgpc.a GPCSOLIB=$(DESTDIR)/$(GPCSOLIBNAME) PFLAGS1=--unit-path=$(VPATH) --automake RTS_WARN=-W -Wall -Wmissing-prototypes -Wmissing-declarations RTS_CFLAGS=-I. $(RTS_WARN) $(CFLAGS) $(RTSFLAGS)# -DDEBUG -RTS_PFLAGS=$(RTS_CFLAGS) $(PFLAGS) $(PFLAGS1) \ +RTS_PFLAGS=${RTS_CFLAGS:N-Wno-long-long} \ + -Wno-error $(PFLAGS) $(PFLAGS1) \ -DRTS_RELEASE_STRING="'$(rts_version)'" -DGCC_VERSION="'$(GCC_VERSION)'" PAS_SRC=rtsc.pas string1.pas error.pas heap.pas string2.pas time.pas random.pas \ @@ -71,35 +74,7 @@ OBJS=rts.o rtsc.o string1.o error.o heap SO_OBJS=rts.lo rtsc.lo string1.lo heap.lo error.lo string2.lo time.lo random.lo \ fname.lo files.lo getopt.lo sets.lo math.lo endian.lo move.lo init.lo gpc.lo $(MALLOC) -GENERATED_FILES=\ - $(srcdir)/acconfig.h \ - $(srcdir)/configure \ - $(srcdir)/rts-config.in \ - $(srcdir)/rtsc.pas \ - $(srcdir)/gpc.pas - -all: $(GPCLIB) sharedlib.$(WITH_SHARED) - -generated-files: $(GENERATED_FILES) - -$(srcdir)/acconfig.h: $(srcdir)/configure.in - m4 $(srcdir)/make-acconfig-h.m4 "$<" > "$@" || { rm -f "$@"; false; } - -# The touch commands in the following rules are to prevent them from -# being run next time. Though they cause the whole RTS to be rebuilt, -# sometimes unnecessarily ... -$(srcdir)/configure: $(srcdir)/configure.in $(srcdir)/acconfig.h - cd $(srcdir) && autoconf && touch configure && rm -rf autom4te.cache - -# @@ The `rm -f "$@"' is a workaround for a bug with `mv -f' under Cygwin. -$(srcdir)/rts-config.in: $(srcdir)/configure.in $(srcdir)/acconfig.h - rm -f "$@"; cd $(srcdir) && autoheader && touch rts-config.in && rm -rf autom4te.cache - -$(srcdir)/rtsc.pas: $(srcdir)/rts.c $(srcdir)/make-rtsc-pas - cd $(srcdir); ./make-rtsc-pas > "$@" || { rm -f "$@"; false; } - -$(srcdir)/gpc.pas: $(srcdir)/rtsc.pas $(PAS_SRC) $(srcdir)/make-gpc-pas $(VERSION_FILENAME) - version=$(rts_version); cd $(srcdir); ./make-gpc-pas $$version > "$@" || { rm -f "$@"; false; } +all: $(GPCLIB) sharedlib.$(WITH_SHARED_LIBGPC) # @@ This might be a little risky, but since rts-config.h is generated by # configure, it should only contain C comments and C preprocessor directives. @@ -144,26 +119,26 @@ rts.update-release: $(CC) -c $(RTS_CFLAGS) -Wpointer-arith -Wwrite-strings $(CPPFLAGS) -fPIC -o "$@" "$<" rtsc.o: rtsc.pas - $(PC) -c -g $(RTS_PFLAGS) "$<" + $(PC) -c -g $(RTS_PFLAGS) "${.ALLSRC:M*/rtsc.pas}" rtsc.lo: rtsc.pas - $(PC) -c -g $(RTS_PFLAGS) -fPIC -o "$@" "$<" + $(PC) -c -g $(RTS_PFLAGS) -fPIC -o "$@" "${.ALLSRC:M*/rtsc.pas}" stamp-error-gpi: error.pas rtsc.pas string1.pas rts-version - $(PC) -c $(RTS_PFLAGS) --interface-only "$<" + $(PC) -c $(RTS_PFLAGS) --interface-only "${.ALLSRC:M*/error.pas}" $(STAMP) "$@" heap.o: heap.pas stamp-error-gpi - $(PC) -c $(RTS_PFLAGS) --no-automake "$<" + $(PC) -c $(RTS_PFLAGS) --no-automake "${.ALLSRC:M*/heap.pas}" heap.lo: heap.pas stamp-error-gpi - $(PC) -c $(RTS_PFLAGS) --no-automake -fPIC -o "$@" "$<" + $(PC) -c $(RTS_PFLAGS) --no-automake -fPIC -o "$@" "${.ALLSRC:M*/heap.pas}" error.o: error.pas heap.o - $(PC) -c $(RTS_PFLAGS) --no-automake --implementation-only "$<" + $(PC) -c $(RTS_PFLAGS) --no-automake --implementation-only "${.ALLSRC:M*/error.pas}" error.lo: error.pas heap.lo - $(PC) -c $(RTS_PFLAGS) --no-automake --implementation-only "$<" -fPIC -o "$@" + $(PC) -c $(RTS_PFLAGS) --no-automake --implementation-only "${.ALLSRC:M*/error.pas}" -fPIC -o "$@" .pas.o: $(PC) -c $(RTS_PFLAGS) "$<" Index: gcc/p/rts/gpc.pas =================================================================== RCS file: /cvs/gcc/gcc/p/rts/gpc.pas,v retrieving revision 1.1.111.2 retrieving revision 1.6 diff -u -p -r1.1.111.2 -r1.6 --- gcc/p/rts/gpc.pas 27 Mar 2006 11:51:07 -0000 1.1.111.2 +++ gcc/p/rts/gpc.pas 7 Aug 2017 20:11:36 -0000 1.6 @@ -60,7 +60,7 @@ General Public License. } {$gnu-pascal,I-} -{$if __GPC_RELEASE__ <> 20060215} +{$if __GPC_RELEASE__ <> 20060325} {$error Trying to compile gpc.pas with a non-matching GPC version is likely to cause problems. @@ -252,7 +252,7 @@ function SetGroupID (Real: CInteger; Ef { Low-level file routines. Mostly for internal use. } -{ Get information about a file system. } +{ Get information about a filesystem. } function StatFS (Path: CString; var Buf: StatFSBuffer): Boolean; external name '_p_StatFS'; function CStringOpenDir (DirName: CString): Pointer; external name '_p_CStringOpenDir'; function CStringReadDir (Dir: Pointer): CString; external name '_p_CStringReadDir'; Index: gcc/p/rts/random.pas =================================================================== RCS file: /cvs/gcc/gcc/p/rts/random.pas,v retrieving revision 1.1.111.3 retrieving revision 1.6 diff -u -p -r1.1.111.3 -r1.6 --- gcc/p/rts/random.pas 27 Mar 2006 11:51:07 -0000 1.1.111.3 +++ gcc/p/rts/random.pas 27 Mar 2006 11:59:04 -0000 1.6 @@ -1,3 +1,5 @@ +{ $MirOS: gcc/gcc/p/rts/random.pas,v 1.6 2006/03/27 11:59:04 tg Exp $ } + { Pseudo random number generator Copyright (C) 1997-2006 Free Software Foundation, Inc. @@ -120,12 +122,22 @@ var f: file of RandomSeedType; b: BindingType; begin - Assign (f, '/dev/urandom'); + Assign (f, '/dev/arandom'); b := Binding (f); if not (b.Bound and b.Special) then begin - Assign (f, '/dev/random'); - b := Binding (f) + Assign (f, '/dev/urandom'); + b := Binding (f); + if not (b.Bound and b.Special) then + begin + Assign (f, '/dev/srandom'); + b := Binding (f); + if not (b.Bound and b.Special) then + begin + Assign (f, '/dev/random'); + b := Binding (f); + end; + end; end; if b.Bound and b.Special then begin @@ -136,10 +148,7 @@ begin Close (f) end; if (IOResult <> 0) or (Seed = 0) then - begin - Seed := GetUnixTime (Null); - if Seed <= 0 then Seed := ProcessID - end; + Seed := (1 + GetUnixTime (Null)) * ProcessID; Default_SeedRandom (Seed) end; Index: gcc/p/rts/rts.c =================================================================== RCS file: /cvs/gcc/gcc/p/rts/rts.c,v retrieving revision 1.1.111.3 retrieving revision 1.2 diff -u -p -r1.1.111.3 -r1.2 --- gcc/p/rts/rts.c 27 Mar 2006 11:51:07 -0000 1.1.111.3 +++ gcc/p/rts/rts.c 7 Aug 2017 20:11:36 -0000 1.2 @@ -145,15 +145,15 @@ #include #endif -/* needed by e.g. Solaris to stat a file system */ +/* needed by e.g. Solaris to stat a filesystem */ #ifdef HAVE_SYS_STATVFS_H #include #endif -/* needed by e.g. Linux and DJGPP to stat a file system */ +/* needed by e.g. Linux and DJGPP to stat a filesystem */ #ifdef HAVE_SYS_VFS_H #include #endif -/* needed by e.g. FreeBSD to stat a file system */ +/* needed by e.g. FreeBSD to stat a filesystem */ #ifdef HAVE_SYS_MOUNT_H #include #endif @@ -1507,7 +1507,7 @@ GLOBAL (Boolean _p_SetGroupID (int Real /** Low-level file routines. Mostly for internal use. */ -/** Get information about a file system. */ +/** Get information about a filesystem. */ GLOBAL (Boolean _p_StatFS (char *Path UNUSED, StatFSBuffer *Buf)) { int Result; Index: gcc/p/rts/rtsc.pas =================================================================== RCS file: /cvs/gcc/gcc/p/rts/rtsc.pas,v retrieving revision 1.1.111.2 retrieving revision 1.5 diff -u -p -r1.1.111.2 -r1.5 --- gcc/p/rts/rtsc.pas 27 Mar 2006 11:51:07 -0000 1.1.111.2 +++ gcc/p/rts/rtsc.pas 7 Aug 2017 20:11:36 -0000 1.5 @@ -250,7 +250,7 @@ function SetGroupID (Real: CInteger; Ef { Low-level file routines. Mostly for internal use. } -{ Get information about a file system. } +{ Get information about a filesystem. } function StatFS (Path: CString; var Buf: StatFSBuffer): Boolean; external name '_p_StatFS'; function CStringOpenDir (DirName: CString): Pointer; external name '_p_CStringOpenDir'; function CStringReadDir (Dir: Pointer): CString; external name '_p_CStringReadDir'; Index: gcc/p/units/fileutils.pas =================================================================== RCS file: /cvs/gcc/gcc/p/units/fileutils.pas,v retrieving revision 1.1.111.3 retrieving revision 1.2 diff -u -p -r1.1.111.3 -r1.2 --- gcc/p/units/fileutils.pas 27 Mar 2006 11:51:07 -0000 1.1.111.3 +++ gcc/p/units/fileutils.pas 7 Aug 2017 20:11:38 -0000 1.2 @@ -83,7 +83,7 @@ procedure RmDirs (const Path: String); a will be set to the same permissions Source has. In any case, Dest will be set to the modification time of Source after copying. On any error, the destination file is erased. This is to avoid - leaving partial files in case of full file systems (one of the + leaving partial files in case of full filesystems (one of the most common reasons for errors). } procedure FileCopy (const Source, Dest: String; Mode: Integer); attribute (iocritical); Index: gcc/p/units/gpc-bp.pas =================================================================== RCS file: /cvs/gcc/gcc/p/units/gpc-bp.pas,v retrieving revision 1.1.111.2 retrieving revision 1.2 diff -u -p -r1.1.111.2 -r1.2 --- gcc/p/units/gpc-bp.pas 27 Mar 2006 11:51:08 -0000 1.1.111.2 +++ gcc/p/units/gpc-bp.pas 7 Aug 2017 20:11:38 -0000 1.2 @@ -47,9 +47,9 @@ searched by BP, but NOT by GPC (e.g. c:\bp\units, if you have installed BP in c:\bp). When you get a new release of GPC, don't forget to install the new version of this unit that comes with - it. If you are using BP on a real file system (e.g. Linux with + it. If you are using BP on a real filesystem (e.g. Linux with DosEmu), you can set symlinks to the files installed with GPC - once and for all, but on a Dos file system, you'll have to copy + once and for all, but on a Dos filesystem, you'll have to copy the files after each GPC release. - Use: In your code, simply add a `uses GPC' statement (which will Index: gcc/p/utils/Makefile =================================================================== RCS file: /cvs/gcc/gcc/p/utils/Makefile,v retrieving revision 1.1.111.3 retrieving revision 1.9 diff -u -p -r1.1.111.3 -r1.9 --- gcc/p/utils/Makefile 27 Mar 2006 11:51:08 -0000 1.1.111.3 +++ gcc/p/utils/Makefile 3 Apr 2017 02:37:02 -0000 1.9 @@ -1,3 +1,4 @@ +# $MirOS: gcc/gcc/p/utils/Makefile,v 1.9 2017/04/03 02:37:02 tg Exp $ # Makefile for the GNU Pascal utilities # # Copyright (C) 2002-2006 Free Software Foundation, Inc. @@ -43,55 +44,25 @@ VPATH=$(srcdir) PFLAGS1=--executable-path=. --unit-path=$(GCC_DIR)/p/rts --unit-path=$(GCC_DIR)/p/units EXE=binobj$(exeext) gpidump$(exeext) EXE2=binobj gpidump -DOC=binobj.1 gpidump.1 -PC_WITH_FLAGS=$(PC) --automake --executable-file-name $(UTILS_WARN) $(CFLAGS) $(PFLAGS) $(PFLAGS1) +PC_WITH_FLAGS=$(PC) --automake --executable-file-name $(UTILS_WARN) ${CFLAGS:N-Wno-long-long} $(PFLAGS) $(PFLAGS1) -all: $(EXE) $(DOC) +all: $(EXE) binobj$(exeext): binobj.pas - $(PC_WITH_FLAGS) "$<" + $(PC_WITH_FLAGS) "${.ALLSRC:M*.pas}" gpidump$(exeext): gpidump.pas tree.inc - $(PC_WITH_FLAGS) -I. -I "$(GCC_DIR)/p" "$<" - -binobj.1: binobj - [ -r no-man ] || if [ x"$(BUILD)" != x"$(HOST)" ]; then \ - echo "*** cross-compiling; man pages for the GPC utilities will not be built" >&2; \ - echo cross-compile > no-man; \ - elif help2man --version > /dev/null 2>&1; then \ - help2man -N ./"$<" > "$@" || { rm -f "$@"; false; } \ - else \ - echo "*** help2man not found; man pages for the GPC utilities will not be built" >&2; \ - echo no-help2man > no-man; \ - fi - -gpidump.1: gpidump - [ -r no-man ] || if [ x"$(BUILD)" != x"$(HOST)" ]; then \ - echo "*** cross-compiling; man pages for the GPC utilities will not be built" >&2; \ - echo cross-compile > no-man; \ - elif help2man --version > /dev/null 2>&1; then \ - help2man -N ./"$<" > "$@" || { rm -f "$@"; false; } \ - else \ - echo "*** help2man not found; man pages for the GPC utilities will not be built" >&2; \ - echo no-help2man > no-man; \ - fi + $(PC_WITH_FLAGS) -I. -I "$(GCC_DIR)/p" "${.ALLSRC:M*.pas}" tree.inc: $(GCC_DIR)/version.c $(GCC_DIR)/tree.def $(GCC_DIR)/p/p-tree.def $(GCC_DIR)/p/module.c - "$(srcdir)/mk-t-inc" "$(GCC_DIR)" "$@" + $(SHELL) "$(srcdir)/mk-t-inc" "$(GCC_DIR)" "$@" -install: $(EXE) $(DOC) +install: for f in $(EXE); do \ rm -f $(bindir)/"$$f"; \ $(INSTALL_PROGRAM) "$$f" "$(bindir)/$$f"; \ chmod a+x $(bindir)/"$$f"; \ done - for f in $(DOC); do \ - if [ -r "$$f" ]; then \ - rm -f $(man1dir)/"$$f"; \ - $(INSTALL_DATA) "$$f" "$(man1dir)/$$f"; \ - chmod a-x $(man1dir)/"$$f"; \ - fi; \ - done clean: rm -f *.o *.i *.s *.gpi *.gpd $(EXE) $(EXE2) $(DOC) tree.inc Index: gcc/p/utils/mk-t-inc =================================================================== RCS file: /cvs/gcc/gcc/p/utils/mk-t-inc,v retrieving revision 1.1.111.2 retrieving revision 1.4 diff -u -p -r1.1.111.2 -r1.4 --- gcc/p/utils/mk-t-inc 27 Mar 2006 11:51:08 -0000 1.1.111.2 +++ gcc/p/utils/mk-t-inc 31 Mar 2006 03:16:58 -0000 1.4 @@ -20,23 +20,6 @@ # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. } -# This script requires bash. Since bash cannot be assumed to be in -# /bin, /usr/bin or any other certain place, we cannot use it in the -# first line. So we use /bin/sh, which can be assumed to exist. Then -# we check if it's actually bash, and if not, try to re-run the -# script with bash. -if [ x"$BASH" = x ]; then - if [ x"$RERUN_BASH_TRIED" != x ]; then - echo "`basename "$0"`: cannot run, \`bash' is either not bash or a very old version" >&2 - exit 1 - else - RERUN_BASH_TRIED=1; export RERUN_BASH_TRIED - exec bash "$0" "$@" - echo "`basename "$0"`: cannot run bash" >&2 - exit 1 - fi -fi - if [ $# -ne 2 ]; then echo "Usage: `basename $0` gcc-dir dest-filename" >&2 exit 1 @@ -71,6 +54,6 @@ echo "" { cat "$GCCDIR/tree.def" echo 'DEFTREECODE (LAST_AND_UNUSED_C_TREE_CODE, "unused", '"'x', 0)" - sed -e '/#ifdef EGCS/,${/#ifdef EGCS/d;/#else/,/#endif/d}' "$GCCDIR/p/p-tree.def" -} | sed -ne ':loop;/\\$/{N;b loop};/^DEFTREECODE/{s,/\*.*\*/,,;s/["'"'"']x["'"'"'].*/'"'x', 0)/;p;};/^#/p" + sed -e '/#ifdef EGCS/,${/#ifdef EGCS/d;/#else/,/#endif/d;}' "$GCCDIR/p/p-tree.def" +} | sed -ne ':loop;/\\$/{N;b loop;};/^DEFTREECODE/{s,/\*.*\*/,,;s/["'"'"']x["'"'"'].*/'"'x', 0)/;p;};/^#/p" } > "$2" || { rm -f "$2"; false; }