Changes in / [b1e63ac5:208e5be]


Ignore:
Files:
6 added
2 deleted
51 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified .gitignore

    rb1e63ac5 r208e5be  
    4242src/Parser/parser.cc
    4343src/Parser/parser.h
     44src/Parser/parser.hh
    4445
    4546tools/prettyprinter/parser.output
     
    4748tools/prettyprinter/parser.cc
    4849tools/prettyprinter/parser.h
     50tools/prettyprinter/parser.hh
    4951tools/prettyprinter/pretty
    5052tools/pretty
     
    5456doc/user/pointer1.tex
    5557doc/user/pointer2.tex
     58doc/user/EHMHierarchy.tex
  • TabularUnified Makefile.in

    rb1e63ac5 r208e5be  
    1 # Makefile.in generated by automake 1.11.3 from Makefile.am.
     1# Makefile.in generated by automake 1.15 from Makefile.am.
    22# @configure_input@
    33
    4 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
    5 # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
    6 # Foundation, Inc.
     4# Copyright (C) 1994-2014 Free Software Foundation, Inc.
     5
    76# This Makefile.in is free software; the Free Software Foundation
    87# gives unlimited permission to copy and/or distribute it,
     
    1918###############################################################################
    2019VPATH = @srcdir@
     20am__is_gnu_make = { \
     21  if test -z '$(MAKELEVEL)'; then \
     22    false; \
     23  elif test -n '$(MAKE_HOST)'; then \
     24    true; \
     25  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
     26    true; \
     27  else \
     28    false; \
     29  fi; \
     30}
     31am__make_running_with_option = \
     32  case $${target_option-} in \
     33      ?) ;; \
     34      *) echo "am__make_running_with_option: internal error: invalid" \
     35              "target option '$${target_option-}' specified" >&2; \
     36         exit 1;; \
     37  esac; \
     38  has_opt=no; \
     39  sane_makeflags=$$MAKEFLAGS; \
     40  if $(am__is_gnu_make); then \
     41    sane_makeflags=$$MFLAGS; \
     42  else \
     43    case $$MAKEFLAGS in \
     44      *\\[\ \   ]*) \
     45        bs=\\; \
     46        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
     47          | sed "s/$$bs$$bs[$$bs $$bs   ]*//g"`;; \
     48    esac; \
     49  fi; \
     50  skip_next=no; \
     51  strip_trailopt () \
     52  { \
     53    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
     54  }; \
     55  for flg in $$sane_makeflags; do \
     56    test $$skip_next = yes && { skip_next=no; continue; }; \
     57    case $$flg in \
     58      *=*|--*) continue;; \
     59        -*I) strip_trailopt 'I'; skip_next=yes;; \
     60      -*I?*) strip_trailopt 'I';; \
     61        -*O) strip_trailopt 'O'; skip_next=yes;; \
     62      -*O?*) strip_trailopt 'O';; \
     63        -*l) strip_trailopt 'l'; skip_next=yes;; \
     64      -*l?*) strip_trailopt 'l';; \
     65      -[dEDm]) skip_next=yes;; \
     66      -[JT]) skip_next=yes;; \
     67    esac; \
     68    case $$flg in \
     69      *$$target_option*) has_opt=yes; break;; \
     70    esac; \
     71  done; \
     72  test $$has_opt = yes
     73am__make_dryrun = (target_option=n; $(am__make_running_with_option))
     74am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
    2175pkgdatadir = $(datadir)/@PACKAGE@
    2276pkgincludedir = $(includedir)/@PACKAGE@
     
    3892host_triplet = @host@
    3993subdir = .
    40 DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
    41         $(srcdir)/Makefile.in $(srcdir)/config.h.in \
    42         $(top_srcdir)/configure INSTALL automake/compile \
    43         automake/config.guess automake/config.sub automake/depcomp \
    44         automake/install-sh automake/missing automake/ylwrap
    4594ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    4695am__aclocal_m4_deps = $(top_srcdir)/configure.ac
    4796am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    4897        $(ACLOCAL_M4)
     98DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
     99        $(am__configure_deps) $(am__DIST_COMMON)
    49100am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
    50101 configure.lineno config.status.lineno
     
    53104CONFIG_CLEAN_FILES =
    54105CONFIG_CLEAN_VPATH_FILES =
     106AM_V_P = $(am__v_P_@AM_V@)
     107am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
     108am__v_P_0 = false
     109am__v_P_1 = :
    55110AM_V_GEN = $(am__v_GEN_@AM_V@)
    56111am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
    57 am__v_GEN_0 = @echo "  GEN   " $@;
     112am__v_GEN_0 = @echo "  GEN     " $@;
     113am__v_GEN_1 =
    58114AM_V_at = $(am__v_at_@AM_V@)
    59115am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
    60116am__v_at_0 = @
     117am__v_at_1 =
    61118SOURCES =
    62119DIST_SOURCES =
    63 RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
    64         html-recursive info-recursive install-data-recursive \
    65         install-dvi-recursive install-exec-recursive \
    66         install-html-recursive install-info-recursive \
    67         install-pdf-recursive install-ps-recursive install-recursive \
    68         installcheck-recursive installdirs-recursive pdf-recursive \
    69         ps-recursive uninstall-recursive
     120RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
     121        ctags-recursive dvi-recursive html-recursive info-recursive \
     122        install-data-recursive install-dvi-recursive \
     123        install-exec-recursive install-html-recursive \
     124        install-info-recursive install-pdf-recursive \
     125        install-ps-recursive install-recursive installcheck-recursive \
     126        installdirs-recursive pdf-recursive ps-recursive \
     127        tags-recursive uninstall-recursive
     128am__can_run_installinfo = \
     129  case $$AM_UPDATE_INFO_DIR in \
     130    n|no|NO) false;; \
     131    *) (install-info --version) >/dev/null 2>&1;; \
     132  esac
    70133RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
    71134  distclean-recursive maintainer-clean-recursive
    72 AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
    73         $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
    74         distdir dist dist-all distcheck
     135am__recursive_targets = \
     136  $(RECURSIVE_TARGETS) \
     137  $(RECURSIVE_CLEAN_TARGETS) \
     138  $(am__extra_recursive_targets)
     139AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
     140        cscope distdir dist dist-all distcheck
     141am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
     142        $(LISP)config.h.in
     143# Read a list of newline-separated strings from the standard input,
     144# and print each of them once, without duplicates.  Input order is
     145# *not* preserved.
     146am__uniquify_input = $(AWK) '\
     147  BEGIN { nonempty = 0; } \
     148  { items[$$0] = 1; nonempty = 1; } \
     149  END { if (nonempty) { for (i in items) print i; }; } \
     150'
     151# Make sure the list of sources is unique.  This is necessary because,
     152# e.g., the same source file might be shared among _SOURCES variables
     153# for different programs/libraries.
     154am__define_uniq_tagged_files = \
     155  list='$(am__tagged_files)'; \
     156  unique=`for i in $$list; do \
     157    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
     158  done | $(am__uniquify_input)`
    75159ETAGS = etags
    76160CTAGS = ctags
     161CSCOPE = cscope
    77162DIST_SUBDIRS = $(SUBDIRS)
     163am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
     164        $(top_srcdir)/automake/compile \
     165        $(top_srcdir)/automake/config.guess \
     166        $(top_srcdir)/automake/config.sub \
     167        $(top_srcdir)/automake/install-sh \
     168        $(top_srcdir)/automake/missing INSTALL README automake/compile \
     169        automake/config.guess automake/config.sub automake/depcomp \
     170        automake/install-sh automake/missing automake/ylwrap
    78171DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
    79172distdir = $(PACKAGE)-$(VERSION)
     
    85178      || { sleep 5 && rm -rf "$(distdir)"; }; \
    86179  else :; fi
     180am__post_remove_distdir = $(am__remove_distdir)
    87181am__relativize = \
    88182  dir0=`pwd`; \
     
    112206DIST_ARCHIVES = $(distdir).tar.gz
    113207GZIP_ENV = --best
     208DIST_TARGETS = dist-gzip
    114209distuninstallcheck_listfiles = find . -type f -print
    115210am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
     
    227322program_transform_name = @program_transform_name@
    228323psdir = @psdir@
     324runstatedir = @runstatedir@
    229325sbindir = @sbindir@
    230326sharedstatedir = @sharedstatedir@
     
    258354        $(am__cd) $(top_srcdir) && \
    259355          $(AUTOMAKE) --foreign Makefile
    260 .PRECIOUS: Makefile
    261356Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
    262357        @case '$?' in \
     
    279374
    280375config.h: stamp-h1
    281         @if test ! -f $@; then rm -f stamp-h1; else :; fi
    282         @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
     376        @test -f $@ || rm -f stamp-h1
     377        @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
    283378
    284379stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
     
    294389
    295390# This directory's subdirectories are mostly independent; you can cd
    296 # into them and run `make' without going through this Makefile.
    297 # To change the values of `make' variables: instead of editing Makefiles,
    298 # (1) if the variable is set in `config.status', edit `config.status'
    299 #     (which will cause the Makefiles to be regenerated when you run `make');
    300 # (2) otherwise, pass the desired values on the `make' command line.
    301 $(RECURSIVE_TARGETS):
    302         @fail= failcom='exit 1'; \
    303         for f in x $$MAKEFLAGS; do \
    304           case $$f in \
    305             *=* | --[!k]*);; \
    306             *k*) failcom='fail=yes';; \
    307           esac; \
    308         done; \
     391# into them and run 'make' without going through this Makefile.
     392# To change the values of 'make' variables: instead of editing Makefiles,
     393# (1) if the variable is set in 'config.status', edit 'config.status'
     394#     (which will cause the Makefiles to be regenerated when you run 'make');
     395# (2) otherwise, pass the desired values on the 'make' command line.
     396$(am__recursive_targets):
     397        @fail=; \
     398        if $(am__make_keepgoing); then \
     399          failcom='fail=yes'; \
     400        else \
     401          failcom='exit 1'; \
     402        fi; \
    309403        dot_seen=no; \
    310404        target=`echo $@ | sed s/-recursive//`; \
    311         list='$(SUBDIRS)'; for subdir in $$list; do \
     405        case "$@" in \
     406          distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
     407          *) list='$(SUBDIRS)' ;; \
     408        esac; \
     409        for subdir in $$list; do \
    312410          echo "Making $$target in $$subdir"; \
    313411          if test "$$subdir" = "."; then \
     
    324422        fi; test -z "$$fail"
    325423
    326 $(RECURSIVE_CLEAN_TARGETS):
    327         @fail= failcom='exit 1'; \
    328         for f in x $$MAKEFLAGS; do \
    329           case $$f in \
    330             *=* | --[!k]*);; \
    331             *k*) failcom='fail=yes';; \
    332           esac; \
    333         done; \
    334         dot_seen=no; \
    335         case "$@" in \
    336           distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
    337           *) list='$(SUBDIRS)' ;; \
    338         esac; \
    339         rev=''; for subdir in $$list; do \
    340           if test "$$subdir" = "."; then :; else \
    341             rev="$$subdir $$rev"; \
    342           fi; \
    343         done; \
    344         rev="$$rev ."; \
    345         target=`echo $@ | sed s/-recursive//`; \
    346         for subdir in $$rev; do \
    347           echo "Making $$target in $$subdir"; \
    348           if test "$$subdir" = "."; then \
    349             local_target="$$target-am"; \
    350           else \
    351             local_target="$$target"; \
    352           fi; \
    353           ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
    354           || eval $$failcom; \
    355         done && test -z "$$fail"
    356 tags-recursive:
    357         list='$(SUBDIRS)'; for subdir in $$list; do \
    358           test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
    359         done
    360 ctags-recursive:
    361         list='$(SUBDIRS)'; for subdir in $$list; do \
    362           test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
    363         done
    364 
    365 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
    366         list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
    367         unique=`for i in $$list; do \
    368             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    369           done | \
    370           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    371               END { if (nonempty) { for (i in files) print i; }; }'`; \
    372         mkid -fID $$unique
    373 tags: TAGS
    374 
    375 TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
    376                 $(TAGS_FILES) $(LISP)
     424ID: $(am__tagged_files)
     425        $(am__define_uniq_tagged_files); mkid -fID $$unique
     426tags: tags-recursive
     427TAGS: tags
     428
     429tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
    377430        set x; \
    378431        here=`pwd`; \
     
    390443          fi; \
    391444        done; \
    392         list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
    393         unique=`for i in $$list; do \
    394             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    395           done | \
    396           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    397               END { if (nonempty) { for (i in files) print i; }; }'`; \
     445        $(am__define_uniq_tagged_files); \
    398446        shift; \
    399447        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
     
    407455          fi; \
    408456        fi
    409 ctags: CTAGS
    410 CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
    411                 $(TAGS_FILES) $(LISP)
    412         list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
    413         unique=`for i in $$list; do \
    414             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    415           done | \
    416           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    417               END { if (nonempty) { for (i in files) print i; }; }'`; \
     457ctags: ctags-recursive
     458
     459CTAGS: ctags
     460ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
     461        $(am__define_uniq_tagged_files); \
    418462        test -z "$(CTAGS_ARGS)$$unique" \
    419463          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
     
    424468          && $(am__cd) $(top_srcdir) \
    425469          && gtags -i $(GTAGS_ARGS) "$$here"
     470cscope: cscope.files
     471        test ! -s cscope.files \
     472          || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
     473clean-cscope:
     474        -rm -f cscope.files
     475cscope.files: clean-cscope cscopelist
     476cscopelist: cscopelist-recursive
     477
     478cscopelist-am: $(am__tagged_files)
     479        list='$(am__tagged_files)'; \
     480        case "$(srcdir)" in \
     481          [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
     482          *) sdir=$(subdir)/$(srcdir) ;; \
     483        esac; \
     484        for i in $$list; do \
     485          if test -f "$$i"; then \
     486            echo "$(subdir)/$$i"; \
     487          else \
     488            echo "$$sdir/$$i"; \
     489          fi; \
     490        done >> $(top_builddir)/cscope.files
    426491
    427492distclean-tags:
    428493        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
     494        -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
    429495
    430496distdir: $(DISTFILES)
     
    462528        @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
    463529          if test "$$subdir" = .; then :; else \
    464             test -d "$(distdir)/$$subdir" \
    465             || $(MKDIR_P) "$(distdir)/$$subdir" \
    466             || exit 1; \
    467           fi; \
    468         done
    469         @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
    470           if test "$$subdir" = .; then :; else \
     530            $(am__make_dryrun) \
     531              || test -d "$(distdir)/$$subdir" \
     532              || $(MKDIR_P) "$(distdir)/$$subdir" \
     533              || exit 1; \
    471534            dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
    472535            $(am__relativize); \
     
    497560dist-gzip: distdir
    498561        tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
    499         $(am__remove_distdir)
     562        $(am__post_remove_distdir)
    500563
    501564dist-bzip2: distdir
    502565        tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
    503         $(am__remove_distdir)
     566        $(am__post_remove_distdir)
    504567
    505568dist-lzip: distdir
    506569        tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
    507         $(am__remove_distdir)
    508 
    509 dist-lzma: distdir
    510         tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
    511         $(am__remove_distdir)
     570        $(am__post_remove_distdir)
    512571
    513572dist-xz: distdir
    514573        tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
    515         $(am__remove_distdir)
     574        $(am__post_remove_distdir)
    516575
    517576dist-tarZ: distdir
     577        @echo WARNING: "Support for distribution archives compressed with" \
     578                       "legacy program 'compress' is deprecated." >&2
     579        @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
    518580        tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
    519         $(am__remove_distdir)
     581        $(am__post_remove_distdir)
    520582
    521583dist-shar: distdir
     584        @echo WARNING: "Support for shar distribution archives is" \
     585                       "deprecated." >&2
     586        @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
    522587        shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
    523         $(am__remove_distdir)
     588        $(am__post_remove_distdir)
    524589
    525590dist-zip: distdir
    526591        -rm -f $(distdir).zip
    527592        zip -rq $(distdir).zip $(distdir)
    528         $(am__remove_distdir)
    529 
    530 dist dist-all: distdir
    531         tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
    532         $(am__remove_distdir)
     593        $(am__post_remove_distdir)
     594
     595dist dist-all:
     596        $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
     597        $(am__post_remove_distdir)
    533598
    534599# This target untars the dist file and tries a VPATH configuration.  Then
     
    541606        *.tar.bz2*) \
    542607          bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
    543         *.tar.lzma*) \
    544           lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
    545608        *.tar.lz*) \
    546609          lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
     
    554617          unzip $(distdir).zip ;;\
    555618        esac
    556         chmod -R a-w $(distdir); chmod a+w $(distdir)
    557         mkdir $(distdir)/_build
    558         mkdir $(distdir)/_inst
     619        chmod -R a-w $(distdir)
     620        chmod u+w $(distdir)
     621        mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
    559622        chmod a-w $(distdir)
    560623        test -d $(distdir)/_build || exit 0; \
     
    562625          && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
    563626          && am__cwd=`pwd` \
    564           && $(am__cd) $(distdir)/_build \
    565           && ../configure --srcdir=.. --prefix="$$dc_install_base" \
     627          && $(am__cd) $(distdir)/_build/sub \
     628          && ../../configure \
    566629            $(AM_DISTCHECK_CONFIGURE_FLAGS) \
    567630            $(DISTCHECK_CONFIGURE_FLAGS) \
     631            --srcdir=../.. --prefix="$$dc_install_base" \
    568632          && $(MAKE) $(AM_MAKEFLAGS) \
    569633          && $(MAKE) $(AM_MAKEFLAGS) dvi \
     
    588652          && cd "$$am__cwd" \
    589653          || exit 1
    590         $(am__remove_distdir)
     654        $(am__post_remove_distdir)
    591655        @(echo "$(distdir) archives ready for distribution: "; \
    592656          list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
     
    723787uninstall-am:
    724788
    725 .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
    726         ctags-recursive install-am install-strip tags-recursive
    727 
    728 .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
    729         all all-am am--refresh check check-am clean clean-generic \
    730         ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
    731         dist-lzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
     789.MAKE: $(am__recursive_targets) all install-am install-strip
     790
     791.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
     792        am--refresh check check-am clean clean-cscope clean-generic \
     793        cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
     794        dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \
    732795        distcheck distclean distclean-generic distclean-hdr \
    733796        distclean-tags distcleancheck distdir distuninstallcheck dvi \
     
    739802        installcheck installcheck-am installdirs installdirs-am \
    740803        maintainer-clean maintainer-clean-generic mostlyclean \
    741         mostlyclean-generic pdf pdf-am ps ps-am tags tags-recursive \
    742         uninstall uninstall-am
     804        mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
     805        uninstall-am
     806
     807.PRECIOUS: Makefile
    743808
    744809
  • TabularUnified aclocal.m4

    rb1e63ac5 r208e5be  
    1 # generated automatically by aclocal 1.11.3 -*- Autoconf -*-
    2 
    3 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
    4 # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
    5 # Inc.
     1# generated automatically by aclocal 1.15 -*- Autoconf -*-
     2
     3# Copyright (C) 1996-2014 Free Software Foundation, Inc.
     4
    65# This file is free software; the Free Software Foundation
    76# gives unlimited permission to copy and/or distribute it,
     
    1312# PARTICULAR PURPOSE.
    1413
     14m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
    1515m4_ifndef([AC_AUTOCONF_VERSION],
    1616  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
    17 m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
    18 [m4_warning([this file was generated for autoconf 2.68.
     17m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
     18[m4_warning([this file was generated for autoconf 2.69.
    1919You have another version of autoconf.  It may work, but is not guaranteed to.
    2020If you have problems, you may need to regenerate the build system entirely.
    21 To do so, use the procedure documented by the package, typically `autoreconf'.])])
    22 
    23 # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software
    24 # Foundation, Inc.
    25 #
    26 # This file is free software; the Free Software Foundation
    27 # gives unlimited permission to copy and/or distribute it,
    28 # with or without modifications, as long as this notice is preserved.
    29 
    30 # serial 1
     21To do so, use the procedure documented by the package, typically 'autoreconf'.])])
     22
     23# Copyright (C) 2002-2014 Free Software Foundation, Inc.
     24#
     25# This file is free software; the Free Software Foundation
     26# gives unlimited permission to copy and/or distribute it,
     27# with or without modifications, as long as this notice is preserved.
    3128
    3229# AM_AUTOMAKE_VERSION(VERSION)
     
    3633# (This private macro should not be called outside this file.)
    3734AC_DEFUN([AM_AUTOMAKE_VERSION],
    38 [am__api_version='1.11'
     35[am__api_version='1.15'
    3936dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
    4037dnl require some minimum version.  Point them to the right macro.
    41 m4_if([$1], [1.11.3], [],
     38m4_if([$1], [1.15], [],
    4239      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
    4340])
     
    5552# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
    5653AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
    57 [AM_AUTOMAKE_VERSION([1.11.3])dnl
     54[AM_AUTOMAKE_VERSION([1.15])dnl
    5855m4_ifndef([AC_AUTOCONF_VERSION],
    5956  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
     
    6259# Figure out how to run the assembler.                      -*- Autoconf -*-
    6360
    64 # Copyright (C) 2001, 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
    65 #
    66 # This file is free software; the Free Software Foundation
    67 # gives unlimited permission to copy and/or distribute it,
    68 # with or without modifications, as long as this notice is preserved.
    69 
    70 # serial 5
     61# Copyright (C) 2001-2014 Free Software Foundation, Inc.
     62#
     63# This file is free software; the Free Software Foundation
     64# gives unlimited permission to copy and/or distribute it,
     65# with or without modifications, as long as this notice is preserved.
    7166
    7267# AM_PROG_AS
     
    8479# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
    8580
    86 # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
    87 #
    88 # This file is free software; the Free Software Foundation
    89 # gives unlimited permission to copy and/or distribute it,
    90 # with or without modifications, as long as this notice is preserved.
    91 
    92 # serial 1
     81# Copyright (C) 2001-2014 Free Software Foundation, Inc.
     82#
     83# This file is free software; the Free Software Foundation
     84# gives unlimited permission to copy and/or distribute it,
     85# with or without modifications, as long as this notice is preserved.
    9386
    9487# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
    95 # $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
    96 # `$srcdir', `$srcdir/..', or `$srcdir/../..'.
     88# $ac_aux_dir to '$srcdir/foo'.  In other projects, it is set to
     89# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
    9790#
    9891# Of course, Automake must honor this variable whenever it calls a
     
    113106# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
    114107# are both prefixed by $srcdir.  In an in-source build this is usually
    115 # harmless because $srcdir is `.', but things will broke when you
     108# harmless because $srcdir is '.', but things will broke when you
    116109# start a VPATH build or use an absolute $srcdir.
    117110#
     
    131124
    132125AC_DEFUN([AM_AUX_DIR_EXPAND],
    133 [dnl Rely on autoconf to set up CDPATH properly.
    134 AC_PREREQ([2.50])dnl
    135 # expand $ac_aux_dir to an absolute path
    136 am_aux_dir=`cd $ac_aux_dir && pwd`
     126[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
     127# Expand $ac_aux_dir to an absolute path.
     128am_aux_dir=`cd "$ac_aux_dir" && pwd`
    137129])
    138130
    139131# AM_COND_IF                                            -*- Autoconf -*-
    140132
    141 # Copyright (C) 2008, 2010 Free Software Foundation, Inc.
    142 #
    143 # This file is free software; the Free Software Foundation
    144 # gives unlimited permission to copy and/or distribute it,
    145 # with or without modifications, as long as this notice is preserved.
    146 
    147 # serial 3
     133# Copyright (C) 2008-2014 Free Software Foundation, Inc.
     134#
     135# This file is free software; the Free Software Foundation
     136# gives unlimited permission to copy and/or distribute it,
     137# with or without modifications, as long as this notice is preserved.
    148138
    149139# _AM_COND_IF
     
    155145m4_define([_AM_COND_ELSE])
    156146m4_define([_AM_COND_ENDIF])
    157 
    158147
    159148# AM_COND_IF(COND, [IF-TRUE], [IF-FALSE])
     
    179168# AM_CONDITIONAL                                            -*- Autoconf -*-
    180169
    181 # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
    182 # Free Software Foundation, Inc.
    183 #
    184 # This file is free software; the Free Software Foundation
    185 # gives unlimited permission to copy and/or distribute it,
    186 # with or without modifications, as long as this notice is preserved.
    187 
    188 # serial 9
     170# Copyright (C) 1997-2014 Free Software Foundation, Inc.
     171#
     172# This file is free software; the Free Software Foundation
     173# gives unlimited permission to copy and/or distribute it,
     174# with or without modifications, as long as this notice is preserved.
    189175
    190176# AM_CONDITIONAL(NAME, SHELL-CONDITION)
     
    192178# Define a conditional.
    193179AC_DEFUN([AM_CONDITIONAL],
    194 [AC_PREREQ(2.52)dnl
    195  ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
    196         [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
     180[AC_PREREQ([2.52])dnl
     181 m4_if([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
     182       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
    197183AC_SUBST([$1_TRUE])dnl
    198184AC_SUBST([$1_FALSE])dnl
     
    213199fi])])
    214200
    215 # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009,
    216 # 2010, 2011 Free Software Foundation, Inc.
    217 #
    218 # This file is free software; the Free Software Foundation
    219 # gives unlimited permission to copy and/or distribute it,
    220 # with or without modifications, as long as this notice is preserved.
    221 
    222 # serial 12
    223 
    224 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
     201# Copyright (C) 1999-2014 Free Software Foundation, Inc.
     202#
     203# This file is free software; the Free Software Foundation
     204# gives unlimited permission to copy and/or distribute it,
     205# with or without modifications, as long as this notice is preserved.
     206
     207
     208# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
    225209# written in clear, in which case automake, when reading aclocal.m4,
    226210# will think it sees a *use*, and therefore will trigger all it's
     
    232216# ----------------------
    233217# See how the compiler implements dependency checking.
    234 # NAME is "CC", "CXX", "GCJ", or "OBJC".
     218# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
    235219# We try a few techniques and use that to set a single cache variable.
    236220#
     
    245229AC_REQUIRE([AM_DEP_TRACK])dnl
    246230
    247 ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
    248        [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
    249        [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
    250        [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
    251        [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
    252                    [depcc="$$1"   am_compiler_list=])
     231m4_if([$1], [CC],   [depcc="$CC"   am_compiler_list=],
     232      [$1], [CXX],  [depcc="$CXX"  am_compiler_list=],
     233      [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
     234      [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
     235      [$1], [UPC],  [depcc="$UPC"  am_compiler_list=],
     236      [$1], [GCJ],  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
     237                    [depcc="$$1"   am_compiler_list=])
    253238
    254239AC_CACHE_CHECK([dependency style of $depcc],
     
    258243  # making bogus files that we don't know about and never remove.  For
    259244  # instance it was reported that on HP-UX the gcc test will end up
    260   # making a dummy file named `D' -- because `-MD' means `put the output
    261   # in D'.
     245  # making a dummy file named 'D' -- because '-MD' means "put the output
     246  # in D".
    262247  rm -rf conftest.dir
    263248  mkdir conftest.dir
     
    299284    for i in 1 2 3 4 5 6; do
    300285      echo '#include "conftst'$i'.h"' >> sub/conftest.c
    301       # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
    302       # Solaris 8's {/usr,}/bin/sh.
    303       touch sub/conftst$i.h
     286      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
     287      # Solaris 10 /bin/sh.
     288      echo '/* dummy */' > sub/conftst$i.h
    304289    done
    305290    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
    306291
    307     # We check with `-c' and `-o' for the sake of the "dashmstdout"
     292    # We check with '-c' and '-o' for the sake of the "dashmstdout"
    308293    # mode.  It turns out that the SunPro C++ compiler does not properly
    309     # handle `-M -o', and we need to detect this.  Also, some Intel
    310     # versions had trouble with output in subdirs
     294    # handle '-M -o', and we need to detect this.  Also, some Intel
     295    # versions had trouble with output in subdirs.
    311296    am__obj=sub/conftest.${OBJEXT-o}
    312297    am__minus_obj="-o $am__obj"
     
    317302      ;;
    318303    nosideeffect)
    319       # after this tag, mechanisms are not by side-effect, so they'll
    320       # only be used when explicitly requested
     304      # After this tag, mechanisms are not by side-effect, so they'll
     305      # only be used when explicitly requested.
    321306      if test "x$enable_dependency_tracking" = xyes; then
    322307        continue
     
    326311      ;;
    327312    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
    328       # This compiler won't grok `-c -o', but also, the minuso test has
     313      # This compiler won't grok '-c -o', but also, the minuso test has
    329314      # not run yet.  These depmodes are late enough in the game, and
    330315      # so weak that their functioning should not be impacted.
     
    374359# -------------
    375360# Choose a directory name for dependency files.
    376 # This macro is AC_REQUIREd in _AM_DEPENDENCIES
     361# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
    377362AC_DEFUN([AM_SET_DEPDIR],
    378363[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
     
    384369# ------------
    385370AC_DEFUN([AM_DEP_TRACK],
    386 [AC_ARG_ENABLE(dependency-tracking,
    387 [  --disable-dependency-tracking  speeds up one-time build
    388   --enable-dependency-tracking   do not reject slow dependency extractors])
     371[AC_ARG_ENABLE([dependency-tracking], [dnl
     372AS_HELP_STRING(
     373  [--enable-dependency-tracking],
     374  [do not reject slow dependency extractors])
     375AS_HELP_STRING(
     376  [--disable-dependency-tracking],
     377  [speeds up one-time build])])
    389378if test "x$enable_dependency_tracking" != xno; then
    390379  am_depcomp="$ac_aux_dir/depcomp"
     
    401390# Generate code to set up dependency tracking.              -*- Autoconf -*-
    402391
    403 # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
    404 # Free Software Foundation, Inc.
    405 #
    406 # This file is free software; the Free Software Foundation
    407 # gives unlimited permission to copy and/or distribute it,
    408 # with or without modifications, as long as this notice is preserved.
    409 
    410 #serial 5
     392# Copyright (C) 1999-2014 Free Software Foundation, Inc.
     393#
     394# This file is free software; the Free Software Foundation
     395# gives unlimited permission to copy and/or distribute it,
     396# with or without modifications, as long as this notice is preserved.
     397
    411398
    412399# _AM_OUTPUT_DEPENDENCY_COMMANDS
     
    414401AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
    415402[{
    416   # Autoconf 2.62 quotes --file arguments for eval, but not when files
     403  # Older Autoconf quotes --file arguments for eval, but not when files
    417404  # are listed without --file.  Let's play safe and only enable the eval
    418405  # if we detect the quoting.
     
    427414    mf=`echo "$mf" | sed -e 's/:.*$//'`
    428415    # Check whether this is an Automake generated Makefile or not.
    429     # We used to match only the files named `Makefile.in', but
     416    # We used to match only the files named 'Makefile.in', but
    430417    # some people rename them; so instead we look at the file content.
    431418    # Grep'ing the first line is not enough: some people post-process
     
    439426    fi
    440427    # Extract the definition of DEPDIR, am__include, and am__quote
    441     # from the Makefile without running `make'.
     428    # from the Makefile without running 'make'.
    442429    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
    443430    test -z "$DEPDIR" && continue
    444431    am__include=`sed -n 's/^am__include = //p' < "$mf"`
    445     test -z "am__include" && continue
     432    test -z "$am__include" && continue
    446433    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
    447     # When using ansi2knr, U may be empty or an underscore; expand it
    448     U=`sed -n 's/^U = //p' < "$mf"`
    449434    # Find all dependency output files, they are included files with
    450435    # $(DEPDIR) in their names.  We invoke sed twice because it is the
     
    453438    for file in `sed -n "
    454439      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
    455          sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
     440         sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
    456441      # Make sure the directory exists.
    457442      test -f "$dirpart/$file" && continue
     
    471456#
    472457# This code is only required when automatic dependency tracking
    473 # is enabled.  FIXME.  This creates each `.P' file that we will
     458# is enabled.  FIXME.  This creates each '.P' file that we will
    474459# need in order to bootstrap the dependency handling code.
    475460AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
     
    481466# Do all the work for Automake.                             -*- Autoconf -*-
    482467
    483 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
    484 # 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
    485 #
    486 # This file is free software; the Free Software Foundation
    487 # gives unlimited permission to copy and/or distribute it,
    488 # with or without modifications, as long as this notice is preserved.
    489 
    490 # serial 16
     468# Copyright (C) 1996-2014 Free Software Foundation, Inc.
     469#
     470# This file is free software; the Free Software Foundation
     471# gives unlimited permission to copy and/or distribute it,
     472# with or without modifications, as long as this notice is preserved.
    491473
    492474# This macro actually does too much.  Some checks are only needed if
    493475# your package does certain things.  But this isn't really a big deal.
     476
     477dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
     478m4_define([AC_PROG_CC],
     479m4_defn([AC_PROG_CC])
     480[_AM_PROG_CC_C_O
     481])
    494482
    495483# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
     
    505493# release and drop the old call support.
    506494AC_DEFUN([AM_INIT_AUTOMAKE],
    507 [AC_PREREQ([2.62])dnl
     495[AC_PREREQ([2.65])dnl
    508496dnl Autoconf wants to disallow AM_ names.  We explicitly allow
    509497dnl the ones we care about.
     
    534522dnl Distinguish between old-style and new-style calls.
    535523m4_ifval([$2],
    536 [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
     524[AC_DIAGNOSE([obsolete],
     525             [$0: two- and three-arguments forms are deprecated.])
     526m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
    537527 AC_SUBST([PACKAGE], [$1])dnl
    538528 AC_SUBST([VERSION], [$2])],
    539529[_AM_SET_OPTIONS([$1])dnl
    540530dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
    541 m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
     531m4_if(
     532  m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
     533  [ok:ok],,
    542534  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
    543535 AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
     
    545537
    546538_AM_IF_OPTION([no-define],,
    547 [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
    548  AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
     539[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
     540 AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
    549541
    550542# Some tools Automake needs.
    551543AC_REQUIRE([AM_SANITY_CHECK])dnl
    552544AC_REQUIRE([AC_ARG_PROGRAM])dnl
    553 AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
    554 AM_MISSING_PROG(AUTOCONF, autoconf)
    555 AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
    556 AM_MISSING_PROG(AUTOHEADER, autoheader)
    557 AM_MISSING_PROG(MAKEINFO, makeinfo)
     545AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
     546AM_MISSING_PROG([AUTOCONF], [autoconf])
     547AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
     548AM_MISSING_PROG([AUTOHEADER], [autoheader])
     549AM_MISSING_PROG([MAKEINFO], [makeinfo])
    558550AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
    559551AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
    560 AC_REQUIRE([AM_PROG_MKDIR_P])dnl
    561 # We need awk for the "check" target.  The system "awk" is bad on
    562 # some platforms.
     552AC_REQUIRE([AC_PROG_MKDIR_P])dnl
     553# For better backward compatibility.  To be removed once Automake 1.9.x
     554# dies out for good.  For more background, see:
     555# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
     556# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
     557AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
     558# We need awk for the "check" target (and possibly the TAP driver).  The
     559# system "awk" is bad on some platforms.
    563560AC_REQUIRE([AC_PROG_AWK])dnl
    564561AC_REQUIRE([AC_PROG_MAKE_SET])dnl
     
    569566_AM_IF_OPTION([no-dependencies],,
    570567[AC_PROVIDE_IFELSE([AC_PROG_CC],
    571                   [_AM_DEPENDENCIES(CC)],
    572                   [define([AC_PROG_CC],
    573                           defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
     568                  [_AM_DEPENDENCIES([CC])],
     569                  [m4_define([AC_PROG_CC],
     570                             m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
    574571AC_PROVIDE_IFELSE([AC_PROG_CXX],
    575                   [_AM_DEPENDENCIES(CXX)],
    576                   [define([AC_PROG_CXX],
    577                           defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
     572                  [_AM_DEPENDENCIES([CXX])],
     573                  [m4_define([AC_PROG_CXX],
     574                             m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
    578575AC_PROVIDE_IFELSE([AC_PROG_OBJC],
    579                   [_AM_DEPENDENCIES(OBJC)],
    580                   [define([AC_PROG_OBJC],
    581                           defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
    582 ])
    583 _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
    584 dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
    585 dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
    586 dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
     576                  [_AM_DEPENDENCIES([OBJC])],
     577                  [m4_define([AC_PROG_OBJC],
     578                             m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
     579AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
     580                  [_AM_DEPENDENCIES([OBJCXX])],
     581                  [m4_define([AC_PROG_OBJCXX],
     582                             m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
     583])
     584AC_REQUIRE([AM_SILENT_RULES])dnl
     585dnl The testsuite driver may need to know about EXEEXT, so add the
     586dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This
     587dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
    587588AC_CONFIG_COMMANDS_PRE(dnl
    588589[m4_provide_if([_AM_COMPILER_EXEEXT],
    589590  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
    590 ])
    591 
    592 dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
     591
     592# POSIX will say in a future version that running "rm -f" with no argument
     593# is OK; and we want to be able to make that assumption in our Makefile
     594# recipes.  So use an aggressive probe to check that the usage we want is
     595# actually supported "in the wild" to an acceptable degree.
     596# See automake bug#10828.
     597# To make any issue more visible, cause the running configure to be aborted
     598# by default if the 'rm' program in use doesn't match our expectations; the
     599# user can still override this though.
     600if rm -f && rm -fr && rm -rf; then : OK; else
     601  cat >&2 <<'END'
     602Oops!
     603
     604Your 'rm' program seems unable to run without file operands specified
     605on the command line, even when the '-f' option is present.  This is contrary
     606to the behaviour of most rm programs out there, and not conforming with
     607the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
     608
     609Please tell bug-automake@gnu.org about your system, including the value
     610of your $PATH and any error possibly output before this message.  This
     611can help us improve future automake versions.
     612
     613END
     614  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
     615    echo 'Configuration will proceed anyway, since you have set the' >&2
     616    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
     617    echo >&2
     618  else
     619    cat >&2 <<'END'
     620Aborting the configuration process, to ensure you take notice of the issue.
     621
     622You can download and install GNU coreutils to get an 'rm' implementation
     623that behaves properly: <http://www.gnu.org/software/coreutils/>.
     624
     625If you want to complete the configuration process using your problematic
     626'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
     627to "yes", and re-run configure.
     628
     629END
     630    AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
     631  fi
     632fi
     633dnl The trailing newline in this macro's definition is deliberate, for
     634dnl backward compatibility and to allow trailing 'dnl'-style comments
     635dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
     636])
     637
     638dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
    593639dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
    594640dnl mangled by Autoconf and run in a shell conditional statement.
    595641m4_define([_AC_COMPILER_EXEEXT],
    596642m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
    597 
    598643
    599644# When config.status generates a header, we must update the stamp-h file.
     
    618663echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
    619664
    620 # Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation,
    621 # Inc.
    622 #
    623 # This file is free software; the Free Software Foundation
    624 # gives unlimited permission to copy and/or distribute it,
    625 # with or without modifications, as long as this notice is preserved.
    626 
    627 # serial 1
     665# Copyright (C) 2001-2014 Free Software Foundation, Inc.
     666#
     667# This file is free software; the Free Software Foundation
     668# gives unlimited permission to copy and/or distribute it,
     669# with or without modifications, as long as this notice is preserved.
    628670
    629671# AM_PROG_INSTALL_SH
     
    632674AC_DEFUN([AM_PROG_INSTALL_SH],
    633675[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
    634 if test x"${install_sh}" != xset; then
     676if test x"${install_sh+set}" != xset; then
    635677  case $am_aux_dir in
    636678  *\ * | *\     *)
     
    640682  esac
    641683fi
    642 AC_SUBST(install_sh)])
    643 
    644 # Copyright (C) 2003, 2005  Free Software Foundation, Inc.
    645 #
    646 # This file is free software; the Free Software Foundation
    647 # gives unlimited permission to copy and/or distribute it,
    648 # with or without modifications, as long as this notice is preserved.
    649 
    650 # serial 2
     684AC_SUBST([install_sh])])
     685
     686# Copyright (C) 2003-2014 Free Software Foundation, Inc.
     687#
     688# This file is free software; the Free Software Foundation
     689# gives unlimited permission to copy and/or distribute it,
     690# with or without modifications, as long as this notice is preserved.
    651691
    652692# Check whether the underlying file-system supports filenames
     
    666706# From Jim Meyering
    667707
    668 # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008,
    669 # 2011 Free Software Foundation, Inc.
    670 #
    671 # This file is free software; the Free Software Foundation
    672 # gives unlimited permission to copy and/or distribute it,
    673 # with or without modifications, as long as this notice is preserved.
    674 
    675 # serial 5
     708# Copyright (C) 1996-2014 Free Software Foundation, Inc.
     709#
     710# This file is free software; the Free Software Foundation
     711# gives unlimited permission to copy and/or distribute it,
     712# with or without modifications, as long as this notice is preserved.
    676713
    677714# AM_MAINTAINER_MODE([DEFAULT-MODE])
    678715# ----------------------------------
    679716# Control maintainer-specific portions of Makefiles.
    680 # Default is to disable them, unless `enable' is passed literally.
    681 # For symmetry, `disable' may be passed as well.  Anyway, the user
     717# Default is to disable them, unless 'enable' is passed literally.
     718# For symmetry, 'disable' may be passed as well.  Anyway, the user
    682719# can override the default with the --enable/--disable switch.
    683720AC_DEFUN([AM_MAINTAINER_MODE],
     
    690727  dnl maintainer-mode's default is 'disable' unless 'enable' is passed
    691728  AC_ARG_ENABLE([maintainer-mode],
    692 [  --][am_maintainer_other][-maintainer-mode  am_maintainer_other make rules and dependencies not useful
    693                           (and sometimes confusing) to the casual installer],
    694       [USE_MAINTAINER_MODE=$enableval],
    695       [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
     729    [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],
     730      am_maintainer_other[ make rules and dependencies not useful
     731      (and sometimes confusing) to the casual installer])],
     732    [USE_MAINTAINER_MODE=$enableval],
     733    [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
    696734  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
    697735  AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
     
    701739)
    702740
    703 AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
    704 
    705741# Check to see how 'make' treats includes.                  -*- Autoconf -*-
    706742
    707 # Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
    708 #
    709 # This file is free software; the Free Software Foundation
    710 # gives unlimited permission to copy and/or distribute it,
    711 # with or without modifications, as long as this notice is preserved.
    712 
    713 # serial 4
     743# Copyright (C) 2001-2014 Free Software Foundation, Inc.
     744#
     745# This file is free software; the Free Software Foundation
     746# gives unlimited permission to copy and/or distribute it,
     747# with or without modifications, as long as this notice is preserved.
    714748
    715749# AM_MAKE_INCLUDE()
     
    730764# First try GNU make style include.
    731765echo "include confinc" > confmf
    732 # Ignore all kinds of additional output from `make'.
     766# Ignore all kinds of additional output from 'make'.
    733767case `$am_make -s -f confmf 2> /dev/null` in #(
    734768*the\ am__doit\ target*)
     
    755789])
    756790
    757 # Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008
    758 # Free Software Foundation, Inc.
    759 #
    760 # This file is free software; the Free Software Foundation
    761 # gives unlimited permission to copy and/or distribute it,
    762 # with or without modifications, as long as this notice is preserved.
    763 
    764 # serial 6
    765 
    766 # AM_PROG_CC_C_O
    767 # --------------
    768 # Like AC_PROG_CC_C_O, but changed for automake.
    769 AC_DEFUN([AM_PROG_CC_C_O],
    770 [AC_REQUIRE([AC_PROG_CC_C_O])dnl
    771 AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
    772 AC_REQUIRE_AUX_FILE([compile])dnl
    773 # FIXME: we rely on the cache variable name because
    774 # there is no other way.
    775 set dummy $CC
    776 am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
    777 eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
    778 if test "$am_t" != yes; then
    779    # Losing compiler, so override with the script.
    780    # FIXME: It is wrong to rewrite CC.
    781    # But if we don't then we get into trouble of one sort or another.
    782    # A longer-term fix would be to have automake use am__CC in this case,
    783    # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
    784    CC="$am_aux_dir/compile $CC"
    785 fi
    786 dnl Make sure AC_PROG_CC is never called again, or it will override our
    787 dnl setting of CC.
    788 m4_define([AC_PROG_CC],
    789           [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
    790 ])
    791 
    792791# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
    793792
    794 # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
    795 # Free Software Foundation, Inc.
    796 #
    797 # This file is free software; the Free Software Foundation
    798 # gives unlimited permission to copy and/or distribute it,
    799 # with or without modifications, as long as this notice is preserved.
    800 
    801 # serial 6
     793# Copyright (C) 1997-2014 Free Software Foundation, Inc.
     794#
     795# This file is free software; the Free Software Foundation
     796# gives unlimited permission to copy and/or distribute it,
     797# with or without modifications, as long as this notice is preserved.
    802798
    803799# AM_MISSING_PROG(NAME, PROGRAM)
     
    808804AC_SUBST($1)])
    809805
    810 
    811806# AM_MISSING_HAS_RUN
    812807# ------------------
    813 # Define MISSING if not defined so far and test if it supports --run.
    814 # If it does, set am_missing_run to use it, otherwise, to nothing.
     808# Define MISSING if not defined so far and test if it is modern enough.
     809# If it is, set am_missing_run to use it, otherwise, to nothing.
    815810AC_DEFUN([AM_MISSING_HAS_RUN],
    816811[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
     
    825820fi
    826821# Use eval to expand $SHELL
    827 if eval "$MISSING --run true"; then
    828   am_missing_run="$MISSING --run "
     822if eval "$MISSING --is-lightweight"; then
     823  am_missing_run="$MISSING "
    829824else
    830825  am_missing_run=
    831   AC_MSG_WARN([`missing' script is too old or missing])
    832 fi
    833 ])
    834 
    835 # Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation,
    836 # Inc.
    837 #
    838 # This file is free software; the Free Software Foundation
    839 # gives unlimited permission to copy and/or distribute it,
    840 # with or without modifications, as long as this notice is preserved.
    841 
    842 # serial 1
    843 
    844 # AM_PROG_MKDIR_P
    845 # ---------------
    846 # Check for `mkdir -p'.
    847 AC_DEFUN([AM_PROG_MKDIR_P],
    848 [AC_PREREQ([2.60])dnl
    849 AC_REQUIRE([AC_PROG_MKDIR_P])dnl
    850 dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
    851 dnl while keeping a definition of mkdir_p for backward compatibility.
    852 dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
    853 dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
    854 dnl Makefile.ins that do not define MKDIR_P, so we do our own
    855 dnl adjustment using top_builddir (which is defined more often than
    856 dnl MKDIR_P).
    857 AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
    858 case $mkdir_p in
    859   [[\\/$]]* | ?:[[\\/]]*) ;;
    860   */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
    861 esac
     826  AC_MSG_WARN(['missing' script is too old or missing])
     827fi
    862828])
    863829
    864830# Helper functions for option handling.                     -*- Autoconf -*-
    865831
    866 # Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software
    867 # Foundation, Inc.
    868 #
    869 # This file is free software; the Free Software Foundation
    870 # gives unlimited permission to copy and/or distribute it,
    871 # with or without modifications, as long as this notice is preserved.
    872 
    873 # serial 5
     832# Copyright (C) 2001-2014 Free Software Foundation, Inc.
     833#
     834# This file is free software; the Free Software Foundation
     835# gives unlimited permission to copy and/or distribute it,
     836# with or without modifications, as long as this notice is preserved.
    874837
    875838# _AM_MANGLE_OPTION(NAME)
     
    882845# Set option NAME.  Presently that only means defining a flag for this option.
    883846AC_DEFUN([_AM_SET_OPTION],
    884 [m4_define(_AM_MANGLE_OPTION([$1]), 1)])
     847[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
    885848
    886849# _AM_SET_OPTIONS(OPTIONS)
     
    896859[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
    897860
     861# Copyright (C) 1999-2014 Free Software Foundation, Inc.
     862#
     863# This file is free software; the Free Software Foundation
     864# gives unlimited permission to copy and/or distribute it,
     865# with or without modifications, as long as this notice is preserved.
     866
     867# _AM_PROG_CC_C_O
     868# ---------------
     869# Like AC_PROG_CC_C_O, but changed for automake.  We rewrite AC_PROG_CC
     870# to automatically call this.
     871AC_DEFUN([_AM_PROG_CC_C_O],
     872[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
     873AC_REQUIRE_AUX_FILE([compile])dnl
     874AC_LANG_PUSH([C])dnl
     875AC_CACHE_CHECK(
     876  [whether $CC understands -c and -o together],
     877  [am_cv_prog_cc_c_o],
     878  [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
     879  # Make sure it works both with $CC and with simple cc.
     880  # Following AC_PROG_CC_C_O, we do the test twice because some
     881  # compilers refuse to overwrite an existing .o file with -o,
     882  # though they will create one.
     883  am_cv_prog_cc_c_o=yes
     884  for am_i in 1 2; do
     885    if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
     886         && test -f conftest2.$ac_objext; then
     887      : OK
     888    else
     889      am_cv_prog_cc_c_o=no
     890      break
     891    fi
     892  done
     893  rm -f core conftest*
     894  unset am_i])
     895if test "$am_cv_prog_cc_c_o" != yes; then
     896   # Losing compiler, so override with the script.
     897   # FIXME: It is wrong to rewrite CC.
     898   # But if we don't then we get into trouble of one sort or another.
     899   # A longer-term fix would be to have automake use am__CC in this case,
     900   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
     901   CC="$am_aux_dir/compile $CC"
     902fi
     903AC_LANG_POP([C])])
     904
     905# For backward compatibility.
     906AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
     907
     908# Copyright (C) 2001-2014 Free Software Foundation, Inc.
     909#
     910# This file is free software; the Free Software Foundation
     911# gives unlimited permission to copy and/or distribute it,
     912# with or without modifications, as long as this notice is preserved.
     913
     914# AM_RUN_LOG(COMMAND)
     915# -------------------
     916# Run COMMAND, save the exit status in ac_status, and log it.
     917# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
     918AC_DEFUN([AM_RUN_LOG],
     919[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
     920   ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
     921   ac_status=$?
     922   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
     923   (exit $ac_status); }])
     924
    898925# Check to make sure that the build environment is sane.    -*- Autoconf -*-
    899926
    900 # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
    901 # Free Software Foundation, Inc.
    902 #
    903 # This file is free software; the Free Software Foundation
    904 # gives unlimited permission to copy and/or distribute it,
    905 # with or without modifications, as long as this notice is preserved.
    906 
    907 # serial 5
     927# Copyright (C) 1996-2014 Free Software Foundation, Inc.
     928#
     929# This file is free software; the Free Software Foundation
     930# gives unlimited permission to copy and/or distribute it,
     931# with or without modifications, as long as this notice is preserved.
    908932
    909933# AM_SANITY_CHECK
     
    911935AC_DEFUN([AM_SANITY_CHECK],
    912936[AC_MSG_CHECKING([whether build environment is sane])
    913 # Just in case
    914 sleep 1
    915 echo timestamp > conftest.file
    916937# Reject unsafe characters in $srcdir or the absolute working directory
    917938# name.  Accept space and tab only in the latter.
     
    924945case $srcdir in
    925946  *[[\\\"\#\$\&\'\`$am_lf\ \    ]]*)
    926     AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
     947    AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
    927948esac
    928949
    929 # Do `set' in a subshell so we don't clobber the current shell's
     950# Do 'set' in a subshell so we don't clobber the current shell's
    930951# arguments.  Must try -L first in case configure is actually a
    931952# symlink; some systems play weird games with the mod time of symlinks
     
    933954# directory).
    934955if (
    935    set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
    936    if test "$[*]" = "X"; then
    937       # -L didn't work.
    938       set X `ls -t "$srcdir/configure" conftest.file`
    939    fi
    940    rm -f conftest.file
    941    if test "$[*]" != "X $srcdir/configure conftest.file" \
    942       && test "$[*]" != "X conftest.file $srcdir/configure"; then
    943 
    944       # If neither matched, then we have a broken ls.  This can happen
    945       # if, for instance, CONFIG_SHELL is bash and it inherits a
    946       # broken ls alias from the environment.  This has actually
    947       # happened.  Such a system could not be considered "sane".
    948       AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
    949 alias in your environment])
    950    fi
    951 
     956   am_has_slept=no
     957   for am_try in 1 2; do
     958     echo "timestamp, slept: $am_has_slept" > conftest.file
     959     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
     960     if test "$[*]" = "X"; then
     961        # -L didn't work.
     962        set X `ls -t "$srcdir/configure" conftest.file`
     963     fi
     964     if test "$[*]" != "X $srcdir/configure conftest.file" \
     965        && test "$[*]" != "X conftest.file $srcdir/configure"; then
     966
     967        # If neither matched, then we have a broken ls.  This can happen
     968        # if, for instance, CONFIG_SHELL is bash and it inherits a
     969        # broken ls alias from the environment.  This has actually
     970        # happened.  Such a system could not be considered "sane".
     971        AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
     972  alias in your environment])
     973     fi
     974     if test "$[2]" = conftest.file || test $am_try -eq 2; then
     975       break
     976     fi
     977     # Just in case.
     978     sleep 1
     979     am_has_slept=yes
     980   done
    952981   test "$[2]" = conftest.file
    953982   )
     
    959988Check your system clock])
    960989fi
    961 AC_MSG_RESULT(yes)])
    962 
    963 # Copyright (C) 2009, 2011  Free Software Foundation, Inc.
    964 #
    965 # This file is free software; the Free Software Foundation
    966 # gives unlimited permission to copy and/or distribute it,
    967 # with or without modifications, as long as this notice is preserved.
    968 
    969 # serial 2
     990AC_MSG_RESULT([yes])
     991# If we didn't sleep, we still need to ensure time stamps of config.status and
     992# generated files are strictly newer.
     993am_sleep_pid=
     994if grep 'slept: no' conftest.file >/dev/null 2>&1; then
     995  ( sleep 1 ) &
     996  am_sleep_pid=$!
     997fi
     998AC_CONFIG_COMMANDS_PRE(
     999  [AC_MSG_CHECKING([that generated files are newer than configure])
     1000   if test -n "$am_sleep_pid"; then
     1001     # Hide warnings about reused PIDs.
     1002     wait $am_sleep_pid 2>/dev/null
     1003   fi
     1004   AC_MSG_RESULT([done])])
     1005rm -f conftest.file
     1006])
     1007
     1008# Copyright (C) 2009-2014 Free Software Foundation, Inc.
     1009#
     1010# This file is free software; the Free Software Foundation
     1011# gives unlimited permission to copy and/or distribute it,
     1012# with or without modifications, as long as this notice is preserved.
    9701013
    9711014# AM_SILENT_RULES([DEFAULT])
    9721015# --------------------------
    9731016# Enable less verbose build rules; with the default set to DEFAULT
    974 # (`yes' being less verbose, `no' or empty being verbose).
     1017# ("yes" being less verbose, "no" or empty being verbose).
    9751018AC_DEFUN([AM_SILENT_RULES],
    976 [AC_ARG_ENABLE([silent-rules],
    977 [  --enable-silent-rules          less verbose build output (undo: `make V=1')
    978   --disable-silent-rules         verbose build output (undo: `make V=0')])
    979 case $enable_silent_rules in
    980 yes) AM_DEFAULT_VERBOSITY=0;;
    981 no)  AM_DEFAULT_VERBOSITY=1;;
    982 *)   AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
     1019[AC_ARG_ENABLE([silent-rules], [dnl
     1020AS_HELP_STRING(
     1021  [--enable-silent-rules],
     1022  [less verbose build output (undo: "make V=1")])
     1023AS_HELP_STRING(
     1024  [--disable-silent-rules],
     1025  [verbose build output (undo: "make V=0")])dnl
     1026])
     1027case $enable_silent_rules in @%:@ (((
     1028  yes) AM_DEFAULT_VERBOSITY=0;;
     1029   no) AM_DEFAULT_VERBOSITY=1;;
     1030    *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
    9831031esac
    9841032dnl
    985 dnl A few `make' implementations (e.g., NonStop OS and NextStep)
     1033dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
    9861034dnl do not support nested variable expansions.
    9871035dnl See automake bug#9928 and bug#10237.
     
    10011049fi])
    10021050if test $am_cv_make_support_nested_variables = yes; then
    1003   dnl Using `$V' instead of `$(V)' breaks IRIX make.
     1051  dnl Using '$V' instead of '$(V)' breaks IRIX make.
    10041052  AM_V='$(V)'
    10051053  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
     
    10181066])
    10191067
    1020 # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
    1021 #
    1022 # This file is free software; the Free Software Foundation
    1023 # gives unlimited permission to copy and/or distribute it,
    1024 # with or without modifications, as long as this notice is preserved.
    1025 
    1026 # serial 1
     1068# Copyright (C) 2001-2014 Free Software Foundation, Inc.
     1069#
     1070# This file is free software; the Free Software Foundation
     1071# gives unlimited permission to copy and/or distribute it,
     1072# with or without modifications, as long as this notice is preserved.
    10271073
    10281074# AM_PROG_INSTALL_STRIP
    10291075# ---------------------
    1030 # One issue with vendor `install' (even GNU) is that you can't
     1076# One issue with vendor 'install' (even GNU) is that you can't
    10311077# specify the program used to strip binaries.  This is especially
    10321078# annoying in cross-compiling environments, where the build's strip
    10331079# is unlikely to handle the host's binaries.
    10341080# Fortunately install-sh will honor a STRIPPROG variable, so we
    1035 # always use install-sh in `make install-strip', and initialize
     1081# always use install-sh in "make install-strip", and initialize
    10361082# STRIPPROG with the value of the STRIP variable (set by the user).
    10371083AC_DEFUN([AM_PROG_INSTALL_STRIP],
    10381084[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
    1039 # Installed binaries are usually stripped using `strip' when the user
    1040 # run `make install-strip'.  However `strip' might not be the right
     1085# Installed binaries are usually stripped using 'strip' when the user
     1086# run "make install-strip".  However 'strip' might not be the right
    10411087# tool to use in cross-compilation environments, therefore Automake
    1042 # will honor the `STRIP' environment variable to overrule this program.
    1043 dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
     1088# will honor the 'STRIP' environment variable to overrule this program.
     1089dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
    10441090if test "$cross_compiling" != no; then
    10451091  AC_CHECK_TOOL([STRIP], [strip], :)
     
    10481094AC_SUBST([INSTALL_STRIP_PROGRAM])])
    10491095
    1050 # Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
    1051 #
    1052 # This file is free software; the Free Software Foundation
    1053 # gives unlimited permission to copy and/or distribute it,
    1054 # with or without modifications, as long as this notice is preserved.
    1055 
    1056 # serial 3
     1096# Copyright (C) 2006-2014 Free Software Foundation, Inc.
     1097#
     1098# This file is free software; the Free Software Foundation
     1099# gives unlimited permission to copy and/or distribute it,
     1100# with or without modifications, as long as this notice is preserved.
    10571101
    10581102# _AM_SUBST_NOTMAKE(VARIABLE)
     
    10691113# Check how to create a tarball.                            -*- Autoconf -*-
    10701114
    1071 # Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc.
    1072 #
    1073 # This file is free software; the Free Software Foundation
    1074 # gives unlimited permission to copy and/or distribute it,
    1075 # with or without modifications, as long as this notice is preserved.
    1076 
    1077 # serial 2
     1115# Copyright (C) 2004-2014 Free Software Foundation, Inc.
     1116#
     1117# This file is free software; the Free Software Foundation
     1118# gives unlimited permission to copy and/or distribute it,
     1119# with or without modifications, as long as this notice is preserved.
    10781120
    10791121# _AM_PROG_TAR(FORMAT)
    10801122# --------------------
    10811123# Check how to create a tarball in format FORMAT.
    1082 # FORMAT should be one of `v7', `ustar', or `pax'.
     1124# FORMAT should be one of 'v7', 'ustar', or 'pax'.
    10831125#
    10841126# Substitute a variable $(am__tar) that is a command
     
    10901132# a tarball read from stdin.
    10911133#     $(am__untar) < result.tar
     1134#
    10921135AC_DEFUN([_AM_PROG_TAR],
    10931136[# Always define AMTAR for backward compatibility.  Yes, it's still used
    10941137# in the wild :-(  We should find a proper way to deprecate it ...
    10951138AC_SUBST([AMTAR], ['$${TAR-tar}'])
     1139
     1140# We'll loop over all known methods to create a tar archive until one works.
     1141_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
     1142
    10961143m4_if([$1], [v7],
    1097      [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
    1098      [m4_case([$1], [ustar],, [pax],,
    1099               [m4_fatal([Unknown tar format])])
    1100 AC_MSG_CHECKING([how to create a $1 tar archive])
    1101 # Loop over all known methods to create a tar archive until one works.
    1102 _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
    1103 _am_tools=${am_cv_prog_tar_$1-$_am_tools}
    1104 # Do not fold the above two line into one, because Tru64 sh and
    1105 # Solaris sh will not grok spaces in the rhs of `-'.
    1106 for _am_tool in $_am_tools
    1107 do
    1108   case $_am_tool in
    1109   gnutar)
    1110     for _am_tar in tar gnutar gtar;
    1111     do
    1112       AM_RUN_LOG([$_am_tar --version]) && break
    1113     done
    1114     am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
    1115     am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
    1116     am__untar="$_am_tar -xf -"
    1117     ;;
    1118   plaintar)
    1119     # Must skip GNU tar: if it does not support --format= it doesn't create
    1120     # ustar tarball either.
    1121     (tar --version) >/dev/null 2>&1 && continue
    1122     am__tar='tar chf - "$$tardir"'
    1123     am__tar_='tar chf - "$tardir"'
    1124     am__untar='tar xf -'
    1125     ;;
    1126   pax)
    1127     am__tar='pax -L -x $1 -w "$$tardir"'
    1128     am__tar_='pax -L -x $1 -w "$tardir"'
    1129     am__untar='pax -r'
    1130     ;;
    1131   cpio)
    1132     am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
    1133     am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
    1134     am__untar='cpio -i -H $1 -d'
    1135     ;;
    1136   none)
    1137     am__tar=false
    1138     am__tar_=false
    1139     am__untar=false
    1140     ;;
    1141   esac
    1142 
    1143   # If the value was cached, stop now.  We just wanted to have am__tar
    1144   # and am__untar set.
    1145   test -n "${am_cv_prog_tar_$1}" && break
    1146 
    1147   # tar/untar a dummy directory, and stop if the command works
     1144  [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
     1145
     1146  [m4_case([$1],
     1147    [ustar],
     1148     [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
     1149      # There is notably a 21 bits limit for the UID and the GID.  In fact,
     1150      # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
     1151      # and bug#13588).
     1152      am_max_uid=2097151 # 2^21 - 1
     1153      am_max_gid=$am_max_uid
     1154      # The $UID and $GID variables are not portable, so we need to resort
     1155      # to the POSIX-mandated id(1) utility.  Errors in the 'id' calls
     1156      # below are definitely unexpected, so allow the users to see them
     1157      # (that is, avoid stderr redirection).
     1158      am_uid=`id -u || echo unknown`
     1159      am_gid=`id -g || echo unknown`
     1160      AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
     1161      if test $am_uid -le $am_max_uid; then
     1162         AC_MSG_RESULT([yes])
     1163      else
     1164         AC_MSG_RESULT([no])
     1165         _am_tools=none
     1166      fi
     1167      AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
     1168      if test $am_gid -le $am_max_gid; then
     1169         AC_MSG_RESULT([yes])
     1170      else
     1171        AC_MSG_RESULT([no])
     1172        _am_tools=none
     1173      fi],
     1174
     1175  [pax],
     1176    [],
     1177
     1178  [m4_fatal([Unknown tar format])])
     1179
     1180  AC_MSG_CHECKING([how to create a $1 tar archive])
     1181
     1182  # Go ahead even if we have the value already cached.  We do so because we
     1183  # need to set the values for the 'am__tar' and 'am__untar' variables.
     1184  _am_tools=${am_cv_prog_tar_$1-$_am_tools}
     1185
     1186  for _am_tool in $_am_tools; do
     1187    case $_am_tool in
     1188    gnutar)
     1189      for _am_tar in tar gnutar gtar; do
     1190        AM_RUN_LOG([$_am_tar --version]) && break
     1191      done
     1192      am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
     1193      am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
     1194      am__untar="$_am_tar -xf -"
     1195      ;;
     1196    plaintar)
     1197      # Must skip GNU tar: if it does not support --format= it doesn't create
     1198      # ustar tarball either.
     1199      (tar --version) >/dev/null 2>&1 && continue
     1200      am__tar='tar chf - "$$tardir"'
     1201      am__tar_='tar chf - "$tardir"'
     1202      am__untar='tar xf -'
     1203      ;;
     1204    pax)
     1205      am__tar='pax -L -x $1 -w "$$tardir"'
     1206      am__tar_='pax -L -x $1 -w "$tardir"'
     1207      am__untar='pax -r'
     1208      ;;
     1209    cpio)
     1210      am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
     1211      am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
     1212      am__untar='cpio -i -H $1 -d'
     1213      ;;
     1214    none)
     1215      am__tar=false
     1216      am__tar_=false
     1217      am__untar=false
     1218      ;;
     1219    esac
     1220
     1221    # If the value was cached, stop now.  We just wanted to have am__tar
     1222    # and am__untar set.
     1223    test -n "${am_cv_prog_tar_$1}" && break
     1224
     1225    # tar/untar a dummy directory, and stop if the command works.
     1226    rm -rf conftest.dir
     1227    mkdir conftest.dir
     1228    echo GrepMe > conftest.dir/file
     1229    AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
     1230    rm -rf conftest.dir
     1231    if test -s conftest.tar; then
     1232      AM_RUN_LOG([$am__untar <conftest.tar])
     1233      AM_RUN_LOG([cat conftest.dir/file])
     1234      grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
     1235    fi
     1236  done
    11481237  rm -rf conftest.dir
    1149   mkdir conftest.dir
    1150   echo GrepMe > conftest.dir/file
    1151   AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
    1152   rm -rf conftest.dir
    1153   if test -s conftest.tar; then
    1154     AM_RUN_LOG([$am__untar <conftest.tar])
    1155     grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
    1156   fi
    1157 done
    1158 rm -rf conftest.dir
    1159 
    1160 AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
    1161 AC_MSG_RESULT([$am_cv_prog_tar_$1])])
     1238
     1239  AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
     1240  AC_MSG_RESULT([$am_cv_prog_tar_$1])])
     1241
    11621242AC_SUBST([am__tar])
    11631243AC_SUBST([am__untar])
  • TabularUnified automake/config.guess

    rb1e63ac5 r208e5be  
    1 /usr/share/automake-1.11/config.guess
     1/usr/share/automake-1.15/config.guess
  • TabularUnified automake/config.sub

    rb1e63ac5 r208e5be  
    1 /usr/share/automake-1.11/config.sub
     1/usr/share/automake-1.15/config.sub
  • TabularUnified automake/missing

    rb1e63ac5 r208e5be  
    11#! /bin/sh
    2 # Common stub for a few missing GNU programs while installing.
    3 
    4 scriptversion=2012-01-06.13; # UTC
    5 
    6 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
    7 # 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
    8 # Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
     2# Common wrapper for a few potentially missing GNU programs.
     3
     4scriptversion=2013-10-28.13; # UTC
     5
     6# Copyright (C) 1996-2014 Free Software Foundation, Inc.
     7# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
    98
    109# This program is free software; you can redistribute it and/or modify
     
    2726
    2827if test $# -eq 0; then
    29   echo 1>&2 "Try \`$0 --help' for more information"
     28  echo 1>&2 "Try '$0 --help' for more information"
    3029  exit 1
    3130fi
    3231
    33 run=:
    34 sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
    35 sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
    36 
    37 # In the cases where this matters, `missing' is being run in the
    38 # srcdir already.
    39 if test -f configure.ac; then
    40   configure_ac=configure.ac
    41 else
    42   configure_ac=configure.in
    43 fi
    44 
    45 msg="missing on your system"
    46 
    4732case $1 in
    48 --run)
    49   # Try to run requested program, and just exit if it succeeds.
    50   run=
    51   shift
    52   "$@" && exit 0
    53   # Exit code 63 means version mismatch.  This often happens
    54   # when the user try to use an ancient version of a tool on
    55   # a file that requires a minimum version.  In this case we
    56   # we should proceed has if the program had been absent, or
    57   # if --run hadn't been passed.
    58   if test $? = 63; then
    59     run=:
    60     msg="probably too old"
    61   fi
    62   ;;
     33
     34  --is-lightweight)
     35    # Used by our autoconf macros to check whether the available missing
     36    # script is modern enough.
     37    exit 0
     38    ;;
     39
     40  --run)
     41    # Back-compat with the calling convention used by older automake.
     42    shift
     43    ;;
    6344
    6445  -h|--h|--he|--hel|--help)
     
    6647$0 [OPTION]... PROGRAM [ARGUMENT]...
    6748
    68 Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
    69 error status if there is no known handling for PROGRAM.
     49Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
     50to PROGRAM being missing or too old.
    7051
    7152Options:
    7253  -h, --help      display this help and exit
    7354  -v, --version   output version information and exit
    74   --run           try to run the given command, and emulate it if it fails
    7555
    7656Supported PROGRAM values:
    77   aclocal      touch file \`aclocal.m4'
    78   autoconf     touch file \`configure'
    79   autoheader   touch file \`config.h.in'
    80   autom4te     touch the output file, or create a stub one
    81   automake     touch all \`Makefile.in' files
    82   bison        create \`y.tab.[ch]', if possible, from existing .[ch]
    83   flex         create \`lex.yy.c', if possible, from existing .c
    84   help2man     touch the output file
    85   lex          create \`lex.yy.c', if possible, from existing .c
    86   makeinfo     touch the output file
    87   yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
    88 
    89 Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
    90 \`g' are ignored when checking the name.
     57  aclocal   autoconf  autoheader   autom4te  automake  makeinfo
     58  bison     yacc      flex         lex       help2man
     59
     60Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
     61'g' are ignored when checking the name.
    9162
    9263Send bug reports to <bug-automake@gnu.org>."
     
    10071
    10172  -*)
    102     echo 1>&2 "$0: Unknown \`$1' option"
    103     echo 1>&2 "Try \`$0 --help' for more information"
     73    echo 1>&2 "$0: unknown '$1' option"
     74    echo 1>&2 "Try '$0 --help' for more information"
    10475    exit 1
    10576    ;;
     
    10778esac
    10879
    109 # normalize program name to check for.
    110 program=`echo "$1" | sed '
    111   s/^gnu-//; t
    112   s/^gnu//; t
    113   s/^g//; t'`
    114 
    115 # Now exit if we have it, but it failed.  Also exit now if we
    116 # don't have it and --version was passed (most likely to detect
    117 # the program).  This is about non-GNU programs, so use $1 not
    118 # $program.
    119 case $1 in
    120   lex*|yacc*)
    121     # Not GNU programs, they don't have --version.
    122     ;;
    123 
    124   *)
    125     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
    126        # We have it, but it failed.
    127        exit 1
    128     elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
    129        # Could not run --version or --help.  This is probably someone
    130        # running `$TOOL --version' or `$TOOL --help' to check whether
    131        # $TOOL exists and not knowing $TOOL uses missing.
    132        exit 1
    133     fi
    134     ;;
    135 esac
    136 
    137 # If it does not exist, or fails to run (possibly an outdated version),
    138 # try to emulate it.
    139 case $program in
    140   aclocal*)
    141     echo 1>&2 "\
    142 WARNING: \`$1' is $msg.  You should only need it if
    143          you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
    144          to install the \`Automake' and \`Perl' packages.  Grab them from
    145          any GNU archive site."
    146     touch aclocal.m4
    147     ;;
    148 
    149   autoconf*)
    150     echo 1>&2 "\
    151 WARNING: \`$1' is $msg.  You should only need it if
    152          you modified \`${configure_ac}'.  You might want to install the
    153          \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
    154          archive site."
    155     touch configure
    156     ;;
    157 
    158   autoheader*)
    159     echo 1>&2 "\
    160 WARNING: \`$1' is $msg.  You should only need it if
    161          you modified \`acconfig.h' or \`${configure_ac}'.  You might want
    162          to install the \`Autoconf' and \`GNU m4' packages.  Grab them
    163          from any GNU archive site."
    164     files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
    165     test -z "$files" && files="config.h"
    166     touch_files=
    167     for f in $files; do
    168       case $f in
    169       *:*) touch_files="$touch_files "`echo "$f" |
    170                                        sed -e 's/^[^:]*://' -e 's/:.*//'`;;
    171       *) touch_files="$touch_files $f.in";;
    172       esac
    173     done
    174     touch $touch_files
    175     ;;
    176 
    177   automake*)
    178     echo 1>&2 "\
    179 WARNING: \`$1' is $msg.  You should only need it if
    180          you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
    181          You might want to install the \`Automake' and \`Perl' packages.
    182          Grab them from any GNU archive site."
    183     find . -type f -name Makefile.am -print |
    184            sed 's/\.am$/.in/' |
    185            while read f; do touch "$f"; done
    186     ;;
    187 
    188   autom4te*)
    189     echo 1>&2 "\
    190 WARNING: \`$1' is needed, but is $msg.
    191          You might have modified some files without having the
    192          proper tools for further handling them.
    193          You can get \`$1' as part of \`Autoconf' from any GNU
    194          archive site."
    195 
    196     file=`echo "$*" | sed -n "$sed_output"`
    197     test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
    198     if test -f "$file"; then
    199         touch $file
    200     else
    201         test -z "$file" || exec >$file
    202         echo "#! /bin/sh"
    203         echo "# Created by GNU Automake missing as a replacement of"
    204         echo "#  $ $@"
    205         echo "exit 0"
    206         chmod +x $file
    207         exit 1
    208     fi
    209     ;;
    210 
    211   bison*|yacc*)
    212     echo 1>&2 "\
    213 WARNING: \`$1' $msg.  You should only need it if
    214          you modified a \`.y' file.  You may need the \`Bison' package
    215          in order for those modifications to take effect.  You can get
    216          \`Bison' from any GNU archive site."
    217     rm -f y.tab.c y.tab.h
    218     if test $# -ne 1; then
    219         eval LASTARG=\${$#}
    220         case $LASTARG in
    221         *.y)
    222             SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
    223             if test -f "$SRCFILE"; then
    224                  cp "$SRCFILE" y.tab.c
    225             fi
    226             SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
    227             if test -f "$SRCFILE"; then
    228                  cp "$SRCFILE" y.tab.h
    229             fi
    230           ;;
    231         esac
    232     fi
    233     if test ! -f y.tab.h; then
    234         echo >y.tab.h
    235     fi
    236     if test ! -f y.tab.c; then
    237         echo 'main() { return 0; }' >y.tab.c
    238     fi
    239     ;;
    240 
    241   lex*|flex*)
    242     echo 1>&2 "\
    243 WARNING: \`$1' is $msg.  You should only need it if
    244          you modified a \`.l' file.  You may need the \`Flex' package
    245          in order for those modifications to take effect.  You can get
    246          \`Flex' from any GNU archive site."
    247     rm -f lex.yy.c
    248     if test $# -ne 1; then
    249         eval LASTARG=\${$#}
    250         case $LASTARG in
    251         *.l)
    252             SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
    253             if test -f "$SRCFILE"; then
    254                  cp "$SRCFILE" lex.yy.c
    255             fi
    256           ;;
    257         esac
    258     fi
    259     if test ! -f lex.yy.c; then
    260         echo 'main() { return 0; }' >lex.yy.c
    261     fi
    262     ;;
    263 
    264   help2man*)
    265     echo 1>&2 "\
    266 WARNING: \`$1' is $msg.  You should only need it if
    267          you modified a dependency of a manual page.  You may need the
    268          \`Help2man' package in order for those modifications to take
    269          effect.  You can get \`Help2man' from any GNU archive site."
    270 
    271     file=`echo "$*" | sed -n "$sed_output"`
    272     test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
    273     if test -f "$file"; then
    274         touch $file
    275     else
    276         test -z "$file" || exec >$file
    277         echo ".ab help2man is required to generate this page"
    278         exit $?
    279     fi
    280     ;;
    281 
    282   makeinfo*)
    283     echo 1>&2 "\
    284 WARNING: \`$1' is $msg.  You should only need it if
    285          you modified a \`.texi' or \`.texinfo' file, or any other file
    286          indirectly affecting the aspect of the manual.  The spurious
    287          call might also be the consequence of using a buggy \`make' (AIX,
    288          DU, IRIX).  You might want to install the \`Texinfo' package or
    289          the \`GNU make' package.  Grab either from any GNU archive site."
    290     # The file to touch is that specified with -o ...
    291     file=`echo "$*" | sed -n "$sed_output"`
    292     test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
    293     if test -z "$file"; then
    294       # ... or it is the one specified with @setfilename ...
    295       infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
    296       file=`sed -n '
    297         /^@setfilename/{
    298           s/.* \([^ ]*\) *$/\1/
    299           p
    300           q
    301         }' $infile`
    302       # ... or it is derived from the source name (dir/f.texi becomes f.info)
    303       test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
    304     fi
    305     # If the file does not exist, the user really needs makeinfo;
    306     # let's fail without touching anything.
    307     test -f $file || exit 1
    308     touch $file
    309     ;;
    310 
    311   *)
    312     echo 1>&2 "\
    313 WARNING: \`$1' is needed, and is $msg.
    314          You might have modified some files without having the
    315          proper tools for further handling them.  Check the \`README' file,
    316          it often tells you about the needed prerequisites for installing
    317          this package.  You may also peek at any GNU archive site, in case
    318          some other package would contain this missing \`$1' program."
    319     exit 1
    320     ;;
    321 esac
    322 
    323 exit 0
     80# Run the given program, remember its exit status.
     81"$@"; st=$?
     82
     83# If it succeeded, we are done.
     84test $st -eq 0 && exit 0
     85
     86# Also exit now if we it failed (or wasn't found), and '--version' was
     87# passed; such an option is passed most likely to detect whether the
     88# program is present and works.
     89case $2 in --version|--help) exit $st;; esac
     90
     91# Exit code 63 means version mismatch.  This often happens when the user
     92# tries to use an ancient version of a tool on a file that requires a
     93# minimum version.
     94if test $st -eq 63; then
     95  msg="probably too old"
     96elif test $st -eq 127; then
     97  # Program was missing.
     98  msg="missing on your system"
     99else
     100  # Program was found and executed, but failed.  Give up.
     101  exit $st
     102fi
     103
     104perl_URL=http://www.perl.org/
     105flex_URL=http://flex.sourceforge.net/
     106gnu_software_URL=http://www.gnu.org/software
     107
     108program_details ()
     109{
     110  case $1 in
     111    aclocal|automake)
     112      echo "The '$1' program is part of the GNU Automake package:"
     113      echo "<$gnu_software_URL/automake>"
     114      echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
     115      echo "<$gnu_software_URL/autoconf>"
     116      echo "<$gnu_software_URL/m4/>"
     117      echo "<$perl_URL>"
     118      ;;
     119    autoconf|autom4te|autoheader)
     120      echo "The '$1' program is part of the GNU Autoconf package:"
     121      echo "<$gnu_software_URL/autoconf/>"
     122      echo "It also requires GNU m4 and Perl in order to run:"
     123      echo "<$gnu_software_URL/m4/>"
     124      echo "<$perl_URL>"
     125      ;;
     126  esac
     127}
     128
     129give_advice ()
     130{
     131  # Normalize program name to check for.
     132  normalized_program=`echo "$1" | sed '
     133    s/^gnu-//; t
     134    s/^gnu//; t
     135    s/^g//; t'`
     136
     137  printf '%s\n' "'$1' is $msg."
     138
     139  configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
     140  case $normalized_program in
     141    autoconf*)
     142      echo "You should only need it if you modified 'configure.ac',"
     143      echo "or m4 files included by it."
     144      program_details 'autoconf'
     145      ;;
     146    autoheader*)
     147      echo "You should only need it if you modified 'acconfig.h' or"
     148      echo "$configure_deps."
     149      program_details 'autoheader'
     150      ;;
     151    automake*)
     152      echo "You should only need it if you modified 'Makefile.am' or"
     153      echo "$configure_deps."
     154      program_details 'automake'
     155      ;;
     156    aclocal*)
     157      echo "You should only need it if you modified 'acinclude.m4' or"
     158      echo "$configure_deps."
     159      program_details 'aclocal'
     160      ;;
     161   autom4te*)
     162      echo "You might have modified some maintainer files that require"
     163      echo "the 'autom4te' program to be rebuilt."
     164      program_details 'autom4te'
     165      ;;
     166    bison*|yacc*)
     167      echo "You should only need it if you modified a '.y' file."
     168      echo "You may want to install the GNU Bison package:"
     169      echo "<$gnu_software_URL/bison/>"
     170      ;;
     171    lex*|flex*)
     172      echo "You should only need it if you modified a '.l' file."
     173      echo "You may want to install the Fast Lexical Analyzer package:"
     174      echo "<$flex_URL>"
     175      ;;
     176    help2man*)
     177      echo "You should only need it if you modified a dependency" \
     178           "of a man page."
     179      echo "You may want to install the GNU Help2man package:"
     180      echo "<$gnu_software_URL/help2man/>"
     181    ;;
     182    makeinfo*)
     183      echo "You should only need it if you modified a '.texi' file, or"
     184      echo "any other file indirectly affecting the aspect of the manual."
     185      echo "You might want to install the Texinfo package:"
     186      echo "<$gnu_software_URL/texinfo/>"
     187      echo "The spurious makeinfo call might also be the consequence of"
     188      echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
     189      echo "want to install GNU make:"
     190      echo "<$gnu_software_URL/make/>"
     191      ;;
     192    *)
     193      echo "You might have modified some files without having the proper"
     194      echo "tools for further handling them.  Check the 'README' file, it"
     195      echo "often tells you about the needed prerequisites for installing"
     196      echo "this package.  You may also peek at any GNU archive site, in"
     197      echo "case some other package contains this missing '$1' program."
     198      ;;
     199  esac
     200}
     201
     202give_advice "$1" | sed -e '1s/^/WARNING: /' \
     203                       -e '2,$s/^/         /' >&2
     204
     205# Propagate the correct exit status (expected to be 127 for a program
     206# not found, 63 for a program that failed due to version mismatch).
     207exit $st
    324208
    325209# Local variables:
  • TabularUnified config.h.in

    rb1e63ac5 r208e5be  
    120120/* Define to 1 if the system has the type `_Bool'. */
    121121#undef HAVE__BOOL
    122 
    123 /* Define to 1 if your C compiler doesn't accept -c and -o together. */
    124 #undef NO_MINUS_C_MINUS_O
    125122
    126123/* Name of package */
  • TabularUnified configure

    rb1e63ac5 r208e5be  
    11#! /bin/sh
    22# Guess values for system-dependent variables and create Makefiles.
    3 # Generated by GNU Autoconf 2.68 for cfa-cc 1.0.0.0.
     3# Generated by GNU Autoconf 2.69 for cfa-cc 1.0.0.0.
    44#
    55# Report bugs to <cforall@plg.uwaterloo.ca>.
    66#
    77#
    8 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
    9 # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
    10 # Foundation, Inc.
     8# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
    119#
    1210#
     
    137135(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
    138136
     137# Use a proper internal environment variable to ensure we don't fall
     138  # into an infinite loop, continuously re-executing ourselves.
     139  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
     140    _as_can_reexec=no; export _as_can_reexec;
     141    # We cannot yet assume a decent shell, so we have to provide a
     142# neutralization value for shells without unset; and this also
     143# works around shells that cannot unset nonexistent variables.
     144# Preserve -v and -x to the replacement shell.
     145BASH_ENV=/dev/null
     146ENV=/dev/null
     147(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
     148case $- in # ((((
     149  *v*x* | *x*v* ) as_opts=-vx ;;
     150  *v* ) as_opts=-v ;;
     151  *x* ) as_opts=-x ;;
     152  * ) as_opts= ;;
     153esac
     154exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
     155# Admittedly, this is quite paranoid, since all the known shells bail
     156# out after a failed `exec'.
     157$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
     158as_fn_exit 255
     159  fi
     160  # We don't want this to propagate to other subprocesses.
     161          { _as_can_reexec=; unset _as_can_reexec;}
    139162if test "x$CONFIG_SHELL" = x; then
    140163  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
     
    170193  exitcode=1; echo positional parameters were not saved.
    171194fi
    172 test x\$exitcode = x0 || exit 1"
     195test x\$exitcode = x0 || exit 1
     196test -x / || exit 1"
    173197  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
    174198  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
     
    215239
    216240      if test "x$CONFIG_SHELL" != x; then :
    217   # We cannot yet assume a decent shell, so we have to provide a
    218         # neutralization value for shells without unset; and this also
    219         # works around shells that cannot unset nonexistent variables.
    220         # Preserve -v and -x to the replacement shell.
    221         BASH_ENV=/dev/null
    222         ENV=/dev/null
    223         (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
    224         export CONFIG_SHELL
    225         case $- in # ((((
    226           *v*x* | *x*v* ) as_opts=-vx ;;
    227           *v* ) as_opts=-v ;;
    228           *x* ) as_opts=-x ;;
    229           * ) as_opts= ;;
    230         esac
    231         exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
     241  export CONFIG_SHELL
     242             # We cannot yet assume a decent shell, so we have to provide a
     243# neutralization value for shells without unset; and this also
     244# works around shells that cannot unset nonexistent variables.
     245# Preserve -v and -x to the replacement shell.
     246BASH_ENV=/dev/null
     247ENV=/dev/null
     248(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
     249case $- in # ((((
     250  *v*x* | *x*v* ) as_opts=-vx ;;
     251  *v* ) as_opts=-v ;;
     252  *x* ) as_opts=-x ;;
     253  * ) as_opts= ;;
     254esac
     255exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
     256# Admittedly, this is quite paranoid, since all the known shells bail
     257# out after a failed `exec'.
     258$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
     259exit 255
    232260fi
    233261
     
    332360
    333361} # as_fn_mkdir_p
     362
     363# as_fn_executable_p FILE
     364# -----------------------
     365# Test if FILE is an executable regular file.
     366as_fn_executable_p ()
     367{
     368  test -f "$1" && test -x "$1"
     369} # as_fn_executable_p
    334370# as_fn_append VAR VALUE
    335371# ----------------------
     
    453489    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
    454490
     491  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
     492  # already done that, so ensure we don't try to do so again and fall
     493  # in an infinite loop.  This has already happened in practice.
     494  _as_can_reexec=no; export _as_can_reexec
    455495  # Don't try to exec as it changes $[0], causing all sort of problems
    456496  # (the dirname of $[0] is not the place where we might find the
     
    487527    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
    488528    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
    489     # In both cases, we have to default to `cp -p'.
     529    # In both cases, we have to default to `cp -pR'.
    490530    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
    491       as_ln_s='cp -p'
     531      as_ln_s='cp -pR'
    492532  elif ln conf$$.file conf$$ 2>/dev/null; then
    493533    as_ln_s=ln
    494534  else
    495     as_ln_s='cp -p'
     535    as_ln_s='cp -pR'
    496536  fi
    497537else
    498   as_ln_s='cp -p'
     538  as_ln_s='cp -pR'
    499539fi
    500540rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
     
    508548fi
    509549
    510 if test -x / >/dev/null 2>&1; then
    511   as_test_x='test -x'
    512 else
    513   if ls -dL / >/dev/null 2>&1; then
    514     as_ls_L_option=L
    515   else
    516     as_ls_L_option=
    517   fi
    518   as_test_x='
    519     eval sh -c '\''
    520       if test -d "$1"; then
    521         test -d "$1/.";
    522       else
    523         case $1 in #(
    524         -*)set "./$1";;
    525         esac;
    526         case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
    527         ???[sx]*):;;*)false;;esac;fi
    528     '\'' sh
    529   '
    530 fi
    531 as_executable_p=$as_test_x
     550as_test_x='test -x'
     551as_executable_p=as_fn_executable_p
    532552
    533553# Sed expression to map a string onto a valid CPP name.
     
    718738oldincludedir
    719739includedir
     740runstatedir
    720741localstatedir
    721742sharedstatedir
     
    803824sharedstatedir='${prefix}/com'
    804825localstatedir='${prefix}/var'
     826runstatedir='${localstatedir}/run'
    805827includedir='${prefix}/include'
    806828oldincludedir='/usr/include'
     
    10551077    silent=yes ;;
    10561078
     1079  -runstatedir | --runstatedir | --runstatedi | --runstated \
     1080  | --runstate | --runstat | --runsta | --runst | --runs \
     1081  | --run | --ru | --r)
     1082    ac_prev=runstatedir ;;
     1083  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
     1084  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
     1085  | --run=* | --ru=* | --r=*)
     1086    runstatedir=$ac_optarg ;;
     1087
    10571088  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
    10581089    ac_prev=sbindir ;;
     
    11921223                datadir sysconfdir sharedstatedir localstatedir includedir \
    11931224                oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
    1194                 libdir localedir mandir
     1225                libdir localedir mandir runstatedir
    11951226do
    11961227  eval ac_val=\$$ac_var
     
    12201251  if test "x$build_alias" = x; then
    12211252    cross_compiling=maybe
    1222     $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
    1223     If a cross compiler is detected then cross compile mode will be used" >&2
    12241253  elif test "x$build_alias" != "x$host_alias"; then
    12251254    cross_compiling=yes
     
    13471376  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
    13481377  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
     1378  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
    13491379  --libdir=DIR            object code libraries [EPREFIX/lib]
    13501380  --includedir=DIR        C header files [PREFIX/include]
     
    13851415  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
    13861416  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
    1387   --enable-silent-rules          less verbose build output (undo: `make V=1')
    1388   --disable-silent-rules         verbose build output (undo: `make V=0')
    1389   --disable-maintainer-mode  disable make rules and dependencies not useful
    1390                           (and sometimes confusing) to the casual installer
     1417  --enable-silent-rules   less verbose build output (undo: "make V=1")
     1418  --disable-silent-rules  verbose build output (undo: "make V=0")
     1419  --disable-maintainer-mode
     1420                          disable make rules and dependencies not useful (and
     1421                          sometimes confusing) to the casual installer
    13911422  --enable-target-release Build and install the release target
    13921423  --enable-target-debug   Build and install the debug target
    13931424  --enable-threading      Build and install libcfa with threading support
    13941425                          (Enabled by default)
    1395   --disable-dependency-tracking  speeds up one-time build
    1396   --enable-dependency-tracking   do not reject slow dependency extractors
     1426  --enable-dependency-tracking
     1427                          do not reject slow dependency extractors
     1428  --disable-dependency-tracking
     1429                          speeds up one-time build
    13971430
    13981431Optional Packages:
     
    14891522  cat <<\_ACEOF
    14901523cfa-cc configure 1.0.0.0
    1491 generated by GNU Autoconf 2.68
    1492 
    1493 Copyright (C) 2010 Free Software Foundation, Inc.
     1524generated by GNU Autoconf 2.69
     1525
     1526Copyright (C) 2012 Free Software Foundation, Inc.
    14941527This configure script is free software; the Free Software Foundation
    14951528gives unlimited permission to copy, distribute and modify it.
     
    16051638       } && test -s conftest$ac_exeext && {
    16061639         test "$cross_compiling" = yes ||
    1607          $as_test_x conftest$ac_exeext
     1640         test -x conftest$ac_exeext
    16081641       }; then :
    16091642  ac_retval=0
     
    19712004{
    19722005static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))];
    1973 test_array [0] = 0
     2006test_array [0] = 0;
     2007return test_array [0];
    19742008
    19752009  ;
     
    19872021static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1)
    19882022                 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))];
    1989 test_array [0] = 0
     2023test_array [0] = 0;
     2024return test_array [0];
    19902025
    19912026  ;
     
    20442079{
    20452080static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)];
    2046 test_array [0] = 0
     2081test_array [0] = 0;
     2082return test_array [0];
    20472083
    20482084  ;
     
    20772113
    20782114It was created by cfa-cc $as_me 1.0.0.0, which was
    2079 generated by GNU Autoconf 2.68.  Invocation command line was
     2115generated by GNU Autoconf 2.69.  Invocation command line was
    20802116
    20812117  $ $0 $@
     
    24612497fi
    24622498
    2463 case $enable_silent_rules in
    2464 yes) AM_DEFAULT_VERBOSITY=0;;
    2465 no) AM_DEFAULT_VERBOSITY=1;;
    2466 *)  AM_DEFAULT_VERBOSITY=1;;
     2499case $enable_silent_rules in # (((
     2500  yes) AM_DEFAULT_VERBOSITY=0;;
     2501   no) AM_DEFAULT_VERBOSITY=1;;
     2502    *) AM_DEFAULT_VERBOSITY=1;;
    24672503esac
    24682504am_make=${MAKE-make}
     
    24962532
    24972533
    2498 am__api_version='1.11'
     2534am__api_version='1.15'
    24992535
    25002536# Find a good install program.  We prefer a C program (faster),
     
    25352571    for ac_prog in ginstall scoinst install; do
    25362572      for ac_exec_ext in '' $ac_executable_extensions; do
    2537         if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
     2573        if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
    25382574          if test $ac_prog = install &&
    25392575            grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
     
    25932629{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
    25942630$as_echo_n "checking whether build environment is sane... " >&6; }
    2595 # Just in case
    2596 sleep 1
    2597 echo timestamp > conftest.file
    25982631# Reject unsafe characters in $srcdir or the absolute working directory
    25992632# name.  Accept space and tab only in the latter.
     
    26062639case $srcdir in
    26072640  *[\\\"\#\$\&\'\`$am_lf\ \     ]*)
    2608     as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
     2641    as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
    26092642esac
    26102643
    2611 # Do `set' in a subshell so we don't clobber the current shell's
     2644# Do 'set' in a subshell so we don't clobber the current shell's
    26122645# arguments.  Must try -L first in case configure is actually a
    26132646# symlink; some systems play weird games with the mod time of symlinks
     
    26152648# directory).
    26162649if (
    2617    set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
    2618    if test "$*" = "X"; then
    2619       # -L didn't work.
    2620       set X `ls -t "$srcdir/configure" conftest.file`
    2621    fi
    2622    rm -f conftest.file
    2623    if test "$*" != "X $srcdir/configure conftest.file" \
    2624       && test "$*" != "X conftest.file $srcdir/configure"; then
    2625 
    2626       # If neither matched, then we have a broken ls.  This can happen
    2627       # if, for instance, CONFIG_SHELL is bash and it inherits a
    2628       # broken ls alias from the environment.  This has actually
    2629       # happened.  Such a system could not be considered "sane".
    2630       as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
    2631 alias in your environment" "$LINENO" 5
    2632    fi
    2633 
     2650   am_has_slept=no
     2651   for am_try in 1 2; do
     2652     echo "timestamp, slept: $am_has_slept" > conftest.file
     2653     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
     2654     if test "$*" = "X"; then
     2655        # -L didn't work.
     2656        set X `ls -t "$srcdir/configure" conftest.file`
     2657     fi
     2658     if test "$*" != "X $srcdir/configure conftest.file" \
     2659        && test "$*" != "X conftest.file $srcdir/configure"; then
     2660
     2661        # If neither matched, then we have a broken ls.  This can happen
     2662        # if, for instance, CONFIG_SHELL is bash and it inherits a
     2663        # broken ls alias from the environment.  This has actually
     2664        # happened.  Such a system could not be considered "sane".
     2665        as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
     2666  alias in your environment" "$LINENO" 5
     2667     fi
     2668     if test "$2" = conftest.file || test $am_try -eq 2; then
     2669       break
     2670     fi
     2671     # Just in case.
     2672     sleep 1
     2673     am_has_slept=yes
     2674   done
    26342675   test "$2" = conftest.file
    26352676   )
     
    26432684{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
    26442685$as_echo "yes" >&6; }
     2686# If we didn't sleep, we still need to ensure time stamps of config.status and
     2687# generated files are strictly newer.
     2688am_sleep_pid=
     2689if grep 'slept: no' conftest.file >/dev/null 2>&1; then
     2690  ( sleep 1 ) &
     2691  am_sleep_pid=$!
     2692fi
     2693
     2694rm -f conftest.file
     2695
    26452696test "$program_prefix" != NONE &&
    26462697  program_transform_name="s&^&$program_prefix&;$program_transform_name"
     
    26532704program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
    26542705
    2655 # expand $ac_aux_dir to an absolute path
    2656 am_aux_dir=`cd $ac_aux_dir && pwd`
     2706# Expand $ac_aux_dir to an absolute path.
     2707am_aux_dir=`cd "$ac_aux_dir" && pwd`
    26572708
    26582709if test x"${MISSING+set}" != xset; then
     
    26652716fi
    26662717# Use eval to expand $SHELL
    2667 if eval "$MISSING --run true"; then
    2668   am_missing_run="$MISSING --run "
     2718if eval "$MISSING --is-lightweight"; then
     2719  am_missing_run="$MISSING "
    26692720else
    26702721  am_missing_run=
    2671   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
    2672 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
    2673 fi
    2674 
    2675 if test x"${install_sh}" != xset; then
     2722  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
     2723$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
     2724fi
     2725
     2726if test x"${install_sh+set}" != xset; then
    26762727  case $am_aux_dir in
    26772728  *\ * | *\     *)
     
    26822733fi
    26832734
    2684 # Installed binaries are usually stripped using `strip' when the user
    2685 # run `make install-strip'.  However `strip' might not be the right
     2735# Installed binaries are usually stripped using 'strip' when the user
     2736# run "make install-strip".  However 'strip' might not be the right
    26862737# tool to use in cross-compilation environments, therefore Automake
    2687 # will honor the `STRIP' environment variable to overrule this program.
     2738# will honor the 'STRIP' environment variable to overrule this program.
    26882739if test "$cross_compiling" != no; then
    26892740  if test -n "$ac_tool_prefix"; then
     
    27042755  test -z "$as_dir" && as_dir=.
    27052756    for ac_exec_ext in '' $ac_executable_extensions; do
    2706   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     2757  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
    27072758    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
    27082759    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     
    27442795  test -z "$as_dir" && as_dir=.
    27452796    for ac_exec_ext in '' $ac_executable_extensions; do
    2746   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     2797  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
    27472798    ac_cv_prog_ac_ct_STRIP="strip"
    27482799    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     
    27952846    for ac_prog in mkdir gmkdir; do
    27962847         for ac_exec_ext in '' $ac_executable_extensions; do
    2797            { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
     2848           as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
    27982849           case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
    27992850             'mkdir (GNU coreutils) '* | \
     
    28242875$as_echo "$MKDIR_P" >&6; }
    28252876
    2826 mkdir_p="$MKDIR_P"
    2827 case $mkdir_p in
    2828   [\\/$]* | ?:[\\/]*) ;;
    2829   */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
    2830 esac
    2831 
    28322877for ac_prog in gawk mawk nawk awk
    28332878do
     
    28482893  test -z "$as_dir" && as_dir=.
    28492894    for ac_exec_ext in '' $ac_executable_extensions; do
    2850   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     2895  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
    28512896    ac_cv_prog_AWK="$ac_prog"
    28522897    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     
    29623007MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
    29633008
    2964 # We need awk for the "check" target.  The system "awk" is bad on
    2965 # some platforms.
     3009# For better backward compatibility.  To be removed once Automake 1.9.x
     3010# dies out for good.  For more background, see:
     3011# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
     3012# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
     3013mkdir_p='$(MKDIR_P)'
     3014
     3015# We need awk for the "check" target (and possibly the TAP driver).  The
     3016# system "awk" is bad on some platforms.
    29663017# Always define AMTAR for backward compatibility.  Yes, it's still used
    29673018# in the wild :-(  We should find a proper way to deprecate it ...
    29683019AMTAR='$${TAR-tar}'
    29693020
     3021
     3022# We'll loop over all known methods to create a tar archive until one works.
     3023_am_tools='gnutar  pax cpio none'
     3024
    29703025am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
    29713026
     
    29733028
    29743029
     3030
     3031
     3032# POSIX will say in a future version that running "rm -f" with no argument
     3033# is OK; and we want to be able to make that assumption in our Makefile
     3034# recipes.  So use an aggressive probe to check that the usage we want is
     3035# actually supported "in the wild" to an acceptable degree.
     3036# See automake bug#10828.
     3037# To make any issue more visible, cause the running configure to be aborted
     3038# by default if the 'rm' program in use doesn't match our expectations; the
     3039# user can still override this though.
     3040if rm -f && rm -fr && rm -rf; then : OK; else
     3041  cat >&2 <<'END'
     3042Oops!
     3043
     3044Your 'rm' program seems unable to run without file operands specified
     3045on the command line, even when the '-f' option is present.  This is contrary
     3046to the behaviour of most rm programs out there, and not conforming with
     3047the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
     3048
     3049Please tell bug-automake@gnu.org about your system, including the value
     3050of your $PATH and any error possibly output before this message.  This
     3051can help us improve future automake versions.
     3052
     3053END
     3054  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
     3055    echo 'Configuration will proceed anyway, since you have set the' >&2
     3056    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
     3057    echo >&2
     3058  else
     3059    cat >&2 <<'END'
     3060Aborting the configuration process, to ensure you take notice of the issue.
     3061
     3062You can download and install GNU coreutils to get an 'rm' implementation
     3063that behaves properly: <http://www.gnu.org/software/coreutils/>.
     3064
     3065If you want to complete the configuration process using your problematic
     3066'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
     3067to "yes", and re-run configure.
     3068
     3069END
     3070    as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
     3071  fi
     3072fi
    29753073
    29763074
     
    31023200  test -z "$as_dir" && as_dir=.
    31033201    for ac_exec_ext in '' $ac_executable_extensions; do
    3104   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     3202  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
    31053203    ac_cv_path_BACKEND_CC="$as_dir/$ac_word$ac_exec_ext"
    31063204    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     
    34303528  test -z "$as_dir" && as_dir=.
    34313529    for ac_exec_ext in '' $ac_executable_extensions; do
    3432   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     3530  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
    34333531    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
    34343532    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     
    34743572  test -z "$as_dir" && as_dir=.
    34753573    for ac_exec_ext in '' $ac_executable_extensions; do
    3476   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     3574  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
    34773575    ac_cv_prog_ac_ct_CXX="$ac_prog"
    34783576    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     
    39274025# First try GNU make style include.
    39284026echo "include confinc" > confmf
    3929 # Ignore all kinds of additional output from `make'.
     4027# Ignore all kinds of additional output from 'make'.
    39304028case `$am_make -s -f confmf 2> /dev/null` in #(
    39314029*the\ am__doit\ target*)
     
    39834081  # making bogus files that we don't know about and never remove.  For
    39844082  # instance it was reported that on HP-UX the gcc test will end up
    3985   # making a dummy file named `D' -- because `-MD' means `put the output
    3986   # in D'.
     4083  # making a dummy file named 'D' -- because '-MD' means "put the output
     4084  # in D".
    39874085  rm -rf conftest.dir
    39884086  mkdir conftest.dir
     
    40194117    for i in 1 2 3 4 5 6; do
    40204118      echo '#include "conftst'$i'.h"' >> sub/conftest.c
    4021       # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
    4022       # Solaris 8's {/usr,}/bin/sh.
    4023       touch sub/conftst$i.h
     4119      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
     4120      # Solaris 10 /bin/sh.
     4121      echo '/* dummy */' > sub/conftst$i.h
    40244122    done
    40254123    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
    40264124
    4027     # We check with `-c' and `-o' for the sake of the "dashmstdout"
     4125    # We check with '-c' and '-o' for the sake of the "dashmstdout"
    40284126    # mode.  It turns out that the SunPro C++ compiler does not properly
    4029     # handle `-M -o', and we need to detect this.  Also, some Intel
    4030     # versions had trouble with output in subdirs
     4127    # handle '-M -o', and we need to detect this.  Also, some Intel
     4128    # versions had trouble with output in subdirs.
    40314129    am__obj=sub/conftest.${OBJEXT-o}
    40324130    am__minus_obj="-o $am__obj"
     
    40374135      ;;
    40384136    nosideeffect)
    4039       # after this tag, mechanisms are not by side-effect, so they'll
    4040       # only be used when explicitly requested
     4137      # After this tag, mechanisms are not by side-effect, so they'll
     4138      # only be used when explicitly requested.
    40414139      if test "x$enable_dependency_tracking" = xyes; then
    40424140        continue
     
    40464144      ;;
    40474145    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
    4048       # This compiler won't grok `-c -o', but also, the minuso test has
     4146      # This compiler won't grok '-c -o', but also, the minuso test has
    40494147      # not run yet.  These depmodes are late enough in the game, and
    40504148      # so weak that their functioning should not be impacted.
     
    41224220  test -z "$as_dir" && as_dir=.
    41234221    for ac_exec_ext in '' $ac_executable_extensions; do
    4124   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     4222  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
    41254223    ac_cv_prog_CC="${ac_tool_prefix}gcc"
    41264224    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     
    41624260  test -z "$as_dir" && as_dir=.
    41634261    for ac_exec_ext in '' $ac_executable_extensions; do
    4164   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     4262  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
    41654263    ac_cv_prog_ac_ct_CC="gcc"
    41664264    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     
    42154313  test -z "$as_dir" && as_dir=.
    42164314    for ac_exec_ext in '' $ac_executable_extensions; do
    4217   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     4315  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
    42184316    ac_cv_prog_CC="${ac_tool_prefix}cc"
    42194317    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     
    42564354  test -z "$as_dir" && as_dir=.
    42574355    for ac_exec_ext in '' $ac_executable_extensions; do
    4258   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     4356  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
    42594357    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
    42604358       ac_prog_rejected=yes
     
    43144412  test -z "$as_dir" && as_dir=.
    43154413    for ac_exec_ext in '' $ac_executable_extensions; do
    4316   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     4414  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
    43174415    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
    43184416    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     
    43584456  test -z "$as_dir" && as_dir=.
    43594457    for ac_exec_ext in '' $ac_executable_extensions; do
    4360   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     4458  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
    43614459    ac_cv_prog_ac_ct_CC="$ac_prog"
    43624460    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     
    45544652#include <stdarg.h>
    45554653#include <stdio.h>
    4556 #include <sys/types.h>
    4557 #include <sys/stat.h>
     4654struct stat;
    45584655/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
    45594656struct buf { int x; };
     
    46404737ac_compiler_gnu=$ac_cv_c_compiler_gnu
    46414738
     4739ac_ext=c
     4740ac_cpp='$CPP $CPPFLAGS'
     4741ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
     4742ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
     4743ac_compiler_gnu=$ac_cv_c_compiler_gnu
     4744{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
     4745$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
     4746if ${am_cv_prog_cc_c_o+:} false; then :
     4747  $as_echo_n "(cached) " >&6
     4748else
     4749  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
     4750/* end confdefs.h.  */
     4751
     4752int
     4753main ()
     4754{
     4755
     4756  ;
     4757  return 0;
     4758}
     4759_ACEOF
     4760  # Make sure it works both with $CC and with simple cc.
     4761  # Following AC_PROG_CC_C_O, we do the test twice because some
     4762  # compilers refuse to overwrite an existing .o file with -o,
     4763  # though they will create one.
     4764  am_cv_prog_cc_c_o=yes
     4765  for am_i in 1 2; do
     4766    if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
     4767   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
     4768   ac_status=$?
     4769   echo "$as_me:$LINENO: \$? = $ac_status" >&5
     4770   (exit $ac_status); } \
     4771         && test -f conftest2.$ac_objext; then
     4772      : OK
     4773    else
     4774      am_cv_prog_cc_c_o=no
     4775      break
     4776    fi
     4777  done
     4778  rm -f core conftest*
     4779  unset am_i
     4780fi
     4781{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
     4782$as_echo "$am_cv_prog_cc_c_o" >&6; }
     4783if test "$am_cv_prog_cc_c_o" != yes; then
     4784   # Losing compiler, so override with the script.
     4785   # FIXME: It is wrong to rewrite CC.
     4786   # But if we don't then we get into trouble of one sort or another.
     4787   # A longer-term fix would be to have automake use am__CC in this case,
     4788   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
     4789   CC="$am_aux_dir/compile $CC"
     4790fi
     4791ac_ext=c
     4792ac_cpp='$CPP $CPPFLAGS'
     4793ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
     4794ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
     4795ac_compiler_gnu=$ac_cv_c_compiler_gnu
     4796
     4797
    46424798depcc="$CC"   am_compiler_list=
    46434799
     
    46514807  # making bogus files that we don't know about and never remove.  For
    46524808  # instance it was reported that on HP-UX the gcc test will end up
    4653   # making a dummy file named `D' -- because `-MD' means `put the output
    4654   # in D'.
     4809  # making a dummy file named 'D' -- because '-MD' means "put the output
     4810  # in D".
    46554811  rm -rf conftest.dir
    46564812  mkdir conftest.dir
     
    46874843    for i in 1 2 3 4 5 6; do
    46884844      echo '#include "conftst'$i'.h"' >> sub/conftest.c
    4689       # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
    4690       # Solaris 8's {/usr,}/bin/sh.
    4691       touch sub/conftst$i.h
     4845      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
     4846      # Solaris 10 /bin/sh.
     4847      echo '/* dummy */' > sub/conftst$i.h
    46924848    done
    46934849    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
    46944850
    4695     # We check with `-c' and `-o' for the sake of the "dashmstdout"
     4851    # We check with '-c' and '-o' for the sake of the "dashmstdout"
    46964852    # mode.  It turns out that the SunPro C++ compiler does not properly
    4697     # handle `-M -o', and we need to detect this.  Also, some Intel
    4698     # versions had trouble with output in subdirs
     4853    # handle '-M -o', and we need to detect this.  Also, some Intel
     4854    # versions had trouble with output in subdirs.
    46994855    am__obj=sub/conftest.${OBJEXT-o}
    47004856    am__minus_obj="-o $am__obj"
     
    47054861      ;;
    47064862    nosideeffect)
    4707       # after this tag, mechanisms are not by side-effect, so they'll
    4708       # only be used when explicitly requested
     4863      # After this tag, mechanisms are not by side-effect, so they'll
     4864      # only be used when explicitly requested.
    47094865      if test "x$enable_dependency_tracking" = xyes; then
    47104866        continue
     
    47144870      ;;
    47154871    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
    4716       # This compiler won't grok `-c -o', but also, the minuso test has
     4872      # This compiler won't grok '-c -o', but also, the minuso test has
    47174873      # not run yet.  These depmodes are late enough in the game, and
    47184874      # so weak that their functioning should not be impacted.
     
    47864942  # making bogus files that we don't know about and never remove.  For
    47874943  # instance it was reported that on HP-UX the gcc test will end up
    4788   # making a dummy file named `D' -- because `-MD' means `put the output
    4789   # in D'.
     4944  # making a dummy file named 'D' -- because '-MD' means "put the output
     4945  # in D".
    47904946  rm -rf conftest.dir
    47914947  mkdir conftest.dir
     
    48204976    for i in 1 2 3 4 5 6; do
    48214977      echo '#include "conftst'$i'.h"' >> sub/conftest.c
    4822       # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
    4823       # Solaris 8's {/usr,}/bin/sh.
    4824       touch sub/conftst$i.h
     4978      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
     4979      # Solaris 10 /bin/sh.
     4980      echo '/* dummy */' > sub/conftst$i.h
    48254981    done
    48264982    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
    48274983
    4828     # We check with `-c' and `-o' for the sake of the "dashmstdout"
     4984    # We check with '-c' and '-o' for the sake of the "dashmstdout"
    48294985    # mode.  It turns out that the SunPro C++ compiler does not properly
    4830     # handle `-M -o', and we need to detect this.  Also, some Intel
    4831     # versions had trouble with output in subdirs
     4986    # handle '-M -o', and we need to detect this.  Also, some Intel
     4987    # versions had trouble with output in subdirs.
    48324988    am__obj=sub/conftest.${OBJEXT-o}
    48334989    am__minus_obj="-o $am__obj"
     
    48384994      ;;
    48394995    nosideeffect)
    4840       # after this tag, mechanisms are not by side-effect, so they'll
    4841       # only be used when explicitly requested
     4996      # After this tag, mechanisms are not by side-effect, so they'll
     4997      # only be used when explicitly requested.
    48424998      if test "x$enable_dependency_tracking" = xyes; then
    48434999        continue
     
    48475003      ;;
    48485004    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
    4849       # This compiler won't grok `-c -o', but also, the minuso test has
     5005      # This compiler won't grok '-c -o', but also, the minuso test has
    48505006      # not run yet.  These depmodes are late enough in the game, and
    48515007      # so weak that their functioning should not be impacted.
     
    49015057
    49025058
    4903 if test "x$CC" != xcc; then
    4904   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5
    4905 $as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
    4906 else
    4907   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5
    4908 $as_echo_n "checking whether cc understands -c and -o together... " >&6; }
    4909 fi
    4910 set dummy $CC; ac_cc=`$as_echo "$2" |
    4911                       sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
    4912 if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then :
    4913   $as_echo_n "(cached) " >&6
    4914 else
    4915   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
    4916 /* end confdefs.h.  */
    4917 
    4918 int
    4919 main ()
    4920 {
    4921 
    4922   ;
    4923   return 0;
    4924 }
    4925 _ACEOF
    4926 # Make sure it works both with $CC and with simple cc.
    4927 # We do the test twice because some compilers refuse to overwrite an
    4928 # existing .o file with -o, though they will create one.
    4929 ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
    4930 rm -f conftest2.*
    4931 if { { case "(($ac_try" in
    4932   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
    4933   *) ac_try_echo=$ac_try;;
    4934 esac
    4935 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
    4936 $as_echo "$ac_try_echo"; } >&5
    4937   (eval "$ac_try") 2>&5
    4938   ac_status=$?
    4939   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
    4940   test $ac_status = 0; } &&
    4941    test -f conftest2.$ac_objext && { { case "(($ac_try" in
    4942   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
    4943   *) ac_try_echo=$ac_try;;
    4944 esac
    4945 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
    4946 $as_echo "$ac_try_echo"; } >&5
    4947   (eval "$ac_try") 2>&5
    4948   ac_status=$?
    4949   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
    4950   test $ac_status = 0; };
    4951 then
    4952   eval ac_cv_prog_cc_${ac_cc}_c_o=yes
    4953   if test "x$CC" != xcc; then
    4954     # Test first that cc exists at all.
    4955     if { ac_try='cc -c conftest.$ac_ext >&5'
    4956   { { case "(($ac_try" in
    4957   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
    4958   *) ac_try_echo=$ac_try;;
    4959 esac
    4960 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
    4961 $as_echo "$ac_try_echo"; } >&5
    4962   (eval "$ac_try") 2>&5
    4963   ac_status=$?
    4964   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
    4965   test $ac_status = 0; }; }; then
    4966       ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
    4967       rm -f conftest2.*
    4968       if { { case "(($ac_try" in
    4969   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
    4970   *) ac_try_echo=$ac_try;;
    4971 esac
    4972 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
    4973 $as_echo "$ac_try_echo"; } >&5
    4974   (eval "$ac_try") 2>&5
    4975   ac_status=$?
    4976   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
    4977   test $ac_status = 0; } &&
    4978          test -f conftest2.$ac_objext && { { case "(($ac_try" in
    4979   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
    4980   *) ac_try_echo=$ac_try;;
    4981 esac
    4982 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
    4983 $as_echo "$ac_try_echo"; } >&5
    4984   (eval "$ac_try") 2>&5
    4985   ac_status=$?
    4986   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
    4987   test $ac_status = 0; };
    4988       then
    4989         # cc works too.
    4990         :
    4991       else
    4992         # cc exists but doesn't like -o.
    4993         eval ac_cv_prog_cc_${ac_cc}_c_o=no
    4994       fi
    4995     fi
    4996   fi
    4997 else
    4998   eval ac_cv_prog_cc_${ac_cc}_c_o=no
    4999 fi
    5000 rm -f core conftest*
    5001 
    5002 fi
    5003 if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
    5004   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
    5005 $as_echo "yes" >&6; }
    5006 else
    5007   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
    5008 $as_echo "no" >&6; }
    5009 
    5010 $as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h
    5011 
    5012 fi
    5013 
    5014 # FIXME: we rely on the cache variable name because
    5015 # there is no other way.
    5016 set dummy $CC
    5017 am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
    5018 eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
    5019 if test "$am_t" != yes; then
    5020    # Losing compiler, so override with the script.
    5021    # FIXME: It is wrong to rewrite CC.
    5022    # But if we don't then we get into trouble of one sort or another.
    5023    # A longer-term fix would be to have automake use am__CC in this case,
    5024    # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
    5025    CC="$am_aux_dir/compile $CC"
    5026 fi
    5027 
    50285059        # deprecated
    50295060# These are often not installed and people miss seeing the "no", so stop the configure.
     
    50465077  test -z "$as_dir" && as_dir=.
    50475078    for ac_exec_ext in '' $ac_executable_extensions; do
    5048   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     5079  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
    50495080    ac_cv_prog_YACC="$ac_prog"
    50505081    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     
    50915122  test -z "$as_dir" && as_dir=.
    50925123    for ac_exec_ext in '' $ac_executable_extensions; do
    5093   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     5124  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
    50945125    ac_cv_prog_LEX="$ac_prog"
    50955126    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     
    51235154c { yymore (); }
    51245155d { yyless (1); }
    5125 e { yyless (input () != 0); }
     5156e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument.  */
     5157    yyless ((input () != 0)); }
    51265158f { unput (yytext[0]); }
    51275159. { BEGIN INITIAL; }
     
    52815313  test -z "$as_dir" && as_dir=.
    52825314    for ac_exec_ext in '' $ac_executable_extensions; do
    5283   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     5315  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
    52845316    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
    52855317    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     
    53215353  test -z "$as_dir" && as_dir=.
    53225354    for ac_exec_ext in '' $ac_executable_extensions; do
    5323   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     5355  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
    53245356    ac_cv_prog_ac_ct_RANLIB="ranlib"
    53255357    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     
    55145546    for ac_exec_ext in '' $ac_executable_extensions; do
    55155547      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
    5516       { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
     5548      as_fn_executable_p "$ac_path_GREP" || continue
    55175549# Check for GNU ac_path_GREP and select it if it is found.
    55185550  # Check for GNU $ac_path_GREP
     
    55805612    for ac_exec_ext in '' $ac_executable_extensions; do
    55815613      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
    5582       { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
     5614      as_fn_executable_p "$ac_path_EGREP" || continue
    55835615# Check for GNU ac_path_EGREP and select it if it is found.
    55845616  # Check for GNU $ac_path_EGREP
     
    59195951$ac_includes_default
    59205952int
    5921 find_stack_direction ()
     5953find_stack_direction (int *addr, int depth)
    59225954{
    5923   static char *addr = 0;
    5924   auto char dummy;
    5925   if (addr == 0)
    5926     {
    5927       addr = &dummy;
    5928       return find_stack_direction ();
    5929     }
    5930   else
    5931     return (&dummy > addr) ? 1 : -1;
     5955  int dir, dummy = 0;
     5956  if (! addr)
     5957    addr = &dummy;
     5958  *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
     5959  dir = depth ? find_stack_direction (addr, depth - 1) : 0;
     5960  return dir + dummy;
    59325961}
    59335962
    59345963int
    5935 main ()
     5964main (int argc, char **argv)
    59365965{
    5937   return find_stack_direction () < 0;
     5966  return find_stack_direction (0, argc + !argv + 20) < 0;
    59385967}
    59395968_ACEOF
     
    59806009/* end confdefs.h.  */
    59816010
    5982 #include <stdbool.h>
    5983 #ifndef bool
    5984  "error: bool is not defined"
    5985 #endif
    5986 #ifndef false
    5987  "error: false is not defined"
    5988 #endif
    5989 #if false
    5990  "error: false is not 0"
    5991 #endif
    5992 #ifndef true
    5993  "error: true is not defined"
    5994 #endif
    5995 #if true != 1
    5996  "error: true is not 1"
    5997 #endif
    5998 #ifndef __bool_true_false_are_defined
    5999  "error: __bool_true_false_are_defined is not defined"
    6000 #endif
    6001 
    6002         struct s { _Bool s: 1; _Bool t; } s;
    6003 
    6004         char a[true == 1 ? 1 : -1];
    6005         char b[false == 0 ? 1 : -1];
    6006         char c[__bool_true_false_are_defined == 1 ? 1 : -1];
    6007         char d[(bool) 0.5 == true ? 1 : -1];
    6008         /* See body of main program for 'e'.  */
    6009         char f[(_Bool) 0.0 == false ? 1 : -1];
    6010         char g[true];
    6011         char h[sizeof (_Bool)];
    6012         char i[sizeof s.t];
    6013         enum { j = false, k = true, l = false * true, m = true * 256 };
    6014         /* The following fails for
    6015            HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
    6016         _Bool n[m];
    6017         char o[sizeof n == m * sizeof n[0] ? 1 : -1];
    6018         char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
    6019         /* Catch a bug in an HP-UX C compiler.  See
    6020            http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
    6021            http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
    6022         */
    6023         _Bool q = true;
    6024         _Bool *pq = &q;
     6011             #include <stdbool.h>
     6012             #ifndef bool
     6013              "error: bool is not defined"
     6014             #endif
     6015             #ifndef false
     6016              "error: false is not defined"
     6017             #endif
     6018             #if false
     6019              "error: false is not 0"
     6020             #endif
     6021             #ifndef true
     6022              "error: true is not defined"
     6023             #endif
     6024             #if true != 1
     6025              "error: true is not 1"
     6026             #endif
     6027             #ifndef __bool_true_false_are_defined
     6028              "error: __bool_true_false_are_defined is not defined"
     6029             #endif
     6030
     6031             struct s { _Bool s: 1; _Bool t; } s;
     6032
     6033             char a[true == 1 ? 1 : -1];
     6034             char b[false == 0 ? 1 : -1];
     6035             char c[__bool_true_false_are_defined == 1 ? 1 : -1];
     6036             char d[(bool) 0.5 == true ? 1 : -1];
     6037             /* See body of main program for 'e'.  */
     6038             char f[(_Bool) 0.0 == false ? 1 : -1];
     6039             char g[true];
     6040             char h[sizeof (_Bool)];
     6041             char i[sizeof s.t];
     6042             enum { j = false, k = true, l = false * true, m = true * 256 };
     6043             /* The following fails for
     6044                HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
     6045             _Bool n[m];
     6046             char o[sizeof n == m * sizeof n[0] ? 1 : -1];
     6047             char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
     6048             /* Catch a bug in an HP-UX C compiler.  See
     6049                http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
     6050                http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
     6051              */
     6052             _Bool q = true;
     6053             _Bool *pq = &q;
    60256054
    60266055int
     
    60286057{
    60296058
    6030         bool e = &s;
    6031         *pq |= q;
    6032         *pq |= ! q;
    6033         /* Refer to every declared value, to avoid compiler optimizations.  */
    6034         return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
    6035                 + !m + !n + !o + !p + !q + !pq);
     6059             bool e = &s;
     6060             *pq |= q;
     6061             *pq |= ! q;
     6062             /* Refer to every declared value, to avoid compiler optimizations.  */
     6063             return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
     6064                     + !m + !n + !o + !p + !q + !pq);
    60366065
    60376066  ;
     
    60486077{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5
    60496078$as_echo "$ac_cv_header_stdbool_h" >&6; }
    6050 ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
     6079   ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
    60516080if test "x$ac_cv_type__Bool" = xyes; then :
    60526081
     
    60576086
    60586087fi
     6088
    60596089
    60606090if test $ac_cv_header_stdbool_h = yes; then
     
    63636393
    63646394
     6395{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
     6396$as_echo_n "checking that generated files are newer than configure... " >&6; }
     6397   if test -n "$am_sleep_pid"; then
     6398     # Hide warnings about reused PIDs.
     6399     wait $am_sleep_pid 2>/dev/null
     6400   fi
     6401   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
     6402$as_echo "done" >&6; }
    63656403 if test -n "$EXEEXT"; then
    63666404  am__EXEEXT_TRUE=
     
    67056743    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
    67066744    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
    6707     # In both cases, we have to default to `cp -p'.
     6745    # In both cases, we have to default to `cp -pR'.
    67086746    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
    6709       as_ln_s='cp -p'
     6747      as_ln_s='cp -pR'
    67106748  elif ln conf$$.file conf$$ 2>/dev/null; then
    67116749    as_ln_s=ln
    67126750  else
    6713     as_ln_s='cp -p'
     6751    as_ln_s='cp -pR'
    67146752  fi
    67156753else
    6716   as_ln_s='cp -p'
     6754  as_ln_s='cp -pR'
    67176755fi
    67186756rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
     
    67746812fi
    67756813
    6776 if test -x / >/dev/null 2>&1; then
    6777   as_test_x='test -x'
    6778 else
    6779   if ls -dL / >/dev/null 2>&1; then
    6780     as_ls_L_option=L
    6781   else
    6782     as_ls_L_option=
    6783   fi
    6784   as_test_x='
    6785     eval sh -c '\''
    6786       if test -d "$1"; then
    6787         test -d "$1/.";
    6788       else
    6789         case $1 in #(
    6790         -*)set "./$1";;
    6791         esac;
    6792         case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
    6793         ???[sx]*):;;*)false;;esac;fi
    6794     '\'' sh
    6795   '
    6796 fi
    6797 as_executable_p=$as_test_x
     6814
     6815# as_fn_executable_p FILE
     6816# -----------------------
     6817# Test if FILE is an executable regular file.
     6818as_fn_executable_p ()
     6819{
     6820  test -f "$1" && test -x "$1"
     6821} # as_fn_executable_p
     6822as_test_x='test -x'
     6823as_executable_p=as_fn_executable_p
    67986824
    67996825# Sed expression to map a string onto a valid CPP name.
     
    68176843ac_log="
    68186844This file was extended by cfa-cc $as_me 1.0.0.0, which was
    6819 generated by GNU Autoconf 2.68.  Invocation command line was
     6845generated by GNU Autoconf 2.69.  Invocation command line was
    68206846
    68216847  CONFIG_FILES    = $CONFIG_FILES
     
    68836909ac_cs_version="\\
    68846910cfa-cc config.status 1.0.0.0
    6885 configured by $0, generated by GNU Autoconf 2.68,
     6911configured by $0, generated by GNU Autoconf 2.69,
    68866912  with options \\"\$ac_cs_config\\"
    68876913
    6888 Copyright (C) 2010 Free Software Foundation, Inc.
     6914Copyright (C) 2012 Free Software Foundation, Inc.
    68896915This config.status script is free software; the Free Software Foundation
    68906916gives unlimited permission to copy, distribute and modify it."
     
    69777003cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
    69787004if \$ac_cs_recheck; then
    6979   set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
     7005  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
    69807006  shift
    69817007  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
     
    76197645  case $ac_file$ac_mode in
    76207646    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
    7621   # Autoconf 2.62 quotes --file arguments for eval, but not when files
     7647  # Older Autoconf quotes --file arguments for eval, but not when files
    76227648  # are listed without --file.  Let's play safe and only enable the eval
    76237649  # if we detect the quoting.
     
    76327658    mf=`echo "$mf" | sed -e 's/:.*$//'`
    76337659    # Check whether this is an Automake generated Makefile or not.
    7634     # We used to match only the files named `Makefile.in', but
     7660    # We used to match only the files named 'Makefile.in', but
    76357661    # some people rename them; so instead we look at the file content.
    76367662    # Grep'ing the first line is not enough: some people post-process
     
    76667692    fi
    76677693    # Extract the definition of DEPDIR, am__include, and am__quote
    7668     # from the Makefile without running `make'.
     7694    # from the Makefile without running 'make'.
    76697695    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
    76707696    test -z "$DEPDIR" && continue
    76717697    am__include=`sed -n 's/^am__include = //p' < "$mf"`
    7672     test -z "am__include" && continue
     7698    test -z "$am__include" && continue
    76737699    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
    7674     # When using ansi2knr, U may be empty or an underscore; expand it
    7675     U=`sed -n 's/^U = //p' < "$mf"`
    76767700    # Find all dependency output files, they are included files with
    76777701    # $(DEPDIR) in their names.  We invoke sed twice because it is the
     
    76807704    for file in `sed -n "
    76817705      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
    7682          sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
     7706         sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
    76837707      # Make sure the directory exists.
    76847708      test -f "$dirpart/$file" && continue
  • TabularUnified configure.ac

    rb1e63ac5 r208e5be  
    99AM_SILENT_RULES([no])
    1010
    11 AM_INIT_AUTOMAKE
     11AM_INIT_AUTOMAKE([subdir-objects])
    1212AM_MAINTAINER_MODE(enable)                      # may require auto* software to be installed
    1313
  • TabularUnified doc/LaTeXmacros/lstlang.sty

    rb1e63ac5 r208e5be  
    88%% Created On       : Sat May 13 16:34:42 2017
    99%% Last Modified By : Peter A. Buhr
    10 %% Last Modified On : Fri May 26 12:47:09 2017
    11 %% Update Count     : 8
     10%% Last Modified On : Thu Jun 22 07:40:31 2017
     11%% Update Count     : 10
    1212%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1313
     
    116116                _Atomic, coroutine, is_coroutine, is_monitor, is_thread, monitor, mutex, nomutex,
    117117                resume, suspend, thread, _Thread_local, yield},
     118        moredirectives={defined,include_next}%
    118119}
    119120
  • TabularUnified doc/generic_types/mail

    rb1e63ac5 r208e5be  
    7878
    7979- OOPSLA'17 Submissions
     80
     81
     82
     83From: "OOPSLA'17 HotCRP" <noreply@oopsla17.hotcrp.com>
     84Subject: [OOPSLA'17] Paper #20 "Generic and Tuple Types with Efficient..."
     85To: Peter Buhr <pabuhr@uwaterloo.ca>
     86Cc: jonathan.aldrich@cs.cmu.edu
     87Reply-To: jonathan.aldrich@cs.cmu.edu
     88Date: Wed,  7 Jun 2017 13:33:40 +0000 (UTC)
     89
     90Dear Peter Buhr,
     91
     92The author response period for OOPSLA has started, and will continue until
     93the end of June 10th (Anywhere on Earth).  No email with a snapshot of your
     94reviews will be sent: you can see the live version of reviews (including
     95current updates) on the HotCRP system (links at the bottom).
     96
     97An author response should aim to:
     98 -correct reviewers' mistakes or misunderstandings
     99 -offer new information only when this addresses reviewers' concerns (e.g.,
     100"I wonder if A might work better...";  "we tried that, but...")
     101 -answer explicit questions by the reviewers. The key questions will be in a
     102designated "Questions for Author Response" entry of a review.
     103
     104Please keep in mind that an author response is *not* a "rebuttal". You are
     105not rebutting an opponent's arguments with your own, in front of an
     106audience that weighs both sets of arguments. Instead, your audience is the
     107same reviewers who offered the comments in the first place, and their
     108subjective weighing of different factors is very unlikely to change.
     109
     110During author response, please keep in mind that the reviewers are still
     111unaware of author identity. If you need to refer to author-identifying
     112information during your response, the ideal course of action is to place it
     113at an external location and include a URL, with an explicit warning (e.g.,
     114"WARNING: following this link will reveal author identity").
     115
     116As with all external resources, your response should be self-contained,
     117without consulting them. That is, the author-visible external URL is just
     118evidence, but the claim that this evidence supports should be clear in the
     119response text. For instance:
     120"we have received public feedback from the developers of X that confirm the
     121issue [supporting URL] (WARNING: following this link will reveal author
     122identity)"
     123
     124Your paper's access information is below:
     125
     126       Title: Generic and Tuple Types with Efficient Dynamic Layout in C∀
     127  Paper site: https://oopsla17.hotcrp.com/paper/20
     128
     129Use the link below to sign in to the site.
     130
     131https://oopsla17.hotcrp.com/?email=pabuhr%40uwaterloo.ca
     132
     133Please contact me <jonathan.aldrich@cs.cmu.edu> with any questions or
     134concerns.
     135
     136Best Regards and wishes for a constructive response,
     137
     138Jonathan Aldrich
     139
     140
     141
     142From: "OOPSLA'17 HotCRP" <noreply@oopsla17.hotcrp.com>
     143Subject: [OOPSLA'17] Paper #20 "Generic and Tuple Types with Efficient..."
     144To: Peter Buhr <pabuhr@uwaterloo.ca>
     145Cc: jonathan.aldrich@cs.cmu.edu
     146Reply-To: jonathan.aldrich@cs.cmu.edu
     147Date: Tue, 20 Jun 2017 00:33:10 +0000 (UTC)
     148
     149Dear Peter Buhr,
     150
     151I regret to inform you that your submission to OOPSLA'17 listed below has not
     152been selected for the second phase of the review process. I understand this is
     153not welcome news but selection was very competitive: 157 of the 223 papers
     154submitted did not advance to the second phase. For several of these, there was
     155a clear impression that in the future they can evolve into some of the
     156strongest results of our community.
     157
     158       Title: Generic and Tuple Types with Efficient Dynamic Layout in C∀
     159  Paper site: https://oopsla17.hotcrp.com/paper/20
     160  Login link: https://oopsla17.hotcrp.com/?email=pabuhr%40uwaterloo.ca
     161
     162Below you will find reviews, as well as author-visible comments--the latter may
     163include further communication. I hope you will find the reviewers' feedback
     164useful.
     165
     166Best Regards,
     167
     168- Jonathan Aldrich <jonathan.aldrich@cs.cmu.edu>, for OOPSLA 2017
     169Submissions
     170
     171
     172
     173===========================================================================
     174                           OOPSLA'17 Review #20A
     175---------------------------------------------------------------------------
     176 Paper #20: Generic and Tuple Types with Efficient Dynamic Layout in C∀
     177---------------------------------------------------------------------------
     178
     179                      Overall merit: C. Weak paper, though I will not fight
     180                                        strongly against it
     181                         Confidence: X. I am an expert in this area
     182
     183                         ===== Paper summary =====
     184
     185This presents an extension of the C programming language that tries to preserve the character of the existing language, while adding tuples and generics. Unlike C++ templates, generics preserve separate compilation. Types are represented at runtime, if needed, by size and alignment values, along with pointers to the code for any needed operators. A microbenchmark performance comparison is provided.
     186
     187                      ===== Comments for author =====
     188
     189This is an interesting extension to C, that may be of interest to some C programmers. It generally seems to be fairly well engineered, and mostly respects C's design goals.
     190
     191Unfortunately, there have been enough proposals for extended C dialects that this sort of design is tough to sell. And I don't think the evaluation really went far enough to make that case.
     192
     193The ideas in the paper don't appear to be fundamentally new. The idea of passing types as runtime objects has certainly been explored before. An additional ancient reference is http://dl.acm.org/citation.cfm?doid=13310.13330.
     194
     195There seems to be a new idea of minimally describing types using alignment and size attributes instead of (?) pointers to assignment operators and the like. But this scheme is not very well described. Notably, it is not clear how, say, a struct with atomic field or bit-fields would be described.
     196
     197I wasn't quite clear on the extent to which operator overloading is supported. The MAX example appears to me like it would be quite controversial among C programmers.
     198
     199It is not obvious that type inference here always converges. An outline of the algorithm would be useful.
     200
     201Above all, this needs experience results from a more complete implementation.
     202
     203Details:
     204
     205Relying on TIOBE here seems a bit dubious. Since it counts web pages, and C isn't exactly new and hot, it may actually understate your case.
     206
     207The print example seems a little simplistic, since it's not clear how it handles formatting.
     208
     209"does not using the return type"
     210
     211              ===== Questions for authors’ response =====
     212
     213How are atomics, volatile, and bit-fields in structs handled?
     214
     215===========================================================================
     216                           OOPSLA'17 Review #20B
     217---------------------------------------------------------------------------
     218 Paper #20: Generic and Tuple Types with Efficient Dynamic Layout in C∀
     219---------------------------------------------------------------------------
     220
     221                      Overall merit: D. Reject
     222                         Confidence: X. I am an expert in this area
     223
     224                         ===== Paper summary =====
     225
     226The authors present an extension to C, adding universal polymorphism and tuples. These features are described in prose. There is an implementation, though this is not described in depth in the paper. There is a benchmark evaluation.
     227
     228                      ===== Comments for author =====
     229
     230The paper is well-written and the concepts explained well. It is nice to see work in the low-level/C space - I believe that it is an area that has not been well-served by the OOPSLA community. My concerns with the paper are that the contribution is rather small and the concepts are not well-evaluated; specifically this is a language design paper and there is no attempt to evaluate the actual language design.
     231
     232While it is reasonable to describe only a couple of features in a paper, I would then expect a detailed description of the implementation and/or a formalism with proven safety properties and a thorough evaluation of the design. For a paper which only describes the design of a language the bar is higher than two features - for example, a description of a 'large' language such as D or Rust, even then I would expect a stronger evaluation.
     233
     234## On the design of C-forall
     235
     236There are some interesting points in the design of generics, notably the otype/dtype distinction. The design seems reasonable and follows what I would expect from other languages. The design for tuples is more unusual - the usual design of simple anonymous records with anonymous fields is extended with a mix of 'spread'ing, variadics, and implicit conversions. Importantly, the authors neither justify nor evaluate this departure - that is a severe omission for this paper. Furthermore, the only in-depth description of the implementation in the paper concerns tuples, and it seems to me that this is only interesting because of the unusual design - further reason for justifying it.
     237
     238## Evaluation
     239
     240The paper evaluates the implementation of C-forall with (effectively) a single micro-benchmark. That benchmark seems to show that C-forall performs worse than C++ on every measure, but this is not really discussed.
     241
     242A better performance evaluation would consist of multiple tests, both micro-benchmarks and realistic code and would test C-forall compared to alternatives (D, Rust, Go, etc.) not just C/C++.
     243
     244However, performance is not the really interesting thing to test here. The authors propose a new language and while performance is an important consideration for systems languages, it is far from the most important. I would like to see the usability of the language tested with user studies of different kinds (various levels of skill-level and coding scenarios). The authors could also use case studies or programming idioms to compare programming in C-forall vs the alternatives (again, comparing with D, Rust, etc. is more interesting to me than C).
     245
     246Finally, in designing C-forall, the authors make several assumptions about why C programmers use C. These should be backed up either with evaluation or citation. Statements in the paper certainly do not reflect my experience discussing language design with C programmers, and I would like to see them verified.
     247
     248
     249## Related work
     250
     251The related work section is broad and gives good descriptions of other languages. However, the comparisons between languages focus more on the high-level goals of the language. It would be more interesting to focus on the details of the languages - the comparisons between Cyclone, C++, Java, and C-forall generics are good, I would like to see more of this with D and Rust, which are the more modern alternatives to C-forall (for example, Rust's notion of Sized and ?Sized types seems similar to otypes/dtypes).
     252
     253The related work is really missing any discussion of why the C-forall design choices are better than other languages. To clarify, I mean the specific design of generics and tuples, c.f., the suitability of the language in general because of garbage collection or learning difficulties.
     254
     255===========================================================================
     256                           OOPSLA'17 Review #20C
     257---------------------------------------------------------------------------
     258 Paper #20: Generic and Tuple Types with Efficient Dynamic Layout in C∀
     259---------------------------------------------------------------------------
     260
     261                      Overall merit: D. Reject
     262                         Confidence: Z. I am not an expert; my evaluation
     263                                        is that of an informed outsider
     264
     265                         ===== Paper summary =====
     266
     267The paper presents two language features of "Cforall": generics and tuples.
     268
     269                      ===== Comments for author =====
     270
     271The authors really need to talk about C++ as early as possible IMHO. That's the first thing that came to mind when reading the abstract: how is this different from C++?
     272
     273Comparison with C++:
     274The main difference with C++ seems to be that Cforall favors separate compilation at the expense of runtime overhead while C++ systematically avoids any runtime overhead (at the expense of slow compilation times). C++ approach makes more sense IMHO. While it's true that people where using C for almost everything 30 years ago, that is just not true anymore. Most people writing C today are doing system programming, otherwise there would be using a higher level programming language (C#, Java etc ...).
     275Now, when doing system programming, one needs very fine grain control over the resources: memory layout, etc ...
     276It is pretty clear to me that the people writing that kind of code will favor generics that do not cost any overhead at runtime, otherwise they would be writing Java in the first place.
     277The authors need to better justify the runtime overhead, or give escape hatches for those who don't want to pay that cost at runtime.
     278They very often go back to the benefit of separate compilation, but that's not enough IMHO. Here is a proposal: why not have 2 modes, one called debug mode, used while developing the code, that would compile generics with a runtime overhead. Another, called production, that would unfold the world like C++ does?
     279
     280About Tuples:
     281The section about tuples is too long. I would have spent more time explaining generics.
     282
     283Feedback:
     284"This installation base"
     285Unclear what you mean by that.
     286
     287"Prior projects ... but failed ..."
     288Hummm ... What about C++.
     289
     290"... object-oriented or functional programming with garbage collection ..."
     291You are really mixing apples and oranges here. Many C programmers have nothing agains object-oriented features, not even functional programming (C++ 11 adds
     292a bunch of features proving my point), but it's clear that most of them feel very strongly against automated garbage collection.
     293
     294"In many cases, C++ is often ..."
     295This sentence feels like it is coming out of nowhere.
     296
     297"... the polymorphic runtime-cost ..."
     298Is there any way to avoid that overhead? It's true it will make the compiler faster, but there are cases where the user might not want to pay for
     299the overhead at runtime. Is there a way to force the compiler to specialize the code?
     300
     301"... to write a type-safe Cforall wrapper malloc based ..."
     302That cannot be true in general. Malloc produces a pointer (of any type), given an integer (the size).
     303It looks like Cforall is assuming that the integer is the result of a call to sizeof (a good practice in C).
     304However, if that's the case, it should be explained.
     305
     306"... allows variable overloading ..."
     307How are conflict resolved? In other words, what happens when two variables could be used?
     308
     309"... reuses the generated structure declarations where appropriate."
     310This is too vague.
     311
     312"... have multiple outcomes, some exceptional."
     313Humm, I would say these two things are distinct. Let's just way that this way of presenting things is strange, I woulds ay that a function can either
     314return one or multiple values or throw an exception. Not that some of the values returned are "exceptional".
     315
     316"The type-resolver ..."
     317What's that? Type-checker? Type-inference?
     318
     319"... applies C conversions."
     320Noooo! That's exactly what leads to very subtle bugs. Is there any way to stop those conversions from happening?
     321
     322"The minimal cost ..."
     323In what regard? Runtime cost? How does the "resolver" know how expensive the conversions are?
     324
     325"z = 10 // mass assignments"
     326That stuff is completely unreadable. Why not introduce a new operator?
     327
     328"... roughly equivalent time ..."
     329Well, C++ looks faster to me.
     330
     331"... is restricted because the resolution does not using ..."
     332Did you mean, does not use?
     333
     334"... D and go are garbage collected ..."
     335Yes, but in D, the use of the GC is optional.
     336
     337"... while respecting the talent and skill of C programmers."
     338Are you implying that other approaches are not?
     339
     340"On the surface, the project may appear as a rehash of similar mechanisms in C++."
     341Absolutely.
     342
     343"... integration with C and its programmers ..."
     344Bold claim. What makes you think you are integrated with programmers? Number of users?
     345
     346"... inline annotation at polymorphic function call sites to create a template-specialization ..."
     347This should have been mentioned sooner. Plus conflating inlining and specialization is unfortunate.
     348Does "inline" also inline the function? Or does it only specialize the code?
     349If it also inline, that's a very unfortunate design. I might want to specialize the code, but without inlining ...
     350How do I specialize a recursive function?
  • TabularUnified doc/proposals/references.md

    rb1e63ac5 r208e5be  
    1717derived rvalue types such as pointer types may include qualifiers;
    1818`const int *` is a distinct type from `int *`, though the latter is safely
    19 convertable to the former.
     19convertible to the former.
    2020In general, any number of qualifiers can be safely added to the
    2121pointed-to-type of a pointer type, e.g. `int *` converts safely to
     
    2323`const volatile int *`.
    2424
    25 Since lvalues are precicely "addressable objects", in C, only lvalues can be
     25Since lvalues are precisely "addressable objects", in C, only lvalues can be
    2626used as the operand of the `&` address-of operator.
    2727Similarly, only modifiable lvalues may be used as the assigned-to
     
    147147call "lvalue of type `T`" as `T&`.
    148148There's also an obvious argument that lvalues of a (possibly-qualified) type
    149 `T` should be convertable to references of type `T`, where `T` is also
     149`T` should be convertible to references of type `T`, where `T` is also
    150150so-qualified (e.g. lvalue `int` to `int&`, lvalue `const char` to
    151151`const char&`).
    152152By similar arguments to pointer types, qualifiers should be addable to the
    153153referred-to type of a reference (e.g. `int&` to `const int&`).
    154 As a note, since pointer arithmetic is explictly not defined on `T&`,
     154As a note, since pointer arithmetic is explicitly not defined on `T&`,
    155155`restrict T&` should be allowable and would have alias-analysis rules that
    156156are actually comprehensible to mere mortals.
  • TabularUnified doc/user/Makefile

    rb1e63ac5 r208e5be  
    1212
    1313FIGURES = ${addsuffix .tex, \
     14EHMHierarchy \
    1415Cdecl \
    1516pointer1 \
  • TabularUnified doc/user/user.tex

    rb1e63ac5 r208e5be  
    1111%% Created On       : Wed Apr  6 14:53:29 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Fri Jun 16 12:00:01 2017
    14 %% Update Count     : 2433
     13%% Last Modified On : Sun Jul  2 09:49:56 2017
     14%% Update Count     : 2503
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    2525\usepackage{textcomp}
    2626\usepackage[latin1]{inputenc}
    27 % Default underscore is too low and wide. Cannot use lstlisting "literate" as replacing underscore
    28 % removes it as a variable-name character so keyworks in variables are highlighted
    29 \DeclareTextCommandDefault{\textunderscore}{\leavevmode\makebox[1.2ex][c]{\rule{1ex}{0.1ex}}}
    30 
    3127
    3228\usepackage{fullpage,times,comment}
     
    4844\renewcommand{\UrlFont}{\small\sf}
    4945
     46% Default underscore is too low and wide. Cannot use lstlisting "literate" as replacing underscore
     47% removes it as a variable-name character so keywords in variables are highlighted. MUST APPEAR
     48% AFTER HYPERREF.
     49\renewcommand{\_}{\leavevmode\makebox[1.2ex][c]{\rule{1ex}{0.075ex}}}
     50\renewcommand{\textunderscore}{\leavevmode\makebox[1.2ex][c]{\rule{1ex}{0.075ex}}}
     51
    5052\setlength{\topmargin}{-0.45in}                                                 % move running title into header
    5153\setlength{\headsep}{0.25in}
     
    110112\renewcommand{\subsectionmark}[1]{\markboth{\thesubsection\quad #1}{\thesubsection\quad #1}}
    111113\pagenumbering{roman}
    112 %\linenumbers                                            % comment out to turn off line numbering
     114\linenumbers                                            % comment out to turn off line numbering
    113115
    114116\maketitle
     
    477479#endif // ! otype
    478480
    479 #include_next <bfd.h>                   §\C{// must have internal check for multiple expansion}§
     481#®include_next® <bfd.h>                 §\C{// must have internal check for multiple expansion}§
    480482
    481483#if defined( otype ) && defined( __CFA_BFD_H__ )        §\C{// reset only if set}§
     
    487489\label{f:InterpositionHeaderFile}
    488490\end{figure}
    489 
    490 
    491 \section{Declarations}
    492 \label{s:Declarations}
    493 
    494 C declaration syntax is notoriously confusing and error prone.
    495 For example, many C programmers are confused by a declaration as simple as:
    496 \begin{quote2}
    497 \begin{tabular}{@{}ll@{}}
    498 \begin{cfa}
    499 int * x[5]
    500 \end{cfa}
    501 &
    502 \raisebox{-0.75\totalheight}{\input{Cdecl}}
    503 \end{tabular}
    504 \end{quote2}
    505 Is this an array of 5 pointers to integers or a \Index{pointer} to an array of 5 integers?
    506 The fact this declaration is unclear to many C programmers means there are \Index{productivity} and \Index{safety} issues even for basic programs.
    507 Another example of confusion results from the fact that a routine name and its parameters are embedded within the return type, mimicking the way the return value is used at the routine's call site.
    508 For example, a routine returning a \Index{pointer} to an array of integers is defined and used in the following way:
    509 \begin{cfa}
    510 int ®(*®f®())[®5®]® {...};                              §\C{definition}§
    511  ... ®(*®f®())[®3®]® += 1;                              §\C{usage}§
    512 \end{cfa}
    513 Essentially, the return type is wrapped around the routine name in successive layers (like an \Index{onion}).
    514 While attempting to make the two contexts consistent is a laudable goal, it has not worked out in practice.
    515 
    516 \CFA provides its own type, variable and routine declarations, using a different syntax.
    517 The new declarations place qualifiers to the left of the base type, while C declarations place qualifiers to the right of the base type.
    518 In the following example, \R{red} is the base type and \B{blue} is qualifiers.
    519 The \CFA declarations move the qualifiers to the left of the base type, \ie move the blue to the left of the red, while the qualifiers have the same meaning but are ordered left to right to specify a variable's type.
    520 \begin{quote2}
    521 \begin{tabular}{@{}l@{\hspace{3em}}l@{}}
    522 \multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c}{\textbf{C}}        \\
    523 \begin{cfa}
    524 ß[5] *ß ®int® x1;
    525 ß* [5]ß ®int® x2;
    526 ß[* [5] int]ß f®( int p )®;
    527 \end{cfa}
    528 &
    529 \begin{cfa}
    530 ®int® ß*ß x1 ß[5]ß;
    531 ®int® ß(*ßx2ß)[5]ß;
    532 ßint (*ßf®( int p )®ß)[5]ß;
    533 \end{cfa}
    534 \end{tabular}
    535 \end{quote2}
    536 The only exception is \Index{bit field} specification, which always appear to the right of the base type.
    537 % Specifically, the character ©*© is used to indicate a pointer, square brackets ©[©\,©]© are used to represent an array or function return value, and parentheses ©()© are used to indicate a routine parameter.
    538 However, unlike C, \CFA type declaration tokens are distributed across all variables in the declaration list.
    539 For instance, variables ©x© and ©y© of type \Index{pointer} to integer are defined in \CFA as follows:
    540 \begin{quote2}
    541 \begin{tabular}{@{}l@{\hspace{3em}}l@{}}
    542 \multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c}{\textbf{C}}        \\
    543 \begin{cfa}
    544 ®*® int x, y;
    545 \end{cfa}
    546 &
    547 \begin{cfa}
    548 int ®*®x, ®*®y;
    549 \end{cfa}
    550 \end{tabular}
    551 \end{quote2}
    552 The downside of this semantics is the need to separate regular and \Index{pointer} declarations:
    553 \begin{quote2}
    554 \begin{tabular}{@{}l@{\hspace{3em}}l@{}}
    555 \multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c}{\textbf{C}}        \\
    556 \begin{cfa}
    557 ®*® int x;
    558 int y;
    559 \end{cfa}
    560 &
    561 \begin{cfa}
    562 int ®*®x, y;
    563 
    564 \end{cfa}
    565 \end{tabular}
    566 \end{quote2}
    567 which is \Index{prescribing} a safety benefit.
    568 Other examples are:
    569 \begin{quote2}
    570 \begin{tabular}{@{}l@{\hspace{3em}}l@{\hspace{2em}}l@{}}
    571 \multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c@{\hspace{2em}}}{\textbf{C}} \\
    572 \begin{cfa}
    573 [ 5 ] int z;
    574 [ 5 ] * char w;
    575 * [ 5 ] double v;
    576 struct s {
    577         int f0:3;
    578         * int f1;
    579         [ 5 ] * int f2;
    580 };
    581 \end{cfa}
    582 &
    583 \begin{cfa}
    584 int z[ 5 ];
    585 char * w[ 5 ];
    586 double (* v)[ 5 ];
    587 struct s {
    588         int f0:3;
    589         int * f1;
    590         int * f2[ 5 ]
    591 };
    592 \end{cfa}
    593 &
    594 \begin{cfa}
    595 // array of 5 integers
    596 // array of 5 pointers to char
    597 // pointer to array of 5 doubles
    598 
    599 // common bit field syntax
    600 
    601 
    602 
    603 \end{cfa}
    604 \end{tabular}
    605 \end{quote2}
    606 
    607 All type qualifiers, \eg ©const©, ©volatile©, etc., are used in the normal way with the new declarations and also appear left to right, \eg:
    608 \begin{quote2}
    609 \begin{tabular}{@{}l@{\hspace{1em}}l@{\hspace{1em}}l@{}}
    610 \multicolumn{1}{c@{\hspace{1em}}}{\textbf{\CFA}}        & \multicolumn{1}{c@{\hspace{1em}}}{\textbf{C}} \\
    611 \begin{cfa}
    612 const * const int x;
    613 const * [ 5 ] const int y;
    614 \end{cfa}
    615 &
    616 \begin{cfa}
    617 int const * const x;
    618 const int (* const y)[ 5 ]
    619 \end{cfa}
    620 &
    621 \begin{cfa}
    622 // const pointer to const integer
    623 // const pointer to array of 5 const integers
    624 \end{cfa}
    625 \end{tabular}
    626 \end{quote2}
    627 All declaration qualifiers, \eg ©extern©, ©static©, etc., are used in the normal way with the new declarations but can only appear at the start of a \CFA routine declaration,\footnote{\label{StorageClassSpecifier}
    628 The placement of a storage-class specifier other than at the beginning of the declaration specifiers in a declaration is an obsolescent feature.~\cite[\S~6.11.5(1)]{C11}} \eg:
    629 \begin{quote2}
    630 \begin{tabular}{@{}l@{\hspace{3em}}l@{\hspace{2em}}l@{}}
    631 \multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c@{\hspace{2em}}}{\textbf{C}} \\
    632 \begin{cfa}
    633 extern [ 5 ] int x;
    634 static * const int y;
    635 \end{cfa}
    636 &
    637 \begin{cfa}
    638 int extern x[ 5 ];
    639 const int static * y;
    640 \end{cfa}
    641 &
    642 \begin{cfa}
    643 // externally visible array of 5 integers
    644 // internally visible pointer to constant int
    645 \end{cfa}
    646 \end{tabular}
    647 \end{quote2}
    648 
    649 The new declaration syntax can be used in other contexts where types are required, \eg casts and the pseudo-routine ©sizeof©:
    650 \begin{quote2}
    651 \begin{tabular}{@{}l@{\hspace{3em}}l@{}}
    652 \multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c}{\textbf{C}}        \\
    653 \begin{cfa}
    654 y = (®* int®)x;
    655 i = sizeof(®[ 5 ] * int®);
    656 \end{cfa}
    657 &
    658 \begin{cfa}
    659 y = (®int *®)x;
    660 i = sizeof(®int * [ 5 ]®);
    661 \end{cfa}
    662 \end{tabular}
    663 \end{quote2}
    664 
    665 Finally, new \CFA declarations may appear together with C declarations in the same program block, but cannot be mixed within a specific declaration.
    666 Therefore, a programmer has the option of either continuing to use traditional C declarations or take advantage of the new style.
    667 Clearly, both styles need to be supported for some time due to existing C-style header-files, particularly for UNIX systems.
    668 
    669 
    670 \section{Pointer/Reference}
    671 
    672 C provides a \newterm{pointer type};
    673 \CFA adds a \newterm{reference type}.
    674 These types may be derived from an object or routine type, called the \newterm{referenced type}.
    675 Objects of these types contain an \newterm{address}, which is normally a location in memory, but may also address memory-mapped registers in hardware devices.
    676 An integer constant expression with the value 0, or such an expression cast to type ©void *©, is called a \newterm{null-pointer constant}.\footnote{
    677 One way to conceptualize the null pointer is that no variable is placed at this address, so the null-pointer address can be used to denote an uninitialized pointer/reference object;
    678 \ie the null pointer is guaranteed to compare unequal to a pointer to any object or routine.}
    679 An address is \newterm{sound}, if it points to a valid memory location in scope, \ie within the program's execution-environment and has not been freed.
    680 Dereferencing an \newterm{unsound} address, including the null pointer, is \Index{undefined}, often resulting in a \Index{memory fault}.
    681 
    682 A program \newterm{object} is a region of data storage in the execution environment, the contents of which can represent values.
    683 In most cases, objects are located in memory at an address, and the variable name for an object is an implicit address to the object generated by the compiler and automatically dereferenced, as in:
    684 \begin{quote2}
    685 \begin{tabular}{@{}ll@{\hspace{2em}}l@{}}
    686 \begin{cfa}
    687 int x;
    688 x = 3;
    689 int y;
    690 y = x;
    691 \end{cfa}
    692 &
    693 \raisebox{-0.45\totalheight}{\input{pointer1}}
    694 &
    695 \begin{cfa}
    696 int * ®const® x = (int *)100
    697 *x = 3;                 // implicit dereference
    698 int * ®const® y = (int *)104;
    699 *y = *x;                // implicit dereference
    700 \end{cfa}
    701 \end{tabular}
    702 \end{quote2}
    703 where the right example is how the compiler logically interprets the variables in the left example.
    704 Since a variable name only points to one address during its lifetime, it is an \Index{immutable} \Index{pointer};
    705 hence, the implicit type of pointer variables ©x© and ©y© are constant pointers in the compiler interpretation.
    706 In general, variable addresses are stored in instructions instead of loaded from memory, and hence may not occupy storage.
    707 These approaches are contrasted in the following:
    708 \begin{quote2}
    709 \begin{tabular}{@{}l|l@{}}
    710 \multicolumn{1}{c|}{explicit variable address} & \multicolumn{1}{c}{implicit variable address} \\
    711 \hline
    712 \begin{cfa}
    713 lda             r1,100                  // load address of x
    714 ld               r2,(r1)                  // load value of x
    715 lda             r3,104                  // load address of y
    716 st               r2,(r3)                  // store x into y
    717 \end{cfa}
    718 &
    719 \begin{cfa}
    720 
    721 ld              r2,(100)                // load value of x
    722 
    723 st              r2,(104)                // store x into y
    724 \end{cfa}
    725 \end{tabular}
    726 \end{quote2}
    727 Finally, the immutable nature of a variable's address and the fact that there is no storage for the variable pointer means pointer assignment\index{pointer!assignment}\index{assignment!pointer} is impossible.
    728 Therefore, the expression ©x = y© has only one meaning, ©*x = *y©, \ie manipulate values, which is why explicitly writing the dereferences is unnecessary even though it occurs implicitly as part of \Index{instruction decoding}.
    729 
    730 A \Index{pointer}/\Index{reference} object is a generalization of an object variable-name, \ie a mutable address that can point to more than one memory location during its lifetime.
    731 (Similarly, an integer variable can contain multiple integer literals during its lifetime versus an integer constant representing a single literal during its lifetime, and like a variable name, may not occupy storage if the literal is embedded directly into instructions.)
    732 Hence, a pointer occupies memory to store its current address, and the pointer's value is loaded by dereferencing, \eg:
    733 \begin{quote2}
    734 \begin{tabular}{@{}l@{\hspace{2em}}l@{}}
    735 \begin{cfa}
    736 int x, y, ®*® p1, ®*® p2, ®**® p3;
    737 p1 = ®&®x;               // p1 points to x
    738 p2 = p1;                 // p2 points to x
    739 p1 = ®&®y;               // p1 points to y
    740 p3 = &p2;               // p3 points to p2
    741 \end{cfa}
    742 &
    743 \raisebox{-0.5\totalheight}{\input{pointer2.pstex_t}}
    744 \end{tabular}
    745 \end{quote2}
    746 
    747 Notice, an address has a \Index{duality}\index{address!duality}: a location in memory or the value at that location.
    748 In many cases, a compiler might be able to infer the best meaning for these two cases.
    749 For example, \Index*{Algol68}~\cite{Algol68} infers pointer dereferencing to select the best meaning for each pointer usage
    750 \begin{cfa}
    751 p2 = p1 + x;                                    §\C{// compiler infers *p2 = *p1 + x;}§
    752 \end{cfa}
    753 Algol68 infers the following dereferencing ©*p2 = *p1 + x©, because adding the arbitrary integer value in ©x© to the address of ©p1© and storing the resulting address into ©p2© is an unlikely operation.
    754 Unfortunately, automatic dereferencing does not work in all cases, and so some mechanism is necessary to fix incorrect choices.
    755 
    756 Rather than inferring dereference, most programming languages pick one implicit dereferencing semantics, and the programmer explicitly indicates the other to resolve address-duality.
    757 In C, objects of pointer type always manipulate the pointer object's address:
    758 \begin{cfa}
    759 p1 = p2;                                                §\C{// p1 = p2\ \ rather than\ \ *p1 = *p2}§
    760 p2 = p1 + x;                                    §\C{// p2 = p1 + x\ \ rather than\ \ *p2 = *p1 + x}§
    761 \end{cfa}
    762 even though the assignment to ©p2© is likely incorrect, and the programmer probably meant:
    763 \begin{cfa}
    764 p1 = p2;                                                §\C{// pointer address assignment}§
    765 ®*®p2 = ®*®p1 + x;                              §\C{// pointed-to value assignment / operation}§
    766 \end{cfa}
    767 The C semantics work well for situations where manipulation of addresses is the primary meaning and data is rarely accessed, such as storage management (©malloc©/©free©).
    768 
    769 However, in most other situations, the pointed-to value is requested more often than the pointer address.
    770 \begin{cfa}
    771 *p2 = ((*p1 + *p2) * (**p3 - *p1)) / (**p3 - 15);
    772 \end{cfa}
    773 In this case, it is tedious to explicitly write the dereferencing, and error prone when pointer arithmetic is allowed.
    774 It is better to have the compiler generate the dereferencing and have no implicit pointer arithmetic:
    775 \begin{cfa}
    776 p2 = ((p1 + p2) * (p3 - p1)) / (p3 - 15);
    777 \end{cfa}
    778 
    779 To support this common case, a reference type is introduced in \CFA, denoted by ©&©, which is the opposite dereference semantics to a pointer type, making the value at the pointed-to location the implicit semantics for dereferencing (similar but not the same as \CC \Index{reference type}s).
    780 \begin{cfa}
    781 int x, y, ®&® r1, ®&® r2, ®&&® r3;
    782 ®&®r1 = &x;                                             §\C{// r1 points to x}§
    783 ®&®r2 = &r1;                                    §\C{// r2 points to x}§
    784 ®&®r1 = &y;                                             §\C{// r1 points to y}§
    785 ®&&®r3 = ®&®&r2;                                §\C{// r3 points to r2}§
    786 r2 = ((r1 + r2) * (r3 - r1)) / (r3 - 15); §\C{// implicit dereferencing}§
    787 \end{cfa}
    788 Except for auto-dereferencing by the compiler, this reference example is the same as the previous pointer example.
    789 Hence, a reference behaves like the variable name for the current variable it is pointing-to.
    790 One way to conceptualize a reference is via a rewrite rule, where the compiler inserts a dereference operator before the reference variable for each reference qualifier in a declaration, so the previous example becomes:
    791 \begin{cfa}
    792 ®*®r2 = ((®*®r1 + ®*®r2) ®*® (®**®r3 - ®*®r1)) / (®**®r3 - 15);
    793 \end{cfa}
    794 When a reference operation appears beside a dereference operation, \eg ©&*©, they cancel out.
    795 However, in C, the cancellation always yields a value (\Index{rvalue}).\footnote{
    796 The unary ©&© operator yields the address of its operand.
    797 If the operand has type ``type'', the result has type ``pointer to type''.
    798 If the operand is the result of a unary ©*© operator, neither that operator nor the ©&© operator is evaluated and the result is as if both were omitted, except that the constraints on the operators still apply and the result is not an lvalue.~\cite[\S~6.5.3.2--3]{C11}}
    799 For a \CFA reference type, the cancellation on the left-hand side of assignment leaves the reference as an address (\Index{lvalue}):
    800 \begin{cfa}
    801 (&®*®)r1 = &x;                                  §\C{// (\&*) cancel giving address in r1 not variable pointed-to by r1}§
    802 \end{cfa}
    803 Similarly, the address of a reference can be obtained for assignment or computation (\Index{rvalue}):
    804 \begin{cfa}
    805 (&(&®*®)®*®)r3 = &(&®*®)r2;             §\C{// (\&*) cancel giving address in r2, (\&(\&*)*) cancel giving address in r3}§
    806 \end{cfa}
    807 Cancellation\index{cancellation!pointer/reference}\index{pointer!cancellation} works to arbitrary depth.
    808 
    809 Fundamentally, pointer and reference objects are functionally interchangeable because both contain addresses.
    810 \begin{cfa}
    811 int x, *p1 = &x, **p2 = &p1, ***p3 = &p2,
    812                  &r1 = x,    &&r2 = r1,   &&&r3 = r2;
    813 ***p3 = 3;                                              §\C{// change x}§
    814 r3 = 3;                                                 §\C{// change x, ***r3}§
    815 **p3 = ...;                                             §\C{// change p1}§
    816 &r3 = ...;                                              §\C{// change r1, (\&*)**r3, 1 cancellation}§
    817 *p3 = ...;                                              §\C{// change p2}§
    818 &&r3 = ...;                                             §\C{// change r2, (\&(\&*)*)*r3, 2 cancellations}§
    819 &&&r3 = p3;                                             §\C{// change r3 to p3, (\&(\&(\&*)*)*)r3, 3 cancellations}§
    820 \end{cfa}
    821 Furthermore, both types are equally performant, as the same amount of dereferencing occurs for both types.
    822 Therefore, the choice between them is based solely on whether the address is dereferenced frequently or infrequently, which dictates the amount of implicit dereferencing aid from the compiler.
    823 
    824 As for a pointer type, a reference type may have qualifiers:
    825 \begin{cfa}
    826 const int cx = 5;                                       §\C{// cannot change cx;}§
    827 const int & cr = cx;                            §\C{// cannot change what cr points to}§
    828 ®&®cr = &cx;                                            §\C{// can change cr}§
    829 cr = 7;                                                         §\C{// error, cannot change cx}§
    830 int & const rc = x;                                     §\C{// must be initialized}§
    831 ®&®rc = &x;                                                     §\C{// error, cannot change rc}§
    832 const int & const crc = cx;                     §\C{// must be initialized}§
    833 crc = 7;                                                        §\C{// error, cannot change cx}§
    834 ®&®crc = &cx;                                           §\C{// error, cannot change crc}§
    835 \end{cfa}
    836 Hence, for type ©& const©, there is no pointer assignment, so ©&rc = &x© is disallowed, and \emph{the address value cannot be the null pointer unless an arbitrary pointer is coerced\index{coercion} into the reference}:
    837 \begin{cfa}
    838 int & const cr = *0;                            §\C{// where 0 is the int * zero}§
    839 \end{cfa}
    840 Note, constant reference-types do not prevent \Index{addressing errors} because of explicit storage-management:
    841 \begin{cfa}
    842 int & const cr = *malloc();
    843 cr = 5;
    844 free( &cr );
    845 cr = 7;                                                         §\C{// unsound pointer dereference}§
    846 \end{cfa}
    847 
    848 The position of the ©const© qualifier \emph{after} the pointer/reference qualifier causes confuse for C programmers.
    849 The ©const© qualifier cannot be moved before the pointer/reference qualifier for C style-declarations;
    850 \CFA-style declarations (see \VRef{s:Declarations}) attempt to address this issue:
    851 \begin{quote2}
    852 \begin{tabular}{@{}l@{\hspace{3em}}l@{}}
    853 \multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c}{\textbf{C}}        \\
    854 \begin{cfa}
    855 ®const® * ®const® * const int ccp;
    856 ®const® & ®const® & const int ccr;
    857 \end{cfa}
    858 &
    859 \begin{cfa}
    860 const int * ®const® * ®const® ccp;
    861 
    862 \end{cfa}
    863 \end{tabular}
    864 \end{quote2}
    865 where the \CFA declaration is read left-to-right.
    866 
    867 Finally, like pointers, references are usable and composable with other type operators and generators.
    868 \begin{cfa}
    869 int w, x, y, z, & ar[3] = { x, y, z }; §\C{// initialize array of references}§
    870 &ar[1] = &w;                                            §\C{// change reference array element}§
    871 typeof( ar[1] ) p;                                      §\C{// (gcc) is int, i.e., the type of referenced object}§
    872 typeof( &ar[1] ) q;                                     §\C{// (gcc) is int \&, i.e., the type of reference}§
    873 sizeof( ar[1] ) == sizeof( int );       §\C{// is true, i.e., the size of referenced object}§
    874 sizeof( &ar[1] ) == sizeof( int *)      §\C{// is true, i.e., the size of a reference}§
    875 \end{cfa}
    876 
    877 In contrast to \CFA reference types, \Index*[C++]{\CC{}}'s reference types are all ©const© references, preventing changes to the reference address, so only value assignment is possible, which eliminates half of the \Index{address duality}.
    878 Also, \CC does not allow \Index{array}s\index{array!reference} of reference\footnote{
    879 The reason for disallowing arrays of reference is unknown, but possibly comes from references being ethereal (like a textual macro), and hence, replaceable by the referant object.}
    880 \Index*{Java}'s reference types to objects (all Java objects are on the heap) are like C pointers, which always manipulate the address, and there is no (bit-wise) object assignment, so objects are explicitly cloned by shallow or deep copying, which eliminates half of the address duality.
    881 
    882 
    883 \subsection{Initialization}
    884 
    885 \Index{Initialization} is different than \Index{assignment} because initialization occurs on the empty (uninitialized) storage on an object, while assignment occurs on possibly initialized storage of an object.
    886 There are three initialization contexts in \CFA: declaration initialization, argument/parameter binding, return/temporary binding.
    887 Because the object being initialized has no value, there is only one meaningful semantics with respect to address duality: it must mean address as there is no pointed-to value.
    888 In contrast, the left-hand side of assignment has an address that has a duality.
    889 Therefore, for pointer/reference initialization, the initializing value must be an address not a value.
    890 \begin{cfa}
    891 int * p = &x;                                           §\C{// assign address of x}§
    892 ®int * p = x;®                                          §\C{// assign value of x}§
    893 int & r = x;                                            §\C{// must have address of x}§
    894 \end{cfa}
    895 Like the previous example with C pointer-arithmetic, it is unlikely assigning the value of ©x© into a pointer is meaningful (again, a warning is usually given).
    896 Therefore, for safety, this context requires an address, so it is superfluous to require explicitly taking the address of the initialization object, even though the type is incorrect.
    897 Note, this is strictly a convenience and safety feature for a programmer.
    898 Hence, \CFA allows ©r© to be assigned ©x© because it infers a reference for ©x©, by implicitly inserting a address-of operator, ©&©, and it is an error to put an ©&© because the types no longer match due to the implicit dereference.
    899 Unfortunately, C allows ©p© to be assigned with ©&x© (address) or ©x© (value), but most compilers warn about the latter assignment as being potentially incorrect.
    900 Similarly, when a reference type is used for a parameter/return type, the call-site argument does not require a reference operator for the same reason.
    901 \begin{cfa}
    902 int & f( int & r );                                     §\C{// reference parameter and return}§
    903 z = f( x ) + f( y );                            §\C{// reference operator added, temporaries needed for call results}§
    904 \end{cfa}
    905 Within routine ©f©, it is possible to change the argument by changing the corresponding parameter, and parameter ©r© can be locally reassigned within ©f©.
    906 Since operator routine ©?+?© takes its arguments by value, the references returned from ©f© are used to initialize compiler generated temporaries with value semantics that copy from the references.
    907 \begin{cfa}
    908 int temp1 = f( x ), temp2 = f( y );
    909 z = temp1 + temp2;
    910 \end{cfa}
    911 This \Index{implicit referencing} is crucial for reducing the syntactic burden for programmers when using references;
    912 otherwise references have the same syntactic  burden as pointers in these contexts.
    913 
    914 When a pointer/reference parameter has a ©const© value (immutable), it is possible to pass literals and expressions.
    915 \begin{cfa}
    916 void f( ®const® int & cr );
    917 void g( ®const® int * cp );
    918 f( 3 );                   g( ®&®3 );
    919 f( x + y );             g( ®&®(x + y) );
    920 \end{cfa}
    921 Here, the compiler passes the address to the literal 3 or the temporary for the expression ©x + y©, knowing the argument cannot be changed through the parameter.
    922 The ©&© before the constant/expression for the pointer-type parameter (©g©) is a \CFA extension necessary to type match and is a common requirement before a variable in C (\eg ©scanf©).
    923 Importantly, ©&3© may not be equal to ©&3©, where the references occur across calls because the temporaries maybe different on each call.
    924 
    925 \CFA \emph{extends} this semantics to a mutable pointer/reference parameter, and the compiler implicitly creates the necessary temporary (copying the argument), which is subsequently pointed-to by the reference parameter and can be changed.\footnote{
    926 If whole program analysis is possible, and shows the parameter is not assigned, \ie it is ©const©, the temporary is unnecessary.}
    927 \begin{cfa}
    928 void f( int & r );
    929 void g( int * p );
    930 f( 3 );                   g( ®&®3 );            §\C{// compiler implicit generates temporaries}§
    931 f( x + y );             g( ®&®(x + y) );        §\C{// compiler implicit generates temporaries}§
    932 \end{cfa}
    933 Essentially, there is an implicit \Index{rvalue} to \Index{lvalue} conversion in this case.\footnote{
    934 This conversion attempts to address the \newterm{const hell} problem, when the innocent addition of a ©const© qualifier causes a cascade of type failures, requiring an unknown number of additional ©const© qualifiers, until it is discovered a ©const© qualifier cannot be added and all the ©const© qualifiers must be removed.}
    935 The implicit conversion allows seamless calls to any routine without having to explicitly name/copy the literal/expression to allow the call.
    936 
    937 %\CFA attempts to handle pointers and references in a uniform, symmetric manner.
    938 Finally, C handles \Index{routine object}s in an inconsistent way.
    939 A routine object is both a pointer and a reference (\Index{particle and wave}).
    940 \begin{cfa}
    941 void f( int i );
    942 void (*fp)( int );                                      §\C{// routine pointer}§
    943 fp = f;                                                         §\C{// reference initialization}§
    944 fp = &f;                                                        §\C{// pointer initialization}§
    945 fp = *f;                                                        §\C{// reference initialization}§
    946 fp(3);                                                          §\C{// reference invocation}§
    947 (*fp)(3);                                                       §\C{// pointer invocation}§
    948 \end{cfa}
    949 While C's treatment of routine objects has similarity to inferring a reference type in initialization contexts, the examples are assignment not initialization, and all possible forms of assignment are possible (©f©, ©&f©, ©*f©) without regard for type.
    950 Instead, a routine object should be referenced by a ©const© reference:
    951 \begin{cfa}
    952 ®const® void (®&® fr)( int ) = f;       §\C{// routine reference}§
    953 fr = ...                                                        §\C{// error, cannot change code}§
    954 &fr = ...;                                                      §\C{// changing routine reference}§
    955 fr( 3 );                                                        §\C{// reference call to f}§
    956 (*fr)(3);                                                       §\C{// error, incorrect type}§
    957 \end{cfa}
    958 because the value of the routine object is a routine literal, \ie the routine code is normally immutable during execution.\footnote{
    959 Dynamic code rewriting is possible but only in special circumstances.}
    960 \CFA allows this additional use of references for routine objects in an attempt to give a more consistent meaning for them.
    961 
    962 
    963 \subsection{Address-of Semantics}
    964 
    965 In C, ©&E© is an rvalue for any expression ©E©.
    966 \CFA extends the ©&© (address-of) operator as follows:
    967 \begin{itemize}
    968 \item
    969 if ©R© is an \Index{rvalue} of type ©T &$_1$...&$_r$© where $r \ge 1$ references (©&© symbols) than ©&R© has type ©T ®*®&$_{\color{red}2}$...&$_{\color{red}r}$©, \ie ©T© pointer with $r-1$ references (©&© symbols).
    970 
    971 \item
    972 if ©L© is an \Index{lvalue} of type ©T &$_1$...&$_l$© where $l \ge 0$ references (©&© symbols) then ©&L© has type ©T ®*®&$_{\color{red}1}$...&$_{\color{red}l}$©, \ie ©T© pointer with $l$ references (©&© symbols).
    973 \end{itemize}
    974 The following example shows the first rule applied to different \Index{rvalue} contexts:
    975 \begin{cfa}
    976 int x, * px, ** ppx, *** pppx, **** ppppx;
    977 int & rx = x, && rrx = rx, &&& rrrx = rrx ;
    978 x = rrrx;               // rrrx is an lvalue with type int &&& (equivalent to x)
    979 px = &rrrx;             // starting from rrrx, &rrrx is an rvalue with type int *&&& (&x)
    980 ppx = &&rrrx;   // starting from &rrrx, &&rrrx is an rvalue with type int **&& (&rx)
    981 pppx = &&&rrrx; // starting from &&rrrx, &&&rrrx is an rvalue with type int ***& (&rrx)
    982 ppppx = &&&&rrrx; // starting from &&&rrrx, &&&&rrrx is an rvalue with type int **** (&rrrx)
    983 \end{cfa}
    984 The following example shows the second rule applied to different \Index{lvalue} contexts:
    985 \begin{cfa}
    986 int x, * px, ** ppx, *** pppx;
    987 int & rx = x, && rrx = rx, &&& rrrx = rrx ;
    988 rrrx = 2;               // rrrx is an lvalue with type int &&& (equivalent to x)
    989 &rrrx = px;             // starting from rrrx, &rrrx is an rvalue with type int *&&& (rx)
    990 &&rrrx = ppx;   // starting from &rrrx, &&rrrx is an rvalue with type int **&& (rrx)
    991 &&&rrrx = pppx; // starting from &&rrrx, &&&rrrx is an rvalue with type int ***& (rrrx)
    992 \end{cfa}
    993 
    994 
    995 \subsection{Conversions}
    996 
    997 C provides a basic implicit conversion to simplify variable usage:
    998 \begin{enumerate}
    999 \setcounter{enumi}{-1}
    1000 \item
    1001 lvalue to rvalue conversion: ©cv T© converts to ©T©, which allows implicit variable dereferencing.
    1002 \begin{cfa}
    1003 int x;
    1004 x + 1;                  // lvalue variable (int) converts to rvalue for expression
    1005 \end{cfa}
    1006 An rvalue has no type qualifiers (©cv©), so the lvalue qualifiers are dropped.
    1007 \end{enumerate}
    1008 \CFA provides three new implicit conversion for reference types to simplify reference usage.
    1009 \begin{enumerate}
    1010 \item
    1011 reference to rvalue conversion: ©cv T &© converts to ©T©, which allows implicit reference dereferencing.
    1012 \begin{cfa}
    1013 int x, &r = x, f( int p );
    1014 x = ®r® + f( ®r® );  // lvalue reference converts to rvalue
    1015 \end{cfa}
    1016 An rvalue has no type qualifiers (©cv©), so the reference qualifiers are dropped.
    1017 
    1018 \item
    1019 lvalue to reference conversion: \lstinline[deletekeywords={lvalue}]@lvalue-type cv1 T@ converts to ©cv2 T &©, which allows implicitly converting variables to references.
    1020 \begin{cfa}
    1021 int x, &r = ®x®, f( int & p ); // lvalue variable (int) convert to reference (int &)
    1022 f( ®x® );               // lvalue variable (int) convert to reference (int &)
    1023 \end{cfa}
    1024 Conversion can restrict a type, where ©cv1© $\le$ ©cv2©, \eg passing an ©int© to a ©const volatile int &©, which has low cost.
    1025 Conversion can expand a type, where ©cv1© $>$ ©cv2©, \eg passing a ©const volatile int© to an ©int &©, which has high cost (\Index{warning});
    1026 furthermore, if ©cv1© has ©const© but not ©cv2©, a temporary variable is created to preserve the immutable lvalue.
    1027 
    1028 \item
    1029 rvalue to reference conversion: ©T© converts to ©cv T &©, which allows binding references to temporaries.
    1030 \begin{cfa}
    1031 int x, & f( int & p );
    1032 f( ®x + 3® );   // rvalue parameter (int) implicitly converts to lvalue temporary reference (int &)
    1033 ®&f®(...) = &x; // rvalue result (int &) implicitly converts to lvalue temporary reference (int &)
    1034 \end{cfa}
    1035 In both case, modifications to the temporary are inaccessible (\Index{warning}).
    1036 Conversion expands the temporary-type with ©cv©, which is low cost since the temporary is inaccessible.
    1037 \end{enumerate}
    1038 
    1039 
    1040 \begin{comment}
    1041 From: Richard Bilson <rcbilson@gmail.com>
    1042 Date: Wed, 13 Jul 2016 01:58:58 +0000
    1043 Subject: Re: pointers / references
    1044 To: "Peter A. Buhr" <pabuhr@plg2.cs.uwaterloo.ca>
    1045 
    1046 As a general comment I would say that I found the section confusing, as you move back and forth
    1047 between various real and imagined programming languages. If it were me I would rewrite into two
    1048 subsections, one that specifies precisely the syntax and semantics of reference variables and
    1049 another that provides the rationale.
    1050 
    1051 I don't see any obvious problems with the syntax or semantics so far as I understand them. It's not
    1052 obvious that the description you're giving is complete, but I'm sure you'll find the special cases
    1053 as you do the implementation.
    1054 
    1055 My big gripes are mostly that you're not being as precise as you need to be in your terminology, and
    1056 that you say a few things that aren't actually true even though I generally know what you mean.
    1057 
    1058 20 C provides a pointer type; CFA adds a reference type. Both types contain an address, which is normally a
    1059 21 location in memory.
    1060 
    1061 An address is not a location in memory; an address refers to a location in memory. Furthermore it
    1062 seems weird to me to say that a type "contains" an address; rather, objects of that type do.
    1063 
    1064 21 Special addresses are used to denote certain states or access co-processor memory. By
    1065 22 convention, no variable is placed at address 0, so addresses like 0, 1, 2, 3 are often used to denote no-value
    1066 23 or other special states.
    1067 
    1068 This isn't standard C at all. There has to be one null pointer representation, but it doesn't have
    1069 to be a literal zero representation and there doesn't have to be more than one such representation.
    1070 
    1071 23 Often dereferencing a special state causes a memory fault, so checking is necessary
    1072 24 during execution.
    1073 
    1074 I don't see the connection between the two clauses here. I feel like if a bad pointer will not cause
    1075 a memory fault then I need to do more checking, not less.
    1076 
    1077 24 If the programming language assigns addresses, a program's execution is sound, \ie all
    1078 25 addresses are to valid memory locations.
    1079 
    1080 You haven't said what it means to "assign" an address, but if I use my intuitive understanding of
    1081 the term I don't see how this can be true unless you're assuming automatic storage management.
    1082 
    1083 1 Program variables are implicit pointers to memory locations generated by the compiler and automatically
    1084 2 dereferenced, as in:
    1085 
    1086 There is no reason why a variable needs to have a location in memory, and indeed in a typical
    1087 program many variables will not. In standard terminology an object identifier refers to data in the
    1088 execution environment, but not necessarily in memory.
    1089 
    1090 13 A pointer/reference is a generalization of a variable name, \ie a mutable address that can point to more
    1091 14 than one memory location during its lifetime.
    1092 
    1093 I feel like you're off the reservation here. In my world there are objects of pointer type, which
    1094 seem to be what you're describing here, but also pointer values, which can be stored in an object of
    1095 pointer type but don't necessarily have to be. For example, how would you describe the value denoted
    1096 by "&main" in a C program? I would call it a (function) pointer, but that doesn't satisfy your
    1097 definition.
    1098 
    1099 16 not occupy storage as the literal is embedded directly into instructions.) Hence, a pointer occupies memory
    1100 17 to store its current address, and the pointer's value is loaded by dereferencing, e.g.:
    1101 
    1102 As with my general objection regarding your definition of variables, there is no reason why a
    1103 pointer variable (object of pointer type) needs to occupy memory.
    1104 
    1105 21 p2 = p1 + x; // compiler infers *p2 = *p1 + x;
    1106 
    1107 What language are we in now?
    1108 
    1109 24 pointer usage. However, in C, the following cases are ambiguous, especially with pointer arithmetic:
    1110 25 p1 = p2; // p1 = p2 or *p1 = *p2
    1111 
    1112 This isn't ambiguous. it's defined to be the first option.
    1113 
    1114 26 p1 = p1 + 1; // p1 = p1 + 1 or *p1 = *p1 + 1
    1115 
    1116 Again, this statement is not ambiguous.
    1117 
    1118 13 example. Hence, a reference behaves like the variable name for the current variable it is pointing-to. The
    1119 14 simplest way to understand a reference is to imagine the compiler inserting a dereference operator before
    1120 15 the reference variable for each reference qualifier in a declaration, e.g.:
    1121 
    1122 It's hard for me to understand who the audience for this part is. I think a practical programmer is
    1123 likely to be satisfied with "a reference behaves like the variable name for the current variable it
    1124 is pointing-to," maybe with some examples. Your "simplest way" doesn't strike me as simpler than
    1125 that. It feels like you're trying to provide a more precise definition for the semantics of
    1126 references, but it isn't actually precise enough to be a formal specification. If you want to
    1127 express the semantics of references using rewrite rules that's a great way to do it, but lay the
    1128 rules out clearly, and when you're showing an example of rewriting keep your
    1129 references/pointers/values separate (right now, you use \eg "r3" to mean a reference, a pointer,
    1130 and a value).
    1131 
    1132 24 Cancellation works to arbitrary depth, and pointer and reference values are interchangeable because both
    1133 25 contain addresses.
    1134 
    1135 Except they're not interchangeable, because they have different and incompatible types.
    1136 
    1137 40 Interestingly, C++ deals with the address duality by making the pointed-to value the default, and prevent-
    1138 41 ing changes to the reference address, which eliminates half of the duality. Java deals with the address duality
    1139 42 by making address assignment the default and requiring field assignment (direct or indirect via methods),
    1140 43 \ie there is no builtin bit-wise or method-wise assignment, which eliminates half of the duality.
    1141 
    1142 I can follow this but I think that's mostly because I already understand what you're trying to
    1143 say. I don't think I've ever heard the term "method-wise assignment" and I don't see you defining
    1144 it. Furthermore Java does have value assignment of basic (non-class) types, so your summary here
    1145 feels incomplete. (If it were me I'd drop this paragraph rather than try to save it.)
    1146 
    1147 11 Hence, for type & const, there is no pointer assignment, so &rc = &x is disallowed, and the address value
    1148 12 cannot be 0 unless an arbitrary pointer is assigned to the reference.
    1149 
    1150 Given the pains you've taken to motivate every little bit of the semantics up until now, this last
    1151 clause ("the address value cannot be 0") comes out of the blue. It seems like you could have
    1152 perfectly reasonable semantics that allowed the initialization of null references.
    1153 
    1154 12 In effect, the compiler is managing the
    1155 13 addresses for type & const not the programmer, and by a programming discipline of only using references
    1156 14 with references, address errors can be prevented.
    1157 
    1158 Again, is this assuming automatic storage management?
    1159 
    1160 18 rary binding. For reference initialization (like pointer), the initializing value must be an address (lvalue) not
    1161 19 a value (rvalue).
    1162 
    1163 This sentence appears to suggest that an address and an lvalue are the same thing.
    1164 
    1165 20 int * p = &x; // both &x and x are possible interpretations
    1166 
    1167 Are you saying that we should be considering "x" as a possible interpretation of the initializer
    1168 "&x"? It seems to me that this expression has only one legitimate interpretation in context.
    1169 
    1170 21 int & r = x; // x unlikely interpretation, because of auto-dereferencing
    1171 
    1172 You mean, we can initialize a reference using an integer value? Surely we would need some sort of
    1173 cast to induce that interpretation, no?
    1174 
    1175 22 Hence, the compiler implicitly inserts a reference operator, &, before the initialization expression.
    1176 
    1177 But then the expression would have pointer type, which wouldn't be compatible with the type of r.
    1178 
    1179 22 Similarly,
    1180 23 when a reference is used for a parameter/return type, the call-site argument does not require a reference
    1181 24 operator.
    1182 
    1183 Furthermore, it would not be correct to use a reference operator.
    1184 
    1185 45 The implicit conversion allows
    1186 1 seamless calls to any routine without having to explicitly name/copy the literal/expression to allow the call.
    1187 2 While C' attempts to handle pointers and references in a uniform, symmetric manner, C handles routine
    1188 3 variables in an inconsistent way: a routine variable is both a pointer and a reference (particle and wave).
    1189 
    1190 After all this talk of how expressions can have both pointer and value interpretations, you're
    1191 disparaging C because it has expressions that have both pointer and value interpretations?
    1192 
    1193 On Sat, Jul 9, 2016 at 4:18 PM Peter A. Buhr <pabuhr@plg.uwaterloo.ca> wrote:
    1194 > Aaron discovered a few places where "&"s are missing and where there are too many "&", which are
    1195 > corrected in the attached updated. None of the text has changed, if you have started reading
    1196 > already.
    1197 \end{comment}
    1198 
    1199 
    1200 \section{Routine Definition}
    1201 
    1202 \CFA also supports a new syntax for routine definition, as well as \Celeven and K\&R routine syntax.
    1203 The point of the new syntax is to allow returning multiple values from a routine~\cite{Galletly96,CLU}, \eg:
    1204 \begin{cfa}
    1205 ®[ int o1, int o2, char o3 ]® f( int i1, char i2, char i3 ) {
    1206         §\emph{routine body}§
    1207 }
    1208 \end{cfa}
    1209 where routine ©f© has three output (return values) and three input parameters.
    1210 Existing C syntax cannot be extended with multiple return types because it is impossible to embed a single routine name within multiple return type specifications.
    1211 
    1212 In detail, the brackets, ©[]©, enclose the result type, where each return value is named and that name is a local variable of the particular return type.\footnote{
    1213 \Index*{Michael Tiemann}, with help from \Index*{Doug Lea}, provided named return values in g++, circa 1989.}
    1214 The value of each local return variable is automatically returned at routine termination.
    1215 Declaration qualifiers can only appear at the start of a routine definition, \eg:
    1216 \begin{cfa}
    1217 ®extern® [ int x ] g( int y ) {§\,§}
    1218 \end{cfa}
    1219 Lastly, if there are no output parameters or input parameters, the brackets and/or parentheses must still be specified;
    1220 in both cases the type is assumed to be void as opposed to old style C defaults of int return type and unknown parameter types, respectively, as in:
    1221 \begin{cfa}
    1222 [§\,§] g();                                                     §\C{// no input or output parameters}§
    1223 [ void ] g( void );                                     §\C{// no input or output parameters}§
    1224 \end{cfa}
    1225 
    1226 Routine f is called as follows:
    1227 \begin{cfa}
    1228 [ i, j, ch ] = f( 3, 'a', ch );
    1229 \end{cfa}
    1230 The list of return values from f and the grouping on the left-hand side of the assignment is called a \newterm{return list} and discussed in Section 12.
    1231 
    1232 \CFA style declarations cannot be used to declare parameters for K\&R style routine definitions because of the following ambiguity:
    1233 \begin{cfa}
    1234 int (*f(x))[ 5 ] int x; {}
    1235 \end{cfa}
    1236 The string ``©int (*f(x))[ 5 ]©'' declares a K\&R style routine of type returning a pointer to an array of 5 integers, while the string ``©[ 5 ] int x©'' declares a \CFA style parameter x of type array of 5 integers.
    1237 Since the strings overlap starting with the open bracket, ©[©, there is an ambiguous interpretation for the string.
    1238 As well, \CFA-style declarations cannot be used to declare parameters for C-style routine-definitions because of the following ambiguity:
    1239 \begin{cfa}
    1240 typedef int foo;
    1241 int f( int (* foo) );                           §\C{// foo is redefined as a parameter name}§
    1242 \end{cfa}
    1243 The string ``©int (* foo)©'' declares a C-style named-parameter of type pointer to an integer (the parenthesis are superfluous), while the same string declares a \CFA style unnamed parameter of type routine returning integer with unnamed parameter of type pointer to foo.
    1244 The redefinition of a type name in a parameter list is the only context in C where the character ©*© can appear to the left of a type name, and \CFA relies on all type qualifier characters appearing to the right of the type name.
    1245 The inability to use \CFA declarations in these two contexts is probably a blessing because it precludes programmers from arbitrarily switching between declarations forms within a declaration contexts.
    1246 
    1247 C-style declarations can be used to declare parameters for \CFA style routine definitions, \eg:
    1248 \begin{cfa}
    1249 [ int ] f( * int, int * );                      §\C{// returns an integer, accepts 2 pointers to integers}§
    1250 [ * int, int * ] f( int );                      §\C{// returns 2 pointers to integers, accepts an integer}§
    1251 \end{cfa}
    1252 The reason for allowing both declaration styles in the new context is for backwards compatibility with existing preprocessor macros that generate C-style declaration-syntax, as in:
    1253 \begin{cfa}
    1254 #define ptoa( n, d ) int (*n)[ d ]
    1255 int f( ptoa( p, 5 ) ) ...                       §\C{// expands to int f( int (*p)[ 5 ] )}§
    1256 [ int ] f( ptoa( p, 5 ) ) ...           §\C{// expands to [ int ] f( int (*p)[ 5 ] )}§
    1257 \end{cfa}
    1258 Again, programmers are highly encouraged to use one declaration form or the other, rather than mixing the forms.
    1259 
    1260 
    1261 \subsection{Named Return Values}
    1262 
    1263 \Index{Named return values} handle the case where it is necessary to define a local variable whose value is then returned in a ©return© statement, as in:
    1264 \begin{cfa}
    1265 int f() {
    1266         int x;
    1267         ... x = 0; ... x = y; ...
    1268         return x;
    1269 }
    1270 \end{cfa}
    1271 Because the value in the return variable is automatically returned when a \CFA routine terminates, the ©return© statement \emph{does not} contain an expression, as in:
    1272 \newline
    1273 \begin{minipage}{\linewidth}
    1274 \begin{cfa}
    1275 ®[ int x, int y ]® f() {
    1276         int z;
    1277         ... x = 0; ... y = z; ...
    1278         ®return;®                                                       §\C{// implicitly return x, y}§
    1279 }
    1280 \end{cfa}
    1281 \end{minipage}
    1282 \newline
    1283 When the return is encountered, the current values of ©x© and ©y© are returned to the calling routine.
    1284 As well, ``falling off the end'' of a routine without a ©return© statement is permitted, as in:
    1285 \begin{cfa}
    1286 [ int x, int y ] f() {
    1287         ...
    1288 }                                                                               §\C{// implicitly return x, y}§
    1289 \end{cfa}
    1290 In this case, the current values of ©x© and ©y© are returned to the calling routine just as if a ©return© had been encountered.
    1291 
    1292 Named return values may be used in conjunction with named parameter values;
    1293 specifically, a return and parameter can have the same name.
    1294 \begin{cfa}
    1295 [ int x, int y ] f( int, x, int y ) {
    1296         ...
    1297 }                                                                               §\C{// implicitly return x, y}§
    1298 \end{cfa}
    1299 This notation allows the compiler to eliminate temporary variables in nested routine calls.
    1300 \begin{cfa}
    1301 [ int x, int y ] f( int, x, int y );    §\C{// prototype declaration}§
    1302 int a, b;
    1303 [a, b] = f( f( f( a, b ) ) );
    1304 \end{cfa}
    1305 While the compiler normally ignores parameters names in prototype declarations, here they are used to eliminate temporary return-values by inferring that the results of each call are the inputs of the next call, and ultimately, the left-hand side of the assignment.
    1306 Hence, even without the body of routine ©f© (separate compilation), it is possible to perform a global optimization across routine calls.
    1307 The compiler warns about naming inconsistencies between routine prototype and definition in this case, and behaviour is \Index{undefined} if the programmer is inconsistent.
    1308 
    1309 
    1310 \subsection{Routine Prototype}
    1311 
    1312 The syntax of the new routine prototype declaration follows directly from the new routine definition syntax;
    1313 as well, parameter names are optional, \eg:
    1314 \begin{cfa}
    1315 [ int x ] f ();                                                 §\C{// returning int with no parameters}§
    1316 [ * int ] g (int y);                                    §\C{// returning pointer to int with int parameter}§
    1317 [ ] h ( int, char );                                    §\C{// returning no result with int and char parameters}§
    1318 [ * int, int ] j ( int );                               §\C{// returning pointer to int and int, with int parameter}§
    1319 \end{cfa}
    1320 This syntax allows a prototype declaration to be created by cutting and pasting source text from the routine definition header (or vice versa).
    1321 It is possible to declare multiple routine-prototypes in a single declaration, but the entire type specification is distributed across \emph{all} routine names in the declaration list (see~\VRef{s:Declarations}), \eg:
    1322 \begin{quote2}
    1323 \begin{tabular}{@{}l@{\hspace{3em}}l@{}}
    1324 \multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c}{\textbf{C}}        \\
    1325 \begin{cfa}
    1326 [ int ] f( int ), g;
    1327 \end{cfa}
    1328 &
    1329 \begin{cfa}
    1330 int f( int ), g( int );
    1331 \end{cfa}
    1332 \end{tabular}
    1333 \end{quote2}
    1334 Declaration qualifiers can only appear at the start of a \CFA routine declaration,\footref{StorageClassSpecifier} \eg:
    1335 \begin{cfa}
    1336 extern [ int ] f ( int );
    1337 static [ int ] g ( int );
    1338 \end{cfa}
    1339 
    1340 
    1341 \section{Routine Pointers}
    1342 
    1343 The syntax for pointers to \CFA routines specifies the pointer name on the right, \eg:
    1344 \begin{cfa}
    1345 * [ int x ] () fp;                                              §\C{// pointer to routine returning int with no parameters}§
    1346 * [ * int ] (int y) gp;                                 §\C{// pointer to routine returning pointer to int with int parameter}§
    1347 * [ ] (int,char) hp;                                    §\C{// pointer to routine returning no result with int and char parameters}§
    1348 * [ * int,int ] ( int ) jp;                             §\C{// pointer to routine returning pointer to int and int, with int parameter}§
    1349 \end{cfa}
    1350 While parameter names are optional, \emph{a routine name cannot be specified};
    1351 for example, the following is incorrect:
    1352 \begin{cfa}
    1353 * [ int x ] f () fp;                                    §\C{// routine name "f" is not allowed}§
    1354 \end{cfa}
    1355 
    1356 
    1357 \section{Named and Default Arguments}
    1358 
    1359 Named\index{named arguments}\index{arguments!named} and default\index{default arguments}\index{arguments!default} arguments~\cite{Hardgrave76}\footnote{
    1360 Francez~\cite{Francez77} proposed a further extension to the named-parameter passing style, which specifies what type of communication (by value, by reference, by name) the argument is passed to the routine.}
    1361 are two mechanisms to simplify routine call.
    1362 Both mechanisms are discussed with respect to \CFA.
    1363 \begin{description}
    1364 \item[Named (or Keyword) Arguments:]
    1365 provide the ability to specify an argument to a routine call using the parameter name rather than the position of the parameter.
    1366 For example, given the routine:
    1367 \begin{cfa}
    1368 void p( int x, int y, int z ) {...}
    1369 \end{cfa}
    1370 a positional call is:
    1371 \begin{cfa}
    1372 p( 4, 7, 3 );
    1373 \end{cfa}
    1374 whereas a named (keyword) call may be:
    1375 \begin{cfa}
    1376 p( z : 3, x : 4, y : 7 );       §\C{// rewrite $\Rightarrow$ p( 4, 7, 3 )}§
    1377 \end{cfa}
    1378 Here the order of the arguments is unimportant, and the names of the parameters are used to associate argument values with the corresponding parameters.
    1379 The compiler rewrites a named call into a positional call.
    1380 The advantages of named parameters are:
    1381 \begin{itemize}
    1382 \item
    1383 Remembering the names of the parameters may be easier than the order in the routine definition.
    1384 \item
    1385 Parameter names provide documentation at the call site (assuming the names are descriptive).
    1386 \item
    1387 Changes can be made to the order or number of parameters without affecting the call (although the call must still be recompiled).
    1388 \end{itemize}
    1389 
    1390 Unfortunately, named arguments do not work in C-style programming-languages because a routine prototype is not required to specify parameter names, nor do the names in the prototype have to match with the actual definition.
    1391 For example, the following routine prototypes and definition are all valid.
    1392 \begin{cfa}
    1393 void p( int, int, int );                        §\C{// equivalent prototypes}§
    1394 void p( int x, int y, int z );
    1395 void p( int y, int x, int z );
    1396 void p( int z, int y, int x );
    1397 void p( int q, int r, int s ) {}        §\C{// match with this definition}§
    1398 \end{cfa}
    1399 Forcing matching parameter names in routine prototypes with corresponding routine definitions is possible, but goes against a strong tradition in C programming.
    1400 Alternatively, prototype definitions can be eliminated by using a two-pass compilation, and implicitly creating header files for exports.
    1401 The former is easy to do, while the latter is more complex.
    1402 
    1403 Furthermore, named arguments do not work well in a \CFA-style programming-languages because they potentially introduces a new criteria for type matching.
    1404 For example, it is technically possible to disambiguate between these two overloaded definitions of ©f© based on named arguments at the call site:
    1405 \begin{cfa}
    1406 int f( int i, int j );
    1407 int f( int x, double y );
    1408 
    1409 f( j : 3, i : 4 );                              §\C{// 1st f}§
    1410 f( x : 7, y : 8.1 );                    §\C{// 2nd f}§
    1411 f( 4, 5 );                                              §\C{// ambiguous call}§
    1412 \end{cfa}
    1413 However, named arguments compound routine resolution in conjunction with conversions:
    1414 \begin{cfa}
    1415 f( i : 3, 5.7 );                                §\C{// ambiguous call ?}§
    1416 \end{cfa}
    1417 Depending on the cost associated with named arguments, this call could be resolvable or ambiguous.
    1418 Adding named argument into the routine resolution algorithm does not seem worth the complexity.
    1419 Therefore, \CFA does \emph{not} attempt to support named arguments.
    1420 
    1421 \item[Default Arguments]
    1422 provide the ability to associate a default value with a parameter so it can be optionally specified in the argument list.
    1423 For example, given the routine:
    1424 \begin{cfa}
    1425 void p( int x = 1, int y = 2, int z = 3 ) {...}
    1426 \end{cfa}
    1427 the allowable positional calls are:
    1428 \begin{cfa}
    1429 p();                                                    §\C{// rewrite $\Rightarrow$ p( 1, 2, 3 )}§
    1430 p( 4 );                                                 §\C{// rewrite $\Rightarrow$ p( 4, 2, 3 )}§
    1431 p( 4, 4 );                                              §\C{// rewrite $\Rightarrow$ p( 4, 4, 3 )}§
    1432 p( 4, 4, 4 );                                   §\C{// rewrite $\Rightarrow$ p( 4, 4, 4 )}§
    1433 // empty arguments
    1434 p(  , 4, 4 );                                   §\C{// rewrite $\Rightarrow$ p( 1, 4, 4 )}§
    1435 p( 4,  , 4 );                                   §\C{// rewrite $\Rightarrow$ p( 4, 2, 4 )}§
    1436 p( 4, 4,   );                                   §\C{// rewrite $\Rightarrow$ p( 4, 4, 3 )}§
    1437 p( 4,  ,   );                                   §\C{// rewrite $\Rightarrow$ p( 4, 2, 3 )}§
    1438 p(  , 4,   );                                   §\C{// rewrite $\Rightarrow$ p( 1, 4, 3 )}§
    1439 p(  ,  , 4 );                                   §\C{// rewrite $\Rightarrow$ p( 1, 2, 4 )}§
    1440 p(  ,  ,   );                                   §\C{// rewrite $\Rightarrow$ p( 1, 2, 3 )}§
    1441 \end{cfa}
    1442 Here the missing arguments are inserted from the default values in the parameter list.
    1443 The compiler rewrites missing default values into explicit positional arguments.
    1444 The advantages of default values are:
    1445 \begin{itemize}
    1446 \item
    1447 Routines with a large number of parameters are often very generalized, giving a programmer a number of different options on how a computation is performed.
    1448 For many of these kinds of routines, there are standard or default settings that work for the majority of computations.
    1449 Without default values for parameters, a programmer is forced to specify these common values all the time, resulting in long argument lists that are error prone.
    1450 \item
    1451 When a routine's interface is augmented with new parameters, it extends the interface providing generalizability\footnote{
    1452 ``It should be possible for the implementor of an abstraction to increase its generality.
    1453 So long as the modified abstraction is a generalization of the original, existing uses of the abstraction will not require change.
    1454 It might be possible to modify an abstraction in a manner which is not a generalization without affecting existing uses, but, without inspecting the modules in which the uses occur, this possibility cannot be determined.
    1455 This criterion precludes the addition of parameters, unless these parameters have default or inferred values that are valid for all possible existing applications.''~\cite[p.~128]{Cormack90}}
    1456 (somewhat like the generalization provided by inheritance for classes).
    1457 That is, all existing calls are still valid, although the call must still be recompiled.
    1458 \end{itemize}
    1459 The only disadvantage of default arguments is that unintentional omission of an argument may not result in a compiler-time error.
    1460 Instead, a default value is used, which may not be the programmer's intent.
    1461 
    1462 Default values may only appear in a prototype versus definition context:
    1463 \begin{cfa}
    1464 void p( int x, int y = 2, int z = 3 );          §\C{// prototype: allowed}§
    1465 void p( int, int = 2, int = 3 );                        §\C{// prototype: allowed}§
    1466 void p( int x, int y = 2, int z = 3 ) {}        §\C{// definition: not allowed}§
    1467 \end{cfa}
    1468 The reason for this restriction is to allow separate compilation.
    1469 Multiple prototypes with different default values is an error.
    1470 \end{description}
    1471 
    1472 Ellipse (``...'') arguments present problems when used with default arguments.
    1473 The conflict occurs because both named and ellipse arguments must appear after positional arguments, giving two possibilities:
    1474 \begin{cfa}
    1475 p( /* positional */, ... , /* named */ );
    1476 p( /* positional */, /* named */, ... );
    1477 \end{cfa}
    1478 While it is possible to implement both approaches, the first possibly is more complex than the second, \eg:
    1479 \begin{cfa}
    1480 p( int x, int y, int z, ... );
    1481 p( 1, 4, 5, 6, z : 3, y : 2 ); §\C{// assume p( /* positional */, ... , /* named */ );}§
    1482 p( 1, z : 3, y : 2, 4, 5, 6 ); §\C{// assume p( /* positional */, /* named */, ... );}§
    1483 \end{cfa}
    1484 In the first call, it is necessary for the programmer to conceptually rewrite the call, changing named arguments into positional, before knowing where the ellipse arguments begin.
    1485 Hence, this approach seems significantly more difficult, and hence, confusing and error prone.
    1486 In the second call, the named arguments separate the positional and ellipse arguments, making it trivial to read the call.
    1487 
    1488 The problem is exacerbated with default arguments, \eg:
    1489 \begin{cfa}
    1490 void p( int x, int y = 2, int z = 3... );
    1491 p( 1, 4, 5, 6, z : 3 );         §\C{// assume p( /* positional */, ... , /* named */ );}§
    1492 p( 1, z : 3, 4, 5, 6 );         §\C{// assume p( /* positional */, /* named */, ... );}§
    1493 \end{cfa}
    1494 The first call is an error because arguments 4 and 5 are actually positional not ellipse arguments;
    1495 therefore, argument 5 subsequently conflicts with the named argument z : 3.
    1496 In the second call, the default value for y is implicitly inserted after argument 1 and the named arguments separate the positional and ellipse arguments, making it trivial to read the call.
    1497 For these reasons, \CFA requires named arguments before ellipse arguments.
    1498 Finally, while ellipse arguments are needed for a small set of existing C routines, like printf, the extended \CFA type system largely eliminates the need for ellipse arguments (see Section 24), making much of this discussion moot.
    1499 
    1500 Default arguments and overloading (see Section 24) are complementary.
    1501 While in theory default arguments can be simulated with overloading, as in:
    1502 \begin{quote2}
    1503 \begin{tabular}{@{}l@{\hspace{3em}}l@{}}
    1504 \multicolumn{1}{c@{\hspace{3em}}}{\textbf{default arguments}}   & \multicolumn{1}{c}{\textbf{overloading}}      \\
    1505 \begin{cfa}
    1506 void p( int x, int y = 2, int z = 3 ) {...}
    1507 
    1508 
    1509 \end{cfa}
    1510 &
    1511 \begin{cfa}
    1512 void p( int x, int y, int z ) {...}
    1513 void p( int x ) { p( x, 2, 3 ); }
    1514 void p( int x, int y ) { p( x, y, 3 ); }
    1515 \end{cfa}
    1516 \end{tabular}
    1517 \end{quote2}
    1518 the number of required overloaded routines is linear in the number of default values, which is unacceptable growth.
    1519 In general, overloading should only be used over default arguments if the body of the routine is significantly different.
    1520 Furthermore, overloading cannot handle accessing default arguments in the middle of a positional list, via a missing argument, such as:
    1521 \begin{cfa}
    1522 p( 1, /* default */, 5 );               §\C{// rewrite $\Rightarrow$ p( 1, 2, 5 )}§
    1523 \end{cfa}
    1524 
    1525 Given the \CFA restrictions above, both named and default arguments are backwards compatible.
    1526 \Index*[C++]{\CC{}} only supports default arguments;
    1527 \Index*{Ada} supports both named and default arguments.
    1528 
    1529 
    1530 \section{Unnamed Structure Fields}
    1531 
    1532 C requires each field of a structure to have a name, except for a bit field associated with a basic type, \eg:
    1533 \begin{cfa}
    1534 struct {
    1535         int f1;                                 §\C{// named field}§
    1536         int f2 : 4;                             §\C{// named field with bit field size}§
    1537         int : 3;                                §\C{// unnamed field for basic type with bit field size}§
    1538         int ;                                   §\C{// disallowed, unnamed field}§
    1539         int *;                                  §\C{// disallowed, unnamed field}§
    1540         int (*)( int );                 §\C{// disallowed, unnamed field}§
    1541 };
    1542 \end{cfa}
    1543 This requirement is relaxed by making the field name optional for all field declarations; therefore, all the field declarations in the example are allowed.
    1544 As for unnamed bit fields, an unnamed field is used for padding a structure to a particular size.
    1545 A list of unnamed fields is also supported, \eg:
    1546 \begin{cfa}
    1547 struct {
    1548         int , , ;                               §\C{// 3 unnamed fields}§
    1549 }
    1550 \end{cfa}
    1551 
    1552 
    1553 \section{Nesting}
    1554 
    1555 Nesting of types and routines is useful for controlling name visibility (\newterm{name hiding}).
    1556 
    1557 
    1558 \subsection{Type Nesting}
    1559 
    1560 \CFA allows \Index{type nesting}, and type qualification of the nested types (see \VRef[Figure]{f:TypeNestingQualification}), where as C hoists\index{type hoisting} (refactors) nested types into the enclosing scope and has no type qualification.
    1561 \begin{figure}
    1562 \centering
    1563 \begin{tabular}{@{}l@{\hspace{3em}}l|l@{}}
    1564 \multicolumn{1}{c@{\hspace{3em}}}{\textbf{C Type Nesting}}      & \multicolumn{1}{c}{\textbf{C Implicit Hoisting}}      & \multicolumn{1}{|c}{\textbf{\CFA}}    \\
    1565 \hline
    1566 \begin{cfa}
    1567 struct S {
    1568         enum C { R, G, B };
    1569         struct T {
    1570                 union U { int i, j; };
    1571                 enum C c;
    1572                 short int i, j;
    1573         };
    1574         struct T t;
    1575 } s;
    1576 
    1577 int fred() {
    1578         s.t.c = R;
    1579         struct T t = { R, 1, 2 };
    1580         enum C c;
    1581         union U u;
    1582 }
    1583 \end{cfa}
    1584 &
    1585 \begin{cfa}
    1586 enum C { R, G, B };
    1587 union U { int i, j; };
    1588 struct T {
    1589         enum C c;
    1590         short int i, j;
    1591 };
    1592 struct S {
    1593         struct T t;
    1594 } s;
    1595        
    1596 
    1597 
    1598 
    1599 
    1600 
    1601 
    1602 \end{cfa}
    1603 &
    1604 \begin{cfa}
    1605 struct S {
    1606         enum C { R, G, B };
    1607         struct T {
    1608                 union U { int i, j; };
    1609                 enum C c;
    1610                 short int i, j;
    1611         };
    1612         struct T t;
    1613 } s;
    1614 
    1615 int fred() {
    1616         s.t.c = ®S.®R;  // type qualification
    1617         struct ®S.®T t = { ®S.®R, 1, 2 };
    1618         enum ®S.®C c;
    1619         union ®S.T.®U u;
    1620 }
    1621 \end{cfa}
    1622 \end{tabular}
    1623 \caption{Type Nesting / Qualification}
    1624 \label{f:TypeNestingQualification}
    1625 \end{figure}
    1626 In the left example in C, types ©C©, ©U© and ©T© are implicitly hoisted outside of type ©S© into the containing block scope.
    1627 In the right example in \CFA, the types are not hoisted and accessed using the field-selection operator ``©.©'' for type qualification, as does \Index*{Java}, rather than the \CC type-selection operator ``©::©''.
    1628 
    1629 
    1630 \subsection{Routine Nesting}
    1631 
    1632 While \CFA does not provide object programming by putting routines into structures, it does rely heavily on locally nested routines to redefine operations at or close to a call site.
    1633 For example, the C quick-sort is wrapped into the following polymorphic \CFA routine:
    1634 \begin{cfa}
    1635 forall( otype T | { int ?<?( T, T ); } )
    1636 void qsort( const T * arr, size_t dimension );
    1637 \end{cfa}
    1638 which can be used to sort in ascending and descending order by locally redefining the less-than operator into greater-than.
    1639 \begin{cfa}
    1640 const unsigned int size = 5;
    1641 int ia[size];
    1642 ...                                             §\C{// assign values to array ia}§
    1643 qsort( ia, size );              §\C{// sort ascending order using builtin ?<?}§
    1644 {
    1645         ®int ?<?( int x, int y ) { return x > y; }® §\C{// nested routine}§
    1646         qsort( ia, size );      §\C{// sort descending order by local redefinition}§
    1647 }
    1648 \end{cfa}
    1649 
    1650 Nested routines are not first-class, meaning a nested routine cannot be returned if it has references to variables in its enclosing blocks;
    1651 the only exception is references to the external block of the translation unit, as these variables persist for the duration of the program.
    1652 The following program in undefined in \CFA (and Indexc{gcc})
    1653 \begin{cfa}
    1654 [* [int]( int )] foo() {                §\C{// int (*foo())( int )}§
    1655         int ®i® = 7;
    1656         int bar( int p ) {
    1657                 ®i® += 1;                               §\C{// dependent on local variable}§
    1658                 sout | ®i® | endl;
    1659         }
    1660         return bar;                                     §\C{// undefined because of local dependence}§
    1661 }
    1662 int main() {
    1663         * [int]( int ) fp = foo();      §\C{// int (*fp)( int )}§
    1664         sout | fp( 3 ) | endl;
    1665 }
    1666 \end{cfa}
    1667 because
    1668 
    1669 Currently, there are no \Index{lambda} expressions, \ie unnamed routines because routine names are very important to properly select the correct routine.
    1670 
    1671 
    1672 \section{Tuples}
    1673 
    1674 In C and \CFA, lists of elements appear in several contexts, such as the parameter list for a routine call.
    1675 (More contexts are added shortly.)
    1676 A list of such elements is called a \newterm{lexical list}.
    1677 The general syntax of a lexical list is:
    1678 \begin{cfa}
    1679 [ §\emph{exprlist}§ ]
    1680 \end{cfa}
    1681 where ©$\emph{exprlist}$© is a list of one or more expressions separated by commas.
    1682 The brackets, ©[]©, allow differentiating between lexical lists and expressions containing the C comma operator.
    1683 The following are examples of lexical lists:
    1684 \begin{cfa}
    1685 [ x, y, z ]
    1686 [ 2 ]
    1687 [ v+w, x*y, 3.14159, f() ]
    1688 \end{cfa}
    1689 Tuples are permitted to contain sub-tuples (\ie nesting), such as ©[ [ 14, 21 ], 9 ]©, which is a 2-element tuple whose first element is itself a tuple.
    1690 Note, a tuple is not a record (structure);
    1691 a record denotes a single value with substructure, whereas a tuple is multiple values with no substructure (see flattening coercion in Section 12.1).
    1692 In essence, tuples are largely a compile time phenomenon, having little or no runtime presence.
    1693 
    1694 Tuples can be organized into compile-time tuple variables;
    1695 these variables are of \newterm{tuple type}.
    1696 Tuple variables and types can be used anywhere lists of conventional variables and types can be used.
    1697 The general syntax of a tuple type is:
    1698 \begin{cfa}
    1699 [ §\emph{typelist}§ ]
    1700 \end{cfa}
    1701 where ©$\emph{typelist}$© is a list of one or more legal \CFA or C type specifications separated by commas, which may include other tuple type specifications.
    1702 Examples of tuple types include:
    1703 \begin{cfa}
    1704 [ unsigned int, char ]
    1705 [ double, double, double ]
    1706 [ * int, int * ]                §\C{// mix of CFA and ANSI}§
    1707 [ * [ 5 ] int, * * char, * [ [ int, int ] ] (int, int) ]
    1708 \end{cfa}
    1709 Like tuples, tuple types may be nested, such as ©[ [ int, int ], int ]©, which is a 2-element tuple type whose first element is itself a tuple type.
    1710 
    1711 Examples of declarations using tuple types are:
    1712 \begin{cfa}
    1713 [ int, int ] x;                 §\C{// 2 element tuple, each element of type int}§
    1714 * [ char, char ] y;             §\C{// pointer to a 2 element tuple}§
    1715 [ [ int, int ] ] z ([ int, int ]);
    1716 \end{cfa}
    1717 The last example declares an external routine that expects a 2 element tuple as an input parameter and returns a 2 element tuple as its result.
    1718 
    1719 As mentioned, tuples can appear in contexts requiring a list of value, such as an argument list of a routine call.
    1720 In unambiguous situations, the tuple brackets may be omitted, \eg a tuple that appears as an argument may have its
    1721 square brackets omitted for convenience; therefore, the following routine invocations are equivalent:
    1722 \begin{cfa}
    1723 f( [ 1, x+2, fred() ] );
    1724 f( 1, x+2, fred() );
    1725 \end{cfa}
    1726 Also, a tuple or a tuple variable may be used to supply all or part of an argument list for a routine expecting multiple input parameters or for a routine expecting a tuple as an input parameter.
    1727 For example, the following are all legal:
    1728 \begin{cfa}
    1729 [ int, int ] w1;
    1730 [ int, int, int ] w2;
    1731 [ void ] f (int, int, int); /* three input parameters of type int */
    1732 [ void ] g ([ int, int, int ]); /* 3 element tuple as input */
    1733 f( [ 1, 2, 3 ] );
    1734 f( w1, 3 );
    1735 f( 1, w1 );
    1736 f( w2 );
    1737 g( [ 1, 2, 3 ] );
    1738 g( w1, 3 );
    1739 g( 1, w1 );
    1740 g( w2 );
    1741 \end{cfa}
    1742 Note, in all cases 3 arguments are supplied even though the syntax may appear to supply less than 3. As mentioned, a
    1743 tuple does not have structure like a record; a tuple is simply converted into a list of components.
    1744 \begin{rationale}
    1745 The present implementation of \CFA does not support nested routine calls when the inner routine returns multiple values; \ie a statement such as ©g( f() )© is not supported.
    1746 Using a temporary variable to store the  results of the inner routine and then passing this variable to the outer routine works, however.
    1747 \end{rationale}
    1748 
    1749 A tuple can contain a C comma expression, provided the expression containing the comma operator is enclosed in parentheses.
    1750 For instance, the following tuples are equivalent:
    1751 \begin{cfa}
    1752 [ 1, 3, 5 ]
    1753 [ 1, (2, 3), 5 ]
    1754 \end{cfa}
    1755 The second element of the second tuple is the expression (2, 3), which yields the result 3.
    1756 This requirement is the same as for comma expressions in argument lists.
    1757 
    1758 Type qualifiers, \ie const and volatile, may modify a tuple type.
    1759 The meaning is the same as for a type qualifier modifying an aggregate type [Int99, x 6.5.2.3(7),x 6.7.3(11)], \ie the qualifier is distributed across all of the types in the tuple, \eg:
    1760 \begin{cfa}
    1761 const volatile [ int, float, const int ] x;
    1762 \end{cfa}
    1763 is equivalent to:
    1764 \begin{cfa}
    1765 [ const volatile int, const volatile float, const volatile int ] x;
    1766 \end{cfa}
    1767 Declaration qualifiers can only appear at the start of a \CFA tuple declaration4, \eg:
    1768 \begin{cfa}
    1769 extern [ int, int ] w1;
    1770 static [ int, int, int ] w2;
    1771 \end{cfa}
    1772 \begin{rationale}
    1773 Unfortunately, C's syntax for subscripts precluded treating them as tuples.
    1774 The C subscript list has the form ©[i][j]...© and not ©[i, j, ...]©.
    1775 Therefore, there is no syntactic way for a routine returning multiple values to specify the different subscript values, \eg ©f[g()]© always means a single subscript value because there is only one set of brackets.
    1776 Fixing this requires a major change to C because the syntactic form ©M[i, j, k]© already has a particular meaning: ©i, j, k© is a comma expression.
    1777 \end{rationale}
    1778 
    1779 
    1780 \subsection{Tuple Coercions}
    1781 
    1782 There are four coercions that can be performed on tuples and tuple variables: closing, opening, flattening and structuring.
    1783 In addition, the coercion of dereferencing can be performed on a tuple variable to yield its value(s), as for other variables.
    1784 A \newterm{closing coercion} takes a set of values and converts it into a tuple value, which is a contiguous set of values, as in:
    1785 \begin{cfa}
    1786 [ int, int, int, int ] w;
    1787 w = [ 1, 2, 3, 4 ];
    1788 \end{cfa}
    1789 First the right-hand tuple is closed into a tuple value and then the tuple value is assigned.
    1790 
    1791 An \newterm{opening coercion} is the opposite of closing; a tuple value is converted into a tuple of values, as in:
    1792 \begin{cfa}
    1793 [ a, b, c, d ] = w
    1794 \end{cfa}
    1795 ©w© is implicitly opened to yield a tuple of four values, which are then assigned individually.
    1796 
    1797 A \newterm{flattening coercion} coerces a nested tuple, \ie a tuple with one or more components, which are themselves tuples, into a flattened tuple, which is a tuple whose components are not tuples, as in:
    1798 \begin{cfa}
    1799 [ a, b, c, d ] = [ 1, [ 2, 3 ], 4 ];
    1800 \end{cfa}
    1801 First the right-hand tuple is flattened and then the values are assigned individually.
    1802 Flattening is also performed on tuple types.
    1803 For example, the type ©[ int, [ int, int ], int ]© can be coerced, using flattening, into the type ©[ int, int, int, int ]©.
    1804 
    1805 A \newterm{structuring coercion} is the opposite of flattening;
    1806 a tuple is structured into a more complex nested tuple.
    1807 For example, structuring the tuple ©[ 1, 2, 3, 4 ]© into the tuple ©[ 1, [ 2, 3 ], 4 ]© or the tuple type ©[ int, int, int, int ]© into the tuple type ©[ int, [ int, int ], int ]©.
    1808 In the following example, the last assignment illustrates all the tuple coercions:
    1809 \begin{cfa}
    1810 [ int, int, int, int ] w = [ 1, 2, 3, 4 ];
    1811 int x = 5;
    1812 [ x, w ] = [ w, x ];            §\C{// all four tuple coercions}§
    1813 \end{cfa}
    1814 Starting on the right-hand tuple in the last assignment statement, w is opened, producing a tuple of four values;
    1815 therefore, the right-hand tuple is now the tuple ©[ [ 1, 2, 3, 4 ], 5 ]©.
    1816 This tuple is then flattened, yielding ©[ 1, 2, 3, 4, 5 ]©, which is structured into ©[ 1, [ 2, 3, 4, 5 ] ]© to match the tuple type of the left-hand side.
    1817 The tuple ©[ 2, 3, 4, 5 ]© is then closed to create a tuple value.
    1818 Finally, ©x© is assigned ©1© and ©w© is assigned the tuple value using multiple assignment (see Section 14).
    1819 \begin{rationale}
    1820 A possible additional language extension is to use the structuring coercion for tuples to initialize a complex record with a tuple.
    1821 \end{rationale}
    1822 
    1823 
    1824 \section{Mass Assignment}
    1825 
    1826 \CFA permits assignment to several variables at once using mass assignment~\cite{CLU}.
    1827 Mass assignment has the following form:
    1828 \begin{cfa}
    1829 [ §\emph{lvalue}§, ... , §\emph{lvalue}§ ] = §\emph{expr}§;
    1830 \end{cfa}
    1831 \index{lvalue}
    1832 The left-hand side is a tuple of \emph{lvalues}, which is a list of expressions each yielding an address, \ie any data object that can appear on the left-hand side of a conventional assignment statement.
    1833 ©$\emph{expr}$© is any standard arithmetic expression.
    1834 Clearly, the types of the entities being assigned must be type compatible with the value of the expression.
    1835 
    1836 Mass assignment has parallel semantics, \eg the statement:
    1837 \begin{cfa}
    1838 [ x, y, z ] = 1.5;
    1839 \end{cfa}
    1840 is equivalent to:
    1841 \begin{cfa}
    1842 x = 1.5; y = 1.5; z = 1.5;
    1843 \end{cfa}
    1844 This semantics is not the same as the following in C:
    1845 \begin{cfa}
    1846 x = y = z = 1.5;
    1847 \end{cfa}
    1848 as conversions between intermediate assignments may lose information.
    1849 A more complex example is:
    1850 \begin{cfa}
    1851 [ i, y[i], z ] = a + b;
    1852 \end{cfa}
    1853 which is equivalent to:
    1854 \begin{cfa}
    1855 t = a + b;
    1856 a1 = &i; a2 = &y[i]; a3 = &z;
    1857 *a1 = t; *a2 = t; *a3 = t;
    1858 \end{cfa}
    1859 The temporary ©t© is necessary to store the value of the expression to eliminate conversion issues.
    1860 The temporaries for the addresses are needed so that locations on the left-hand side do not change as the values are assigned.
    1861 In this case, ©y[i]© uses the previous value of ©i© and not the new value set at the beginning of the mass assignment.
    1862 
    1863 
    1864 \section{Multiple Assignment}
    1865 
    1866 \CFA also supports the assignment of several values at once, known as multiple assignment~\cite{CLU,Galletly96}.
    1867 Multiple assignment has the following form:
    1868 \begin{cfa}
    1869 [ §\emph{lvalue}§, ... , §\emph{lvalue}§ ] = [ §\emph{expr}§, ... , §\emph{expr}§ ];
    1870 \end{cfa}
    1871 \index{lvalue}
    1872 The left-hand side is a tuple of \emph{lvalues}, and the right-hand side is a tuple of \emph{expr}s.
    1873 Each \emph{expr} appearing on the right-hand side of a multiple assignment statement is assigned to the corresponding \emph{lvalues} on the left-hand side of the statement using parallel semantics for each assignment.
    1874 An example of multiple assignment is:
    1875 \begin{cfa}
    1876 [ x, y, z ] = [ 1, 2, 3 ];
    1877 \end{cfa}
    1878 Here, the values ©1©, ©2© and ©3© are assigned, respectively, to the variables ©x©, ©y© and ©z©.
    1879  A more complex example is:
    1880 \begin{cfa}
    1881 [ i, y[ i ], z ] = [ 1, i, a + b ];
    1882 \end{cfa}
    1883 Here, the values ©1©, ©i© and ©a + b© are assigned to the variables ©i©, ©y[i]© and ©z©, respectively.
    1884  Note, the parallel semantics of
    1885 multiple assignment ensures:
    1886 \begin{cfa}
    1887 [ x, y ] = [ y, x ];
    1888 \end{cfa}
    1889 correctly interchanges (swaps) the values stored in ©x© and ©y©.
    1890 The following cases are errors:
    1891 \begin{cfa}
    1892 [ a, b, c ] = [ 1, 2, 3, 4 ];
    1893 [ a, b, c ] = [ 1, 2 ];
    1894 \end{cfa}
    1895 because the number of entities in the left-hand tuple is unequal with the right-hand tuple.
    1896 
    1897 As for all tuple contexts in C, side effects should not be used because C does not define an ordering for the evaluation of the elements of a tuple;
    1898 both these examples produce indeterminate results:
    1899 \begin{cfa}
    1900 f( x++, x++ );                          §\C{// C routine call with side effects in arguments}§
    1901 [ v1, v2 ] = [ x++, x++ ];      §\C{// side effects in righthand side of multiple assignment}§
    1902 \end{cfa}
    1903 
    1904 
    1905 \section{Cascade Assignment}
    1906 
    1907 As in C, \CFA mass and multiple assignments can be cascaded, producing cascade assignment.
    1908 Cascade assignment has the following form:
    1909 \begin{cfa}
    1910 §\emph{tuple}§ = §\emph{tuple}§ = ... = §\emph{tuple}§;
    1911 \end{cfa}
    1912 and it has the same parallel semantics as for mass and multiple assignment.
    1913 Some examples of cascade assignment are:
    1914 \begin{cfa}
    1915 x1 = y1 = x2 = y2 = 0;
    1916 [ x1, y1 ] = [ x2, y2 ] = [ x3, y3 ];
    1917 [ x1, y1 ] = [ x2, y2 ] = 0;
    1918 [ x1, y1 ] = z = 0;
    1919 \end{cfa}
    1920 As in C, the rightmost assignment is performed first, \ie assignment parses right to left.
    1921 
    1922 
    1923 \section{Field Tuples}
    1924 
    1925 Tuples may be used to select multiple fields of a record by field name.
    1926 Its general form is:
    1927 \begin{cfa}
    1928 §\emph{expr}§ . [ §\emph{fieldlist}§ ]
    1929 §\emph{expr}§ -> [ §\emph{fieldlist}§ ]
    1930 \end{cfa}
    1931 \emph{expr} is any expression yielding a value of type record, \eg ©struct©, ©union©.
    1932 Each element of \emph{ fieldlist} is an element of the record specified by \emph{expr}.
    1933 A record-field tuple may be used anywhere a tuple can be used. An example of the use of a record-field tuple is
    1934 the following:
    1935 \begin{cfa}
    1936 struct s {
    1937         int f1, f2;
    1938         char f3;
    1939         double f4;
    1940 } v;
    1941 v.[ f3, f1, f2 ] = ['x', 11, 17 ];      §\C{// equivalent to v.f3 = 'x', v.f1 = 11, v.f2 = 17}§
    1942 f( v.[ f3, f1, f2 ] );                          §\C{// equivalent to f( v.f3, v.f1, v.f2 )}§
    1943 \end{cfa}
    1944 Note, the fields appearing in a record-field tuple may be specified in any order;
    1945 also, it is unnecessary to specify all the fields of a struct in a multiple record-field tuple.
    1946 
    1947 If a field of a ©struct© is itself another ©struct©, multiple fields of this subrecord can be specified using a nested record-field tuple, as in the following example:
    1948 \begin{cfa}
    1949 struct inner {
    1950         int f2, f3;
    1951 };
    1952 struct outer {
    1953         int f1;
    1954         struct inner i;
    1955         double f4;
    1956 } o;
    1957 
    1958 o.[ f1, i.[ f2, f3 ], f4 ] = [ 11, 12, 13, 3.14159 ];
    1959 \end{cfa}
    1960491
    1961492
     
    2249780still works.
    2250781Nevertheless, reversing the default action would have a non-trivial effect on case actions that compound, such as the above example of processing shell arguments.
    2251 Therefore, to preserve backwards compatibility, it is necessary to introduce a new kind of ©switch© statement, called ©choose©, with no implicit fall-through semantics and an explicit fall-through if the last statement of a case-clause ends with the new keyword ©fallthrough©/©fallthru©, e.g.:
     782Therefore, to preserve backwards compatibility, it is necessary to introduce a new kind of ©switch© statement, called ©choose©, with no implicit fall-through semantics and an explicit fall-through if the last statement of a case-clause ends with the new keyword ©fallthrough©/©fallthru©, \eg:
    2252783\begin{cfa}
    2253784®choose® ( i ) {
     
    2397928
    2398929
     930\subsection{Exception Hierarchy}
     931
     932An exception type can be derived from another exception type, just like deriving a subclass from a class, providing a kind of polymorphism among exception types.
     933The exception-type hierarchy that is created is used to organize exception types, similar to a class hierarchy in object-oriented languages, \eg:
     934\begin{center}
     935\input{EHMHierarchy}
     936\end{center}
     937A programmer can then choose to handle an exception at different degrees of specificity along the hierarchy;
     938derived exception-types support a more flexible programming style.
     939For example, higher-level code should catch general exceptions to reduce coupling to the specific implementation at the lower levels;
     940unnecessary coupling may force changes in higher-level code when low-level code changes.
     941A consequence of derived exception-types is that multiple exceptions may match, \eg:
     942\begin{cfa}
     943catch( Arithmetic )
     944\end{cfa}
     945matches all three derived exception-types: ©DivideByZero©, ©Overflow©, and ©Underflow©.
     946Because the propagation mechanisms perform a simple linear search of the handler clause for a guarded block, and selects the first matching handler, the order of catch clauses in the handler clause becomes important, \eg:
     947\begin{cfa}
     948try {
     949        ...
     950} catch( Overflow ) {   // must appear first
     951        // handle overflow
     952} catch( Arithmetic )
     953        // handle other arithmetic issues
     954}
     955\end{cfa}
     956\newterm{Multiple derivation} among exception is not supported.
     957
     958
     959\section{Declarations}
     960\label{s:Declarations}
     961
     962C declaration syntax is notoriously confusing and error prone.
     963For example, many C programmers are confused by a declaration as simple as:
     964\begin{quote2}
     965\begin{tabular}{@{}ll@{}}
     966\begin{cfa}
     967int * x[5]
     968\end{cfa}
     969&
     970\raisebox{-0.75\totalheight}{\input{Cdecl}}
     971\end{tabular}
     972\end{quote2}
     973Is this an array of 5 pointers to integers or a \Index{pointer} to an array of 5 integers?
     974The fact this declaration is unclear to many C programmers means there are \Index{productivity} and \Index{safety} issues even for basic programs.
     975Another example of confusion results from the fact that a routine name and its parameters are embedded within the return type, mimicking the way the return value is used at the routine's call site.
     976For example, a routine returning a \Index{pointer} to an array of integers is defined and used in the following way:
     977\begin{cfa}
     978int ®(*®f®())[®5®]® {...};                              §\C{definition}§
     979 ... ®(*®f®())[®3®]® += 1;                              §\C{usage}§
     980\end{cfa}
     981Essentially, the return type is wrapped around the routine name in successive layers (like an \Index{onion}).
     982While attempting to make the two contexts consistent is a laudable goal, it has not worked out in practice.
     983
     984\CFA provides its own type, variable and routine declarations, using a different syntax.
     985The new declarations place qualifiers to the left of the base type, while C declarations place qualifiers to the right of the base type.
     986In the following example, \R{red} is the base type and \B{blue} is qualifiers.
     987The \CFA declarations move the qualifiers to the left of the base type, \ie move the blue to the left of the red, while the qualifiers have the same meaning but are ordered left to right to specify a variable's type.
     988\begin{quote2}
     989\begin{tabular}{@{}l@{\hspace{3em}}l@{}}
     990\multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c}{\textbf{C}}        \\
     991\begin{cfa}
     992ß[5] *ß ®int® x1;
     993ß* [5]ß ®int® x2;
     994ß[* [5] int]ß f®( int p )®;
     995\end{cfa}
     996&
     997\begin{cfa}
     998®int® ß*ß x1 ß[5]ß;
     999®int® ß(*ßx2ß)[5]ß;
     1000ßint (*ßf®( int p )®ß)[5]ß;
     1001\end{cfa}
     1002\end{tabular}
     1003\end{quote2}
     1004The only exception is \Index{bit field} specification, which always appear to the right of the base type.
     1005% Specifically, the character ©*© is used to indicate a pointer, square brackets ©[©\,©]© are used to represent an array or function return value, and parentheses ©()© are used to indicate a routine parameter.
     1006However, unlike C, \CFA type declaration tokens are distributed across all variables in the declaration list.
     1007For instance, variables ©x© and ©y© of type \Index{pointer} to integer are defined in \CFA as follows:
     1008\begin{quote2}
     1009\begin{tabular}{@{}l@{\hspace{3em}}l@{}}
     1010\multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c}{\textbf{C}}        \\
     1011\begin{cfa}
     1012®*® int x, y;
     1013\end{cfa}
     1014&
     1015\begin{cfa}
     1016int ®*®x, ®*®y;
     1017\end{cfa}
     1018\end{tabular}
     1019\end{quote2}
     1020The downside of this semantics is the need to separate regular and \Index{pointer} declarations:
     1021\begin{quote2}
     1022\begin{tabular}{@{}l@{\hspace{3em}}l@{}}
     1023\multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c}{\textbf{C}}        \\
     1024\begin{cfa}
     1025®*® int x;
     1026int y;
     1027\end{cfa}
     1028&
     1029\begin{cfa}
     1030int ®*®x, y;
     1031
     1032\end{cfa}
     1033\end{tabular}
     1034\end{quote2}
     1035which is \Index{prescribing} a safety benefit.
     1036Other examples are:
     1037\begin{quote2}
     1038\begin{tabular}{@{}l@{\hspace{3em}}l@{\hspace{2em}}l@{}}
     1039\multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c@{\hspace{2em}}}{\textbf{C}} \\
     1040\begin{cfa}
     1041[ 5 ] int z;
     1042[ 5 ] * char w;
     1043* [ 5 ] double v;
     1044struct s {
     1045        int f0:3;
     1046        * int f1;
     1047        [ 5 ] * int f2;
     1048};
     1049\end{cfa}
     1050&
     1051\begin{cfa}
     1052int z[ 5 ];
     1053char * w[ 5 ];
     1054double (* v)[ 5 ];
     1055struct s {
     1056        int f0:3;
     1057        int * f1;
     1058        int * f2[ 5 ]
     1059};
     1060\end{cfa}
     1061&
     1062\begin{cfa}
     1063// array of 5 integers
     1064// array of 5 pointers to char
     1065// pointer to array of 5 doubles
     1066
     1067// common bit field syntax
     1068
     1069
     1070
     1071\end{cfa}
     1072\end{tabular}
     1073\end{quote2}
     1074
     1075All type qualifiers, \eg ©const©, ©volatile©, etc., are used in the normal way with the new declarations and also appear left to right, \eg:
     1076\begin{quote2}
     1077\begin{tabular}{@{}l@{\hspace{1em}}l@{\hspace{1em}}l@{}}
     1078\multicolumn{1}{c@{\hspace{1em}}}{\textbf{\CFA}}        & \multicolumn{1}{c@{\hspace{1em}}}{\textbf{C}} \\
     1079\begin{cfa}
     1080const * const int x;
     1081const * [ 5 ] const int y;
     1082\end{cfa}
     1083&
     1084\begin{cfa}
     1085int const * const x;
     1086const int (* const y)[ 5 ]
     1087\end{cfa}
     1088&
     1089\begin{cfa}
     1090// const pointer to const integer
     1091// const pointer to array of 5 const integers
     1092\end{cfa}
     1093\end{tabular}
     1094\end{quote2}
     1095All declaration qualifiers, \eg ©extern©, ©static©, etc., are used in the normal way with the new declarations but can only appear at the start of a \CFA routine declaration,\footnote{\label{StorageClassSpecifier}
     1096The placement of a storage-class specifier other than at the beginning of the declaration specifiers in a declaration is an obsolescent feature.~\cite[\S~6.11.5(1)]{C11}} \eg:
     1097\begin{quote2}
     1098\begin{tabular}{@{}l@{\hspace{3em}}l@{\hspace{2em}}l@{}}
     1099\multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c@{\hspace{2em}}}{\textbf{C}} \\
     1100\begin{cfa}
     1101extern [ 5 ] int x;
     1102static * const int y;
     1103\end{cfa}
     1104&
     1105\begin{cfa}
     1106int extern x[ 5 ];
     1107const int static * y;
     1108\end{cfa}
     1109&
     1110\begin{cfa}
     1111// externally visible array of 5 integers
     1112// internally visible pointer to constant int
     1113\end{cfa}
     1114\end{tabular}
     1115\end{quote2}
     1116
     1117The new declaration syntax can be used in other contexts where types are required, \eg casts and the pseudo-routine ©sizeof©:
     1118\begin{quote2}
     1119\begin{tabular}{@{}l@{\hspace{3em}}l@{}}
     1120\multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c}{\textbf{C}}        \\
     1121\begin{cfa}
     1122y = (®* int®)x;
     1123i = sizeof(®[ 5 ] * int®);
     1124\end{cfa}
     1125&
     1126\begin{cfa}
     1127y = (®int *®)x;
     1128i = sizeof(®int * [ 5 ]®);
     1129\end{cfa}
     1130\end{tabular}
     1131\end{quote2}
     1132
     1133Finally, new \CFA declarations may appear together with C declarations in the same program block, but cannot be mixed within a specific declaration.
     1134Therefore, a programmer has the option of either continuing to use traditional C declarations or take advantage of the new style.
     1135Clearly, both styles need to be supported for some time due to existing C-style header-files, particularly for UNIX systems.
     1136
     1137
     1138\section{Pointer/Reference}
     1139
     1140C provides a \newterm{pointer type};
     1141\CFA adds a \newterm{reference type}.
     1142These types may be derived from an object or routine type, called the \newterm{referenced type}.
     1143Objects of these types contain an \newterm{address}, which is normally a location in memory, but may also address memory-mapped registers in hardware devices.
     1144An integer constant expression with the value 0, or such an expression cast to type ©void *©, is called a \newterm{null-pointer constant}.\footnote{
     1145One way to conceptualize the null pointer is that no variable is placed at this address, so the null-pointer address can be used to denote an uninitialized pointer/reference object;
     1146\ie the null pointer is guaranteed to compare unequal to a pointer to any object or routine.}
     1147An address is \newterm{sound}, if it points to a valid memory location in scope, \ie within the program's execution-environment and has not been freed.
     1148Dereferencing an \newterm{unsound} address, including the null pointer, is \Index{undefined}, often resulting in a \Index{memory fault}.
     1149
     1150A program \newterm{object} is a region of data storage in the execution environment, the contents of which can represent values.
     1151In most cases, objects are located in memory at an address, and the variable name for an object is an implicit address to the object generated by the compiler and automatically dereferenced, as in:
     1152\begin{quote2}
     1153\begin{tabular}{@{}ll@{\hspace{2em}}l@{}}
     1154\begin{cfa}
     1155int x;
     1156x = 3;
     1157int y;
     1158y = x;
     1159\end{cfa}
     1160&
     1161\raisebox{-0.45\totalheight}{\input{pointer1}}
     1162&
     1163\begin{cfa}
     1164int * ®const® x = (int *)100
     1165*x = 3;                 // implicit dereference
     1166int * ®const® y = (int *)104;
     1167*y = *x;                // implicit dereference
     1168\end{cfa}
     1169\end{tabular}
     1170\end{quote2}
     1171where the right example is how the compiler logically interprets the variables in the left example.
     1172Since a variable name only points to one address during its lifetime, it is an \Index{immutable} \Index{pointer};
     1173hence, the implicit type of pointer variables ©x© and ©y© are constant pointers in the compiler interpretation.
     1174In general, variable addresses are stored in instructions instead of loaded from memory, and hence may not occupy storage.
     1175These approaches are contrasted in the following:
     1176\begin{quote2}
     1177\begin{tabular}{@{}l|l@{}}
     1178\multicolumn{1}{c|}{explicit variable address} & \multicolumn{1}{c}{implicit variable address} \\
     1179\hline
     1180\begin{cfa}
     1181lda             r1,100                  // load address of x
     1182ld               r2,(r1)                  // load value of x
     1183lda             r3,104                  // load address of y
     1184st               r2,(r3)                  // store x into y
     1185\end{cfa}
     1186&
     1187\begin{cfa}
     1188
     1189ld              r2,(100)                // load value of x
     1190
     1191st              r2,(104)                // store x into y
     1192\end{cfa}
     1193\end{tabular}
     1194\end{quote2}
     1195Finally, the immutable nature of a variable's address and the fact that there is no storage for the variable pointer means pointer assignment\index{pointer!assignment}\index{assignment!pointer} is impossible.
     1196Therefore, the expression ©x = y© has only one meaning, ©*x = *y©, \ie manipulate values, which is why explicitly writing the dereferences is unnecessary even though it occurs implicitly as part of \Index{instruction decoding}.
     1197
     1198A \Index{pointer}/\Index{reference} object is a generalization of an object variable-name, \ie a mutable address that can point to more than one memory location during its lifetime.
     1199(Similarly, an integer variable can contain multiple integer literals during its lifetime versus an integer constant representing a single literal during its lifetime, and like a variable name, may not occupy storage if the literal is embedded directly into instructions.)
     1200Hence, a pointer occupies memory to store its current address, and the pointer's value is loaded by dereferencing, \eg:
     1201\begin{quote2}
     1202\begin{tabular}{@{}l@{\hspace{2em}}l@{}}
     1203\begin{cfa}
     1204int x, y, ®*® p1, ®*® p2, ®**® p3;
     1205p1 = ®&®x;               // p1 points to x
     1206p2 = p1;                 // p2 points to x
     1207p1 = ®&®y;               // p1 points to y
     1208p3 = &p2;               // p3 points to p2
     1209\end{cfa}
     1210&
     1211\raisebox{-0.5\totalheight}{\input{pointer2.pstex_t}}
     1212\end{tabular}
     1213\end{quote2}
     1214
     1215Notice, an address has a \Index{duality}\index{address!duality}: a location in memory or the value at that location.
     1216In many cases, a compiler might be able to infer the best meaning for these two cases.
     1217For example, \Index*{Algol68}~\cite{Algol68} infers pointer dereferencing to select the best meaning for each pointer usage
     1218\begin{cfa}
     1219p2 = p1 + x;                                    §\C{// compiler infers *p2 = *p1 + x;}§
     1220\end{cfa}
     1221Algol68 infers the following dereferencing ©*p2 = *p1 + x©, because adding the arbitrary integer value in ©x© to the address of ©p1© and storing the resulting address into ©p2© is an unlikely operation.
     1222Unfortunately, automatic dereferencing does not work in all cases, and so some mechanism is necessary to fix incorrect choices.
     1223
     1224Rather than inferring dereference, most programming languages pick one implicit dereferencing semantics, and the programmer explicitly indicates the other to resolve address-duality.
     1225In C, objects of pointer type always manipulate the pointer object's address:
     1226\begin{cfa}
     1227p1 = p2;                                                §\C{// p1 = p2\ \ rather than\ \ *p1 = *p2}§
     1228p2 = p1 + x;                                    §\C{// p2 = p1 + x\ \ rather than\ \ *p2 = *p1 + x}§
     1229\end{cfa}
     1230even though the assignment to ©p2© is likely incorrect, and the programmer probably meant:
     1231\begin{cfa}
     1232p1 = p2;                                                §\C{// pointer address assignment}§
     1233®*®p2 = ®*®p1 + x;                              §\C{// pointed-to value assignment / operation}§
     1234\end{cfa}
     1235The C semantics work well for situations where manipulation of addresses is the primary meaning and data is rarely accessed, such as storage management (©malloc©/©free©).
     1236
     1237However, in most other situations, the pointed-to value is requested more often than the pointer address.
     1238\begin{cfa}
     1239*p2 = ((*p1 + *p2) * (**p3 - *p1)) / (**p3 - 15);
     1240\end{cfa}
     1241In this case, it is tedious to explicitly write the dereferencing, and error prone when pointer arithmetic is allowed.
     1242It is better to have the compiler generate the dereferencing and have no implicit pointer arithmetic:
     1243\begin{cfa}
     1244p2 = ((p1 + p2) * (p3 - p1)) / (p3 - 15);
     1245\end{cfa}
     1246
     1247To support this common case, a reference type is introduced in \CFA, denoted by ©&©, which is the opposite dereference semantics to a pointer type, making the value at the pointed-to location the implicit semantics for dereferencing (similar but not the same as \CC \Index{reference type}s).
     1248\begin{cfa}
     1249int x, y, ®&® r1, ®&® r2, ®&&® r3;
     1250®&®r1 = &x;                                             §\C{// r1 points to x}§
     1251®&®r2 = &r1;                                    §\C{// r2 points to x}§
     1252®&®r1 = &y;                                             §\C{// r1 points to y}§
     1253®&&®r3 = ®&®&r2;                                §\C{// r3 points to r2}§
     1254r2 = ((r1 + r2) * (r3 - r1)) / (r3 - 15); §\C{// implicit dereferencing}§
     1255\end{cfa}
     1256Except for auto-dereferencing by the compiler, this reference example is the same as the previous pointer example.
     1257Hence, a reference behaves like the variable name for the current variable it is pointing-to.
     1258One way to conceptualize a reference is via a rewrite rule, where the compiler inserts a dereference operator before the reference variable for each reference qualifier in a declaration, so the previous example becomes:
     1259\begin{cfa}
     1260®*®r2 = ((®*®r1 + ®*®r2) ®*® (®**®r3 - ®*®r1)) / (®**®r3 - 15);
     1261\end{cfa}
     1262When a reference operation appears beside a dereference operation, \eg ©&*©, they cancel out.
     1263However, in C, the cancellation always yields a value (\Index{rvalue}).\footnote{
     1264The unary ©&© operator yields the address of its operand.
     1265If the operand has type ``type'', the result has type ``pointer to type''.
     1266If the operand is the result of a unary ©*© operator, neither that operator nor the ©&© operator is evaluated and the result is as if both were omitted, except that the constraints on the operators still apply and the result is not an lvalue.~\cite[\S~6.5.3.2--3]{C11}}
     1267For a \CFA reference type, the cancellation on the left-hand side of assignment leaves the reference as an address (\Index{lvalue}):
     1268\begin{cfa}
     1269(&®*®)r1 = &x;                                  §\C{// (\&*) cancel giving address in r1 not variable pointed-to by r1}§
     1270\end{cfa}
     1271Similarly, the address of a reference can be obtained for assignment or computation (\Index{rvalue}):
     1272\begin{cfa}
     1273(&(&®*®)®*®)r3 = &(&®*®)r2;             §\C{// (\&*) cancel giving address in r2, (\&(\&*)*) cancel giving address in r3}§
     1274\end{cfa}
     1275Cancellation\index{cancellation!pointer/reference}\index{pointer!cancellation} works to arbitrary depth.
     1276
     1277Fundamentally, pointer and reference objects are functionally interchangeable because both contain addresses.
     1278\begin{cfa}
     1279int x, *p1 = &x, **p2 = &p1, ***p3 = &p2,
     1280                 &r1 = x,    &&r2 = r1,   &&&r3 = r2;
     1281***p3 = 3;                                              §\C{// change x}§
     1282r3 = 3;                                                 §\C{// change x, ***r3}§
     1283**p3 = ...;                                             §\C{// change p1}§
     1284&r3 = ...;                                              §\C{// change r1, (\&*)**r3, 1 cancellation}§
     1285*p3 = ...;                                              §\C{// change p2}§
     1286&&r3 = ...;                                             §\C{// change r2, (\&(\&*)*)*r3, 2 cancellations}§
     1287&&&r3 = p3;                                             §\C{// change r3 to p3, (\&(\&(\&*)*)*)r3, 3 cancellations}§
     1288\end{cfa}
     1289Furthermore, both types are equally performant, as the same amount of dereferencing occurs for both types.
     1290Therefore, the choice between them is based solely on whether the address is dereferenced frequently or infrequently, which dictates the amount of implicit dereferencing aid from the compiler.
     1291
     1292As for a pointer type, a reference type may have qualifiers:
     1293\begin{cfa}
     1294const int cx = 5;                                       §\C{// cannot change cx;}§
     1295const int & cr = cx;                            §\C{// cannot change what cr points to}§
     1296®&®cr = &cx;                                            §\C{// can change cr}§
     1297cr = 7;                                                         §\C{// error, cannot change cx}§
     1298int & const rc = x;                                     §\C{// must be initialized}§
     1299®&®rc = &x;                                                     §\C{// error, cannot change rc}§
     1300const int & const crc = cx;                     §\C{// must be initialized}§
     1301crc = 7;                                                        §\C{// error, cannot change cx}§
     1302®&®crc = &cx;                                           §\C{// error, cannot change crc}§
     1303\end{cfa}
     1304Hence, for type ©& const©, there is no pointer assignment, so ©&rc = &x© is disallowed, and \emph{the address value cannot be the null pointer unless an arbitrary pointer is coerced\index{coercion} into the reference}:
     1305\begin{cfa}
     1306int & const cr = *0;                            §\C{// where 0 is the int * zero}§
     1307\end{cfa}
     1308Note, constant reference-types do not prevent \Index{addressing errors} because of explicit storage-management:
     1309\begin{cfa}
     1310int & const cr = *malloc();
     1311cr = 5;
     1312free( &cr );
     1313cr = 7;                                                         §\C{// unsound pointer dereference}§
     1314\end{cfa}
     1315
     1316The position of the ©const© qualifier \emph{after} the pointer/reference qualifier causes confuse for C programmers.
     1317The ©const© qualifier cannot be moved before the pointer/reference qualifier for C style-declarations;
     1318\CFA-style declarations (see \VRef{s:Declarations}) attempt to address this issue:
     1319\begin{quote2}
     1320\begin{tabular}{@{}l@{\hspace{3em}}l@{}}
     1321\multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c}{\textbf{C}}        \\
     1322\begin{cfa}
     1323®const® * ®const® * const int ccp;
     1324®const® & ®const® & const int ccr;
     1325\end{cfa}
     1326&
     1327\begin{cfa}
     1328const int * ®const® * ®const® ccp;
     1329
     1330\end{cfa}
     1331\end{tabular}
     1332\end{quote2}
     1333where the \CFA declaration is read left-to-right.
     1334
     1335Finally, like pointers, references are usable and composable with other type operators and generators.
     1336\begin{cfa}
     1337int w, x, y, z, & ar[3] = { x, y, z }; §\C{// initialize array of references}§
     1338&ar[1] = &w;                                            §\C{// change reference array element}§
     1339typeof( ar[1] ) p;                                      §\C{// (gcc) is int, i.e., the type of referenced object}§
     1340typeof( &ar[1] ) q;                                     §\C{// (gcc) is int \&, i.e., the type of reference}§
     1341sizeof( ar[1] ) == sizeof( int );       §\C{// is true, i.e., the size of referenced object}§
     1342sizeof( &ar[1] ) == sizeof( int *)      §\C{// is true, i.e., the size of a reference}§
     1343\end{cfa}
     1344
     1345In contrast to \CFA reference types, \Index*[C++]{\CC{}}'s reference types are all ©const© references, preventing changes to the reference address, so only value assignment is possible, which eliminates half of the \Index{address duality}.
     1346Also, \CC does not allow \Index{array}s\index{array!reference} of reference\footnote{
     1347The reason for disallowing arrays of reference is unknown, but possibly comes from references being ethereal (like a textual macro), and hence, replaceable by the referant object.}
     1348\Index*{Java}'s reference types to objects (all Java objects are on the heap) are like C pointers, which always manipulate the address, and there is no (bit-wise) object assignment, so objects are explicitly cloned by shallow or deep copying, which eliminates half of the address duality.
     1349
     1350
     1351\subsection{Initialization}
     1352
     1353\Index{Initialization} is different than \Index{assignment} because initialization occurs on the empty (uninitialized) storage on an object, while assignment occurs on possibly initialized storage of an object.
     1354There are three initialization contexts in \CFA: declaration initialization, argument/parameter binding, return/temporary binding.
     1355Because the object being initialized has no value, there is only one meaningful semantics with respect to address duality: it must mean address as there is no pointed-to value.
     1356In contrast, the left-hand side of assignment has an address that has a duality.
     1357Therefore, for pointer/reference initialization, the initializing value must be an address not a value.
     1358\begin{cfa}
     1359int * p = &x;                                           §\C{// assign address of x}§
     1360®int * p = x;®                                          §\C{// assign value of x}§
     1361int & r = x;                                            §\C{// must have address of x}§
     1362\end{cfa}
     1363Like the previous example with C pointer-arithmetic, it is unlikely assigning the value of ©x© into a pointer is meaningful (again, a warning is usually given).
     1364Therefore, for safety, this context requires an address, so it is superfluous to require explicitly taking the address of the initialization object, even though the type is incorrect.
     1365Note, this is strictly a convenience and safety feature for a programmer.
     1366Hence, \CFA allows ©r© to be assigned ©x© because it infers a reference for ©x©, by implicitly inserting a address-of operator, ©&©, and it is an error to put an ©&© because the types no longer match due to the implicit dereference.
     1367Unfortunately, C allows ©p© to be assigned with ©&x© (address) or ©x© (value), but most compilers warn about the latter assignment as being potentially incorrect.
     1368Similarly, when a reference type is used for a parameter/return type, the call-site argument does not require a reference operator for the same reason.
     1369\begin{cfa}
     1370int & f( int & r );                                     §\C{// reference parameter and return}§
     1371z = f( x ) + f( y );                            §\C{// reference operator added, temporaries needed for call results}§
     1372\end{cfa}
     1373Within routine ©f©, it is possible to change the argument by changing the corresponding parameter, and parameter ©r© can be locally reassigned within ©f©.
     1374Since operator routine ©?+?© takes its arguments by value, the references returned from ©f© are used to initialize compiler generated temporaries with value semantics that copy from the references.
     1375\begin{cfa}
     1376int temp1 = f( x ), temp2 = f( y );
     1377z = temp1 + temp2;
     1378\end{cfa}
     1379This \Index{implicit referencing} is crucial for reducing the syntactic burden for programmers when using references;
     1380otherwise references have the same syntactic  burden as pointers in these contexts.
     1381
     1382When a pointer/reference parameter has a ©const© value (immutable), it is possible to pass literals and expressions.
     1383\begin{cfa}
     1384void f( ®const® int & cr );
     1385void g( ®const® int * cp );
     1386f( 3 );                   g( ®&®3 );
     1387f( x + y );             g( ®&®(x + y) );
     1388\end{cfa}
     1389Here, the compiler passes the address to the literal 3 or the temporary for the expression ©x + y©, knowing the argument cannot be changed through the parameter.
     1390The ©&© before the constant/expression for the pointer-type parameter (©g©) is a \CFA extension necessary to type match and is a common requirement before a variable in C (\eg ©scanf©).
     1391Importantly, ©&3© may not be equal to ©&3©, where the references occur across calls because the temporaries maybe different on each call.
     1392
     1393\CFA \emph{extends} this semantics to a mutable pointer/reference parameter, and the compiler implicitly creates the necessary temporary (copying the argument), which is subsequently pointed-to by the reference parameter and can be changed.\footnote{
     1394If whole program analysis is possible, and shows the parameter is not assigned, \ie it is ©const©, the temporary is unnecessary.}
     1395\begin{cfa}
     1396void f( int & r );
     1397void g( int * p );
     1398f( 3 );                   g( ®&®3 );            §\C{// compiler implicit generates temporaries}§
     1399f( x + y );             g( ®&®(x + y) );        §\C{// compiler implicit generates temporaries}§
     1400\end{cfa}
     1401Essentially, there is an implicit \Index{rvalue} to \Index{lvalue} conversion in this case.\footnote{
     1402This conversion attempts to address the \newterm{const hell} problem, when the innocent addition of a ©const© qualifier causes a cascade of type failures, requiring an unknown number of additional ©const© qualifiers, until it is discovered a ©const© qualifier cannot be added and all the ©const© qualifiers must be removed.}
     1403The implicit conversion allows seamless calls to any routine without having to explicitly name/copy the literal/expression to allow the call.
     1404
     1405%\CFA attempts to handle pointers and references in a uniform, symmetric manner.
     1406Finally, C handles \Index{routine object}s in an inconsistent way.
     1407A routine object is both a pointer and a reference (\Index{particle and wave}).
     1408\begin{cfa}
     1409void f( int i );
     1410void (*fp)( int );                                      §\C{// routine pointer}§
     1411fp = f;                                                         §\C{// reference initialization}§
     1412fp = &f;                                                        §\C{// pointer initialization}§
     1413fp = *f;                                                        §\C{// reference initialization}§
     1414fp(3);                                                          §\C{// reference invocation}§
     1415(*fp)(3);                                                       §\C{// pointer invocation}§
     1416\end{cfa}
     1417While C's treatment of routine objects has similarity to inferring a reference type in initialization contexts, the examples are assignment not initialization, and all possible forms of assignment are possible (©f©, ©&f©, ©*f©) without regard for type.
     1418Instead, a routine object should be referenced by a ©const© reference:
     1419\begin{cfa}
     1420®const® void (®&® fr)( int ) = f;       §\C{// routine reference}§
     1421fr = ...                                                        §\C{// error, cannot change code}§
     1422&fr = ...;                                                      §\C{// changing routine reference}§
     1423fr( 3 );                                                        §\C{// reference call to f}§
     1424(*fr)(3);                                                       §\C{// error, incorrect type}§
     1425\end{cfa}
     1426because the value of the routine object is a routine literal, \ie the routine code is normally immutable during execution.\footnote{
     1427Dynamic code rewriting is possible but only in special circumstances.}
     1428\CFA allows this additional use of references for routine objects in an attempt to give a more consistent meaning for them.
     1429
     1430
     1431\subsection{Address-of Semantics}
     1432
     1433In C, ©&E© is an rvalue for any expression ©E©.
     1434\CFA extends the ©&© (address-of) operator as follows:
     1435\begin{itemize}
     1436\item
     1437if ©R© is an \Index{rvalue} of type ©T &$_1$...&$_r$© where $r \ge 1$ references (©&© symbols) than ©&R© has type ©T ®*®&$_{\color{red}2}$...&$_{\color{red}r}$©, \ie ©T© pointer with $r-1$ references (©&© symbols).
     1438
     1439\item
     1440if ©L© is an \Index{lvalue} of type ©T &$_1$...&$_l$© where $l \ge 0$ references (©&© symbols) then ©&L© has type ©T ®*®&$_{\color{red}1}$...&$_{\color{red}l}$©, \ie ©T© pointer with $l$ references (©&© symbols).
     1441\end{itemize}
     1442The following example shows the first rule applied to different \Index{rvalue} contexts:
     1443\begin{cfa}
     1444int x, * px, ** ppx, *** pppx, **** ppppx;
     1445int & rx = x, && rrx = rx, &&& rrrx = rrx ;
     1446x = rrrx;               // rrrx is an lvalue with type int &&& (equivalent to x)
     1447px = &rrrx;             // starting from rrrx, &rrrx is an rvalue with type int *&&& (&x)
     1448ppx = &&rrrx;   // starting from &rrrx, &&rrrx is an rvalue with type int **&& (&rx)
     1449pppx = &&&rrrx; // starting from &&rrrx, &&&rrrx is an rvalue with type int ***& (&rrx)
     1450ppppx = &&&&rrrx; // starting from &&&rrrx, &&&&rrrx is an rvalue with type int **** (&rrrx)
     1451\end{cfa}
     1452The following example shows the second rule applied to different \Index{lvalue} contexts:
     1453\begin{cfa}
     1454int x, * px, ** ppx, *** pppx;
     1455int & rx = x, && rrx = rx, &&& rrrx = rrx ;
     1456rrrx = 2;               // rrrx is an lvalue with type int &&& (equivalent to x)
     1457&rrrx = px;             // starting from rrrx, &rrrx is an rvalue with type int *&&& (rx)
     1458&&rrrx = ppx;   // starting from &rrrx, &&rrrx is an rvalue with type int **&& (rrx)
     1459&&&rrrx = pppx; // starting from &&rrrx, &&&rrrx is an rvalue with type int ***& (rrrx)
     1460\end{cfa}
     1461
     1462
     1463\subsection{Conversions}
     1464
     1465C provides a basic implicit conversion to simplify variable usage:
     1466\begin{enumerate}
     1467\setcounter{enumi}{-1}
     1468\item
     1469lvalue to rvalue conversion: ©cv T© converts to ©T©, which allows implicit variable dereferencing.
     1470\begin{cfa}
     1471int x;
     1472x + 1;                  // lvalue variable (int) converts to rvalue for expression
     1473\end{cfa}
     1474An rvalue has no type qualifiers (©cv©), so the lvalue qualifiers are dropped.
     1475\end{enumerate}
     1476\CFA provides three new implicit conversion for reference types to simplify reference usage.
     1477\begin{enumerate}
     1478\item
     1479reference to rvalue conversion: ©cv T &© converts to ©T©, which allows implicit reference dereferencing.
     1480\begin{cfa}
     1481int x, &r = x, f( int p );
     1482x = ®r® + f( ®r® );  // lvalue reference converts to rvalue
     1483\end{cfa}
     1484An rvalue has no type qualifiers (©cv©), so the reference qualifiers are dropped.
     1485
     1486\item
     1487lvalue to reference conversion: \lstinline[deletekeywords={lvalue}]@lvalue-type cv1 T@ converts to ©cv2 T &©, which allows implicitly converting variables to references.
     1488\begin{cfa}
     1489int x, &r = ®x®, f( int & p ); // lvalue variable (int) convert to reference (int &)
     1490f( ®x® );               // lvalue variable (int) convert to reference (int &)
     1491\end{cfa}
     1492Conversion can restrict a type, where ©cv1© $\le$ ©cv2©, \eg passing an ©int© to a ©const volatile int &©, which has low cost.
     1493Conversion can expand a type, where ©cv1© $>$ ©cv2©, \eg passing a ©const volatile int© to an ©int &©, which has high cost (\Index{warning});
     1494furthermore, if ©cv1© has ©const© but not ©cv2©, a temporary variable is created to preserve the immutable lvalue.
     1495
     1496\item
     1497rvalue to reference conversion: ©T© converts to ©cv T &©, which allows binding references to temporaries.
     1498\begin{cfa}
     1499int x, & f( int & p );
     1500f( ®x + 3® );   // rvalue parameter (int) implicitly converts to lvalue temporary reference (int &)
     1501®&f®(...) = &x; // rvalue result (int &) implicitly converts to lvalue temporary reference (int &)
     1502\end{cfa}
     1503In both case, modifications to the temporary are inaccessible (\Index{warning}).
     1504Conversion expands the temporary-type with ©cv©, which is low cost since the temporary is inaccessible.
     1505\end{enumerate}
     1506
     1507
     1508\begin{comment}
     1509From: Richard Bilson <rcbilson@gmail.com>
     1510Date: Wed, 13 Jul 2016 01:58:58 +0000
     1511Subject: Re: pointers / references
     1512To: "Peter A. Buhr" <pabuhr@plg2.cs.uwaterloo.ca>
     1513
     1514As a general comment I would say that I found the section confusing, as you move back and forth
     1515between various real and imagined programming languages. If it were me I would rewrite into two
     1516subsections, one that specifies precisely the syntax and semantics of reference variables and
     1517another that provides the rationale.
     1518
     1519I don't see any obvious problems with the syntax or semantics so far as I understand them. It's not
     1520obvious that the description you're giving is complete, but I'm sure you'll find the special cases
     1521as you do the implementation.
     1522
     1523My big gripes are mostly that you're not being as precise as you need to be in your terminology, and
     1524that you say a few things that aren't actually true even though I generally know what you mean.
     1525
     152620 C provides a pointer type; CFA adds a reference type. Both types contain an address, which is normally a
     152721 location in memory.
     1528
     1529An address is not a location in memory; an address refers to a location in memory. Furthermore it
     1530seems weird to me to say that a type "contains" an address; rather, objects of that type do.
     1531
     153221 Special addresses are used to denote certain states or access co-processor memory. By
     153322 convention, no variable is placed at address 0, so addresses like 0, 1, 2, 3 are often used to denote no-value
     153423 or other special states.
     1535
     1536This isn't standard C at all. There has to be one null pointer representation, but it doesn't have
     1537to be a literal zero representation and there doesn't have to be more than one such representation.
     1538
     153923 Often dereferencing a special state causes a memory fault, so checking is necessary
     154024 during execution.
     1541
     1542I don't see the connection between the two clauses here. I feel like if a bad pointer will not cause
     1543a memory fault then I need to do more checking, not less.
     1544
     154524 If the programming language assigns addresses, a program's execution is sound, \ie all
     154625 addresses are to valid memory locations.
     1547
     1548You haven't said what it means to "assign" an address, but if I use my intuitive understanding of
     1549the term I don't see how this can be true unless you're assuming automatic storage management.
     1550
     15511 Program variables are implicit pointers to memory locations generated by the compiler and automatically
     15522 dereferenced, as in:
     1553
     1554There is no reason why a variable needs to have a location in memory, and indeed in a typical
     1555program many variables will not. In standard terminology an object identifier refers to data in the
     1556execution environment, but not necessarily in memory.
     1557
     155813 A pointer/reference is a generalization of a variable name, \ie a mutable address that can point to more
     155914 than one memory location during its lifetime.
     1560
     1561I feel like you're off the reservation here. In my world there are objects of pointer type, which
     1562seem to be what you're describing here, but also pointer values, which can be stored in an object of
     1563pointer type but don't necessarily have to be. For example, how would you describe the value denoted
     1564by "&main" in a C program? I would call it a (function) pointer, but that doesn't satisfy your
     1565definition.
     1566
     156716 not occupy storage as the literal is embedded directly into instructions.) Hence, a pointer occupies memory
     156817 to store its current address, and the pointer's value is loaded by dereferencing, \eg:
     1569
     1570As with my general objection regarding your definition of variables, there is no reason why a
     1571pointer variable (object of pointer type) needs to occupy memory.
     1572
     157321 p2 = p1 + x; // compiler infers *p2 = *p1 + x;
     1574
     1575What language are we in now?
     1576
     157724 pointer usage. However, in C, the following cases are ambiguous, especially with pointer arithmetic:
     157825 p1 = p2; // p1 = p2 or *p1 = *p2
     1579
     1580This isn't ambiguous. it's defined to be the first option.
     1581
     158226 p1 = p1 + 1; // p1 = p1 + 1 or *p1 = *p1 + 1
     1583
     1584Again, this statement is not ambiguous.
     1585
     158613 example. Hence, a reference behaves like the variable name for the current variable it is pointing-to. The
     158714 simplest way to understand a reference is to imagine the compiler inserting a dereference operator before
     158815 the reference variable for each reference qualifier in a declaration, \eg:
     1589
     1590It's hard for me to understand who the audience for this part is. I think a practical programmer is
     1591likely to be satisfied with "a reference behaves like the variable name for the current variable it
     1592is pointing-to," maybe with some examples. Your "simplest way" doesn't strike me as simpler than
     1593that. It feels like you're trying to provide a more precise definition for the semantics of
     1594references, but it isn't actually precise enough to be a formal specification. If you want to
     1595express the semantics of references using rewrite rules that's a great way to do it, but lay the
     1596rules out clearly, and when you're showing an example of rewriting keep your
     1597references/pointers/values separate (right now, you use \eg "r3" to mean a reference, a pointer,
     1598and a value).
     1599
     160024 Cancellation works to arbitrary depth, and pointer and reference values are interchangeable because both
     160125 contain addresses.
     1602
     1603Except they're not interchangeable, because they have different and incompatible types.
     1604
     160540 Interestingly, C++ deals with the address duality by making the pointed-to value the default, and prevent-
     160641 ing changes to the reference address, which eliminates half of the duality. Java deals with the address duality
     160742 by making address assignment the default and requiring field assignment (direct or indirect via methods),
     160843 \ie there is no builtin bit-wise or method-wise assignment, which eliminates half of the duality.
     1609
     1610I can follow this but I think that's mostly because I already understand what you're trying to
     1611say. I don't think I've ever heard the term "method-wise assignment" and I don't see you defining
     1612it. Furthermore Java does have value assignment of basic (non-class) types, so your summary here
     1613feels incomplete. (If it were me I'd drop this paragraph rather than try to save it.)
     1614
     161511 Hence, for type & const, there is no pointer assignment, so &rc = &x is disallowed, and the address value
     161612 cannot be 0 unless an arbitrary pointer is assigned to the reference.
     1617
     1618Given the pains you've taken to motivate every little bit of the semantics up until now, this last
     1619clause ("the address value cannot be 0") comes out of the blue. It seems like you could have
     1620perfectly reasonable semantics that allowed the initialization of null references.
     1621
     162212 In effect, the compiler is managing the
     162313 addresses for type & const not the programmer, and by a programming discipline of only using references
     162414 with references, address errors can be prevented.
     1625
     1626Again, is this assuming automatic storage management?
     1627
     162818 rary binding. For reference initialization (like pointer), the initializing value must be an address (lvalue) not
     162919 a value (rvalue).
     1630
     1631This sentence appears to suggest that an address and an lvalue are the same thing.
     1632
     163320 int * p = &x; // both &x and x are possible interpretations
     1634
     1635Are you saying that we should be considering "x" as a possible interpretation of the initializer
     1636"&x"? It seems to me that this expression has only one legitimate interpretation in context.
     1637
     163821 int & r = x; // x unlikely interpretation, because of auto-dereferencing
     1639
     1640You mean, we can initialize a reference using an integer value? Surely we would need some sort of
     1641cast to induce that interpretation, no?
     1642
     164322 Hence, the compiler implicitly inserts a reference operator, &, before the initialization expression.
     1644
     1645But then the expression would have pointer type, which wouldn't be compatible with the type of r.
     1646
     164722 Similarly,
     164823 when a reference is used for a parameter/return type, the call-site argument does not require a reference
     164924 operator.
     1650
     1651Furthermore, it would not be correct to use a reference operator.
     1652
     165345 The implicit conversion allows
     16541 seamless calls to any routine without having to explicitly name/copy the literal/expression to allow the call.
     16552 While C' attempts to handle pointers and references in a uniform, symmetric manner, C handles routine
     16563 variables in an inconsistent way: a routine variable is both a pointer and a reference (particle and wave).
     1657
     1658After all this talk of how expressions can have both pointer and value interpretations, you're
     1659disparaging C because it has expressions that have both pointer and value interpretations?
     1660
     1661On Sat, Jul 9, 2016 at 4:18 PM Peter A. Buhr <pabuhr@plg.uwaterloo.ca> wrote:
     1662> Aaron discovered a few places where "&"s are missing and where there are too many "&", which are
     1663> corrected in the attached updated. None of the text has changed, if you have started reading
     1664> already.
     1665\end{comment}
     1666
     1667
     1668\section{Routine Definition}
     1669
     1670\CFA also supports a new syntax for routine definition, as well as \Celeven and K\&R routine syntax.
     1671The point of the new syntax is to allow returning multiple values from a routine~\cite{Galletly96,CLU}, \eg:
     1672\begin{cfa}
     1673®[ int o1, int o2, char o3 ]® f( int i1, char i2, char i3 ) {
     1674        §\emph{routine body}§
     1675}
     1676\end{cfa}
     1677where routine ©f© has three output (return values) and three input parameters.
     1678Existing C syntax cannot be extended with multiple return types because it is impossible to embed a single routine name within multiple return type specifications.
     1679
     1680In detail, the brackets, ©[]©, enclose the result type, where each return value is named and that name is a local variable of the particular return type.\footnote{
     1681\Index*{Michael Tiemann}, with help from \Index*{Doug Lea}, provided named return values in g++, circa 1989.}
     1682The value of each local return variable is automatically returned at routine termination.
     1683Declaration qualifiers can only appear at the start of a routine definition, \eg:
     1684\begin{cfa}
     1685®extern® [ int x ] g( int y ) {§\,§}
     1686\end{cfa}
     1687Lastly, if there are no output parameters or input parameters, the brackets and/or parentheses must still be specified;
     1688in both cases the type is assumed to be void as opposed to old style C defaults of int return type and unknown parameter types, respectively, as in:
     1689\begin{cfa}
     1690[§\,§] g();                                                     §\C{// no input or output parameters}§
     1691[ void ] g( void );                                     §\C{// no input or output parameters}§
     1692\end{cfa}
     1693
     1694Routine f is called as follows:
     1695\begin{cfa}
     1696[ i, j, ch ] = f( 3, 'a', ch );
     1697\end{cfa}
     1698The list of return values from f and the grouping on the left-hand side of the assignment is called a \newterm{return list} and discussed in Section 12.
     1699
     1700\CFA style declarations cannot be used to declare parameters for K\&R style routine definitions because of the following ambiguity:
     1701\begin{cfa}
     1702int (*f(x))[ 5 ] int x; {}
     1703\end{cfa}
     1704The string ``©int (*f(x))[ 5 ]©'' declares a K\&R style routine of type returning a pointer to an array of 5 integers, while the string ``©[ 5 ] int x©'' declares a \CFA style parameter x of type array of 5 integers.
     1705Since the strings overlap starting with the open bracket, ©[©, there is an ambiguous interpretation for the string.
     1706As well, \CFA-style declarations cannot be used to declare parameters for C-style routine-definitions because of the following ambiguity:
     1707\begin{cfa}
     1708typedef int foo;
     1709int f( int (* foo) );                           §\C{// foo is redefined as a parameter name}§
     1710\end{cfa}
     1711The string ``©int (* foo)©'' declares a C-style named-parameter of type pointer to an integer (the parenthesis are superfluous), while the same string declares a \CFA style unnamed parameter of type routine returning integer with unnamed parameter of type pointer to foo.
     1712The redefinition of a type name in a parameter list is the only context in C where the character ©*© can appear to the left of a type name, and \CFA relies on all type qualifier characters appearing to the right of the type name.
     1713The inability to use \CFA declarations in these two contexts is probably a blessing because it precludes programmers from arbitrarily switching between declarations forms within a declaration contexts.
     1714
     1715C-style declarations can be used to declare parameters for \CFA style routine definitions, \eg:
     1716\begin{cfa}
     1717[ int ] f( * int, int * );                      §\C{// returns an integer, accepts 2 pointers to integers}§
     1718[ * int, int * ] f( int );                      §\C{// returns 2 pointers to integers, accepts an integer}§
     1719\end{cfa}
     1720The reason for allowing both declaration styles in the new context is for backwards compatibility with existing preprocessor macros that generate C-style declaration-syntax, as in:
     1721\begin{cfa}
     1722#define ptoa( n, d ) int (*n)[ d ]
     1723int f( ptoa( p, 5 ) ) ...                       §\C{// expands to int f( int (*p)[ 5 ] )}§
     1724[ int ] f( ptoa( p, 5 ) ) ...           §\C{// expands to [ int ] f( int (*p)[ 5 ] )}§
     1725\end{cfa}
     1726Again, programmers are highly encouraged to use one declaration form or the other, rather than mixing the forms.
     1727
     1728
     1729\subsection{Named Return Values}
     1730
     1731\Index{Named return values} handle the case where it is necessary to define a local variable whose value is then returned in a ©return© statement, as in:
     1732\begin{cfa}
     1733int f() {
     1734        int x;
     1735        ... x = 0; ... x = y; ...
     1736        return x;
     1737}
     1738\end{cfa}
     1739Because the value in the return variable is automatically returned when a \CFA routine terminates, the ©return© statement \emph{does not} contain an expression, as in:
     1740\newline
     1741\begin{minipage}{\linewidth}
     1742\begin{cfa}
     1743®[ int x, int y ]® f() {
     1744        int z;
     1745        ... x = 0; ... y = z; ...
     1746        ®return;®                                                       §\C{// implicitly return x, y}§
     1747}
     1748\end{cfa}
     1749\end{minipage}
     1750\newline
     1751When the return is encountered, the current values of ©x© and ©y© are returned to the calling routine.
     1752As well, ``falling off the end'' of a routine without a ©return© statement is permitted, as in:
     1753\begin{cfa}
     1754[ int x, int y ] f() {
     1755        ...
     1756}                                                                               §\C{// implicitly return x, y}§
     1757\end{cfa}
     1758In this case, the current values of ©x© and ©y© are returned to the calling routine just as if a ©return© had been encountered.
     1759
     1760Named return values may be used in conjunction with named parameter values;
     1761specifically, a return and parameter can have the same name.
     1762\begin{cfa}
     1763[ int x, int y ] f( int, x, int y ) {
     1764        ...
     1765}                                                                               §\C{// implicitly return x, y}§
     1766\end{cfa}
     1767This notation allows the compiler to eliminate temporary variables in nested routine calls.
     1768\begin{cfa}
     1769[ int x, int y ] f( int, x, int y );    §\C{// prototype declaration}§
     1770int a, b;
     1771[a, b] = f( f( f( a, b ) ) );
     1772\end{cfa}
     1773While the compiler normally ignores parameters names in prototype declarations, here they are used to eliminate temporary return-values by inferring that the results of each call are the inputs of the next call, and ultimately, the left-hand side of the assignment.
     1774Hence, even without the body of routine ©f© (separate compilation), it is possible to perform a global optimization across routine calls.
     1775The compiler warns about naming inconsistencies between routine prototype and definition in this case, and behaviour is \Index{undefined} if the programmer is inconsistent.
     1776
     1777
     1778\subsection{Routine Prototype}
     1779
     1780The syntax of the new routine prototype declaration follows directly from the new routine definition syntax;
     1781as well, parameter names are optional, \eg:
     1782\begin{cfa}
     1783[ int x ] f ();                                                 §\C{// returning int with no parameters}§
     1784[ * int ] g (int y);                                    §\C{// returning pointer to int with int parameter}§
     1785[ ] h ( int, char );                                    §\C{// returning no result with int and char parameters}§
     1786[ * int, int ] j ( int );                               §\C{// returning pointer to int and int, with int parameter}§
     1787\end{cfa}
     1788This syntax allows a prototype declaration to be created by cutting and pasting source text from the routine definition header (or vice versa).
     1789It is possible to declare multiple routine-prototypes in a single declaration, but the entire type specification is distributed across \emph{all} routine names in the declaration list (see~\VRef{s:Declarations}), \eg:
     1790\begin{quote2}
     1791\begin{tabular}{@{}l@{\hspace{3em}}l@{}}
     1792\multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c}{\textbf{C}}        \\
     1793\begin{cfa}
     1794[ int ] f( int ), g;
     1795\end{cfa}
     1796&
     1797\begin{cfa}
     1798int f( int ), g( int );
     1799\end{cfa}
     1800\end{tabular}
     1801\end{quote2}
     1802Declaration qualifiers can only appear at the start of a \CFA routine declaration,\footref{StorageClassSpecifier} \eg:
     1803\begin{cfa}
     1804extern [ int ] f ( int );
     1805static [ int ] g ( int );
     1806\end{cfa}
     1807
     1808
     1809\section{Routine Pointers}
     1810
     1811The syntax for pointers to \CFA routines specifies the pointer name on the right, \eg:
     1812\begin{cfa}
     1813* [ int x ] () fp;                                              §\C{// pointer to routine returning int with no parameters}§
     1814* [ * int ] (int y) gp;                                 §\C{// pointer to routine returning pointer to int with int parameter}§
     1815* [ ] (int,char) hp;                                    §\C{// pointer to routine returning no result with int and char parameters}§
     1816* [ * int,int ] ( int ) jp;                             §\C{// pointer to routine returning pointer to int and int, with int parameter}§
     1817\end{cfa}
     1818While parameter names are optional, \emph{a routine name cannot be specified};
     1819for example, the following is incorrect:
     1820\begin{cfa}
     1821* [ int x ] f () fp;                                    §\C{// routine name "f" is not allowed}§
     1822\end{cfa}
     1823
     1824
     1825\section{Named and Default Arguments}
     1826
     1827Named\index{named arguments}\index{arguments!named} and default\index{default arguments}\index{arguments!default} arguments~\cite{Hardgrave76}\footnote{
     1828Francez~\cite{Francez77} proposed a further extension to the named-parameter passing style, which specifies what type of communication (by value, by reference, by name) the argument is passed to the routine.}
     1829are two mechanisms to simplify routine call.
     1830Both mechanisms are discussed with respect to \CFA.
     1831\begin{description}
     1832\item[Named (or Keyword) Arguments:]
     1833provide the ability to specify an argument to a routine call using the parameter name rather than the position of the parameter.
     1834For example, given the routine:
     1835\begin{cfa}
     1836void p( int x, int y, int z ) {...}
     1837\end{cfa}
     1838a positional call is:
     1839\begin{cfa}
     1840p( 4, 7, 3 );
     1841\end{cfa}
     1842whereas a named (keyword) call may be:
     1843\begin{cfa}
     1844p( z : 3, x : 4, y : 7 );       §\C{// rewrite $\Rightarrow$ p( 4, 7, 3 )}§
     1845\end{cfa}
     1846Here the order of the arguments is unimportant, and the names of the parameters are used to associate argument values with the corresponding parameters.
     1847The compiler rewrites a named call into a positional call.
     1848The advantages of named parameters are:
     1849\begin{itemize}
     1850\item
     1851Remembering the names of the parameters may be easier than the order in the routine definition.
     1852\item
     1853Parameter names provide documentation at the call site (assuming the names are descriptive).
     1854\item
     1855Changes can be made to the order or number of parameters without affecting the call (although the call must still be recompiled).
     1856\end{itemize}
     1857
     1858Unfortunately, named arguments do not work in C-style programming-languages because a routine prototype is not required to specify parameter names, nor do the names in the prototype have to match with the actual definition.
     1859For example, the following routine prototypes and definition are all valid.
     1860\begin{cfa}
     1861void p( int, int, int );                        §\C{// equivalent prototypes}§
     1862void p( int x, int y, int z );
     1863void p( int y, int x, int z );
     1864void p( int z, int y, int x );
     1865void p( int q, int r, int s ) {}        §\C{// match with this definition}§
     1866\end{cfa}
     1867Forcing matching parameter names in routine prototypes with corresponding routine definitions is possible, but goes against a strong tradition in C programming.
     1868Alternatively, prototype definitions can be eliminated by using a two-pass compilation, and implicitly creating header files for exports.
     1869The former is easy to do, while the latter is more complex.
     1870
     1871Furthermore, named arguments do not work well in a \CFA-style programming-languages because they potentially introduces a new criteria for type matching.
     1872For example, it is technically possible to disambiguate between these two overloaded definitions of ©f© based on named arguments at the call site:
     1873\begin{cfa}
     1874int f( int i, int j );
     1875int f( int x, double y );
     1876
     1877f( j : 3, i : 4 );                              §\C{// 1st f}§
     1878f( x : 7, y : 8.1 );                    §\C{// 2nd f}§
     1879f( 4, 5 );                                              §\C{// ambiguous call}§
     1880\end{cfa}
     1881However, named arguments compound routine resolution in conjunction with conversions:
     1882\begin{cfa}
     1883f( i : 3, 5.7 );                                §\C{// ambiguous call ?}§
     1884\end{cfa}
     1885Depending on the cost associated with named arguments, this call could be resolvable or ambiguous.
     1886Adding named argument into the routine resolution algorithm does not seem worth the complexity.
     1887Therefore, \CFA does \emph{not} attempt to support named arguments.
     1888
     1889\item[Default Arguments]
     1890provide the ability to associate a default value with a parameter so it can be optionally specified in the argument list.
     1891For example, given the routine:
     1892\begin{cfa}
     1893void p( int x = 1, int y = 2, int z = 3 ) {...}
     1894\end{cfa}
     1895the allowable positional calls are:
     1896\begin{cfa}
     1897p();                                                    §\C{// rewrite $\Rightarrow$ p( 1, 2, 3 )}§
     1898p( 4 );                                                 §\C{// rewrite $\Rightarrow$ p( 4, 2, 3 )}§
     1899p( 4, 4 );                                              §\C{// rewrite $\Rightarrow$ p( 4, 4, 3 )}§
     1900p( 4, 4, 4 );                                   §\C{// rewrite $\Rightarrow$ p( 4, 4, 4 )}§
     1901// empty arguments
     1902p(  , 4, 4 );                                   §\C{// rewrite $\Rightarrow$ p( 1, 4, 4 )}§
     1903p( 4,  , 4 );                                   §\C{// rewrite $\Rightarrow$ p( 4, 2, 4 )}§
     1904p( 4, 4,   );                                   §\C{// rewrite $\Rightarrow$ p( 4, 4, 3 )}§
     1905p( 4,  ,   );                                   §\C{// rewrite $\Rightarrow$ p( 4, 2, 3 )}§
     1906p(  , 4,   );                                   §\C{// rewrite $\Rightarrow$ p( 1, 4, 3 )}§
     1907p(  ,  , 4 );                                   §\C{// rewrite $\Rightarrow$ p( 1, 2, 4 )}§
     1908p(  ,  ,   );                                   §\C{// rewrite $\Rightarrow$ p( 1, 2, 3 )}§
     1909\end{cfa}
     1910Here the missing arguments are inserted from the default values in the parameter list.
     1911The compiler rewrites missing default values into explicit positional arguments.
     1912The advantages of default values are:
     1913\begin{itemize}
     1914\item
     1915Routines with a large number of parameters are often very generalized, giving a programmer a number of different options on how a computation is performed.
     1916For many of these kinds of routines, there are standard or default settings that work for the majority of computations.
     1917Without default values for parameters, a programmer is forced to specify these common values all the time, resulting in long argument lists that are error prone.
     1918\item
     1919When a routine's interface is augmented with new parameters, it extends the interface providing generalizability\footnote{
     1920``It should be possible for the implementor of an abstraction to increase its generality.
     1921So long as the modified abstraction is a generalization of the original, existing uses of the abstraction will not require change.
     1922It might be possible to modify an abstraction in a manner which is not a generalization without affecting existing uses, but, without inspecting the modules in which the uses occur, this possibility cannot be determined.
     1923This criterion precludes the addition of parameters, unless these parameters have default or inferred values that are valid for all possible existing applications.''~\cite[p.~128]{Cormack90}}
     1924(somewhat like the generalization provided by inheritance for classes).
     1925That is, all existing calls are still valid, although the call must still be recompiled.
     1926\end{itemize}
     1927The only disadvantage of default arguments is that unintentional omission of an argument may not result in a compiler-time error.
     1928Instead, a default value is used, which may not be the programmer's intent.
     1929
     1930Default values may only appear in a prototype versus definition context:
     1931\begin{cfa}
     1932void p( int x, int y = 2, int z = 3 );          §\C{// prototype: allowed}§
     1933void p( int, int = 2, int = 3 );                        §\C{// prototype: allowed}§
     1934void p( int x, int y = 2, int z = 3 ) {}        §\C{// definition: not allowed}§
     1935\end{cfa}
     1936The reason for this restriction is to allow separate compilation.
     1937Multiple prototypes with different default values is an error.
     1938\end{description}
     1939
     1940Ellipse (``...'') arguments present problems when used with default arguments.
     1941The conflict occurs because both named and ellipse arguments must appear after positional arguments, giving two possibilities:
     1942\begin{cfa}
     1943p( /* positional */, ... , /* named */ );
     1944p( /* positional */, /* named */, ... );
     1945\end{cfa}
     1946While it is possible to implement both approaches, the first possibly is more complex than the second, \eg:
     1947\begin{cfa}
     1948p( int x, int y, int z, ... );
     1949p( 1, 4, 5, 6, z : 3, y : 2 ); §\C{// assume p( /* positional */, ... , /* named */ );}§
     1950p( 1, z : 3, y : 2, 4, 5, 6 ); §\C{// assume p( /* positional */, /* named */, ... );}§
     1951\end{cfa}
     1952In the first call, it is necessary for the programmer to conceptually rewrite the call, changing named arguments into positional, before knowing where the ellipse arguments begin.
     1953Hence, this approach seems significantly more difficult, and hence, confusing and error prone.
     1954In the second call, the named arguments separate the positional and ellipse arguments, making it trivial to read the call.
     1955
     1956The problem is exacerbated with default arguments, \eg:
     1957\begin{cfa}
     1958void p( int x, int y = 2, int z = 3... );
     1959p( 1, 4, 5, 6, z : 3 );         §\C{// assume p( /* positional */, ... , /* named */ );}§
     1960p( 1, z : 3, 4, 5, 6 );         §\C{// assume p( /* positional */, /* named */, ... );}§
     1961\end{cfa}
     1962The first call is an error because arguments 4 and 5 are actually positional not ellipse arguments;
     1963therefore, argument 5 subsequently conflicts with the named argument z : 3.
     1964In the second call, the default value for y is implicitly inserted after argument 1 and the named arguments separate the positional and ellipse arguments, making it trivial to read the call.
     1965For these reasons, \CFA requires named arguments before ellipse arguments.
     1966Finally, while ellipse arguments are needed for a small set of existing C routines, like printf, the extended \CFA type system largely eliminates the need for ellipse arguments (see Section 24), making much of this discussion moot.
     1967
     1968Default arguments and overloading (see Section 24) are complementary.
     1969While in theory default arguments can be simulated with overloading, as in:
     1970\begin{quote2}
     1971\begin{tabular}{@{}l@{\hspace{3em}}l@{}}
     1972\multicolumn{1}{c@{\hspace{3em}}}{\textbf{default arguments}}   & \multicolumn{1}{c}{\textbf{overloading}}      \\
     1973\begin{cfa}
     1974void p( int x, int y = 2, int z = 3 ) {...}
     1975
     1976
     1977\end{cfa}
     1978&
     1979\begin{cfa}
     1980void p( int x, int y, int z ) {...}
     1981void p( int x ) { p( x, 2, 3 ); }
     1982void p( int x, int y ) { p( x, y, 3 ); }
     1983\end{cfa}
     1984\end{tabular}
     1985\end{quote2}
     1986the number of required overloaded routines is linear in the number of default values, which is unacceptable growth.
     1987In general, overloading should only be used over default arguments if the body of the routine is significantly different.
     1988Furthermore, overloading cannot handle accessing default arguments in the middle of a positional list, via a missing argument, such as:
     1989\begin{cfa}
     1990p( 1, /* default */, 5 );               §\C{// rewrite $\Rightarrow$ p( 1, 2, 5 )}§
     1991\end{cfa}
     1992
     1993Given the \CFA restrictions above, both named and default arguments are backwards compatible.
     1994\Index*[C++]{\CC{}} only supports default arguments;
     1995\Index*{Ada} supports both named and default arguments.
     1996
     1997
     1998\section{Unnamed Structure Fields}
     1999
     2000C requires each field of a structure to have a name, except for a bit field associated with a basic type, \eg:
     2001\begin{cfa}
     2002struct {
     2003        int f1;                                 §\C{// named field}§
     2004        int f2 : 4;                             §\C{// named field with bit field size}§
     2005        int : 3;                                §\C{// unnamed field for basic type with bit field size}§
     2006        int ;                                   §\C{// disallowed, unnamed field}§
     2007        int *;                                  §\C{// disallowed, unnamed field}§
     2008        int (*)( int );                 §\C{// disallowed, unnamed field}§
     2009};
     2010\end{cfa}
     2011This requirement is relaxed by making the field name optional for all field declarations; therefore, all the field declarations in the example are allowed.
     2012As for unnamed bit fields, an unnamed field is used for padding a structure to a particular size.
     2013A list of unnamed fields is also supported, \eg:
     2014\begin{cfa}
     2015struct {
     2016        int , , ;                               §\C{// 3 unnamed fields}§
     2017}
     2018\end{cfa}
     2019
     2020
     2021\section{Nesting}
     2022
     2023Nesting of types and routines is useful for controlling name visibility (\newterm{name hiding}).
     2024
     2025
     2026\subsection{Type Nesting}
     2027
     2028\CFA allows \Index{type nesting}, and type qualification of the nested types (see \VRef[Figure]{f:TypeNestingQualification}), where as C hoists\index{type hoisting} (refactors) nested types into the enclosing scope and has no type qualification.
     2029\begin{figure}
     2030\centering
     2031\begin{tabular}{@{}l@{\hspace{3em}}l|l@{}}
     2032\multicolumn{1}{c@{\hspace{3em}}}{\textbf{C Type Nesting}}      & \multicolumn{1}{c}{\textbf{C Implicit Hoisting}}      & \multicolumn{1}{|c}{\textbf{\CFA}}    \\
     2033\hline
     2034\begin{cfa}
     2035struct S {
     2036        enum C { R, G, B };
     2037        struct T {
     2038                union U { int i, j; };
     2039                enum C c;
     2040                short int i, j;
     2041        };
     2042        struct T t;
     2043} s;
     2044
     2045int fred() {
     2046        s.t.c = R;
     2047        struct T t = { R, 1, 2 };
     2048        enum C c;
     2049        union U u;
     2050}
     2051\end{cfa}
     2052&
     2053\begin{cfa}
     2054enum C { R, G, B };
     2055union U { int i, j; };
     2056struct T {
     2057        enum C c;
     2058        short int i, j;
     2059};
     2060struct S {
     2061        struct T t;
     2062} s;
     2063       
     2064
     2065
     2066
     2067
     2068
     2069
     2070\end{cfa}
     2071&
     2072\begin{cfa}
     2073struct S {
     2074        enum C { R, G, B };
     2075        struct T {
     2076                union U { int i, j; };
     2077                enum C c;
     2078                short int i, j;
     2079        };
     2080        struct T t;
     2081} s;
     2082
     2083int fred() {
     2084        s.t.c = ®S.®R;  // type qualification
     2085        struct ®S.®T t = { ®S.®R, 1, 2 };
     2086        enum ®S.®C c;
     2087        union ®S.T.®U u;
     2088}
     2089\end{cfa}
     2090\end{tabular}
     2091\caption{Type Nesting / Qualification}
     2092\label{f:TypeNestingQualification}
     2093\end{figure}
     2094In the left example in C, types ©C©, ©U© and ©T© are implicitly hoisted outside of type ©S© into the containing block scope.
     2095In the right example in \CFA, the types are not hoisted and accessed using the field-selection operator ``©.©'' for type qualification, as does \Index*{Java}, rather than the \CC type-selection operator ``©::©''.
     2096
     2097
     2098\subsection{Routine Nesting}
     2099
     2100While \CFA does not provide object programming by putting routines into structures, it does rely heavily on locally nested routines to redefine operations at or close to a call site.
     2101For example, the C quick-sort is wrapped into the following polymorphic \CFA routine:
     2102\begin{cfa}
     2103forall( otype T | { int ?<?( T, T ); } )
     2104void qsort( const T * arr, size_t dimension );
     2105\end{cfa}
     2106which can be used to sort in ascending and descending order by locally redefining the less-than operator into greater-than.
     2107\begin{cfa}
     2108const unsigned int size = 5;
     2109int ia[size];
     2110...                                             §\C{// assign values to array ia}§
     2111qsort( ia, size );              §\C{// sort ascending order using builtin ?<?}§
     2112{
     2113        ®int ?<?( int x, int y ) { return x > y; }® §\C{// nested routine}§
     2114        qsort( ia, size );      §\C{// sort descending order by local redefinition}§
     2115}
     2116\end{cfa}
     2117
     2118Nested routines are not first-class, meaning a nested routine cannot be returned if it has references to variables in its enclosing blocks;
     2119the only exception is references to the external block of the translation unit, as these variables persist for the duration of the program.
     2120The following program in undefined in \CFA (and Indexc{gcc})
     2121\begin{cfa}
     2122[* [int]( int )] foo() {                §\C{// int (*foo())( int )}§
     2123        int ®i® = 7;
     2124        int bar( int p ) {
     2125                ®i® += 1;                               §\C{// dependent on local variable}§
     2126                sout | ®i® | endl;
     2127        }
     2128        return bar;                                     §\C{// undefined because of local dependence}§
     2129}
     2130int main() {
     2131        * [int]( int ) fp = foo();      §\C{// int (*fp)( int )}§
     2132        sout | fp( 3 ) | endl;
     2133}
     2134\end{cfa}
     2135because
     2136
     2137Currently, there are no \Index{lambda} expressions, \ie unnamed routines because routine names are very important to properly select the correct routine.
     2138
     2139
     2140\section{Tuples}
     2141
     2142In C and \CFA, lists of elements appear in several contexts, such as the parameter list for a routine call.
     2143(More contexts are added shortly.)
     2144A list of such elements is called a \newterm{lexical list}.
     2145The general syntax of a lexical list is:
     2146\begin{cfa}
     2147[ §\emph{exprlist}§ ]
     2148\end{cfa}
     2149where ©$\emph{exprlist}$© is a list of one or more expressions separated by commas.
     2150The brackets, ©[]©, allow differentiating between lexical lists and expressions containing the C comma operator.
     2151The following are examples of lexical lists:
     2152\begin{cfa}
     2153[ x, y, z ]
     2154[ 2 ]
     2155[ v+w, x*y, 3.14159, f() ]
     2156\end{cfa}
     2157Tuples are permitted to contain sub-tuples (\ie nesting), such as ©[ [ 14, 21 ], 9 ]©, which is a 2-element tuple whose first element is itself a tuple.
     2158Note, a tuple is not a record (structure);
     2159a record denotes a single value with substructure, whereas a tuple is multiple values with no substructure (see flattening coercion in Section 12.1).
     2160In essence, tuples are largely a compile time phenomenon, having little or no runtime presence.
     2161
     2162Tuples can be organized into compile-time tuple variables;
     2163these variables are of \newterm{tuple type}.
     2164Tuple variables and types can be used anywhere lists of conventional variables and types can be used.
     2165The general syntax of a tuple type is:
     2166\begin{cfa}
     2167[ §\emph{typelist}§ ]
     2168\end{cfa}
     2169where ©$\emph{typelist}$© is a list of one or more legal \CFA or C type specifications separated by commas, which may include other tuple type specifications.
     2170Examples of tuple types include:
     2171\begin{cfa}
     2172[ unsigned int, char ]
     2173[ double, double, double ]
     2174[ * int, int * ]                §\C{// mix of CFA and ANSI}§
     2175[ * [ 5 ] int, * * char, * [ [ int, int ] ] (int, int) ]
     2176\end{cfa}
     2177Like tuples, tuple types may be nested, such as ©[ [ int, int ], int ]©, which is a 2-element tuple type whose first element is itself a tuple type.
     2178
     2179Examples of declarations using tuple types are:
     2180\begin{cfa}
     2181[ int, int ] x;                 §\C{// 2 element tuple, each element of type int}§
     2182* [ char, char ] y;             §\C{// pointer to a 2 element tuple}§
     2183[ [ int, int ] ] z ([ int, int ]);
     2184\end{cfa}
     2185The last example declares an external routine that expects a 2 element tuple as an input parameter and returns a 2 element tuple as its result.
     2186
     2187As mentioned, tuples can appear in contexts requiring a list of value, such as an argument list of a routine call.
     2188In unambiguous situations, the tuple brackets may be omitted, \eg a tuple that appears as an argument may have its
     2189square brackets omitted for convenience; therefore, the following routine invocations are equivalent:
     2190\begin{cfa}
     2191f( [ 1, x+2, fred() ] );
     2192f( 1, x+2, fred() );
     2193\end{cfa}
     2194Also, a tuple or a tuple variable may be used to supply all or part of an argument list for a routine expecting multiple input parameters or for a routine expecting a tuple as an input parameter.
     2195For example, the following are all legal:
     2196\begin{cfa}
     2197[ int, int ] w1;
     2198[ int, int, int ] w2;
     2199[ void ] f (int, int, int); /* three input parameters of type int */
     2200[ void ] g ([ int, int, int ]); /* 3 element tuple as input */
     2201f( [ 1, 2, 3 ] );
     2202f( w1, 3 );
     2203f( 1, w1 );
     2204f( w2 );
     2205g( [ 1, 2, 3 ] );
     2206g( w1, 3 );
     2207g( 1, w1 );
     2208g( w2 );
     2209\end{cfa}
     2210Note, in all cases 3 arguments are supplied even though the syntax may appear to supply less than 3. As mentioned, a
     2211tuple does not have structure like a record; a tuple is simply converted into a list of components.
     2212\begin{rationale}
     2213The present implementation of \CFA does not support nested routine calls when the inner routine returns multiple values; \ie a statement such as ©g( f() )© is not supported.
     2214Using a temporary variable to store the  results of the inner routine and then passing this variable to the outer routine works, however.
     2215\end{rationale}
     2216
     2217A tuple can contain a C comma expression, provided the expression containing the comma operator is enclosed in parentheses.
     2218For instance, the following tuples are equivalent:
     2219\begin{cfa}
     2220[ 1, 3, 5 ]
     2221[ 1, (2, 3), 5 ]
     2222\end{cfa}
     2223The second element of the second tuple is the expression (2, 3), which yields the result 3.
     2224This requirement is the same as for comma expressions in argument lists.
     2225
     2226Type qualifiers, \ie const and volatile, may modify a tuple type.
     2227The meaning is the same as for a type qualifier modifying an aggregate type [Int99, x 6.5.2.3(7),x 6.7.3(11)], \ie the qualifier is distributed across all of the types in the tuple, \eg:
     2228\begin{cfa}
     2229const volatile [ int, float, const int ] x;
     2230\end{cfa}
     2231is equivalent to:
     2232\begin{cfa}
     2233[ const volatile int, const volatile float, const volatile int ] x;
     2234\end{cfa}
     2235Declaration qualifiers can only appear at the start of a \CFA tuple declaration4, \eg:
     2236\begin{cfa}
     2237extern [ int, int ] w1;
     2238static [ int, int, int ] w2;
     2239\end{cfa}
     2240\begin{rationale}
     2241Unfortunately, C's syntax for subscripts precluded treating them as tuples.
     2242The C subscript list has the form ©[i][j]...© and not ©[i, j, ...]©.
     2243Therefore, there is no syntactic way for a routine returning multiple values to specify the different subscript values, \eg ©f[g()]© always means a single subscript value because there is only one set of brackets.
     2244Fixing this requires a major change to C because the syntactic form ©M[i, j, k]© already has a particular meaning: ©i, j, k© is a comma expression.
     2245\end{rationale}
     2246
     2247
     2248\subsection{Tuple Coercions}
     2249
     2250There are four coercions that can be performed on tuples and tuple variables: closing, opening, flattening and structuring.
     2251In addition, the coercion of dereferencing can be performed on a tuple variable to yield its value(s), as for other variables.
     2252A \newterm{closing coercion} takes a set of values and converts it into a tuple value, which is a contiguous set of values, as in:
     2253\begin{cfa}
     2254[ int, int, int, int ] w;
     2255w = [ 1, 2, 3, 4 ];
     2256\end{cfa}
     2257First the right-hand tuple is closed into a tuple value and then the tuple value is assigned.
     2258
     2259An \newterm{opening coercion} is the opposite of closing; a tuple value is converted into a tuple of values, as in:
     2260\begin{cfa}
     2261[ a, b, c, d ] = w
     2262\end{cfa}
     2263©w© is implicitly opened to yield a tuple of four values, which are then assigned individually.
     2264
     2265A \newterm{flattening coercion} coerces a nested tuple, \ie a tuple with one or more components, which are themselves tuples, into a flattened tuple, which is a tuple whose components are not tuples, as in:
     2266\begin{cfa}
     2267[ a, b, c, d ] = [ 1, [ 2, 3 ], 4 ];
     2268\end{cfa}
     2269First the right-hand tuple is flattened and then the values are assigned individually.
     2270Flattening is also performed on tuple types.
     2271For example, the type ©[ int, [ int, int ], int ]© can be coerced, using flattening, into the type ©[ int, int, int, int ]©.
     2272
     2273A \newterm{structuring coercion} is the opposite of flattening;
     2274a tuple is structured into a more complex nested tuple.
     2275For example, structuring the tuple ©[ 1, 2, 3, 4 ]© into the tuple ©[ 1, [ 2, 3 ], 4 ]© or the tuple type ©[ int, int, int, int ]© into the tuple type ©[ int, [ int, int ], int ]©.
     2276In the following example, the last assignment illustrates all the tuple coercions:
     2277\begin{cfa}
     2278[ int, int, int, int ] w = [ 1, 2, 3, 4 ];
     2279int x = 5;
     2280[ x, w ] = [ w, x ];            §\C{// all four tuple coercions}§
     2281\end{cfa}
     2282Starting on the right-hand tuple in the last assignment statement, w is opened, producing a tuple of four values;
     2283therefore, the right-hand tuple is now the tuple ©[ [ 1, 2, 3, 4 ], 5 ]©.
     2284This tuple is then flattened, yielding ©[ 1, 2, 3, 4, 5 ]©, which is structured into ©[ 1, [ 2, 3, 4, 5 ] ]© to match the tuple type of the left-hand side.
     2285The tuple ©[ 2, 3, 4, 5 ]© is then closed to create a tuple value.
     2286Finally, ©x© is assigned ©1© and ©w© is assigned the tuple value using multiple assignment (see Section 14).
     2287\begin{rationale}
     2288A possible additional language extension is to use the structuring coercion for tuples to initialize a complex record with a tuple.
     2289\end{rationale}
     2290
     2291
     2292\section{Mass Assignment}
     2293
     2294\CFA permits assignment to several variables at once using mass assignment~\cite{CLU}.
     2295Mass assignment has the following form:
     2296\begin{cfa}
     2297[ §\emph{lvalue}§, ... , §\emph{lvalue}§ ] = §\emph{expr}§;
     2298\end{cfa}
     2299\index{lvalue}
     2300The left-hand side is a tuple of \emph{lvalues}, which is a list of expressions each yielding an address, \ie any data object that can appear on the left-hand side of a conventional assignment statement.
     2301©$\emph{expr}$© is any standard arithmetic expression.
     2302Clearly, the types of the entities being assigned must be type compatible with the value of the expression.
     2303
     2304Mass assignment has parallel semantics, \eg the statement:
     2305\begin{cfa}
     2306[ x, y, z ] = 1.5;
     2307\end{cfa}
     2308is equivalent to:
     2309\begin{cfa}
     2310x = 1.5; y = 1.5; z = 1.5;
     2311\end{cfa}
     2312This semantics is not the same as the following in C:
     2313\begin{cfa}
     2314x = y = z = 1.5;
     2315\end{cfa}
     2316as conversions between intermediate assignments may lose information.
     2317A more complex example is:
     2318\begin{cfa}
     2319[ i, y[i], z ] = a + b;
     2320\end{cfa}
     2321which is equivalent to:
     2322\begin{cfa}
     2323t = a + b;
     2324a1 = &i; a2 = &y[i]; a3 = &z;
     2325*a1 = t; *a2 = t; *a3 = t;
     2326\end{cfa}
     2327The temporary ©t© is necessary to store the value of the expression to eliminate conversion issues.
     2328The temporaries for the addresses are needed so that locations on the left-hand side do not change as the values are assigned.
     2329In this case, ©y[i]© uses the previous value of ©i© and not the new value set at the beginning of the mass assignment.
     2330
     2331
     2332\section{Multiple Assignment}
     2333
     2334\CFA also supports the assignment of several values at once, known as multiple assignment~\cite{CLU,Galletly96}.
     2335Multiple assignment has the following form:
     2336\begin{cfa}
     2337[ §\emph{lvalue}§, ... , §\emph{lvalue}§ ] = [ §\emph{expr}§, ... , §\emph{expr}§ ];
     2338\end{cfa}
     2339\index{lvalue}
     2340The left-hand side is a tuple of \emph{lvalues}, and the right-hand side is a tuple of \emph{expr}s.
     2341Each \emph{expr} appearing on the right-hand side of a multiple assignment statement is assigned to the corresponding \emph{lvalues} on the left-hand side of the statement using parallel semantics for each assignment.
     2342An example of multiple assignment is:
     2343\begin{cfa}
     2344[ x, y, z ] = [ 1, 2, 3 ];
     2345\end{cfa}
     2346Here, the values ©1©, ©2© and ©3© are assigned, respectively, to the variables ©x©, ©y© and ©z©.
     2347 A more complex example is:
     2348\begin{cfa}
     2349[ i, y[ i ], z ] = [ 1, i, a + b ];
     2350\end{cfa}
     2351Here, the values ©1©, ©i© and ©a + b© are assigned to the variables ©i©, ©y[i]© and ©z©, respectively.
     2352 Note, the parallel semantics of
     2353multiple assignment ensures:
     2354\begin{cfa}
     2355[ x, y ] = [ y, x ];
     2356\end{cfa}
     2357correctly interchanges (swaps) the values stored in ©x© and ©y©.
     2358The following cases are errors:
     2359\begin{cfa}
     2360[ a, b, c ] = [ 1, 2, 3, 4 ];
     2361[ a, b, c ] = [ 1, 2 ];
     2362\end{cfa}
     2363because the number of entities in the left-hand tuple is unequal with the right-hand tuple.
     2364
     2365As for all tuple contexts in C, side effects should not be used because C does not define an ordering for the evaluation of the elements of a tuple;
     2366both these examples produce indeterminate results:
     2367\begin{cfa}
     2368f( x++, x++ );                          §\C{// C routine call with side effects in arguments}§
     2369[ v1, v2 ] = [ x++, x++ ];      §\C{// side effects in righthand side of multiple assignment}§
     2370\end{cfa}
     2371
     2372
     2373\section{Cascade Assignment}
     2374
     2375As in C, \CFA mass and multiple assignments can be cascaded, producing cascade assignment.
     2376Cascade assignment has the following form:
     2377\begin{cfa}
     2378§\emph{tuple}§ = §\emph{tuple}§ = ... = §\emph{tuple}§;
     2379\end{cfa}
     2380and it has the same parallel semantics as for mass and multiple assignment.
     2381Some examples of cascade assignment are:
     2382\begin{cfa}
     2383x1 = y1 = x2 = y2 = 0;
     2384[ x1, y1 ] = [ x2, y2 ] = [ x3, y3 ];
     2385[ x1, y1 ] = [ x2, y2 ] = 0;
     2386[ x1, y1 ] = z = 0;
     2387\end{cfa}
     2388As in C, the rightmost assignment is performed first, \ie assignment parses right to left.
     2389
     2390
     2391\section{Field Tuples}
     2392
     2393Tuples may be used to select multiple fields of a record by field name.
     2394Its general form is:
     2395\begin{cfa}
     2396§\emph{expr}§ . [ §\emph{fieldlist}§ ]
     2397§\emph{expr}§ -> [ §\emph{fieldlist}§ ]
     2398\end{cfa}
     2399\emph{expr} is any expression yielding a value of type record, \eg ©struct©, ©union©.
     2400Each element of \emph{ fieldlist} is an element of the record specified by \emph{expr}.
     2401A record-field tuple may be used anywhere a tuple can be used. An example of the use of a record-field tuple is
     2402the following:
     2403\begin{cfa}
     2404struct s {
     2405        int f1, f2;
     2406        char f3;
     2407        double f4;
     2408} v;
     2409v.[ f3, f1, f2 ] = ['x', 11, 17 ];      §\C{// equivalent to v.f3 = 'x', v.f1 = 11, v.f2 = 17}§
     2410f( v.[ f3, f1, f2 ] );                          §\C{// equivalent to f( v.f3, v.f1, v.f2 )}§
     2411\end{cfa}
     2412Note, the fields appearing in a record-field tuple may be specified in any order;
     2413also, it is unnecessary to specify all the fields of a struct in a multiple record-field tuple.
     2414
     2415If a field of a ©struct© is itself another ©struct©, multiple fields of this subrecord can be specified using a nested record-field tuple, as in the following example:
     2416\begin{cfa}
     2417struct inner {
     2418        int f2, f3;
     2419};
     2420struct outer {
     2421        int f1;
     2422        struct inner i;
     2423        double f4;
     2424} o;
     2425
     2426o.[ f1, i.[ f2, f3 ], f4 ] = [ 11, 12, 13, 3.14159 ];
     2427\end{cfa}
     2428
     2429
    23992430\section{I/O Library}
    24002431\label{s:IOLibrary}
     
    24022433
    24032434The goal of \CFA I/O is to simplify the common cases\index{I/O!common case}, while fully supporting polymorphism and user defined types in a consistent way.
     2435The approach combines ideas from \CC and Python.
    24042436The \CFA header file for the I/O library is \Indexc{fstream}.
    24052437
     
    24192451\\
    24202452\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
    2421 1 2 3
     24531® ®2® ®3
    24222454\end{cfa}
    24232455&
     
    24272459\end{tabular}
    24282460\end{quote2}
    2429 The \CFA form has half as many characters as the \CC form, and is similar to \Index*{Python} I/O with respect to implicit separators.
    2430 A tuple prints all the tuple's values, each separated by ©", "©.
     2461The \CFA form has half the characters of the \CC form, and is similar to \Index*{Python} I/O with respect to implicit separators.
     2462Similar simplification occurs for \Index{tuple} I/O, which prints all tuple values separated by ``\lstinline[showspaces=true]@, @''.
    24312463\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
    2432 [int, int] t1 = [1, 2], t2 = [3, 4];
     2464[int, [ int, int ] ] t1 = [ 1, [ 2, 3 ] ], t2 = [ 3, [ 4, 5 ] ];
    24332465sout | t1 | t2 | endl;                                  §\C{// print tuples}§
    24342466\end{cfa}
    24352467\begin{cfa}[mathescape=off,showspaces=true,belowskip=0pt]
    2436 1, 2, 3, 4
    2437 \end{cfa}
    2438 \CFA uses the logical-or operator for I/O because it is the lowest-priority overloadable operator, other than assignment.
     24681®, ®2®, ®3 3®, ®4®, ®5
     2469\end{cfa}
     2470Finally, \CFA uses the logical-or operator for I/O as it is the lowest-priority overloadable operator, other than assignment.
    24392471Therefore, fewer output expressions require parenthesis.
    24402472\begin{quote2}
     
    24582490\end{tabular}
    24592491\end{quote2}
    2460 Finally, the logical-or operator has a link with the Shell pipe-operator for moving data, where data flows in the correct direction for input but the opposite direction for output.
    2461 
    2462 
    2463 The implicit separator\index{I/O!separator} character (space/blank) is a separator not a terminator.
     2492There is a weak similarity between the \CFA logical-or operator and the Shell pipe-operator for moving data, where data flows in the correct direction for input but the opposite direction for output.
     2493
     2494
     2495\subsection{Implicit Separator}
     2496
     2497The \Index{implicit separator}\index{I/O!separator} character (space/blank) is a separator not a terminator.
    24642498The rules for implicitly adding the separator are:
    24652499\begin{enumerate}
     
    25332567\end{enumerate}
    25342568
     2569
     2570\subsection{Manipulator}
     2571
    25352572The following routines and \CC-style \Index{manipulator}s control implicit seperation.
    25362573\begin{enumerate}
     
    25442581%$
    25452582\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt]
    2546 1, $2, $3 ®", $"®
     25831®, $®2®, $®3 ®", $"®
    25472584\end{cfa}
    25482585%$
     
    25522589\end{cfa}
    25532590\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt]
    2554 1 2 3 ®" "®
    2555 \end{cfa}
    2556 
    2557 \item
    2558 Manipulators \Indexc{sepOn}\index{manipulator!sepOn@©sepOn©} and \Indexc{sepOff}\index{manipulator!sepOff@©sepOff©} \emph{locally} toggle printing the separator, \ie the seperator is adjusted only with respect to the next printed item.
    2559 \begin{cfa}[mathescape=off,belowskip=0pt]
    2560 sout | sepOn | 1 | 2 | 3 | sepOn | endl;        §\C{// separator at start of line}§
    2561 \end{cfa}
    2562 \begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
    2563  1 2 3
    2564 \end{cfa}
    2565 \begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
    2566 sout | 1 | sepOff | 2 | 3 | endl;                       §\C{// locally turn off implicit separator}§
    2567 \end{cfa}
    2568 \begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
    2569 12 3
    2570 \end{cfa}
    2571 
    2572 \item
    2573 Manipulators \Indexc{sepDisable}\index{manipulator!sepDisable@©sepDisable©} and \Indexc{sepEnable}\index{manipulator!sepEnable@©sepEnable©} \emph{globally} toggle printing the separator, \ie the seperator is adjusted with respect to all subsequent printed items, unless locally adjusted.
    2574 \begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
    2575 sout | sepDisable | 1 | 2 | 3 | endl;           §\C{// globally turn off implicit separation}§
    2576 \end{cfa}
    2577 \begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
    2578 123
    2579 \end{cfa}
    2580 \begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
    2581 sout | 1 | sepOn | 2 | 3 | endl;                        §\C{// locally turn on implicit separator}§
    2582 \end{cfa}
    2583 \begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
    2584 1 23
    2585 \end{cfa}
    2586 \begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
    2587 sout | sepEnable | 1 | 2 | 3 | endl;            §\C{// globally turn on implicit separation}§
    2588 \end{cfa}
    2589 \begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
    2590 1 2 3
     25911® ®2® ®3 ®" "®
    25912592\end{cfa}
    25922593
     
    26102611
    26112612\item
    2612 The tuple separator can also be turned on and off.
     2613Manipulators \Indexc{sepOn}\index{manipulator!sepOn@©sepOn©} and \Indexc{sepOff}\index{manipulator!sepOff@©sepOff©} \emph{locally} toggle printing the separator, \ie the seperator is adjusted only with respect to the next printed item.
     2614\begin{cfa}[mathescape=off,belowskip=0pt]
     2615sout | sepOn | 1 | 2 | 3 | sepOn | endl;        §\C{// separator at start/end of line}§
     2616\end{cfa}
     2617\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     2618® ®1 2 3® ®
     2619\end{cfa}
     2620\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
     2621sout | 1 | sepOff | 2 | 3 | endl;                       §\C{// locally turn off implicit separator}§
     2622\end{cfa}
     2623\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     262412 3
     2625\end{cfa}
     2626The tuple separator also responses to being turned on and off.
    26132627\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
    26142628sout | sepOn | t1 | sepOff | t2 | endl;         §\C{// locally turn on/off implicit separation}§
     
    26182632\end{cfa}
    26192633Notice a tuple seperator starts the line because the next item is a tuple.
     2634
     2635\item
     2636Manipulators \Indexc{sepDisable}\index{manipulator!sepDisable@©sepDisable©} and \Indexc{sepEnable}\index{manipulator!sepEnable@©sepEnable©} \emph{globally} toggle printing the separator, \ie the seperator is adjusted with respect to all subsequent printed items, unless locally adjusted.
     2637\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
     2638sout | sepDisable | 1 | 2 | 3 | endl;           §\C{// globally turn off implicit separation}§
     2639\end{cfa}
     2640\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     2641123
     2642\end{cfa}
     2643\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
     2644sout | 1 | ®sepOn® | 2 | 3 | endl;                      §\C{// locally turn on implicit separator}§
     2645\end{cfa}
     2646\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     26471® ®23
     2648\end{cfa}
     2649\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
     2650sout | sepEnable | 1 | 2 | 3 | endl;            §\C{// globally turn on implicit separation}§
     2651\end{cfa}
     2652\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     26531 2 3
     2654\end{cfa}
    26202655\end{enumerate}
    26212656
     
    26262661        int x = 1, y = 2, z = 3;
    26272662        sout | x | y | z | endl;
    2628         [int, int] t1 = [1, 2], t2 = [3, 4];
    2629         sout | t1 | t2 | endl;                                          // print tuple
     2663        [int, [ int, int ] ] t1 = [ 1, [ 2, 3 ] ], t2 = [ 3, [ 4, 5 ] ];
     2664        sout | t1 | t2 | endl;                                          // print tuples
    26302665        sout | x * 3 | y + 1 | z << 2 | x == y | (x | y) | (x || y) | (x > z ? 1 : 2) | endl;
    26312666        sout | 1 | 2 | 3 | endl;
     
    51895224
    51905225
    5191 \section{\protect\CFA Keywords}
     5226\section{\CFA Keywords}
    51925227\label{s:CFAKeywords}
    51935228
     
    54875522For an increase in storage size, new storage after the copied data may be filled.
    54885523\item[alignment]
    5489 an allocation starts on a specified memory boundary, e.g., an address multiple of 64 or 128 for cache-line purposes.
     5524an allocation starts on a specified memory boundary, \eg, an address multiple of 64 or 128 for cache-line purposes.
    54905525\item[array]
    54915526the allocation size is scaled to the specified number of array elements.
  • TabularUnified src/ControlStruct/ExceptTranslate.cc

    rb1e63ac5 r208e5be  
    1010// Created On       : Wed Jun 14 16:49:00 2017
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Thr Jun 29 15:18:00 2017
     12// Last Modified On : Fri Jun 30 13:30:00 2017
    1313// Update Count     : 1
    1414//
     
    2222#include "SynTree/Attribute.h"
    2323
    24 namespace ControlFlow {
     24namespace ControlStruct {
    2525
    2626        // This (large) section could probably be moved out of the class
     
    2929        // Type(Qualifiers &, false, std::list<Attribute *> &)
    3030
    31         // void (*function)()
    32         static FunctionType void_func_t(Type::Qualifiers(), false);
     31        // void (*function)();
     32        static FunctionType try_func_t(Type::Qualifiers(), false);
    3333        // void (*function)(int, exception);
    3434        static FunctionType catch_func_t(Type::Qualifiers(), false);
     
    3737        // bool (*function)(exception);
    3838        static FunctionType handle_func_t(Type::Qualifiers(), false);
     39        // void (*function)(__attribute__((unused)) void *);
     40        static FunctionType finally_func_t(Type::Qualifiers(), false);
    3941
    4042        static void init_func_types() {
     
    4850                        LinkageSpec::Cforall,
    4951                        /*bitfieldWidth*/ NULL,
    50                         new BasicType(emptyQualifiers, BasicType::UnsignedInt),
     52                        new BasicType( emptyQualifiers, BasicType::SignedInt ),
    5153                        /*init*/ NULL
    52                 );
     54                        );
    5355                ObjectDecl exception_obj(
    5456                        "__exception_inst",
     
    5658                        LinkageSpec::Cforall,
    5759                        /*bitfieldWidth*/ NULL,
    58                         new BasicType(emptyQualifiers, BasicType::UnsignedInt),
     60                        new PointerType(
     61                                emptyQualifiers,
     62                                new BasicType( emptyQualifiers, BasicType::SignedInt )
     63                                ),
    5964                        /*init*/ NULL
    60                 );
     65                        );
    6166                ObjectDecl bool_obj(
    6267                        "__ret_bool",
     
    6671                        new BasicType(emptyQualifiers, BasicType::Bool),
    6772                        /*init*/ NULL
    68                 );
    69 
    70                 catch_func_t.get_parameters().push_back(index_obj.clone());
    71                 catch_func_t.get_parameters().push_back(exception_obj.clone());
    72                 match_func_t.get_returnVals().push_back(index_obj.clone());
    73                 match_func_t.get_parameters().push_back(exception_obj.clone());
    74                 handle_func_t.get_returnVals().push_back(bool_obj.clone());
    75                 handle_func_t.get_parameters().push_back(exception_obj.clone());
     73                        );
     74                ObjectDecl voidptr_obj(
     75                        "__hook",
     76                        Type::StorageClasses(),
     77                        LinkageSpec::Cforall,
     78                        NULL,
     79                        new PointerType(
     80                                emptyQualifiers,
     81                                new VoidType(
     82                                        emptyQualifiers
     83                                        ),
     84                                std::list<Attribute *>{new Attribute("unused")}
     85                                ),
     86                        NULL
     87                        );
     88
     89                catch_func_t.get_parameters().push_back( index_obj.clone() );
     90                catch_func_t.get_parameters().push_back( exception_obj.clone() );
     91                match_func_t.get_returnVals().push_back( index_obj.clone() );
     92                match_func_t.get_parameters().push_back( exception_obj.clone() );
     93                handle_func_t.get_returnVals().push_back( bool_obj.clone() );
     94                handle_func_t.get_parameters().push_back( exception_obj.clone() );
     95                finally_func_t.get_parameters().push_back( voidptr_obj.clone() );
    7696
    7797                init_complete = true;
     
    114134        // ThrowStmt Mutation Helpers
    115135
    116         Statement * create_terminate_throw( ThrowStmt *throwStmt ) {
    117                 // __throw_terminate( EXPR );
    118                 UntypedExpr * call = new UntypedExpr( new NameExpr(
    119                         "__cfaehm__throw_termination" ) );
    120                 call->get_args().push_back( throwStmt->get_expr() );
    121                 Statement * result = new ExprStmt( throwStmt->get_labels(), call );
     136        Statement * create_given_throw(
     137                        const char * throwFunc, ThrowStmt * throwStmt ) {
     138                // { int NAME = EXPR; throwFunc( &NAME ); }
     139                CompoundStmt * result = new CompoundStmt( noLabels );
     140                ObjectDecl * local = new ObjectDecl(
     141                        "__local_exception_copy",
     142                        Type::StorageClasses(),
     143                        LinkageSpec::Cforall,
     144                        NULL,
     145                        new BasicType( emptyQualifiers, BasicType::SignedInt ),
     146                        new SingleInit( throwStmt->get_expr() )
     147                        );
     148                appendDeclStmt( result, local );
     149                UntypedExpr * call = new UntypedExpr( new NameExpr( throwFunc ) );
     150                call->get_args().push_back( new AddressExpr( nameOf( local ) ) );
     151                result->push_back( new ExprStmt( throwStmt->get_labels(), call ) );
    122152                throwStmt->set_expr( nullptr );
    123153                delete throwStmt;
    124154                return result;
     155        }
     156
     157        Statement * create_terminate_throw( ThrowStmt *throwStmt ) {
     158                // { int NAME = EXPR; __throw_terminate( &NAME ); }
     159                return create_given_throw( "__cfaehm__throw_termination", throwStmt );
    125160        }
    126161        Statement * create_terminate_rethrow( ThrowStmt *throwStmt ) {
     
    136171        Statement * create_resume_throw( ThrowStmt *throwStmt ) {
    137172                // __throw_resume( EXPR );
    138                 UntypedExpr * call = new UntypedExpr( new NameExpr(
    139                         "__cfaehm__throw_resumption" ) );
    140                 call->get_args().push_back( throwStmt->get_expr() );
    141                 Statement * result = new ExprStmt( throwStmt->get_labels(), call );
    142                 throwStmt->set_expr( nullptr );
    143                 delete throwStmt;
    144                 return result;
     173                return create_given_throw( "__cfaehm__throw_resumption", throwStmt );
    145174        }
    146175        Statement * create_resume_rethrow( ThrowStmt *throwStmt ) {
     
    164193
    165194                return new FunctionDecl( "try", Type::StorageClasses(),
    166                         LinkageSpec::Cforall, void_func_t.clone(), body );
     195                        LinkageSpec::Cforall, try_func_t.clone(), body );
    167196        }
    168197
     
    235264                        std::list<Expression *> args;
    236265                        args.push_back( number );
    237                         args.push_back( nameOf( except_obj ) );
     266
     267                        std::list<Expression *> rhs_args;
     268                        rhs_args.push_back( nameOf( except_obj ) );
     269                        Expression * rhs = new UntypedExpr(
     270                                new NameExpr( "*?" ), rhs_args );
     271                        args.push_back( rhs );
     272
    238273                        cond = new UntypedExpr( new NameExpr( "?==?" /*???*/), args );
    239274                }
     
    276311                        *it = nullptr;
    277312                }
     313
     314                body->push_back( new ReturnStmt( noLabels, new ConstantExpr(
     315                        Constant::from_int( 0 ) ) ) );
    278316
    279317                return new FunctionDecl("match", Type::StorageClasses(),
     
    316354                        }
    317355                        handling_code->push_back( new ReturnStmt( noLabels,
    318                                 new ConstantExpr( Constant::from_bool( false ) ) ) );
     356                                new ConstantExpr( Constant::from_bool( true ) ) ) );
    319357                        handler->set_body( handling_code );
    320358
     
    323361                        *it = nullptr;
    324362                }
     363
     364                body->push_back( new ReturnStmt( noLabels, new ConstantExpr(
     365                        Constant::from_bool( false ) ) ) );
    325366
    326367                return new FunctionDecl("handle", Type::StorageClasses(),
     
    364405                UntypedExpr *setup = new UntypedExpr( new NameExpr(
    365406                        "__cfaehm__try_resume_setup" ) );
    366                 setup->get_args().push_back( nameOf( obj ) );
     407                setup->get_args().push_back( new AddressExpr( nameOf( obj ) ) );
    367408                setup->get_args().push_back( nameOf( resume_handler ) );
    368409
     
    381422
    382423                return new FunctionDecl("finally", Type::StorageClasses(),
    383                         LinkageSpec::Cforall, void_func_t.clone(), body);
     424                        LinkageSpec::Cforall, finally_func_t.clone(), body);
    384425        }
    385426
  • TabularUnified src/ControlStruct/ExceptTranslate.h

    rb1e63ac5 r208e5be  
    1010// Created On       : Tus Jun 06 10:13:00 2017
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Thr Jun 29 15:18:00 2017
    13 // Update Count     : 1
     12// Last Modified On : Fri Jun 30 10:20:00 2017
     13// Update Count     : 2
    1414//
    1515
     
    2020#include "SynTree/SynTree.h"
    2121
    22 namespace ControlFlow {
     22namespace ControlStruct {
    2323        void translateEHM( std::list< Declaration *> & translationUnit );
    2424        /* Converts exception handling structures into their underlying C code.
  • TabularUnified src/Makefile.in

    rb1e63ac5 r208e5be  
    1 # Makefile.in generated by automake 1.11.3 from Makefile.am.
     1# Makefile.in generated by automake 1.15 from Makefile.am.
    22# @configure_input@
    33
    4 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
    5 # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
    6 # Foundation, Inc.
     4# Copyright (C) 1994-2014 Free Software Foundation, Inc.
     5
    76# This Makefile.in is free software; the Free Software Foundation
    87# gives unlimited permission to copy and/or distribute it,
     
    5958
    6059VPATH = @srcdir@
     60am__is_gnu_make = { \
     61  if test -z '$(MAKELEVEL)'; then \
     62    false; \
     63  elif test -n '$(MAKE_HOST)'; then \
     64    true; \
     65  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
     66    true; \
     67  else \
     68    false; \
     69  fi; \
     70}
     71am__make_running_with_option = \
     72  case $${target_option-} in \
     73      ?) ;; \
     74      *) echo "am__make_running_with_option: internal error: invalid" \
     75              "target option '$${target_option-}' specified" >&2; \
     76         exit 1;; \
     77  esac; \
     78  has_opt=no; \
     79  sane_makeflags=$$MAKEFLAGS; \
     80  if $(am__is_gnu_make); then \
     81    sane_makeflags=$$MFLAGS; \
     82  else \
     83    case $$MAKEFLAGS in \
     84      *\\[\ \   ]*) \
     85        bs=\\; \
     86        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
     87          | sed "s/$$bs$$bs[$$bs $$bs   ]*//g"`;; \
     88    esac; \
     89  fi; \
     90  skip_next=no; \
     91  strip_trailopt () \
     92  { \
     93    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
     94  }; \
     95  for flg in $$sane_makeflags; do \
     96    test $$skip_next = yes && { skip_next=no; continue; }; \
     97    case $$flg in \
     98      *=*|--*) continue;; \
     99        -*I) strip_trailopt 'I'; skip_next=yes;; \
     100      -*I?*) strip_trailopt 'I';; \
     101        -*O) strip_trailopt 'O'; skip_next=yes;; \
     102      -*O?*) strip_trailopt 'O';; \
     103        -*l) strip_trailopt 'l'; skip_next=yes;; \
     104      -*l?*) strip_trailopt 'l';; \
     105      -[dEDm]) skip_next=yes;; \
     106      -[JT]) skip_next=yes;; \
     107    esac; \
     108    case $$flg in \
     109      *$$target_option*) has_opt=yes; break;; \
     110    esac; \
     111  done; \
     112  test $$has_opt = yes
     113am__make_dryrun = (target_option=n; $(am__make_running_with_option))
     114am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
    61115pkgdatadir = $(datadir)/@PACKAGE@
    62116pkgincludedir = $(includedir)/@PACKAGE@
     
    77131build_triplet = @build@
    78132host_triplet = @host@
    79 DIST_COMMON = $(srcdir)/CodeGen/module.mk \
    80         $(srcdir)/CodeTools/module.mk $(srcdir)/Common/module.mk \
    81         $(srcdir)/Concurrency/module.mk \
    82         $(srcdir)/ControlStruct/module.mk $(srcdir)/GenPoly/module.mk \
    83         $(srcdir)/InitTweak/module.mk $(srcdir)/Makefile.am \
    84         $(srcdir)/Makefile.in $(srcdir)/Parser/module.mk \
    85         $(srcdir)/ResolvExpr/module.mk $(srcdir)/SymTab/module.mk \
    86         $(srcdir)/SynTree/module.mk $(srcdir)/Tuples/module.mk \
    87         Parser/lex.cc Parser/parser.cc Parser/parser.h
    88133cfa_cpplib_PROGRAMS = driver/cfa-cpp$(EXEEXT)
    89134subdir = src
     
    92137am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    93138        $(ACLOCAL_M4)
     139DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
    94140mkinstalldirs = $(install_sh) -d
    95141CONFIG_HEADER = $(top_builddir)/config.h
     
    215261driver_cfa_cpp_LINK = $(CXXLD) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) \
    216262        $(driver_cfa_cpp_LDFLAGS) $(LDFLAGS) -o $@
     263AM_V_P = $(am__v_P_@AM_V@)
     264am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
     265am__v_P_0 = false
     266am__v_P_1 = :
     267AM_V_GEN = $(am__v_GEN_@AM_V@)
     268am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
     269am__v_GEN_0 = @echo "  GEN     " $@;
     270am__v_GEN_1 =
     271AM_V_at = $(am__v_at_@AM_V@)
     272am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
     273am__v_at_0 = @
     274am__v_at_1 =
    217275DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
    218276depcomp = $(SHELL) $(top_srcdir)/automake/depcomp
     
    222280am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
    223281am__v_lt_0 = --silent
     282am__v_lt_1 =
    224283CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
    225284        $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
    226285AM_V_CXX = $(am__v_CXX_@AM_V@)
    227286am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
    228 am__v_CXX_0 = @echo "  CXX   " $@;
    229 AM_V_at = $(am__v_at_@AM_V@)
    230 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
    231 am__v_at_0 = @
     287am__v_CXX_0 = @echo "  CXX     " $@;
     288am__v_CXX_1 =
    232289CXXLD = $(CXX)
    233290CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
     
    235292AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
    236293am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
    237 am__v_CXXLD_0 = @echo "  CXXLD " $@;
     294am__v_CXXLD_0 = @echo "  CXXLD   " $@;
     295am__v_CXXLD_1 =
    238296@MAINTAINER_MODE_FALSE@am__skiplex = test -f $@ ||
    239297LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS)
    240298AM_V_LEX = $(am__v_LEX_@AM_V@)
    241299am__v_LEX_ = $(am__v_LEX_@AM_DEFAULT_V@)
    242 am__v_LEX_0 = @echo "  LEX   " $@;
     300am__v_LEX_0 = @echo "  LEX     " $@;
     301am__v_LEX_1 =
    243302YLWRAP = $(top_srcdir)/automake/ylwrap
    244303@MAINTAINER_MODE_FALSE@am__skipyacc = test -f $@ ||
     304am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \
     305                   -e s/c++$$/h++/ -e s/c$$/h/
    245306YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS)
    246307AM_V_YACC = $(am__v_YACC_@AM_V@)
    247308am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@)
    248 am__v_YACC_0 = @echo "  YACC  " $@;
     309am__v_YACC_0 = @echo "  YACC    " $@;
     310am__v_YACC_1 =
    249311COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
    250312        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
    251313AM_V_CC = $(am__v_CC_@AM_V@)
    252314am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
    253 am__v_CC_0 = @echo "  CC    " $@;
     315am__v_CC_0 = @echo "  CC      " $@;
     316am__v_CC_1 =
    254317CCLD = $(CC)
    255318LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
    256319AM_V_CCLD = $(am__v_CCLD_@AM_V@)
    257320am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
    258 am__v_CCLD_0 = @echo "  CCLD  " $@;
    259 AM_V_GEN = $(am__v_GEN_@AM_V@)
    260 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
    261 am__v_GEN_0 = @echo "  GEN   " $@;
     321am__v_CCLD_0 = @echo "  CCLD    " $@;
     322am__v_CCLD_1 =
    262323SOURCES = $(driver_cfa_cpp_SOURCES)
    263324DIST_SOURCES = $(driver_cfa_cpp_SOURCES)
     325am__can_run_installinfo = \
     326  case $$AM_UPDATE_INFO_DIR in \
     327    n|no|NO) false;; \
     328    *) (install-info --version) >/dev/null 2>&1;; \
     329  esac
     330am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
     331# Read a list of newline-separated strings from the standard input,
     332# and print each of them once, without duplicates.  Input order is
     333# *not* preserved.
     334am__uniquify_input = $(AWK) '\
     335  BEGIN { nonempty = 0; } \
     336  { items[$$0] = 1; nonempty = 1; } \
     337  END { if (nonempty) { for (i in items) print i; }; } \
     338'
     339# Make sure the list of sources is unique.  This is necessary because,
     340# e.g., the same source file might be shared among _SOURCES variables
     341# for different programs/libraries.
     342am__define_uniq_tagged_files = \
     343  list='$(am__tagged_files)'; \
     344  unique=`for i in $$list; do \
     345    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
     346  done | $(am__uniquify_input)`
    264347ETAGS = etags
    265348CTAGS = ctags
     349am__DIST_COMMON = $(srcdir)/CodeGen/module.mk \
     350        $(srcdir)/CodeTools/module.mk $(srcdir)/Common/module.mk \
     351        $(srcdir)/Concurrency/module.mk \
     352        $(srcdir)/ControlStruct/module.mk $(srcdir)/GenPoly/module.mk \
     353        $(srcdir)/InitTweak/module.mk $(srcdir)/Makefile.in \
     354        $(srcdir)/Parser/module.mk $(srcdir)/ResolvExpr/module.mk \
     355        $(srcdir)/SymTab/module.mk $(srcdir)/SynTree/module.mk \
     356        $(srcdir)/Tuples/module.mk $(top_srcdir)/automake/depcomp \
     357        $(top_srcdir)/automake/ylwrap Parser/lex.cc Parser/parser.cc \
     358        Parser/parser.hh
    266359DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
    267360ACLOCAL = @ACLOCAL@
     
    376469program_transform_name = @program_transform_name@
    377470psdir = @psdir@
     471runstatedir = @runstatedir@
    378472sbindir = @sbindir@
    379473sharedstatedir = @sharedstatedir@
     
    441535MAINTAINERCLEANFILES = Parser/parser.output ${libdir}/${notdir \
    442536        ${cfa_cpplib_PROGRAMS}}
    443 BUILT_SOURCES = Parser/parser.h
     537BUILT_SOURCES = Parser/parser.hh
    444538AM_YFLAGS = -d -t -v
    445539
     
    466560          esac; \
    467561        done; \
    468         echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
     562        echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
    469563        $(am__cd) $(top_srcdir) && \
    470           $(AUTOMAKE) --foreign src/Makefile
    471 .PRECIOUS: Makefile
     564          $(AUTOMAKE) --gnu src/Makefile
    472565Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
    473566        @case '$?' in \
     
    478571            cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
    479572        esac;
    480 $(srcdir)/CodeGen/module.mk $(srcdir)/CodeTools/module.mk $(srcdir)/Concurrency/module.mk $(srcdir)/Common/module.mk $(srcdir)/ControlStruct/module.mk $(srcdir)/GenPoly/module.mk $(srcdir)/InitTweak/module.mk $(srcdir)/Parser/module.mk $(srcdir)/ResolvExpr/module.mk $(srcdir)/SymTab/module.mk $(srcdir)/SynTree/module.mk $(srcdir)/Tuples/module.mk:
     573$(srcdir)/CodeGen/module.mk $(srcdir)/CodeTools/module.mk $(srcdir)/Concurrency/module.mk $(srcdir)/Common/module.mk $(srcdir)/ControlStruct/module.mk $(srcdir)/GenPoly/module.mk $(srcdir)/InitTweak/module.mk $(srcdir)/Parser/module.mk $(srcdir)/ResolvExpr/module.mk $(srcdir)/SymTab/module.mk $(srcdir)/SynTree/module.mk $(srcdir)/Tuples/module.mk $(am__empty):
    481574
    482575$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
     
    490583install-cfa_cpplibPROGRAMS: $(cfa_cpplib_PROGRAMS)
    491584        @$(NORMAL_INSTALL)
    492         test -z "$(cfa_cpplibdir)" || $(MKDIR_P) "$(DESTDIR)$(cfa_cpplibdir)"
    493585        @list='$(cfa_cpplib_PROGRAMS)'; test -n "$(cfa_cpplibdir)" || list=; \
     586        if test -n "$$list"; then \
     587          echo " $(MKDIR_P) '$(DESTDIR)$(cfa_cpplibdir)'"; \
     588          $(MKDIR_P) "$(DESTDIR)$(cfa_cpplibdir)" || exit 1; \
     589        fi; \
    494590        for p in $$list; do echo "$$p $$p"; done | \
    495591        sed 's/$(EXEEXT)$$//' | \
    496         while read p p1; do if test -f $$p; \
    497           then echo "$$p"; echo "$$p"; else :; fi; \
     592        while read p p1; do if test -f $$p \
     593          ; then echo "$$p"; echo "$$p"; else :; fi; \
    498594        done | \
    499         sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
     595        sed -e 'p;s,.*/,,;n;h' \
     596            -e 's|.*|.|' \
    500597            -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
    501598        sed 'N;N;N;s,\n, ,g' | \
     
    518615        files=`for p in $$list; do echo "$$p"; done | \
    519616          sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
    520               -e 's/$$/$(EXEEXT)/' `; \
     617              -e 's/$$/$(EXEEXT)/' \
     618        `; \
    521619        test -n "$$list" || exit 0; \
    522620        echo " ( cd '$(DESTDIR)$(cfa_cpplibdir)' && rm -f" $$files ")"; \
     
    640738InitTweak/driver_cfa_cpp-InitTweak.$(OBJEXT):  \
    641739        InitTweak/$(am__dirstamp) InitTweak/$(DEPDIR)/$(am__dirstamp)
    642 Parser/parser.h: Parser/parser.cc
     740Parser/parser.hh: Parser/parser.cc
    643741        @if test ! -f $@; then rm -f Parser/parser.cc; else :; fi
    644742        @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) Parser/parser.cc; else :; fi
     
    843941        @$(MKDIR_P) driver
    844942        @: > driver/$(am__dirstamp)
     943
    845944driver/cfa-cpp$(EXEEXT): $(driver_cfa_cpp_OBJECTS) $(driver_cfa_cpp_DEPENDENCIES) $(EXTRA_driver_cfa_cpp_DEPENDENCIES) driver/$(am__dirstamp)
    846945        @rm -f driver/cfa-cpp$(EXEEXT)
     
    849948mostlyclean-compile:
    850949        -rm -f *.$(OBJEXT)
    851         -rm -f CodeGen/driver_cfa_cpp-CodeGenerator.$(OBJEXT)
    852         -rm -f CodeGen/driver_cfa_cpp-FixMain.$(OBJEXT)
    853         -rm -f CodeGen/driver_cfa_cpp-FixNames.$(OBJEXT)
    854         -rm -f CodeGen/driver_cfa_cpp-GenType.$(OBJEXT)
    855         -rm -f CodeGen/driver_cfa_cpp-Generate.$(OBJEXT)
    856         -rm -f CodeGen/driver_cfa_cpp-OperatorTable.$(OBJEXT)
    857         -rm -f CodeTools/driver_cfa_cpp-DeclStats.$(OBJEXT)
    858         -rm -f CodeTools/driver_cfa_cpp-TrackLoc.$(OBJEXT)
    859         -rm -f Common/driver_cfa_cpp-Assert.$(OBJEXT)
    860         -rm -f Common/driver_cfa_cpp-DebugMalloc.$(OBJEXT)
    861         -rm -f Common/driver_cfa_cpp-SemanticError.$(OBJEXT)
    862         -rm -f Common/driver_cfa_cpp-UniqueName.$(OBJEXT)
    863         -rm -f Concurrency/driver_cfa_cpp-Keywords.$(OBJEXT)
    864         -rm -f ControlStruct/driver_cfa_cpp-ExceptTranslate.$(OBJEXT)
    865         -rm -f ControlStruct/driver_cfa_cpp-ForExprMutator.$(OBJEXT)
    866         -rm -f ControlStruct/driver_cfa_cpp-LabelFixer.$(OBJEXT)
    867         -rm -f ControlStruct/driver_cfa_cpp-LabelGenerator.$(OBJEXT)
    868         -rm -f ControlStruct/driver_cfa_cpp-MLEMutator.$(OBJEXT)
    869         -rm -f ControlStruct/driver_cfa_cpp-Mutate.$(OBJEXT)
    870         -rm -f GenPoly/driver_cfa_cpp-Box.$(OBJEXT)
    871         -rm -f GenPoly/driver_cfa_cpp-CopyParams.$(OBJEXT)
    872         -rm -f GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT)
    873         -rm -f GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT)
    874         -rm -f GenPoly/driver_cfa_cpp-GenPoly.$(OBJEXT)
    875         -rm -f GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT)
    876         -rm -f GenPoly/driver_cfa_cpp-Lvalue.$(OBJEXT)
    877         -rm -f GenPoly/driver_cfa_cpp-PolyMutator.$(OBJEXT)
    878         -rm -f GenPoly/driver_cfa_cpp-ScrubTyVars.$(OBJEXT)
    879         -rm -f GenPoly/driver_cfa_cpp-Specialize.$(OBJEXT)
    880         -rm -f InitTweak/driver_cfa_cpp-FixGlobalInit.$(OBJEXT)
    881         -rm -f InitTweak/driver_cfa_cpp-FixInit.$(OBJEXT)
    882         -rm -f InitTweak/driver_cfa_cpp-GenInit.$(OBJEXT)
    883         -rm -f InitTweak/driver_cfa_cpp-InitTweak.$(OBJEXT)
    884         -rm -f Parser/driver_cfa_cpp-DeclarationNode.$(OBJEXT)
    885         -rm -f Parser/driver_cfa_cpp-ExpressionNode.$(OBJEXT)
    886         -rm -f Parser/driver_cfa_cpp-InitializerNode.$(OBJEXT)
    887         -rm -f Parser/driver_cfa_cpp-LinkageSpec.$(OBJEXT)
    888         -rm -f Parser/driver_cfa_cpp-ParseNode.$(OBJEXT)
    889         -rm -f Parser/driver_cfa_cpp-StatementNode.$(OBJEXT)
    890         -rm -f Parser/driver_cfa_cpp-TypeData.$(OBJEXT)
    891         -rm -f Parser/driver_cfa_cpp-TypedefTable.$(OBJEXT)
    892         -rm -f Parser/driver_cfa_cpp-lex.$(OBJEXT)
    893         -rm -f Parser/driver_cfa_cpp-parser.$(OBJEXT)
    894         -rm -f Parser/driver_cfa_cpp-parserutility.$(OBJEXT)
    895         -rm -f ResolvExpr/driver_cfa_cpp-AdjustExprType.$(OBJEXT)
    896         -rm -f ResolvExpr/driver_cfa_cpp-Alternative.$(OBJEXT)
    897         -rm -f ResolvExpr/driver_cfa_cpp-AlternativeFinder.$(OBJEXT)
    898         -rm -f ResolvExpr/driver_cfa_cpp-AlternativePrinter.$(OBJEXT)
    899         -rm -f ResolvExpr/driver_cfa_cpp-CastCost.$(OBJEXT)
    900         -rm -f ResolvExpr/driver_cfa_cpp-CommonType.$(OBJEXT)
    901         -rm -f ResolvExpr/driver_cfa_cpp-ConversionCost.$(OBJEXT)
    902         -rm -f ResolvExpr/driver_cfa_cpp-CurrentObject.$(OBJEXT)
    903         -rm -f ResolvExpr/driver_cfa_cpp-FindOpenVars.$(OBJEXT)
    904         -rm -f ResolvExpr/driver_cfa_cpp-Occurs.$(OBJEXT)
    905         -rm -f ResolvExpr/driver_cfa_cpp-PolyCost.$(OBJEXT)
    906         -rm -f ResolvExpr/driver_cfa_cpp-PtrsAssignable.$(OBJEXT)
    907         -rm -f ResolvExpr/driver_cfa_cpp-PtrsCastable.$(OBJEXT)
    908         -rm -f ResolvExpr/driver_cfa_cpp-RenameVars.$(OBJEXT)
    909         -rm -f ResolvExpr/driver_cfa_cpp-ResolveTypeof.$(OBJEXT)
    910         -rm -f ResolvExpr/driver_cfa_cpp-Resolver.$(OBJEXT)
    911         -rm -f ResolvExpr/driver_cfa_cpp-TypeEnvironment.$(OBJEXT)
    912         -rm -f ResolvExpr/driver_cfa_cpp-Unify.$(OBJEXT)
    913         -rm -f SymTab/driver_cfa_cpp-Autogen.$(OBJEXT)
    914         -rm -f SymTab/driver_cfa_cpp-FixFunction.$(OBJEXT)
    915         -rm -f SymTab/driver_cfa_cpp-ImplementationType.$(OBJEXT)
    916         -rm -f SymTab/driver_cfa_cpp-Indexer.$(OBJEXT)
    917         -rm -f SymTab/driver_cfa_cpp-Mangler.$(OBJEXT)
    918         -rm -f SymTab/driver_cfa_cpp-TypeEquality.$(OBJEXT)
    919         -rm -f SymTab/driver_cfa_cpp-Validate.$(OBJEXT)
    920         -rm -f SynTree/driver_cfa_cpp-AddStmtVisitor.$(OBJEXT)
    921         -rm -f SynTree/driver_cfa_cpp-AddressExpr.$(OBJEXT)
    922         -rm -f SynTree/driver_cfa_cpp-AggregateDecl.$(OBJEXT)
    923         -rm -f SynTree/driver_cfa_cpp-ApplicationExpr.$(OBJEXT)
    924         -rm -f SynTree/driver_cfa_cpp-ArrayType.$(OBJEXT)
    925         -rm -f SynTree/driver_cfa_cpp-AttrType.$(OBJEXT)
    926         -rm -f SynTree/driver_cfa_cpp-Attribute.$(OBJEXT)
    927         -rm -f SynTree/driver_cfa_cpp-BasicType.$(OBJEXT)
    928         -rm -f SynTree/driver_cfa_cpp-CommaExpr.$(OBJEXT)
    929         -rm -f SynTree/driver_cfa_cpp-CompoundStmt.$(OBJEXT)
    930         -rm -f SynTree/driver_cfa_cpp-Constant.$(OBJEXT)
    931         -rm -f SynTree/driver_cfa_cpp-DeclStmt.$(OBJEXT)
    932         -rm -f SynTree/driver_cfa_cpp-Declaration.$(OBJEXT)
    933         -rm -f SynTree/driver_cfa_cpp-DeclarationWithType.$(OBJEXT)
    934         -rm -f SynTree/driver_cfa_cpp-Expression.$(OBJEXT)
    935         -rm -f SynTree/driver_cfa_cpp-FunctionDecl.$(OBJEXT)
    936         -rm -f SynTree/driver_cfa_cpp-FunctionType.$(OBJEXT)
    937         -rm -f SynTree/driver_cfa_cpp-Initializer.$(OBJEXT)
    938         -rm -f SynTree/driver_cfa_cpp-Mutator.$(OBJEXT)
    939         -rm -f SynTree/driver_cfa_cpp-NamedTypeDecl.$(OBJEXT)
    940         -rm -f SynTree/driver_cfa_cpp-ObjectDecl.$(OBJEXT)
    941         -rm -f SynTree/driver_cfa_cpp-PointerType.$(OBJEXT)
    942         -rm -f SynTree/driver_cfa_cpp-ReferenceToType.$(OBJEXT)
    943         -rm -f SynTree/driver_cfa_cpp-Statement.$(OBJEXT)
    944         -rm -f SynTree/driver_cfa_cpp-TupleExpr.$(OBJEXT)
    945         -rm -f SynTree/driver_cfa_cpp-TupleType.$(OBJEXT)
    946         -rm -f SynTree/driver_cfa_cpp-Type.$(OBJEXT)
    947         -rm -f SynTree/driver_cfa_cpp-TypeDecl.$(OBJEXT)
    948         -rm -f SynTree/driver_cfa_cpp-TypeExpr.$(OBJEXT)
    949         -rm -f SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT)
    950         -rm -f SynTree/driver_cfa_cpp-TypeofType.$(OBJEXT)
    951         -rm -f SynTree/driver_cfa_cpp-VarArgsType.$(OBJEXT)
    952         -rm -f SynTree/driver_cfa_cpp-VarExprReplacer.$(OBJEXT)
    953         -rm -f SynTree/driver_cfa_cpp-Visitor.$(OBJEXT)
    954         -rm -f SynTree/driver_cfa_cpp-VoidType.$(OBJEXT)
    955         -rm -f SynTree/driver_cfa_cpp-ZeroOneType.$(OBJEXT)
    956         -rm -f Tuples/driver_cfa_cpp-Explode.$(OBJEXT)
    957         -rm -f Tuples/driver_cfa_cpp-TupleAssignment.$(OBJEXT)
    958         -rm -f Tuples/driver_cfa_cpp-TupleExpansion.$(OBJEXT)
     950        -rm -f CodeGen/*.$(OBJEXT)
     951        -rm -f CodeTools/*.$(OBJEXT)
     952        -rm -f Common/*.$(OBJEXT)
     953        -rm -f Concurrency/*.$(OBJEXT)
     954        -rm -f ControlStruct/*.$(OBJEXT)
     955        -rm -f GenPoly/*.$(OBJEXT)
     956        -rm -f InitTweak/*.$(OBJEXT)
     957        -rm -f Parser/*.$(OBJEXT)
     958        -rm -f ResolvExpr/*.$(OBJEXT)
     959        -rm -f SymTab/*.$(OBJEXT)
     960        -rm -f SynTree/*.$(OBJEXT)
     961        -rm -f Tuples/*.$(OBJEXT)
    959962
    960963distclean-compile:
     
    26322635
    26332636.yy.cc:
    2634         $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
    2635 
    2636 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
    2637         list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
    2638         unique=`for i in $$list; do \
    2639             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    2640           done | \
    2641           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    2642               END { if (nonempty) { for (i in files) print i; }; }'`; \
    2643         mkid -fID $$unique
    2644 tags: TAGS
    2645 
    2646 TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
    2647                 $(TAGS_FILES) $(LISP)
     2637        $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE)
     2638
     2639ID: $(am__tagged_files)
     2640        $(am__define_uniq_tagged_files); mkid -fID $$unique
     2641tags: tags-am
     2642TAGS: tags
     2643
     2644tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
    26482645        set x; \
    26492646        here=`pwd`; \
    2650         list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
    2651         unique=`for i in $$list; do \
    2652             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    2653           done | \
    2654           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    2655               END { if (nonempty) { for (i in files) print i; }; }'`; \
     2647        $(am__define_uniq_tagged_files); \
    26562648        shift; \
    26572649        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
     
    26652657          fi; \
    26662658        fi
    2667 ctags: CTAGS
    2668 CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
    2669                 $(TAGS_FILES) $(LISP)
    2670         list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
    2671         unique=`for i in $$list; do \
    2672             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    2673           done | \
    2674           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    2675               END { if (nonempty) { for (i in files) print i; }; }'`; \
     2659ctags: ctags-am
     2660
     2661CTAGS: ctags
     2662ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
     2663        $(am__define_uniq_tagged_files); \
    26762664        test -z "$(CTAGS_ARGS)$$unique" \
    26772665          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
     
    26822670          && $(am__cd) $(top_srcdir) \
    26832671          && gtags -i $(GTAGS_ARGS) "$$here"
     2672cscopelist: cscopelist-am
     2673
     2674cscopelist-am: $(am__tagged_files)
     2675        list='$(am__tagged_files)'; \
     2676        case "$(srcdir)" in \
     2677          [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
     2678          *) sdir=$(subdir)/$(srcdir) ;; \
     2679        esac; \
     2680        for i in $$list; do \
     2681          if test -f "$$i"; then \
     2682            echo "$(subdir)/$$i"; \
     2683          else \
     2684            echo "$$sdir/$$i"; \
     2685          fi; \
     2686        done >> $(top_builddir)/cscope.files
    26842687
    26852688distclean-tags:
     
    27822785        -rm -f Parser/lex.cc
    27832786        -rm -f Parser/parser.cc
    2784         -rm -f Parser/parser.h
     2787        -rm -f Parser/parser.hh
    27852788        -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
    27862789        -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
     
    28562859.MAKE: all check install install-am install-strip
    28572860
    2858 .PHONY: CTAGS GTAGS all all-am check check-am clean \
    2859         clean-cfa_cpplibPROGRAMS clean-generic ctags distclean \
    2860         distclean-compile distclean-generic distclean-tags distdir dvi \
    2861         dvi-am html html-am info info-am install install-am \
    2862         install-cfa_cpplibPROGRAMS install-data install-data-am \
    2863         install-dvi install-dvi-am install-exec install-exec-am \
    2864         install-html install-html-am install-info install-info-am \
    2865         install-man install-pdf install-pdf-am install-ps \
    2866         install-ps-am install-strip installcheck installcheck-am \
    2867         installdirs maintainer-clean maintainer-clean-generic \
    2868         mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
    2869         ps ps-am tags uninstall uninstall-am \
    2870         uninstall-cfa_cpplibPROGRAMS
     2861.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
     2862        clean-cfa_cpplibPROGRAMS clean-generic cscopelist-am ctags \
     2863        ctags-am distclean distclean-compile distclean-generic \
     2864        distclean-tags distdir dvi dvi-am html html-am info info-am \
     2865        install install-am install-cfa_cpplibPROGRAMS install-data \
     2866        install-data-am install-dvi install-dvi-am install-exec \
     2867        install-exec-am install-html install-html-am install-info \
     2868        install-info-am install-man install-pdf install-pdf-am \
     2869        install-ps install-ps-am install-strip installcheck \
     2870        installcheck-am installdirs maintainer-clean \
     2871        maintainer-clean-generic mostlyclean mostlyclean-compile \
     2872        mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
     2873        uninstall-am uninstall-cfa_cpplibPROGRAMS
     2874
     2875.PRECIOUS: Makefile
    28712876
    28722877
  • TabularUnified src/Parser/TypedefTable.h

    rb1e63ac5 r208e5be  
    2222#include <stack>
    2323
     24#include "ParserTypes.h"
    2425#include "parser.hh"
    25 #include "parser.h"
    2626
    2727class TypedefTable {
  • TabularUnified src/Parser/module.mk

    rb1e63ac5 r208e5be  
    1515###############################################################################
    1616
    17 BUILT_SOURCES = Parser/parser.h
     17BUILT_SOURCES = Parser/parser.hh
    1818
    1919AM_YFLAGS = -d -t -v
  • TabularUnified src/Parser/parser.yy

    rb1e63ac5 r208e5be  
    99// Author           : Peter A. Buhr
    1010// Created On       : Sat Sep  1 20:22:55 2001
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jun 28 22:11:22 2017
    13 // Update Count     : 2414
     11// Last Modified By : Andrew Beach
     12// Last Modified On : Fri Jun 30 15:38:00 2017
     13// Update Count     : 2415
    1414//
    1515
     
    104104        std::string * str;
    105105        bool flag;
     106        CatchStmt::Kind catch_kind;
    106107}
    107108
     
    192193%type<sn> switch_clause_list_opt                switch_clause_list                      choose_clause_list_opt          choose_clause_list
    193194%type<sn> /* handler_list */                    handler_clause                          finally_clause
     195%type<catch_kind> handler_key
    194196
    195197// declarations
     
    958960handler_clause:
    959961        // TEMPORARY, TEST EXCEPTIONS
    960         CATCH '(' push push INTEGERconstant pop ')' compound_statement pop
    961                 { $$ = new StatementNode( build_catch( CatchStmt::Terminate, nullptr, new ExpressionNode( build_constantInteger( *$5 ) ), $8 ) ); }
    962         | handler_clause CATCH '(' push push INTEGERconstant pop ')' compound_statement pop
    963                 { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( CatchStmt::Terminate, nullptr, new ExpressionNode( build_constantInteger( *$6 ) ), $9 ) ) ); }
    964 
    965         | CATCH '(' push push exception_declaration pop ')' compound_statement pop
    966                 { $$ = new StatementNode( build_catch( CatchStmt::Terminate, $5, nullptr, $8 ) ); }
    967         | handler_clause CATCH '(' push push exception_declaration pop ')' compound_statement pop
    968                 { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( CatchStmt::Terminate, $6, nullptr, $9 ) ) ); }
    969         | CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop
    970                 { $$ = new StatementNode( build_catch( CatchStmt::Resume, $5, nullptr, $8 ) ); }
    971         | handler_clause CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop
    972                 { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( CatchStmt::Resume, $6, nullptr, $9 ) ) ); }
     962        handler_key '(' push push INTEGERconstant pop ')' compound_statement pop
     963                { $$ = new StatementNode( build_catch( $1, nullptr, new ExpressionNode( build_constantInteger( *$5 ) ), $8 ) ); }
     964        | handler_clause handler_key '(' push push INTEGERconstant pop ')' compound_statement pop
     965                { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $2, nullptr, new ExpressionNode( build_constantInteger( *$6 ) ), $9 ) ) ); }
     966
     967        | handler_key '(' push push exception_declaration pop ')' compound_statement pop
     968                { $$ = new StatementNode( build_catch( $1, $5, nullptr, $8 ) ); }
     969        | handler_clause handler_key '(' push push exception_declaration pop ')' compound_statement pop
     970                { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $2, $6, nullptr, $9 ) ) ); }
     971        ;
     972
     973handler_key:
     974        CATCH
     975                { $$ = CatchStmt::Terminate; }
     976        | CATCHRESUME
     977                { $$ = CatchStmt::Resume; }
    973978        ;
    974979
  • TabularUnified src/ResolvExpr/Resolver.cc

    rb1e63ac5 r208e5be  
    7070                virtual void visit( BranchStmt *branchStmt ) override;
    7171                virtual void visit( ReturnStmt *returnStmt ) override;
     72                virtual void visit( ThrowStmt *throwStmt ) override;
    7273
    7374                virtual void visit( SingleInit *singleInit ) override;
     
    366367        }
    367368
     369        void Resolver::visit( ThrowStmt *throwStmt ) {
     370                if ( throwStmt->get_expr() ) {
     371                        Expression * wrapped = new CastExpr( throwStmt->get_expr(), new BasicType( Type::Qualifiers(), BasicType::SignedInt ) );
     372                        Expression * newExpr = findSingleExpression( wrapped, *this );
     373                        throwStmt->set_expr( newExpr );
     374                }
     375        }
     376
    368377        template< typename T >
    369378        bool isCharType( T t ) {
  • TabularUnified src/SymTab/Indexer.cc

    rb1e63ac5 r208e5be  
    653653                        for ( MangleTable::const_iterator decl = mangleTable.begin(); decl != mangleTable.end(); ++decl ) {
    654654                                // check for C decls with the same name, skipping those with a compatible type (by mangleName)
    655                                 if ( decl->second->get_linkage() == LinkageSpec::C && decl->first != mangleName ) return true;
     655                                if ( ! LinkageSpec::isMangled( decl->second->get_linkage() ) && decl->first != mangleName ) return true;
    656656                        }
    657657                }
     
    670670                                // check for C decls with the same name, skipping
    671671                                // those with an incompatible type (by mangleName)
    672                                 if ( decl->second->get_linkage() == LinkageSpec::C && decl->first == mangleName ) return true;
     672                                if ( ! LinkageSpec::isMangled( decl->second->get_linkage() ) && decl->first == mangleName ) return true;
    673673                        }
    674674                }
     
    725725                        // new definition shadows the autogenerated one, even at the same scope
    726726                        return false;
    727                 } else if ( added->get_linkage() != LinkageSpec::C || ResolvExpr::typesCompatible( added->get_type(), existing->get_type(), Indexer() ) ) {
     727                } else if ( LinkageSpec::isMangled( added->get_linkage() ) || ResolvExpr::typesCompatible( added->get_type(), existing->get_type(), Indexer() ) ) {
    728728                        // typesCompatible doesn't really do the right thing here. When checking compatibility of function types,
    729729                        // we should ignore outermost pointer qualifiers, except _Atomic?
     
    766766
    767767                // this ensures that no two declarations with the same unmangled name at the same scope both have C linkage
    768                 if ( decl->get_linkage() == LinkageSpec::C ) {
     768                if ( ! LinkageSpec::isMangled( decl->get_linkage() ) ) {
    769769                        // NOTE this is broken in Richard's original code in such a way that it never triggers (it
    770770                        // doesn't check decls that have the same manglename, and all C-linkage decls are defined to
  • TabularUnified src/benchmark/Makefile.in

    rb1e63ac5 r208e5be  
    1 # Makefile.in generated by automake 1.11.3 from Makefile.am.
     1# Makefile.in generated by automake 1.15 from Makefile.am.
    22# @configure_input@
    33
    4 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
    5 # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
    6 # Foundation, Inc.
     4# Copyright (C) 1994-2014 Free Software Foundation, Inc.
     5
    76# This Makefile.in is free software; the Free Software Foundation
    87# gives unlimited permission to copy and/or distribute it,
     
    2019
    2120VPATH = @srcdir@
     21am__is_gnu_make = { \
     22  if test -z '$(MAKELEVEL)'; then \
     23    false; \
     24  elif test -n '$(MAKE_HOST)'; then \
     25    true; \
     26  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
     27    true; \
     28  else \
     29    false; \
     30  fi; \
     31}
     32am__make_running_with_option = \
     33  case $${target_option-} in \
     34      ?) ;; \
     35      *) echo "am__make_running_with_option: internal error: invalid" \
     36              "target option '$${target_option-}' specified" >&2; \
     37         exit 1;; \
     38  esac; \
     39  has_opt=no; \
     40  sane_makeflags=$$MAKEFLAGS; \
     41  if $(am__is_gnu_make); then \
     42    sane_makeflags=$$MFLAGS; \
     43  else \
     44    case $$MAKEFLAGS in \
     45      *\\[\ \   ]*) \
     46        bs=\\; \
     47        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
     48          | sed "s/$$bs$$bs[$$bs $$bs   ]*//g"`;; \
     49    esac; \
     50  fi; \
     51  skip_next=no; \
     52  strip_trailopt () \
     53  { \
     54    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
     55  }; \
     56  for flg in $$sane_makeflags; do \
     57    test $$skip_next = yes && { skip_next=no; continue; }; \
     58    case $$flg in \
     59      *=*|--*) continue;; \
     60        -*I) strip_trailopt 'I'; skip_next=yes;; \
     61      -*I?*) strip_trailopt 'I';; \
     62        -*O) strip_trailopt 'O'; skip_next=yes;; \
     63      -*O?*) strip_trailopt 'O';; \
     64        -*l) strip_trailopt 'l'; skip_next=yes;; \
     65      -*l?*) strip_trailopt 'l';; \
     66      -[dEDm]) skip_next=yes;; \
     67      -[JT]) skip_next=yes;; \
     68    esac; \
     69    case $$flg in \
     70      *$$target_option*) has_opt=yes; break;; \
     71    esac; \
     72  done; \
     73  test $$has_opt = yes
     74am__make_dryrun = (target_option=n; $(am__make_running_with_option))
     75am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
    2276pkgdatadir = $(datadir)/@PACKAGE@
    2377pkgincludedir = $(includedir)/@PACKAGE@
     
    4195        ctxswitch-thread$(EXEEXT)
    4296subdir = src/benchmark
    43 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
    4497ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    4598am__aclocal_m4_deps = $(top_srcdir)/configure.ac
    4699am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    47100        $(ACLOCAL_M4)
     101DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
    48102mkinstalldirs = $(install_sh) -d
    49103CONFIG_HEADER = $(top_builddir)/config.h
     
    60114ctxswitch_thread_OBJECTS = ctxswitch-thread.$(OBJEXT)
    61115ctxswitch_thread_LDADD = $(LDADD)
     116AM_V_P = $(am__v_P_@AM_V@)
     117am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
     118am__v_P_0 = false
     119am__v_P_1 = :
     120AM_V_GEN = $(am__v_GEN_@AM_V@)
     121am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
     122am__v_GEN_0 = @echo "  GEN     " $@;
     123am__v_GEN_1 =
     124AM_V_at = $(am__v_at_@AM_V@)
     125am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
     126am__v_at_0 = @
     127am__v_at_1 =
    62128DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
    63129depcomp = $(SHELL) $(top_srcdir)/automake/depcomp
     
    68134AM_V_CC = $(am__v_CC_@AM_V@)
    69135am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
    70 am__v_CC_0 = @echo "  CC    " $@;
    71 AM_V_at = $(am__v_at_@AM_V@)
    72 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
    73 am__v_at_0 = @
     136am__v_CC_0 = @echo "  CC      " $@;
     137am__v_CC_1 =
    74138CCLD = $(CC)
    75139LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
    76140AM_V_CCLD = $(am__v_CCLD_@AM_V@)
    77141am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
    78 am__v_CCLD_0 = @echo "  CCLD  " $@;
    79 AM_V_GEN = $(am__v_GEN_@AM_V@)
    80 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
    81 am__v_GEN_0 = @echo "  GEN   " $@;
     142am__v_CCLD_0 = @echo "  CCLD    " $@;
     143am__v_CCLD_1 =
    82144SOURCES = bench.c ctxswitch-coroutine.c ctxswitch-thread.c
    83145DIST_SOURCES = bench.c ctxswitch-coroutine.c ctxswitch-thread.c
     146am__can_run_installinfo = \
     147  case $$AM_UPDATE_INFO_DIR in \
     148    n|no|NO) false;; \
     149    *) (install-info --version) >/dev/null 2>&1;; \
     150  esac
     151am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
     152# Read a list of newline-separated strings from the standard input,
     153# and print each of them once, without duplicates.  Input order is
     154# *not* preserved.
     155am__uniquify_input = $(AWK) '\
     156  BEGIN { nonempty = 0; } \
     157  { items[$$0] = 1; nonempty = 1; } \
     158  END { if (nonempty) { for (i in items) print i; }; } \
     159'
     160# Make sure the list of sources is unique.  This is necessary because,
     161# e.g., the same source file might be shared among _SOURCES variables
     162# for different programs/libraries.
     163am__define_uniq_tagged_files = \
     164  list='$(am__tagged_files)'; \
     165  unique=`for i in $$list; do \
     166    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
     167  done | $(am__uniquify_input)`
    84168ETAGS = etags
    85169CTAGS = ctags
     170am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/automake/depcomp
    86171DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
    87172ACLOCAL = @ACLOCAL@
     
    198283program_transform_name = @program_transform_name@
    199284psdir = @psdir@
     285runstatedir = @runstatedir@
    200286sbindir = @sbindir@
    201287sharedstatedir = @sharedstatedir@
     
    220306          esac; \
    221307        done; \
    222         echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/benchmark/Makefile'; \
     308        echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/benchmark/Makefile'; \
    223309        $(am__cd) $(top_srcdir) && \
    224           $(AUTOMAKE) --foreign src/benchmark/Makefile
    225 .PRECIOUS: Makefile
     310          $(AUTOMAKE) --gnu src/benchmark/Makefile
    226311Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
    227312        @case '$?' in \
     
    256341
    257342.c.o:
    258 @am__fastdepCC_TRUE@    $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
    259 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
     343@am__fastdepCC_TRUE@    $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
     344@am__fastdepCC_TRUE@    $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
     345@am__fastdepCC_TRUE@    $(am__mv) $$depbase.Tpo $$depbase.Po
    260346@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
    261347@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    262 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
     348@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
    263349
    264350.c.obj:
    265 @am__fastdepCC_TRUE@    $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
    266 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
     351@am__fastdepCC_TRUE@    $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
     352@am__fastdepCC_TRUE@    $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
     353@am__fastdepCC_TRUE@    $(am__mv) $$depbase.Tpo $$depbase.Po
    267354@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
    268355@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    269 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
    270 
    271 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
    272         list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
    273         unique=`for i in $$list; do \
    274             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    275           done | \
    276           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    277               END { if (nonempty) { for (i in files) print i; }; }'`; \
    278         mkid -fID $$unique
    279 tags: TAGS
    280 
    281 TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
    282                 $(TAGS_FILES) $(LISP)
     356@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
     357
     358ID: $(am__tagged_files)
     359        $(am__define_uniq_tagged_files); mkid -fID $$unique
     360tags: tags-am
     361TAGS: tags
     362
     363tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
    283364        set x; \
    284365        here=`pwd`; \
    285         list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
    286         unique=`for i in $$list; do \
    287             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    288           done | \
    289           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    290               END { if (nonempty) { for (i in files) print i; }; }'`; \
     366        $(am__define_uniq_tagged_files); \
    291367        shift; \
    292368        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
     
    300376          fi; \
    301377        fi
    302 ctags: CTAGS
    303 CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
    304                 $(TAGS_FILES) $(LISP)
    305         list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
    306         unique=`for i in $$list; do \
    307             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    308           done | \
    309           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    310               END { if (nonempty) { for (i in files) print i; }; }'`; \
     378ctags: ctags-am
     379
     380CTAGS: ctags
     381ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
     382        $(am__define_uniq_tagged_files); \
    311383        test -z "$(CTAGS_ARGS)$$unique" \
    312384          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
     
    317389          && $(am__cd) $(top_srcdir) \
    318390          && gtags -i $(GTAGS_ARGS) "$$here"
     391cscopelist: cscopelist-am
     392
     393cscopelist-am: $(am__tagged_files)
     394        list='$(am__tagged_files)'; \
     395        case "$(srcdir)" in \
     396          [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
     397          *) sdir=$(subdir)/$(srcdir) ;; \
     398        esac; \
     399        for i in $$list; do \
     400          if test -f "$$i"; then \
     401            echo "$(subdir)/$$i"; \
     402          else \
     403            echo "$$sdir/$$i"; \
     404          fi; \
     405        done >> $(top_builddir)/cscope.files
    319406
    320407distclean-tags:
     
    456543.MAKE: install-am install-strip
    457544
    458 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
    459         clean-noinstPROGRAMS ctags distclean distclean-compile \
    460         distclean-generic distclean-tags distdir dvi dvi-am html \
    461         html-am info info-am install install-am install-data \
    462         install-data-am install-dvi install-dvi-am install-exec \
    463         install-exec-am install-html install-html-am install-info \
    464         install-info-am install-man install-pdf install-pdf-am \
    465         install-ps install-ps-am install-strip installcheck \
    466         installcheck-am installdirs maintainer-clean \
     545.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
     546        clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \
     547        distclean-compile distclean-generic distclean-tags distdir dvi \
     548        dvi-am html html-am info info-am install install-am \
     549        install-data install-data-am install-dvi install-dvi-am \
     550        install-exec install-exec-am install-html install-html-am \
     551        install-info install-info-am install-man install-pdf \
     552        install-pdf-am install-ps install-ps-am install-strip \
     553        installcheck installcheck-am installdirs maintainer-clean \
    467554        maintainer-clean-generic mostlyclean mostlyclean-compile \
    468         mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
     555        mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
    469556        uninstall-am
     557
     558.PRECIOUS: Makefile
    470559
    471560
  • TabularUnified src/driver/Makefile.in

    rb1e63ac5 r208e5be  
    1 # Makefile.in generated by automake 1.11.3 from Makefile.am.
     1# Makefile.in generated by automake 1.15 from Makefile.am.
    22# @configure_input@
    33
    4 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
    5 # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
    6 # Foundation, Inc.
     4# Copyright (C) 1994-2014 Free Software Foundation, Inc.
     5
    76# This Makefile.in is free software; the Free Software Foundation
    87# gives unlimited permission to copy and/or distribute it,
     
    2019
    2120VPATH = @srcdir@
     21am__is_gnu_make = { \
     22  if test -z '$(MAKELEVEL)'; then \
     23    false; \
     24  elif test -n '$(MAKE_HOST)'; then \
     25    true; \
     26  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
     27    true; \
     28  else \
     29    false; \
     30  fi; \
     31}
     32am__make_running_with_option = \
     33  case $${target_option-} in \
     34      ?) ;; \
     35      *) echo "am__make_running_with_option: internal error: invalid" \
     36              "target option '$${target_option-}' specified" >&2; \
     37         exit 1;; \
     38  esac; \
     39  has_opt=no; \
     40  sane_makeflags=$$MAKEFLAGS; \
     41  if $(am__is_gnu_make); then \
     42    sane_makeflags=$$MFLAGS; \
     43  else \
     44    case $$MAKEFLAGS in \
     45      *\\[\ \   ]*) \
     46        bs=\\; \
     47        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
     48          | sed "s/$$bs$$bs[$$bs $$bs   ]*//g"`;; \
     49    esac; \
     50  fi; \
     51  skip_next=no; \
     52  strip_trailopt () \
     53  { \
     54    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
     55  }; \
     56  for flg in $$sane_makeflags; do \
     57    test $$skip_next = yes && { skip_next=no; continue; }; \
     58    case $$flg in \
     59      *=*|--*) continue;; \
     60        -*I) strip_trailopt 'I'; skip_next=yes;; \
     61      -*I?*) strip_trailopt 'I';; \
     62        -*O) strip_trailopt 'O'; skip_next=yes;; \
     63      -*O?*) strip_trailopt 'O';; \
     64        -*l) strip_trailopt 'l'; skip_next=yes;; \
     65      -*l?*) strip_trailopt 'l';; \
     66      -[dEDm]) skip_next=yes;; \
     67      -[JT]) skip_next=yes;; \
     68    esac; \
     69    case $$flg in \
     70      *$$target_option*) has_opt=yes; break;; \
     71    esac; \
     72  done; \
     73  test $$has_opt = yes
     74am__make_dryrun = (target_option=n; $(am__make_running_with_option))
     75am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
    2276pkgdatadir = $(datadir)/@PACKAGE@
    2377pkgincludedir = $(includedir)/@PACKAGE@
     
    4498cc1lib_PROGRAMS = cc1$(EXEEXT)
    4599subdir = src/driver
    46 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
    47100ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    48101am__aclocal_m4_deps = $(top_srcdir)/configure.ac
    49102am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    50103        $(ACLOCAL_M4)
     104DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
    51105mkinstalldirs = $(install_sh) -d
    52106CONFIG_HEADER = $(top_builddir)/config.h
     
    61115cfa_OBJECTS = $(am_cfa_OBJECTS)
    62116cfa_LDADD = $(LDADD)
     117AM_V_P = $(am__v_P_@AM_V@)
     118am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
     119am__v_P_0 = false
     120am__v_P_1 = :
     121AM_V_GEN = $(am__v_GEN_@AM_V@)
     122am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
     123am__v_GEN_0 = @echo "  GEN     " $@;
     124am__v_GEN_1 =
     125AM_V_at = $(am__v_at_@AM_V@)
     126am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
     127am__v_at_0 = @
     128am__v_at_1 =
    63129DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
    64130depcomp = $(SHELL) $(top_srcdir)/automake/depcomp
     
    69135AM_V_CXX = $(am__v_CXX_@AM_V@)
    70136am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
    71 am__v_CXX_0 = @echo "  CXX   " $@;
    72 AM_V_at = $(am__v_at_@AM_V@)
    73 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
    74 am__v_at_0 = @
     137am__v_CXX_0 = @echo "  CXX     " $@;
     138am__v_CXX_1 =
    75139CXXLD = $(CXX)
    76140CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
     
    78142AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
    79143am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
    80 am__v_CXXLD_0 = @echo "  CXXLD " $@;
    81 AM_V_GEN = $(am__v_GEN_@AM_V@)
    82 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
    83 am__v_GEN_0 = @echo "  GEN   " $@;
     144am__v_CXXLD_0 = @echo "  CXXLD   " $@;
     145am__v_CXXLD_1 =
    84146SOURCES = $(cc1_SOURCES) $(cfa_SOURCES)
    85147DIST_SOURCES = $(cc1_SOURCES) $(cfa_SOURCES)
     148am__can_run_installinfo = \
     149  case $$AM_UPDATE_INFO_DIR in \
     150    n|no|NO) false;; \
     151    *) (install-info --version) >/dev/null 2>&1;; \
     152  esac
     153am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
     154# Read a list of newline-separated strings from the standard input,
     155# and print each of them once, without duplicates.  Input order is
     156# *not* preserved.
     157am__uniquify_input = $(AWK) '\
     158  BEGIN { nonempty = 0; } \
     159  { items[$$0] = 1; nonempty = 1; } \
     160  END { if (nonempty) { for (i in items) print i; }; } \
     161'
     162# Make sure the list of sources is unique.  This is necessary because,
     163# e.g., the same source file might be shared among _SOURCES variables
     164# for different programs/libraries.
     165am__define_uniq_tagged_files = \
     166  list='$(am__tagged_files)'; \
     167  unique=`for i in $$list; do \
     168    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
     169  done | $(am__uniquify_input)`
    86170ETAGS = etags
    87171CTAGS = ctags
     172am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/automake/depcomp
    88173DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
    89174ACLOCAL = @ACLOCAL@
     
    198283program_transform_name = @program_transform_name@
    199284psdir = @psdir@
     285runstatedir = @runstatedir@
    200286sbindir = @sbindir@
    201287sharedstatedir = @sharedstatedir@
     
    229315          esac; \
    230316        done; \
    231         echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/driver/Makefile'; \
     317        echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/driver/Makefile'; \
    232318        $(am__cd) $(top_srcdir) && \
    233           $(AUTOMAKE) --foreign src/driver/Makefile
    234 .PRECIOUS: Makefile
     319          $(AUTOMAKE) --gnu src/driver/Makefile
    235320Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
    236321        @case '$?' in \
     
    252337install-cc1libPROGRAMS: $(cc1lib_PROGRAMS)
    253338        @$(NORMAL_INSTALL)
    254         test -z "$(cc1libdir)" || $(MKDIR_P) "$(DESTDIR)$(cc1libdir)"
    255339        @list='$(cc1lib_PROGRAMS)'; test -n "$(cc1libdir)" || list=; \
     340        if test -n "$$list"; then \
     341          echo " $(MKDIR_P) '$(DESTDIR)$(cc1libdir)'"; \
     342          $(MKDIR_P) "$(DESTDIR)$(cc1libdir)" || exit 1; \
     343        fi; \
    256344        for p in $$list; do echo "$$p $$p"; done | \
    257345        sed 's/$(EXEEXT)$$//' | \
    258         while read p p1; do if test -f $$p; \
    259           then echo "$$p"; echo "$$p"; else :; fi; \
     346        while read p p1; do if test -f $$p \
     347          ; then echo "$$p"; echo "$$p"; else :; fi; \
    260348        done | \
    261         sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
     349        sed -e 'p;s,.*/,,;n;h' \
     350            -e 's|.*|.|' \
    262351            -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
    263352        sed 'N;N;N;s,\n, ,g' | \
     
    280369        files=`for p in $$list; do echo "$$p"; done | \
    281370          sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
    282               -e 's/$$/$(EXEEXT)/' `; \
     371              -e 's/$$/$(EXEEXT)/' \
     372        `; \
    283373        test -n "$$list" || exit 0; \
    284374        echo " ( cd '$(DESTDIR)$(cc1libdir)' && rm -f" $$files ")"; \
     
    290380clean-noinstPROGRAMS:
    291381        -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
     382
    292383cc1$(EXEEXT): $(cc1_OBJECTS) $(cc1_DEPENDENCIES) $(EXTRA_cc1_DEPENDENCIES)
    293384        @rm -f cc1$(EXEEXT)
    294385        $(AM_V_CXXLD)$(CXXLINK) $(cc1_OBJECTS) $(cc1_LDADD) $(LIBS)
     386
    295387cfa$(EXEEXT): $(cfa_OBJECTS) $(cfa_DEPENDENCIES) $(EXTRA_cfa_DEPENDENCIES)
    296388        @rm -f cfa$(EXEEXT)
     
    307399
    308400.cc.o:
    309 @am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
    310 @am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
     401@am__fastdepCXX_TRUE@   $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
     402@am__fastdepCXX_TRUE@   $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
     403@am__fastdepCXX_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Po
    311404@AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
    312405@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     
    314407
    315408.cc.obj:
    316 @am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
    317 @am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
     409@am__fastdepCXX_TRUE@   $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
     410@am__fastdepCXX_TRUE@   $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
     411@am__fastdepCXX_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Po
    318412@AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
    319413@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    320414@am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
    321415
    322 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
    323         list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
    324         unique=`for i in $$list; do \
    325             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    326           done | \
    327           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    328               END { if (nonempty) { for (i in files) print i; }; }'`; \
    329         mkid -fID $$unique
    330 tags: TAGS
    331 
    332 TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
    333                 $(TAGS_FILES) $(LISP)
     416ID: $(am__tagged_files)
     417        $(am__define_uniq_tagged_files); mkid -fID $$unique
     418tags: tags-am
     419TAGS: tags
     420
     421tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
    334422        set x; \
    335423        here=`pwd`; \
    336         list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
    337         unique=`for i in $$list; do \
    338             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    339           done | \
    340           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    341               END { if (nonempty) { for (i in files) print i; }; }'`; \
     424        $(am__define_uniq_tagged_files); \
    342425        shift; \
    343426        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
     
    351434          fi; \
    352435        fi
    353 ctags: CTAGS
    354 CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
    355                 $(TAGS_FILES) $(LISP)
    356         list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
    357         unique=`for i in $$list; do \
    358             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    359           done | \
    360           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    361               END { if (nonempty) { for (i in files) print i; }; }'`; \
     436ctags: ctags-am
     437
     438CTAGS: ctags
     439ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
     440        $(am__define_uniq_tagged_files); \
    362441        test -z "$(CTAGS_ARGS)$$unique" \
    363442          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
     
    368447          && $(am__cd) $(top_srcdir) \
    369448          && gtags -i $(GTAGS_ARGS) "$$here"
     449cscopelist: cscopelist-am
     450
     451cscopelist-am: $(am__tagged_files)
     452        list='$(am__tagged_files)'; \
     453        case "$(srcdir)" in \
     454          [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
     455          *) sdir=$(subdir)/$(srcdir) ;; \
     456        esac; \
     457        for i in $$list; do \
     458          if test -f "$$i"; then \
     459            echo "$(subdir)/$$i"; \
     460          else \
     461            echo "$$sdir/$$i"; \
     462          fi; \
     463        done >> $(top_builddir)/cscope.files
    370464
    371465distclean-tags:
     
    514608.MAKE: install-am install-exec-am install-strip uninstall-am
    515609
    516 .PHONY: CTAGS GTAGS all all-am check check-am clean \
    517         clean-cc1libPROGRAMS clean-generic clean-noinstPROGRAMS ctags \
    518         distclean distclean-compile distclean-generic distclean-tags \
    519         distdir dvi dvi-am html html-am info info-am install \
    520         install-am install-cc1libPROGRAMS install-data install-data-am \
    521         install-dvi install-dvi-am install-exec install-exec-am \
    522         install-exec-hook install-html install-html-am install-info \
    523         install-info-am install-man install-pdf install-pdf-am \
    524         install-ps install-ps-am install-strip installcheck \
    525         installcheck-am installdirs maintainer-clean \
    526         maintainer-clean-generic mostlyclean mostlyclean-compile \
    527         mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
    528         uninstall-am uninstall-cc1libPROGRAMS uninstall-hook
     610.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
     611        clean-cc1libPROGRAMS clean-generic clean-noinstPROGRAMS \
     612        cscopelist-am ctags ctags-am distclean distclean-compile \
     613        distclean-generic distclean-tags distdir dvi dvi-am html \
     614        html-am info info-am install install-am install-cc1libPROGRAMS \
     615        install-data install-data-am install-dvi install-dvi-am \
     616        install-exec install-exec-am install-exec-hook install-html \
     617        install-html-am install-info install-info-am install-man \
     618        install-pdf install-pdf-am install-ps install-ps-am \
     619        install-strip installcheck installcheck-am installdirs \
     620        maintainer-clean maintainer-clean-generic mostlyclean \
     621        mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
     622        tags tags-am uninstall uninstall-am uninstall-cc1libPROGRAMS \
     623        uninstall-hook
     624
     625.PRECIOUS: Makefile
    529626
    530627
  • TabularUnified src/examples/Makefile.in

    rb1e63ac5 r208e5be  
    1 # Makefile.in generated by automake 1.11.3 from Makefile.am.
     1# Makefile.in generated by automake 1.15 from Makefile.am.
    22# @configure_input@
    33
    4 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
    5 # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
    6 # Foundation, Inc.
     4# Copyright (C) 1994-2014 Free Software Foundation, Inc.
     5
    76# This Makefile.in is free software; the Free Software Foundation
    87# gives unlimited permission to copy and/or distribute it,
     
    2019
    2120VPATH = @srcdir@
     21am__is_gnu_make = { \
     22  if test -z '$(MAKELEVEL)'; then \
     23    false; \
     24  elif test -n '$(MAKE_HOST)'; then \
     25    true; \
     26  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
     27    true; \
     28  else \
     29    false; \
     30  fi; \
     31}
     32am__make_running_with_option = \
     33  case $${target_option-} in \
     34      ?) ;; \
     35      *) echo "am__make_running_with_option: internal error: invalid" \
     36              "target option '$${target_option-}' specified" >&2; \
     37         exit 1;; \
     38  esac; \
     39  has_opt=no; \
     40  sane_makeflags=$$MAKEFLAGS; \
     41  if $(am__is_gnu_make); then \
     42    sane_makeflags=$$MFLAGS; \
     43  else \
     44    case $$MAKEFLAGS in \
     45      *\\[\ \   ]*) \
     46        bs=\\; \
     47        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
     48          | sed "s/$$bs$$bs[$$bs $$bs   ]*//g"`;; \
     49    esac; \
     50  fi; \
     51  skip_next=no; \
     52  strip_trailopt () \
     53  { \
     54    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
     55  }; \
     56  for flg in $$sane_makeflags; do \
     57    test $$skip_next = yes && { skip_next=no; continue; }; \
     58    case $$flg in \
     59      *=*|--*) continue;; \
     60        -*I) strip_trailopt 'I'; skip_next=yes;; \
     61      -*I?*) strip_trailopt 'I';; \
     62        -*O) strip_trailopt 'O'; skip_next=yes;; \
     63      -*O?*) strip_trailopt 'O';; \
     64        -*l) strip_trailopt 'l'; skip_next=yes;; \
     65      -*l?*) strip_trailopt 'l';; \
     66      -[dEDm]) skip_next=yes;; \
     67      -[JT]) skip_next=yes;; \
     68    esac; \
     69    case $$flg in \
     70      *$$target_option*) has_opt=yes; break;; \
     71    esac; \
     72  done; \
     73  test $$has_opt = yes
     74am__make_dryrun = (target_option=n; $(am__make_running_with_option))
     75am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
    2276pkgdatadir = $(datadir)/@PACKAGE@
    2377pkgincludedir = $(includedir)/@PACKAGE@
     
    4195        avl_test$(EXEEXT) Bench$(EXEEXT)
    4296subdir = src/examples
    43 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
    4497ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    4598am__aclocal_m4_deps = $(top_srcdir)/configure.ac
    4699am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    47100        $(ACLOCAL_M4)
     101DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
    48102mkinstalldirs = $(install_sh) -d
    49103CONFIG_HEADER = $(top_builddir)/config.h
     
    54108Bench_OBJECTS = Bench.$(OBJEXT)
    55109Bench_LDADD = $(LDADD)
    56 am_avl_test_OBJECTS = avl_test.$(OBJEXT) avl0.$(OBJEXT) avl1.$(OBJEXT) \
    57         avl2.$(OBJEXT) avl3.$(OBJEXT) avl4.$(OBJEXT) \
    58         avl-private.$(OBJEXT)
     110am__dirstamp = $(am__leading_dot)dirstamp
     111am_avl_test_OBJECTS = avltree/avl_test.$(OBJEXT) \
     112        avltree/avl0.$(OBJEXT) avltree/avl1.$(OBJEXT) \
     113        avltree/avl2.$(OBJEXT) avltree/avl3.$(OBJEXT) \
     114        avltree/avl4.$(OBJEXT) avltree/avl-private.$(OBJEXT)
    59115avl_test_OBJECTS = $(am_avl_test_OBJECTS)
    60116avl_test_LDADD = $(LDADD)
     
    66122vector_test_OBJECTS = $(am_vector_test_OBJECTS)
    67123vector_test_LDADD = $(LDADD)
     124AM_V_P = $(am__v_P_@AM_V@)
     125am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
     126am__v_P_0 = false
     127am__v_P_1 = :
     128AM_V_GEN = $(am__v_GEN_@AM_V@)
     129am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
     130am__v_GEN_0 = @echo "  GEN     " $@;
     131am__v_GEN_1 =
     132AM_V_at = $(am__v_at_@AM_V@)
     133am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
     134am__v_at_0 = @
     135am__v_at_1 =
    68136DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
    69137depcomp = $(SHELL) $(top_srcdir)/automake/depcomp
    70138am__depfiles_maybe = depfiles
    71139am__mv = mv -f
    72 AM_V_lt = $(am__v_lt_@AM_V@)
    73 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
    74 am__v_lt_0 = --silent
    75140COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
    76141        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
    77142AM_V_CC = $(am__v_CC_@AM_V@)
    78143am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
    79 am__v_CC_0 = @echo "  CC    " $@;
    80 AM_V_at = $(am__v_at_@AM_V@)
    81 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
    82 am__v_at_0 = @
     144am__v_CC_0 = @echo "  CC      " $@;
     145am__v_CC_1 =
    83146CCLD = $(CC)
    84147LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
    85148AM_V_CCLD = $(am__v_CCLD_@AM_V@)
    86149am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
    87 am__v_CCLD_0 = @echo "  CCLD  " $@;
    88 AM_V_GEN = $(am__v_GEN_@AM_V@)
    89 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
    90 am__v_GEN_0 = @echo "  GEN   " $@;
     150am__v_CCLD_0 = @echo "  CCLD    " $@;
     151am__v_CCLD_1 =
    91152SOURCES = Bench.c $(avl_test_SOURCES) $(fstream_test_SOURCES) \
    92153        $(vector_test_SOURCES)
    93154DIST_SOURCES = Bench.c $(avl_test_SOURCES) $(fstream_test_SOURCES) \
    94155        $(vector_test_SOURCES)
     156am__can_run_installinfo = \
     157  case $$AM_UPDATE_INFO_DIR in \
     158    n|no|NO) false;; \
     159    *) (install-info --version) >/dev/null 2>&1;; \
     160  esac
     161am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
     162# Read a list of newline-separated strings from the standard input,
     163# and print each of them once, without duplicates.  Input order is
     164# *not* preserved.
     165am__uniquify_input = $(AWK) '\
     166  BEGIN { nonempty = 0; } \
     167  { items[$$0] = 1; nonempty = 1; } \
     168  END { if (nonempty) { for (i in items) print i; }; } \
     169'
     170# Make sure the list of sources is unique.  This is necessary because,
     171# e.g., the same source file might be shared among _SOURCES variables
     172# for different programs/libraries.
     173am__define_uniq_tagged_files = \
     174  list='$(am__tagged_files)'; \
     175  unique=`for i in $$list; do \
     176    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
     177  done | $(am__uniquify_input)`
    95178ETAGS = etags
    96179CTAGS = ctags
     180am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/automake/depcomp
    97181DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
    98182ACLOCAL = @ACLOCAL@
     
    209293program_transform_name = @program_transform_name@
    210294psdir = @psdir@
     295runstatedir = @runstatedir@
    211296sbindir = @sbindir@
    212297sharedstatedir = @sharedstatedir@
     
    234319          esac; \
    235320        done; \
    236         echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/examples/Makefile'; \
     321        echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/examples/Makefile'; \
    237322        $(am__cd) $(top_srcdir) && \
    238           $(AUTOMAKE) --foreign src/examples/Makefile
    239 .PRECIOUS: Makefile
     323          $(AUTOMAKE) --gnu src/examples/Makefile
    240324Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
    241325        @case '$?' in \
     
    258342clean-noinstPROGRAMS:
    259343        -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
     344avltree/$(am__dirstamp):
     345        @$(MKDIR_P) avltree
     346        @: > avltree/$(am__dirstamp)
     347avltree/$(DEPDIR)/$(am__dirstamp):
     348        @$(MKDIR_P) avltree/$(DEPDIR)
     349        @: > avltree/$(DEPDIR)/$(am__dirstamp)
     350avltree/avl_test.$(OBJEXT): avltree/$(am__dirstamp) \
     351        avltree/$(DEPDIR)/$(am__dirstamp)
     352avltree/avl0.$(OBJEXT): avltree/$(am__dirstamp) \
     353        avltree/$(DEPDIR)/$(am__dirstamp)
     354avltree/avl1.$(OBJEXT): avltree/$(am__dirstamp) \
     355        avltree/$(DEPDIR)/$(am__dirstamp)
     356avltree/avl2.$(OBJEXT): avltree/$(am__dirstamp) \
     357        avltree/$(DEPDIR)/$(am__dirstamp)
     358avltree/avl3.$(OBJEXT): avltree/$(am__dirstamp) \
     359        avltree/$(DEPDIR)/$(am__dirstamp)
     360avltree/avl4.$(OBJEXT): avltree/$(am__dirstamp) \
     361        avltree/$(DEPDIR)/$(am__dirstamp)
     362avltree/avl-private.$(OBJEXT): avltree/$(am__dirstamp) \
     363        avltree/$(DEPDIR)/$(am__dirstamp)
     364
    260365avl_test$(EXEEXT): $(avl_test_OBJECTS) $(avl_test_DEPENDENCIES) $(EXTRA_avl_test_DEPENDENCIES)
    261366        @rm -f avl_test$(EXEEXT)
    262367        $(AM_V_CCLD)$(LINK) $(avl_test_OBJECTS) $(avl_test_LDADD) $(LIBS)
     368
    263369fstream_test$(EXEEXT): $(fstream_test_OBJECTS) $(fstream_test_DEPENDENCIES) $(EXTRA_fstream_test_DEPENDENCIES)
    264370        @rm -f fstream_test$(EXEEXT)
    265371        $(AM_V_CCLD)$(LINK) $(fstream_test_OBJECTS) $(fstream_test_LDADD) $(LIBS)
     372
    266373vector_test$(EXEEXT): $(vector_test_OBJECTS) $(vector_test_DEPENDENCIES) $(EXTRA_vector_test_DEPENDENCIES)
    267374        @rm -f vector_test$(EXEEXT)
     
    270377mostlyclean-compile:
    271378        -rm -f *.$(OBJEXT)
     379        -rm -f avltree/*.$(OBJEXT)
    272380
    273381distclean-compile:
     
    276384@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Bench.Po@am__quote@
    277385@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/array.Po@am__quote@
    278 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl-private.Po@am__quote@
    279 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl0.Po@am__quote@
    280 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl1.Po@am__quote@
    281 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl2.Po@am__quote@
    282 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl3.Po@am__quote@
    283 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl4.Po@am__quote@
    284 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl_test.Po@am__quote@
    285386@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fstream_test.Po@am__quote@
    286387@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector_int.Po@am__quote@
    287388@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector_test.Po@am__quote@
     389@AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl-private.Po@am__quote@
     390@AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl0.Po@am__quote@
     391@AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl1.Po@am__quote@
     392@AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl2.Po@am__quote@
     393@AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl3.Po@am__quote@
     394@AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl4.Po@am__quote@
     395@AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl_test.Po@am__quote@
    288396
    289397.c.o:
    290 @am__fastdepCC_TRUE@    $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
    291 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
     398@am__fastdepCC_TRUE@    $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
     399@am__fastdepCC_TRUE@    $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
     400@am__fastdepCC_TRUE@    $(am__mv) $$depbase.Tpo $$depbase.Po
    292401@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
    293402@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    294 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
     403@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
    295404
    296405.c.obj:
    297 @am__fastdepCC_TRUE@    $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
    298 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
     406@am__fastdepCC_TRUE@    $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
     407@am__fastdepCC_TRUE@    $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
     408@am__fastdepCC_TRUE@    $(am__mv) $$depbase.Tpo $$depbase.Po
    299409@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
    300410@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    301 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
    302 
    303 avl_test.o: avltree/avl_test.c
    304 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl_test.o -MD -MP -MF $(DEPDIR)/avl_test.Tpo -c -o avl_test.o `test -f 'avltree/avl_test.c' || echo '$(srcdir)/'`avltree/avl_test.c
    305 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl_test.Tpo $(DEPDIR)/avl_test.Po
    306 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl_test.c' object='avl_test.o' libtool=no @AMDEPBACKSLASH@
    307 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    308 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl_test.o `test -f 'avltree/avl_test.c' || echo '$(srcdir)/'`avltree/avl_test.c
    309 
    310 avl_test.obj: avltree/avl_test.c
    311 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl_test.obj -MD -MP -MF $(DEPDIR)/avl_test.Tpo -c -o avl_test.obj `if test -f 'avltree/avl_test.c'; then $(CYGPATH_W) 'avltree/avl_test.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl_test.c'; fi`
    312 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl_test.Tpo $(DEPDIR)/avl_test.Po
    313 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl_test.c' object='avl_test.obj' libtool=no @AMDEPBACKSLASH@
    314 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    315 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl_test.obj `if test -f 'avltree/avl_test.c'; then $(CYGPATH_W) 'avltree/avl_test.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl_test.c'; fi`
    316 
    317 avl0.o: avltree/avl0.c
    318 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl0.o -MD -MP -MF $(DEPDIR)/avl0.Tpo -c -o avl0.o `test -f 'avltree/avl0.c' || echo '$(srcdir)/'`avltree/avl0.c
    319 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl0.Tpo $(DEPDIR)/avl0.Po
    320 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl0.c' object='avl0.o' libtool=no @AMDEPBACKSLASH@
    321 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    322 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl0.o `test -f 'avltree/avl0.c' || echo '$(srcdir)/'`avltree/avl0.c
    323 
    324 avl0.obj: avltree/avl0.c
    325 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl0.obj -MD -MP -MF $(DEPDIR)/avl0.Tpo -c -o avl0.obj `if test -f 'avltree/avl0.c'; then $(CYGPATH_W) 'avltree/avl0.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl0.c'; fi`
    326 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl0.Tpo $(DEPDIR)/avl0.Po
    327 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl0.c' object='avl0.obj' libtool=no @AMDEPBACKSLASH@
    328 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    329 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl0.obj `if test -f 'avltree/avl0.c'; then $(CYGPATH_W) 'avltree/avl0.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl0.c'; fi`
    330 
    331 avl1.o: avltree/avl1.c
    332 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl1.o -MD -MP -MF $(DEPDIR)/avl1.Tpo -c -o avl1.o `test -f 'avltree/avl1.c' || echo '$(srcdir)/'`avltree/avl1.c
    333 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl1.Tpo $(DEPDIR)/avl1.Po
    334 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl1.c' object='avl1.o' libtool=no @AMDEPBACKSLASH@
    335 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    336 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl1.o `test -f 'avltree/avl1.c' || echo '$(srcdir)/'`avltree/avl1.c
    337 
    338 avl1.obj: avltree/avl1.c
    339 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl1.obj -MD -MP -MF $(DEPDIR)/avl1.Tpo -c -o avl1.obj `if test -f 'avltree/avl1.c'; then $(CYGPATH_W) 'avltree/avl1.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl1.c'; fi`
    340 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl1.Tpo $(DEPDIR)/avl1.Po
    341 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl1.c' object='avl1.obj' libtool=no @AMDEPBACKSLASH@
    342 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    343 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl1.obj `if test -f 'avltree/avl1.c'; then $(CYGPATH_W) 'avltree/avl1.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl1.c'; fi`
    344 
    345 avl2.o: avltree/avl2.c
    346 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl2.o -MD -MP -MF $(DEPDIR)/avl2.Tpo -c -o avl2.o `test -f 'avltree/avl2.c' || echo '$(srcdir)/'`avltree/avl2.c
    347 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl2.Tpo $(DEPDIR)/avl2.Po
    348 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl2.c' object='avl2.o' libtool=no @AMDEPBACKSLASH@
    349 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    350 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl2.o `test -f 'avltree/avl2.c' || echo '$(srcdir)/'`avltree/avl2.c
    351 
    352 avl2.obj: avltree/avl2.c
    353 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl2.obj -MD -MP -MF $(DEPDIR)/avl2.Tpo -c -o avl2.obj `if test -f 'avltree/avl2.c'; then $(CYGPATH_W) 'avltree/avl2.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl2.c'; fi`
    354 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl2.Tpo $(DEPDIR)/avl2.Po
    355 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl2.c' object='avl2.obj' libtool=no @AMDEPBACKSLASH@
    356 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    357 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl2.obj `if test -f 'avltree/avl2.c'; then $(CYGPATH_W) 'avltree/avl2.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl2.c'; fi`
    358 
    359 avl3.o: avltree/avl3.c
    360 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl3.o -MD -MP -MF $(DEPDIR)/avl3.Tpo -c -o avl3.o `test -f 'avltree/avl3.c' || echo '$(srcdir)/'`avltree/avl3.c
    361 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl3.Tpo $(DEPDIR)/avl3.Po
    362 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl3.c' object='avl3.o' libtool=no @AMDEPBACKSLASH@
    363 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    364 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl3.o `test -f 'avltree/avl3.c' || echo '$(srcdir)/'`avltree/avl3.c
    365 
    366 avl3.obj: avltree/avl3.c
    367 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl3.obj -MD -MP -MF $(DEPDIR)/avl3.Tpo -c -o avl3.obj `if test -f 'avltree/avl3.c'; then $(CYGPATH_W) 'avltree/avl3.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl3.c'; fi`
    368 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl3.Tpo $(DEPDIR)/avl3.Po
    369 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl3.c' object='avl3.obj' libtool=no @AMDEPBACKSLASH@
    370 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    371 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl3.obj `if test -f 'avltree/avl3.c'; then $(CYGPATH_W) 'avltree/avl3.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl3.c'; fi`
    372 
    373 avl4.o: avltree/avl4.c
    374 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl4.o -MD -MP -MF $(DEPDIR)/avl4.Tpo -c -o avl4.o `test -f 'avltree/avl4.c' || echo '$(srcdir)/'`avltree/avl4.c
    375 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl4.Tpo $(DEPDIR)/avl4.Po
    376 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl4.c' object='avl4.o' libtool=no @AMDEPBACKSLASH@
    377 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    378 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl4.o `test -f 'avltree/avl4.c' || echo '$(srcdir)/'`avltree/avl4.c
    379 
    380 avl4.obj: avltree/avl4.c
    381 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl4.obj -MD -MP -MF $(DEPDIR)/avl4.Tpo -c -o avl4.obj `if test -f 'avltree/avl4.c'; then $(CYGPATH_W) 'avltree/avl4.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl4.c'; fi`
    382 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl4.Tpo $(DEPDIR)/avl4.Po
    383 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl4.c' object='avl4.obj' libtool=no @AMDEPBACKSLASH@
    384 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    385 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl4.obj `if test -f 'avltree/avl4.c'; then $(CYGPATH_W) 'avltree/avl4.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl4.c'; fi`
    386 
    387 avl-private.o: avltree/avl-private.c
    388 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl-private.o -MD -MP -MF $(DEPDIR)/avl-private.Tpo -c -o avl-private.o `test -f 'avltree/avl-private.c' || echo '$(srcdir)/'`avltree/avl-private.c
    389 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl-private.Tpo $(DEPDIR)/avl-private.Po
    390 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl-private.c' object='avl-private.o' libtool=no @AMDEPBACKSLASH@
    391 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    392 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl-private.o `test -f 'avltree/avl-private.c' || echo '$(srcdir)/'`avltree/avl-private.c
    393 
    394 avl-private.obj: avltree/avl-private.c
    395 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl-private.obj -MD -MP -MF $(DEPDIR)/avl-private.Tpo -c -o avl-private.obj `if test -f 'avltree/avl-private.c'; then $(CYGPATH_W) 'avltree/avl-private.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl-private.c'; fi`
    396 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl-private.Tpo $(DEPDIR)/avl-private.Po
    397 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl-private.c' object='avl-private.obj' libtool=no @AMDEPBACKSLASH@
    398 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    399 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl-private.obj `if test -f 'avltree/avl-private.c'; then $(CYGPATH_W) 'avltree/avl-private.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl-private.c'; fi`
    400 
    401 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
    402         list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
    403         unique=`for i in $$list; do \
    404             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    405           done | \
    406           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    407               END { if (nonempty) { for (i in files) print i; }; }'`; \
    408         mkid -fID $$unique
    409 tags: TAGS
    410 
    411 TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
    412                 $(TAGS_FILES) $(LISP)
     411@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
     412
     413ID: $(am__tagged_files)
     414        $(am__define_uniq_tagged_files); mkid -fID $$unique
     415tags: tags-am
     416TAGS: tags
     417
     418tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
    413419        set x; \
    414420        here=`pwd`; \
    415         list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
    416         unique=`for i in $$list; do \
    417             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    418           done | \
    419           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    420               END { if (nonempty) { for (i in files) print i; }; }'`; \
     421        $(am__define_uniq_tagged_files); \
    421422        shift; \
    422423        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
     
    430431          fi; \
    431432        fi
    432 ctags: CTAGS
    433 CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
    434                 $(TAGS_FILES) $(LISP)
    435         list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
    436         unique=`for i in $$list; do \
    437             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    438           done | \
    439           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    440               END { if (nonempty) { for (i in files) print i; }; }'`; \
     433ctags: ctags-am
     434
     435CTAGS: ctags
     436ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
     437        $(am__define_uniq_tagged_files); \
    441438        test -z "$(CTAGS_ARGS)$$unique" \
    442439          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
     
    447444          && $(am__cd) $(top_srcdir) \
    448445          && gtags -i $(GTAGS_ARGS) "$$here"
     446cscopelist: cscopelist-am
     447
     448cscopelist-am: $(am__tagged_files)
     449        list='$(am__tagged_files)'; \
     450        case "$(srcdir)" in \
     451          [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
     452          *) sdir=$(subdir)/$(srcdir) ;; \
     453        esac; \
     454        for i in $$list; do \
     455          if test -f "$$i"; then \
     456            echo "$(subdir)/$$i"; \
     457          else \
     458            echo "$$sdir/$$i"; \
     459          fi; \
     460        done >> $(top_builddir)/cscope.files
    449461
    450462distclean-tags:
     
    511523        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
    512524        -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
     525        -rm -f avltree/$(DEPDIR)/$(am__dirstamp)
     526        -rm -f avltree/$(am__dirstamp)
    513527
    514528maintainer-clean-generic:
     
    520534
    521535distclean: distclean-am
    522         -rm -rf ./$(DEPDIR)
     536        -rm -rf ./$(DEPDIR) avltree/$(DEPDIR)
    523537        -rm -f Makefile
    524538distclean-am: clean-am distclean-compile distclean-generic \
     
    566580
    567581maintainer-clean: maintainer-clean-am
    568         -rm -rf ./$(DEPDIR)
     582        -rm -rf ./$(DEPDIR) avltree/$(DEPDIR)
    569583        -rm -f Makefile
    570584maintainer-clean-am: distclean-am maintainer-clean-generic
     
    586600.MAKE: install-am install-strip
    587601
    588 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
    589         clean-noinstPROGRAMS ctags distclean distclean-compile \
    590         distclean-generic distclean-tags distdir dvi dvi-am html \
    591         html-am info info-am install install-am install-data \
    592         install-data-am install-dvi install-dvi-am install-exec \
    593         install-exec-am install-html install-html-am install-info \
    594         install-info-am install-man install-pdf install-pdf-am \
    595         install-ps install-ps-am install-strip installcheck \
    596         installcheck-am installdirs maintainer-clean \
     602.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
     603        clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \
     604        distclean-compile distclean-generic distclean-tags distdir dvi \
     605        dvi-am html html-am info info-am install install-am \
     606        install-data install-data-am install-dvi install-dvi-am \
     607        install-exec install-exec-am install-html install-html-am \
     608        install-info install-info-am install-man install-pdf \
     609        install-pdf-am install-ps install-ps-am install-strip \
     610        installcheck installcheck-am installdirs maintainer-clean \
    597611        maintainer-clean-generic mostlyclean mostlyclean-compile \
    598         mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
     612        mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
    599613        uninstall-am
     614
     615.PRECIOUS: Makefile
    600616
    601617
  • TabularUnified src/libcfa/Makefile.am

    rb1e63ac5 r208e5be  
    5050
    5151libobjs = ${headers:=.o}
    52 libsrc = libcfa-prelude.c interpose.c libhdr/libdebug.c ${headers:=.c}
     52libsrc = libcfa-prelude.c interpose.c libhdr/libdebug.c ${headers:=.c} exception.c
    5353
    5454# not all platforms support concurrency, add option do disable it
  • TabularUnified src/libcfa/Makefile.in

    rb1e63ac5 r208e5be  
    1 # Makefile.in generated by automake 1.11.3 from Makefile.am.
     1# Makefile.in generated by automake 1.15 from Makefile.am.
    22# @configure_input@
    33
    4 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
    5 # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
    6 # Foundation, Inc.
     4# Copyright (C) 1994-2014 Free Software Foundation, Inc.
     5
    76# This Makefile.in is free software; the Free Software Foundation
    87# gives unlimited permission to copy and/or distribute it,
     
    2120
    2221VPATH = @srcdir@
     22am__is_gnu_make = { \
     23  if test -z '$(MAKELEVEL)'; then \
     24    false; \
     25  elif test -n '$(MAKE_HOST)'; then \
     26    true; \
     27  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
     28    true; \
     29  else \
     30    false; \
     31  fi; \
     32}
     33am__make_running_with_option = \
     34  case $${target_option-} in \
     35      ?) ;; \
     36      *) echo "am__make_running_with_option: internal error: invalid" \
     37              "target option '$${target_option-}' specified" >&2; \
     38         exit 1;; \
     39  esac; \
     40  has_opt=no; \
     41  sane_makeflags=$$MAKEFLAGS; \
     42  if $(am__is_gnu_make); then \
     43    sane_makeflags=$$MFLAGS; \
     44  else \
     45    case $$MAKEFLAGS in \
     46      *\\[\ \   ]*) \
     47        bs=\\; \
     48        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
     49          | sed "s/$$bs$$bs[$$bs $$bs   ]*//g"`;; \
     50    esac; \
     51  fi; \
     52  skip_next=no; \
     53  strip_trailopt () \
     54  { \
     55    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
     56  }; \
     57  for flg in $$sane_makeflags; do \
     58    test $$skip_next = yes && { skip_next=no; continue; }; \
     59    case $$flg in \
     60      *=*|--*) continue;; \
     61        -*I) strip_trailopt 'I'; skip_next=yes;; \
     62      -*I?*) strip_trailopt 'I';; \
     63        -*O) strip_trailopt 'O'; skip_next=yes;; \
     64      -*O?*) strip_trailopt 'O';; \
     65        -*l) strip_trailopt 'l'; skip_next=yes;; \
     66      -*l?*) strip_trailopt 'l';; \
     67      -[dEDm]) skip_next=yes;; \
     68      -[JT]) skip_next=yes;; \
     69    esac; \
     70    case $$flg in \
     71      *$$target_option*) has_opt=yes; break;; \
     72    esac; \
     73  done; \
     74  test $$has_opt = yes
     75am__make_dryrun = (target_option=n; $(am__make_running_with_option))
     76am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
    2377pkgdatadir = $(datadir)/@PACKAGE@
    2478pkgincludedir = $(includedir)/@PACKAGE@
     
    48102@BUILD_CONCURRENCY_TRUE@am__append_4 = concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c concurrency/invoke.c concurrency/preemption.c
    49103subdir = src/libcfa
    50 DIST_COMMON = $(am__nobase_cfa_include_HEADERS_DIST) \
    51         $(srcdir)/Makefile.am $(srcdir)/Makefile.in
    52104ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    53105am__aclocal_m4_deps = $(top_srcdir)/configure.ac
    54106am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    55107        $(ACLOCAL_M4)
     108DIST_COMMON = $(srcdir)/Makefile.am \
     109        $(am__nobase_cfa_include_HEADERS_DIST) $(am__DIST_COMMON)
    56110mkinstalldirs = $(install_sh) -d
    57111CONFIG_HEADER = $(top_builddir)/config.h
     
    91145AM_V_AR = $(am__v_AR_@AM_V@)
    92146am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
    93 am__v_AR_0 = @echo "  AR    " $@;
    94 AM_V_at = $(am__v_at_@AM_V@)
    95 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
    96 am__v_at_0 = @
     147am__v_AR_0 = @echo "  AR      " $@;
     148am__v_AR_1 =
    97149libcfa_d_a_AR = $(AR) $(ARFLAGS)
    98150libcfa_d_a_LIBADD =
     
    102154        containers/pair.c containers/result.c containers/vector.c \
    103155        concurrency/coroutine.c concurrency/thread.c \
    104         concurrency/kernel.c concurrency/monitor.c \
     156        concurrency/kernel.c concurrency/monitor.c exception.c \
    105157        concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c \
    106158        concurrency/invoke.c concurrency/preemption.c
     
    126178        libcfa_d_a-interpose.$(OBJEXT) \
    127179        libhdr/libcfa_d_a-libdebug.$(OBJEXT) $(am__objects_2) \
    128         $(am__objects_3)
     180        libcfa_d_a-exception.$(OBJEXT) $(am__objects_3)
    129181am_libcfa_d_a_OBJECTS = $(am__objects_4)
    130182libcfa_d_a_OBJECTS = $(am_libcfa_d_a_OBJECTS)
     
    136188        containers/pair.c containers/result.c containers/vector.c \
    137189        concurrency/coroutine.c concurrency/thread.c \
    138         concurrency/kernel.c concurrency/monitor.c \
     190        concurrency/kernel.c concurrency/monitor.c exception.c \
    139191        concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c \
    140192        concurrency/invoke.c concurrency/preemption.c
     
    158210        libcfa_a-interpose.$(OBJEXT) \
    159211        libhdr/libcfa_a-libdebug.$(OBJEXT) $(am__objects_6) \
    160         $(am__objects_7)
     212        libcfa_a-exception.$(OBJEXT) $(am__objects_7)
    161213am_libcfa_a_OBJECTS = $(am__objects_8)
    162214libcfa_a_OBJECTS = $(am_libcfa_a_OBJECTS)
     215AM_V_P = $(am__v_P_@AM_V@)
     216am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
     217am__v_P_0 = false
     218am__v_P_1 = :
     219AM_V_GEN = $(am__v_GEN_@AM_V@)
     220am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
     221am__v_GEN_0 = @echo "  GEN     " $@;
     222am__v_GEN_1 =
     223AM_V_at = $(am__v_at_@AM_V@)
     224am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
     225am__v_at_0 = @
     226am__v_at_1 =
    163227DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
    164228depcomp = $(SHELL) $(top_srcdir)/automake/depcomp
     
    169233AM_V_CPPAS = $(am__v_CPPAS_@AM_V@)
    170234am__v_CPPAS_ = $(am__v_CPPAS_@AM_DEFAULT_V@)
    171 am__v_CPPAS_0 = @echo "  CPPAS " $@;
     235am__v_CPPAS_0 = @echo "  CPPAS   " $@;
     236am__v_CPPAS_1 =
    172237AM_V_lt = $(am__v_lt_@AM_V@)
    173238am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
    174239am__v_lt_0 = --silent
     240am__v_lt_1 =
    175241COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
    176242        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
    177243AM_V_CC = $(am__v_CC_@AM_V@)
    178244am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
    179 am__v_CC_0 = @echo "  CC    " $@;
     245am__v_CC_0 = @echo "  CC      " $@;
     246am__v_CC_1 =
    180247CCLD = $(CC)
    181248LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
    182249AM_V_CCLD = $(am__v_CCLD_@AM_V@)
    183250am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
    184 am__v_CCLD_0 = @echo "  CCLD  " $@;
    185 AM_V_GEN = $(am__v_GEN_@AM_V@)
    186 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
    187 am__v_GEN_0 = @echo "  GEN   " $@;
     251am__v_CCLD_0 = @echo "  CCLD    " $@;
     252am__v_CCLD_1 =
    188253SOURCES = $(libcfa_d_a_SOURCES) $(libcfa_a_SOURCES)
    189254DIST_SOURCES = $(am__libcfa_d_a_SOURCES_DIST) \
    190255        $(am__libcfa_a_SOURCES_DIST)
     256am__can_run_installinfo = \
     257  case $$AM_UPDATE_INFO_DIR in \
     258    n|no|NO) false;; \
     259    *) (install-info --version) >/dev/null 2>&1;; \
     260  esac
    191261am__nobase_cfa_include_HEADERS_DIST = assert fstream iostream iterator \
    192262        limits math rational stdlib containers/maybe containers/pair \
     
    195265        ${shell echo stdhdr/*} gmp concurrency/invoke.h
    196266HEADERS = $(nobase_cfa_include_HEADERS)
     267am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
     268# Read a list of newline-separated strings from the standard input,
     269# and print each of them once, without duplicates.  Input order is
     270# *not* preserved.
     271am__uniquify_input = $(AWK) '\
     272  BEGIN { nonempty = 0; } \
     273  { items[$$0] = 1; nonempty = 1; } \
     274  END { if (nonempty) { for (i in items) print i; }; } \
     275'
     276# Make sure the list of sources is unique.  This is necessary because,
     277# e.g., the same source file might be shared among _SOURCES variables
     278# for different programs/libraries.
     279am__define_uniq_tagged_files = \
     280  list='$(am__tagged_files)'; \
     281  unique=`for i in $$list; do \
     282    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
     283  done | $(am__uniquify_input)`
    197284ETAGS = etags
    198285CTAGS = ctags
     286am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/automake/depcomp
    199287DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
    200288ACLOCAL = @ACLOCAL@
     
    309397program_transform_name = @program_transform_name@
    310398psdir = @psdir@
     399runstatedir = @runstatedir@
    311400sbindir = @sbindir@
    312401sharedstatedir = @sharedstatedir@
     
    328417libobjs = ${headers:=.o}
    329418libsrc = libcfa-prelude.c interpose.c libhdr/libdebug.c ${headers:=.c} \
    330         $(am__append_4)
     419        exception.c $(am__append_4)
    331420libcfa_a_SOURCES = ${libsrc}
    332421libcfa_a_CFLAGS = -nodebug -O2
     
    350439          esac; \
    351440        done; \
    352         echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/libcfa/Makefile'; \
     441        echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libcfa/Makefile'; \
    353442        $(am__cd) $(top_srcdir) && \
    354           $(AUTOMAKE) --foreign src/libcfa/Makefile
    355 .PRECIOUS: Makefile
     443          $(AUTOMAKE) --gnu src/libcfa/Makefile
    356444Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
    357445        @case '$?' in \
     
    373461install-libLIBRARIES: $(lib_LIBRARIES)
    374462        @$(NORMAL_INSTALL)
    375         test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
    376463        @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
    377464        list2=; for p in $$list; do \
     
    381468        done; \
    382469        test -z "$$list2" || { \
     470          echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
     471          $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
    383472          echo " $(INSTALL_DATA) $$list2 '$(DESTDIR)$(libdir)'"; \
    384473          $(INSTALL_DATA) $$list2 "$(DESTDIR)$(libdir)" || exit $$?; }
     
    448537        concurrency/$(am__dirstamp) \
    449538        concurrency/$(DEPDIR)/$(am__dirstamp)
     539
    450540libcfa-d.a: $(libcfa_d_a_OBJECTS) $(libcfa_d_a_DEPENDENCIES) $(EXTRA_libcfa_d_a_DEPENDENCIES)
    451541        $(AM_V_at)-rm -f libcfa-d.a
     
    477567        concurrency/$(am__dirstamp) \
    478568        concurrency/$(DEPDIR)/$(am__dirstamp)
     569
    479570libcfa.a: $(libcfa_a_OBJECTS) $(libcfa_a_DEPENDENCIES) $(EXTRA_libcfa_a_DEPENDENCIES)
    480571        $(AM_V_at)-rm -f libcfa.a
     
    484575mostlyclean-compile:
    485576        -rm -f *.$(OBJEXT)
    486         -rm -f concurrency/CtxSwitch-@MACHINE_TYPE@.$(OBJEXT)
    487         -rm -f concurrency/libcfa_a-alarm.$(OBJEXT)
    488         -rm -f concurrency/libcfa_a-coroutine.$(OBJEXT)
    489         -rm -f concurrency/libcfa_a-invoke.$(OBJEXT)
    490         -rm -f concurrency/libcfa_a-kernel.$(OBJEXT)
    491         -rm -f concurrency/libcfa_a-monitor.$(OBJEXT)
    492         -rm -f concurrency/libcfa_a-preemption.$(OBJEXT)
    493         -rm -f concurrency/libcfa_a-thread.$(OBJEXT)
    494         -rm -f concurrency/libcfa_d_a-alarm.$(OBJEXT)
    495         -rm -f concurrency/libcfa_d_a-coroutine.$(OBJEXT)
    496         -rm -f concurrency/libcfa_d_a-invoke.$(OBJEXT)
    497         -rm -f concurrency/libcfa_d_a-kernel.$(OBJEXT)
    498         -rm -f concurrency/libcfa_d_a-monitor.$(OBJEXT)
    499         -rm -f concurrency/libcfa_d_a-preemption.$(OBJEXT)
    500         -rm -f concurrency/libcfa_d_a-thread.$(OBJEXT)
    501         -rm -f containers/libcfa_a-maybe.$(OBJEXT)
    502         -rm -f containers/libcfa_a-pair.$(OBJEXT)
    503         -rm -f containers/libcfa_a-result.$(OBJEXT)
    504         -rm -f containers/libcfa_a-vector.$(OBJEXT)
    505         -rm -f containers/libcfa_d_a-maybe.$(OBJEXT)
    506         -rm -f containers/libcfa_d_a-pair.$(OBJEXT)
    507         -rm -f containers/libcfa_d_a-result.$(OBJEXT)
    508         -rm -f containers/libcfa_d_a-vector.$(OBJEXT)
    509         -rm -f libhdr/libcfa_a-libdebug.$(OBJEXT)
    510         -rm -f libhdr/libcfa_d_a-libdebug.$(OBJEXT)
     577        -rm -f concurrency/*.$(OBJEXT)
     578        -rm -f containers/*.$(OBJEXT)
     579        -rm -f libhdr/*.$(OBJEXT)
    511580
    512581distclean-compile:
     
    514583
    515584@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-assert.Po@am__quote@
     585@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-exception.Po@am__quote@
    516586@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-fstream.Po@am__quote@
    517587@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-interpose.Po@am__quote@
     
    524594@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-stdlib.Po@am__quote@
    525595@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-assert.Po@am__quote@
     596@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-exception.Po@am__quote@
    526597@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-fstream.Po@am__quote@
    527598@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-interpose.Po@am__quote@
     
    850921@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-monitor.obj `if test -f 'concurrency/monitor.c'; then $(CYGPATH_W) 'concurrency/monitor.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/monitor.c'; fi`
    851922
     923libcfa_d_a-exception.obj: exception.c
     924@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-exception.obj -MD -MP -MF $(DEPDIR)/libcfa_d_a-exception.Tpo -c -o libcfa_d_a-exception.obj `if test -f 'exception.c'; then $(CYGPATH_W) 'exception.c'; else $(CYGPATH_W) '$(srcdir)/exception.c'; fi`
     925@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-exception.Tpo $(DEPDIR)/libcfa_d_a-exception.Po
     926@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='exception.c' object='libcfa_d_a-exception.obj' libtool=no @AMDEPBACKSLASH@
     927@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     928@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-exception.obj `if test -f 'exception.c'; then $(CYGPATH_W) 'exception.c'; else $(CYGPATH_W) '$(srcdir)/exception.c'; fi`
     929
    852930concurrency/libcfa_d_a-alarm.o: concurrency/alarm.c
    853931@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-alarm.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-alarm.Tpo -c -o concurrency/libcfa_d_a-alarm.o `test -f 'concurrency/alarm.c' || echo '$(srcdir)/'`concurrency/alarm.c
     
    11441222@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-monitor.obj `if test -f 'concurrency/monitor.c'; then $(CYGPATH_W) 'concurrency/monitor.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/monitor.c'; fi`
    11451223
     1224libcfa_a-exception.obj: exception.c
     1225@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-exception.obj -MD -MP -MF $(DEPDIR)/libcfa_a-exception.Tpo -c -o libcfa_a-exception.obj `if test -f 'exception.c'; then $(CYGPATH_W) 'exception.c'; else $(CYGPATH_W) '$(srcdir)/exception.c'; fi`
     1226@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-exception.Tpo $(DEPDIR)/libcfa_a-exception.Po
     1227@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='exception.c' object='libcfa_a-exception.obj' libtool=no @AMDEPBACKSLASH@
     1228@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1229@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-exception.obj `if test -f 'exception.c'; then $(CYGPATH_W) 'exception.c'; else $(CYGPATH_W) '$(srcdir)/exception.c'; fi`
     1230
    11461231concurrency/libcfa_a-alarm.o: concurrency/alarm.c
    11471232@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-alarm.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-alarm.Tpo -c -o concurrency/libcfa_a-alarm.o `test -f 'concurrency/alarm.c' || echo '$(srcdir)/'`concurrency/alarm.c
     
    11801265install-nobase_cfa_includeHEADERS: $(nobase_cfa_include_HEADERS)
    11811266        @$(NORMAL_INSTALL)
    1182         test -z "$(cfa_includedir)" || $(MKDIR_P) "$(DESTDIR)$(cfa_includedir)"
    11831267        @list='$(nobase_cfa_include_HEADERS)'; test -n "$(cfa_includedir)" || list=; \
     1268        if test -n "$$list"; then \
     1269          echo " $(MKDIR_P) '$(DESTDIR)$(cfa_includedir)'"; \
     1270          $(MKDIR_P) "$(DESTDIR)$(cfa_includedir)" || exit 1; \
     1271        fi; \
    11841272        $(am__nobase_list) | while read dir files; do \
    11851273          xfiles=; for file in $$files; do \
     
    11881276          test -z "$$xfiles" || { \
    11891277            test "x$$dir" = x. || { \
    1190               echo "$(MKDIR_P) '$(DESTDIR)$(cfa_includedir)/$$dir'"; \
     1278              echo " $(MKDIR_P) '$(DESTDIR)$(cfa_includedir)/$$dir'"; \
    11911279              $(MKDIR_P) "$(DESTDIR)$(cfa_includedir)/$$dir"; }; \
    11921280            echo " $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(cfa_includedir)/$$dir'"; \
     
    12001288        dir='$(DESTDIR)$(cfa_includedir)'; $(am__uninstall_files_from_dir)
    12011289
    1202 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
    1203         list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
    1204         unique=`for i in $$list; do \
    1205             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    1206           done | \
    1207           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    1208               END { if (nonempty) { for (i in files) print i; }; }'`; \
    1209         mkid -fID $$unique
    1210 tags: TAGS
    1211 
    1212 TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
    1213                 $(TAGS_FILES) $(LISP)
     1290ID: $(am__tagged_files)
     1291        $(am__define_uniq_tagged_files); mkid -fID $$unique
     1292tags: tags-am
     1293TAGS: tags
     1294
     1295tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
    12141296        set x; \
    12151297        here=`pwd`; \
    1216         list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
    1217         unique=`for i in $$list; do \
    1218             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    1219           done | \
    1220           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    1221               END { if (nonempty) { for (i in files) print i; }; }'`; \
     1298        $(am__define_uniq_tagged_files); \
    12221299        shift; \
    12231300        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
     
    12311308          fi; \
    12321309        fi
    1233 ctags: CTAGS
    1234 CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
    1235                 $(TAGS_FILES) $(LISP)
    1236         list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
    1237         unique=`for i in $$list; do \
    1238             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    1239           done | \
    1240           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    1241               END { if (nonempty) { for (i in files) print i; }; }'`; \
     1310ctags: ctags-am
     1311
     1312CTAGS: ctags
     1313ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
     1314        $(am__define_uniq_tagged_files); \
    12421315        test -z "$(CTAGS_ARGS)$$unique" \
    12431316          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
     
    12481321          && $(am__cd) $(top_srcdir) \
    12491322          && gtags -i $(GTAGS_ARGS) "$$here"
     1323cscopelist: cscopelist-am
     1324
     1325cscopelist-am: $(am__tagged_files)
     1326        list='$(am__tagged_files)'; \
     1327        case "$(srcdir)" in \
     1328          [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
     1329          *) sdir=$(subdir)/$(srcdir) ;; \
     1330        esac; \
     1331        for i in $$list; do \
     1332          if test -f "$$i"; then \
     1333            echo "$(subdir)/$$i"; \
     1334          else \
     1335            echo "$$sdir/$$i"; \
     1336          fi; \
     1337        done >> $(top_builddir)/cscope.files
    12501338
    12511339distclean-tags:
     
    13991487.MAKE: install-am install-strip
    14001488
    1401 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
    1402         clean-libLIBRARIES ctags distclean distclean-compile \
    1403         distclean-generic distclean-tags distdir dvi dvi-am html \
    1404         html-am info info-am install install-am install-data \
    1405         install-data-am install-dvi install-dvi-am install-exec \
    1406         install-exec-am install-html install-html-am install-info \
    1407         install-info-am install-libLIBRARIES install-man \
     1489.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
     1490        clean-libLIBRARIES cscopelist-am ctags ctags-am distclean \
     1491        distclean-compile distclean-generic distclean-tags distdir dvi \
     1492        dvi-am html html-am info info-am install install-am \
     1493        install-data install-data-am install-dvi install-dvi-am \
     1494        install-exec install-exec-am install-html install-html-am \
     1495        install-info install-info-am install-libLIBRARIES install-man \
    14081496        install-nobase_cfa_includeHEADERS install-pdf install-pdf-am \
    14091497        install-ps install-ps-am install-strip installcheck \
     
    14111499        maintainer-clean-generic maintainer-clean-local mostlyclean \
    14121500        mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
    1413         tags uninstall uninstall-am uninstall-libLIBRARIES \
     1501        tags tags-am uninstall uninstall-am uninstall-libLIBRARIES \
    14141502        uninstall-nobase_cfa_includeHEADERS
     1503
     1504.PRECIOUS: Makefile
    14151505
    14161506
  • TabularUnified src/libcfa/exception.c

    rb1e63ac5 r208e5be  
    3737// This macro should be the only thing that needs to change across machines.
    3838// Used in the personality function, way down in termination.
    39 // struct _Unwind_Context * -> _Unwind_Reason_Code(*)()
     39// struct _Unwind_Context * -> _Unwind_Reason_Code(*)(exception *)
    4040#define MATCHER_FROM_CONTEXT(ptr_to_context) \
    41         (*(_Unwind_Reason_Code(**)())(_Unwind_GetCFA(ptr_to_context) + 8))
     41        (*(_Unwind_Reason_Code(**)(exception*))(_Unwind_GetCFA(ptr_to_context) + 8))
    4242
    4343
    4444// RESUMPTION ================================================================
    4545
    46 void __cfaehm__throw_resume(exception except) {
    47 
    48         // DEBUG
    49         printf("Throwing resumption exception %d\n", except);
    50 
    51         struct __try_resume_node * original_head = shared_stack.current_resume;
    52         struct __try_resume_node * current =
     46void __cfaehm__throw_resumption(exception * except) {
     47
     48        // DEBUG
     49        printf("Throwing resumption exception %d\n", *except);
     50
     51        struct __cfaehm__try_resume_node * original_head = shared_stack.current_resume;
     52        struct __cfaehm__try_resume_node * current =
    5353                (original_head) ? original_head->next : shared_stack.top_resume;
    5454
    5555        for ( ; current ; current = current->next) {
    5656                shared_stack.current_resume = current;
    57                 if (current->try_to_handle(except)) {
     57                if (current->handler(except)) {
    5858                        shared_stack.current_resume = original_head;
    5959                        return;
     
    6161        }
    6262
    63         printf("Unhandled exception %d\n", except);
     63        printf("Unhandled exception %d\n", *except);
    6464        shared_stack.current_resume = original_head;
    6565
    6666        // Fall back to termination:
    67         __cfaehm__throw_terminate(except);
     67        __cfaehm__throw_termination(except);
    6868        // TODO: Default handler for resumption.
    6969}
     
    7373 * after the node is built but before it is made the top node.
    7474 */
    75 void __try_resume_setup(struct __try_resume_node * node,
    76                         bool (*handler)(exception except)) {
     75void __cfaehm__try_resume_setup(struct __cfaehm__try_resume_node * node,
     76                        int (*handler)(exception * except)) {
    7777        node->next = shared_stack.top_resume;
    78         node->try_to_handle = handler;
     78        node->handler = handler;
    7979        shared_stack.top_resume = node;
    8080}
    8181
    82 void __try_resume_cleanup(struct __try_resume_node * node) {
     82void __cfaehm__try_resume_cleanup(struct __cfaehm__try_resume_node * node) {
    8383        shared_stack.top_resume = node->next;
    8484}
     
    111111}
    112112
    113 void __cfaehm__throw_terminate( int val ) {
     113void __cfaehm__throw_termination( exception * val ) {
    114114        // Store the current exception
    115         shared_stack.current_exception = val;
    116 
    117         // DEBUG
    118         printf("Throwing termination exception %d\n", val);
     115        shared_stack.current_exception = *val;
     116
     117        // DEBUG
     118        printf("Throwing termination exception %d\n", *val);
    119119
    120120        // Call stdlibc to raise the exception
     
    147147
    148148// Nesting this the other way would probably be faster.
    149 void __cfaehm__rethrow_terminate(void) {
     149void __cfaehm__rethrow_termination(void) {
    150150        // DEBUG
    151151        printf("Rethrowing termination exception\n");
    152152
    153         __cfaehm__throw_terminate(shared_stack.current_exception);
     153        __cfaehm__throw_termination(&shared_stack.current_exception);
    154154}
    155155
     
    261261                                        // _Unwind_Reason_Code (*matcher)() = (_Unwind_Reason_Code (*)())lsd_info.LPStart + imatcher;                                   
    262262
    263                                         _Unwind_Reason_Code (*matcher)() =
     263                                        _Unwind_Reason_Code (*matcher)(exception *) =
    264264                                                MATCHER_FROM_CONTEXT(context);
    265                                         int index = matcher(shared_stack.current_exception);
     265                                        int index = matcher(&shared_stack.current_exception);
    266266                                        _Unwind_Reason_Code ret = (0 == index)
    267267                                                ? _URC_CONTINUE_UNWIND : _URC_HANDLER_FOUND;
     
    322322// for details
    323323__attribute__((noinline))
    324 void __try_terminate(void (*try_block)(),
    325                 void (*catch_block)(int index, exception except),
    326                 __attribute__((unused)) int (*match_block)(exception except)) {
     324void __cfaehm__try_terminate(void (*try_block)(),
     325                void (*catch_block)(int index, exception * except),
     326                __attribute__((unused)) int (*match_block)(exception * except)) {
    327327        //! volatile int xy = 0;
    328328        //! printf("%p %p %p %p\n", &try_block, &catch_block, &match_block, &xy);
     
    364364        // Exception handler
    365365        catch_block(shared_stack.current_handler_index,
    366                     shared_stack.current_exception);
     366                    &shared_stack.current_exception);
    367367}
    368368
     
    384384        // Body uses language specific data and therefore could be modified arbitrarily
    385385        ".LLSDACSBCFA2:\n"                                              // BODY start
    386         "       .uleb128 .TRYSTART-__try_terminate\n"           // Handled area start  (relative to start of function)
     386        "       .uleb128 .TRYSTART-__cfaehm__try_terminate\n"           // Handled area start  (relative to start of function)
    387387        "       .uleb128 .TRYEND-.TRYSTART\n"                           // Handled area length
    388         "       .uleb128 .CATCH-__try_terminate\n"                              // Hanlder landing pad adress  (relative to start of function)
     388        "       .uleb128 .CATCH-__cfaehm__try_terminate\n"                              // Hanlder landing pad adress  (relative to start of function)
    389389        "       .uleb128 1\n"                                           // Action code, gcc seems to use always 0
    390390        ".LLSDACSECFA2:\n"                                              // BODY end
    391391        "       .text\n"                                                        // TABLE footer
    392         "       .size   __try_terminate, .-__try_terminate\n"
     392        "       .size   __cfaehm__try_terminate, .-__cfaehm__try_terminate\n"
    393393        "       .ident  \"GCC: (Ubuntu 6.2.0-3ubuntu11~16.04) 6.2.0 20160901\"\n"
    394394//      "       .section        .note.GNU-stack,\"x\",@progbits\n"
  • TabularUnified src/libcfa/exception.h

    rb1e63ac5 r208e5be  
    3838// Data structure creates a list of resume handlers.
    3939struct __cfaehm__try_resume_node {
    40     __cfaehm__try_resume_node * next;
     40    struct __cfaehm__try_resume_node * next;
    4141    int (*handler)(exception * except);
    4242};
    4343
    4444void __cfaehm__try_resume_setup(
    45     __cfaehm__try_resume_node * node,
     45    struct __cfaehm__try_resume_node * node,
    4646    int (*handler)(exception * except));
    4747void __cfaehm__try_resume_cleanup(
    48     __cfaehm__try_resume_node * node);
     48    struct __cfaehm__try_resume_node * node);
    4949
    5050// Check for a standard way to call fake deconstructors.
  • TabularUnified src/libcfa/fstream

    rb1e63ac5 r208e5be  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon May 15 18:11:09 2017
    13 // Update Count     : 104
     12// Last Modified On : Sat Jul  1 16:37:53 2017
     13// Update Count     : 112
    1414//
    1515
     
    2424        _Bool sepDefault;
    2525        _Bool sepOnOff;
     26        _Bool lastSepOn;
    2627        const char * sepCur;
    2728        char separator[separateSize];
     
    3536const char * sepGetCur( ofstream * );
    3637void sepSetCur( ofstream *, const char * );
     38_Bool lastSepOn( ofstream * );
    3739
    3840// public
  • TabularUnified src/libcfa/fstream.c

    rb1e63ac5 r208e5be  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon May 15 18:11:11 2017
    13 // Update Count     : 234
     12// Last Modified On : Sat Jul  1 16:37:54 2017
     13// Update Count     : 242
    1414//
    1515
     
    3333        this->sepDefault = sepDefault;
    3434        this->sepOnOff = sepOnOff;
     35        this->lastSepOn = false;
    3536        sepSet( this, separator );
    3637        sepSetCur( this, sepGet( this ) );
     
    3940
    4041// private
    41 _Bool sepPrt( ofstream * os ) { return os->sepOnOff; }
     42_Bool lastSepOn( ofstream * os ) { return os->lastSepOn; }
     43_Bool sepPrt( ofstream * os ) { os->lastSepOn = false; return os->sepOnOff; }
    4244void sepReset( ofstream * os ) { os->sepOnOff = os->sepDefault; }
    4345void sepReset( ofstream * os, _Bool reset ) { os->sepDefault = reset; os->sepOnOff = os->sepDefault; }
     
    4648
    4749// public
    48 void sepOn( ofstream * os ) { os->sepOnOff = 1; }
    49 void sepOff( ofstream * os ) { os->sepOnOff = 0; }
     50void sepOn( ofstream * os ) { os->lastSepOn = true; os->sepOnOff = true; }
     51void sepOff( ofstream * os ) { os->lastSepOn = false; os->sepOnOff = 0; }
    5052
    5153_Bool sepDisable( ofstream *os ) {
    5254        _Bool temp = os->sepDefault;
    5355        os->sepDefault = false;
     56        os->lastSepOn = false;
    5457        sepReset( os );
    5558        return temp;
     
    9295                exit( EXIT_FAILURE );
    9396        } // if
    94         ?{}( os, file, 1, 0, " ", ", " );
     97        ?{}( os, file, true, false, " ", ", " );
    9598} // open
    9699
     
    132135} // fmt
    133136
    134 static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), 1, 0, " ", ", " };
     137static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), true, false, " ", ", " };
    135138ofstream *sout = &soutFile;
    136 static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), 1, 0, " ", ", " };
     139static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), true, false, " ", ", " };
    137140ofstream *serr = &serrFile;
    138141
  • TabularUnified src/libcfa/iostream

    rb1e63ac5 r208e5be  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon May 15 18:08:44 2017
    13 // Update Count     : 105
     12// Last Modified On : Sun Jul  2 08:42:56 2017
     13// Update Count     : 110
    1414//
    1515
     
    2626        const char * sepGetCur( ostype * );                                     // get current separator string
    2727        void sepSetCur( ostype *, const char * );                       // set current separator string
     28        _Bool lastSepOn( ostype * );                                            // last manipulator is setOn (context sensitive)
    2829        // public
    2930        void sepOn( ostype * );                                                         // turn separator state on
     
    4344        ostype * write( ostype *, const char *, unsigned long int );
    4445        int fmt( ostype *, const char fmt[], ... );
    45 };
     46}; // ostream
    4647
    4748trait writeable( otype T ) {
    4849        forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, T );
    49 };
     50}; // writeable
    5051
    5152// implement writable for intrinsic types
     
    103104        istype * ungetc( istype *, char );
    104105        int fmt( istype *, const char fmt[], ... );
    105 };
     106}; // istream
    106107
    107108trait readable( otype T ) {
    108109        forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, T );
    109 };
     110}; // readable
    110111
    111112forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, char * );
  • TabularUnified src/libcfa/iostream.c

    rb1e63ac5 r208e5be  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon May  8 18:24:23 2017
    13 // Update Count     : 369
     12// Last Modified On : Sun Jul  2 08:54:02 2017
     13// Update Count     : 375
    1414//
    1515
     
    201201forall( dtype ostype, otype T, ttype Params | ostream( ostype ) | writeable( T ) | { ostype * ?|?( ostype *, Params ); } )
    202202ostype * ?|?( ostype * os, T arg, Params rest ) {
     203        os | arg;                                                                                       // print first argument
    203204        sepSetCur( os, sepGetTuple( os ) );                                     // switch to tuple separator
    204         os | arg;                                                                                       // print first argument
    205205        os | rest;                                                                                      // print remaining arguments
    206206        sepSetCur( os, sepGet( os ) );                                          // switch to regular separator
     
    217217forall( dtype ostype | ostream( ostype ) )
    218218ostype * endl( ostype * os ) {
     219        if ( lastSepOn( os ) ) fmt( os, "%s", sepGetCur( os ) );
    219220        os | '\n';
    220221        flush( os );
  • TabularUnified src/main.cc

    rb1e63ac5 r208e5be  
    2525using namespace std;
    2626
    27 #include "Parser/parser.hh"
     27#include "Parser/ParserTypes.h"
    2828#include "Parser/TypedefTable.h"
    2929#include "GenPoly/Lvalue.h"
     
    3939#include "CodeTools/TrackLoc.h"
    4040#include "ControlStruct/Mutate.h"
     41#include "ControlStruct/ExceptTranslate.h"
    4142#include "SymTab/Validate.h"
    4243#include "ResolvExpr/AlternativePrinter.h"
     
    290291                Tuples::expandUniqueExpr( translationUnit );
    291292
     293                OPTPRINT( "translateEHM" );
     294                ControlStruct::translateEHM( translationUnit );
     295
    292296                OPTPRINT( "convertSpecializations" ) // needs to happen before tuple types are expanded
    293297                GenPoly::convertSpecializations( translationUnit );
  • TabularUnified src/prelude/Makefile.am

    rb1e63ac5 r208e5be  
    2323noinst_DATA = ../libcfa/libcfa-prelude.c
    2424
     25CC = ${abs_top_srcdir}/src/driver/cfa
     26
    2527$(DEPDIR) :
    2628        mkdir $(DEPDIR)
     
    4547
    4648# create forward declarations for cfa builtins
    47 builtins.cf : builtins.c
    48         ${AM_V_GEN}@BACKEND_CC@ -E -P ${<} -o ${@} -MD -MP -MF $(DEPDIR)/builtins.Po
     49builtins.cf : builtins.c ${CC}
     50        ${AM_V_GEN}${CC} -E -P ${<} -o ${@} -MD -MP -MF $(DEPDIR)/builtins.Po
    4951        ${AM_V_at}sed -i 's/builtins.o/builtins.cf/g' $(DEPDIR)/builtins.Po
    5052
  • TabularUnified src/prelude/Makefile.in

    rb1e63ac5 r208e5be  
    1 # Makefile.in generated by automake 1.11.3 from Makefile.am.
     1# Makefile.in generated by automake 1.15 from Makefile.am.
    22# @configure_input@
    33
    4 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
    5 # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
    6 # Foundation, Inc.
     4# Copyright (C) 1994-2014 Free Software Foundation, Inc.
     5
    76# This Makefile.in is free software; the Free Software Foundation
    87# gives unlimited permission to copy and/or distribute it,
     
    2019
    2120VPATH = @srcdir@
     21am__is_gnu_make = { \
     22  if test -z '$(MAKELEVEL)'; then \
     23    false; \
     24  elif test -n '$(MAKE_HOST)'; then \
     25    true; \
     26  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
     27    true; \
     28  else \
     29    false; \
     30  fi; \
     31}
     32am__make_running_with_option = \
     33  case $${target_option-} in \
     34      ?) ;; \
     35      *) echo "am__make_running_with_option: internal error: invalid" \
     36              "target option '$${target_option-}' specified" >&2; \
     37         exit 1;; \
     38  esac; \
     39  has_opt=no; \
     40  sane_makeflags=$$MAKEFLAGS; \
     41  if $(am__is_gnu_make); then \
     42    sane_makeflags=$$MFLAGS; \
     43  else \
     44    case $$MAKEFLAGS in \
     45      *\\[\ \   ]*) \
     46        bs=\\; \
     47        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
     48          | sed "s/$$bs$$bs[$$bs $$bs   ]*//g"`;; \
     49    esac; \
     50  fi; \
     51  skip_next=no; \
     52  strip_trailopt () \
     53  { \
     54    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
     55  }; \
     56  for flg in $$sane_makeflags; do \
     57    test $$skip_next = yes && { skip_next=no; continue; }; \
     58    case $$flg in \
     59      *=*|--*) continue;; \
     60        -*I) strip_trailopt 'I'; skip_next=yes;; \
     61      -*I?*) strip_trailopt 'I';; \
     62        -*O) strip_trailopt 'O'; skip_next=yes;; \
     63      -*O?*) strip_trailopt 'O';; \
     64        -*l) strip_trailopt 'l'; skip_next=yes;; \
     65      -*l?*) strip_trailopt 'l';; \
     66      -[dEDm]) skip_next=yes;; \
     67      -[JT]) skip_next=yes;; \
     68    esac; \
     69    case $$flg in \
     70      *$$target_option*) has_opt=yes; break;; \
     71    esac; \
     72  done; \
     73  test $$has_opt = yes
     74am__make_dryrun = (target_option=n; $(am__make_running_with_option))
     75am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
    2276pkgdatadir = $(datadir)/@PACKAGE@
    2377pkgincludedir = $(includedir)/@PACKAGE@
     
    3993host_triplet = @host@
    4094subdir = src/prelude
    41 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
    4295ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    4396am__aclocal_m4_deps = $(top_srcdir)/configure.ac
    4497am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    4598        $(ACLOCAL_M4)
     99DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
    46100mkinstalldirs = $(install_sh) -d
    47101CONFIG_HEADER = $(top_builddir)/config.h
    48102CONFIG_CLEAN_FILES =
    49103CONFIG_CLEAN_VPATH_FILES =
     104AM_V_P = $(am__v_P_@AM_V@)
     105am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
     106am__v_P_0 = false
     107am__v_P_1 = :
    50108AM_V_GEN = $(am__v_GEN_@AM_V@)
    51109am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
    52 am__v_GEN_0 = @echo "  GEN   " $@;
     110am__v_GEN_0 = @echo "  GEN     " $@;
     111am__v_GEN_1 =
    53112AM_V_at = $(am__v_at_@AM_V@)
    54113am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
    55114am__v_at_0 = @
     115am__v_at_1 =
    56116SOURCES =
    57117DIST_SOURCES =
     118am__can_run_installinfo = \
     119  case $$AM_UPDATE_INFO_DIR in \
     120    n|no|NO) false;; \
     121    *) (install-info --version) >/dev/null 2>&1;; \
     122  esac
    58123am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
    59124am__vpath_adj = case $$p in \
     
    85150am__installdirs = "$(DESTDIR)$(cfalibdir)"
    86151DATA = $(cfalib_DATA) $(noinst_DATA)
     152am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
     153am__DIST_COMMON = $(srcdir)/Makefile.in
    87154DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
    88155ACLOCAL = @ACLOCAL@
     
    95162AWK = @AWK@
    96163BACKEND_CC = @BACKEND_CC@
    97 CC = @CC@
     164CC = ${abs_top_srcdir}/src/driver/cfa
    98165CCAS = @CCAS@
    99166CCASDEPMODE = @CCASDEPMODE@
     
    197264program_transform_name = @program_transform_name@
    198265psdir = @psdir@
     266runstatedir = @runstatedir@
    199267sbindir = @sbindir@
    200268sharedstatedir = @sharedstatedir@
     
    226294          esac; \
    227295        done; \
    228         echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/prelude/Makefile'; \
     296        echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/prelude/Makefile'; \
    229297        $(am__cd) $(top_srcdir) && \
    230           $(AUTOMAKE) --foreign src/prelude/Makefile
    231 .PRECIOUS: Makefile
     298          $(AUTOMAKE) --gnu src/prelude/Makefile
    232299Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
    233300        @case '$?' in \
     
    249316install-cfalibDATA: $(cfalib_DATA)
    250317        @$(NORMAL_INSTALL)
    251         test -z "$(cfalibdir)" || $(MKDIR_P) "$(DESTDIR)$(cfalibdir)"
    252318        @list='$(cfalib_DATA)'; test -n "$(cfalibdir)" || list=; \
     319        if test -n "$$list"; then \
     320          echo " $(MKDIR_P) '$(DESTDIR)$(cfalibdir)'"; \
     321          $(MKDIR_P) "$(DESTDIR)$(cfalibdir)" || exit 1; \
     322        fi; \
    253323        for p in $$list; do \
    254324          if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
     
    265335        files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
    266336        dir='$(DESTDIR)$(cfalibdir)'; $(am__uninstall_files_from_dir)
    267 tags: TAGS
    268 TAGS:
    269 
    270 ctags: CTAGS
    271 CTAGS:
     337tags TAGS:
     338
     339ctags CTAGS:
     340
     341cscope cscopelist:
    272342
    273343
     
    409479.MAKE: install-am install-strip
    410480
    411 .PHONY: all all-am check check-am clean clean-generic distclean \
    412         distclean-generic distdir dvi dvi-am html html-am info info-am \
    413         install install-am install-cfalibDATA install-data \
    414         install-data-am install-dvi install-dvi-am install-exec \
    415         install-exec-am install-html install-html-am install-info \
    416         install-info-am install-man install-pdf install-pdf-am \
    417         install-ps install-ps-am install-strip installcheck \
    418         installcheck-am installdirs maintainer-clean \
     481.PHONY: all all-am check check-am clean clean-generic cscopelist-am \
     482        ctags-am distclean distclean-generic distdir dvi dvi-am html \
     483        html-am info info-am install install-am install-cfalibDATA \
     484        install-data install-data-am install-dvi install-dvi-am \
     485        install-exec install-exec-am install-html install-html-am \
     486        install-info install-info-am install-man install-pdf \
     487        install-pdf-am install-ps install-ps-am install-strip \
     488        installcheck installcheck-am installdirs maintainer-clean \
    419489        maintainer-clean-generic maintainer-clean-local mostlyclean \
    420         mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \
    421         uninstall-cfalibDATA
     490        mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \
     491        uninstall-am uninstall-cfalibDATA
     492
     493.PRECIOUS: Makefile
    422494
    423495
     
    444516
    445517# create forward declarations for cfa builtins
    446 builtins.cf : builtins.c
    447         ${AM_V_GEN}@BACKEND_CC@ -E -P ${<} -o ${@} -MD -MP -MF $(DEPDIR)/builtins.Po
     518builtins.cf : builtins.c ${CC}
     519        ${AM_V_GEN}${CC} -E -P ${<} -o ${@} -MD -MP -MF $(DEPDIR)/builtins.Po
    448520        ${AM_V_at}sed -i 's/builtins.o/builtins.cf/g' $(DEPDIR)/builtins.Po
    449521
  • TabularUnified src/tests/.expect/io.txt

    rb1e63ac5 r208e5be  
    44123
    55
     6opening delimiters
    67x (1 x [2 x {3 x =4 x $5 x £6 x ¥7 x ¡8 x ¿9 x «10
    7 1, x 2. x 3; x 4! x 5? x 6% x 7¢ x 8» x 9) x 10] x 11} x
     8
     9closing delimiters
     101, x 2. x 3; x 4! x 5? x 6% x 7¢ x 8» x 9) x 10] x 11} x
     11
     12opening/closing delimiters
    813x`1`x'2'x"3"x:4:x 5 x   6       x
    9147
     
    1419x
    152010
    16 x
     21x
     22
     23override opening/closing delimiters
    1724x ( 1 ) x 2 , x 3 :x: 4
     25
     26input bacis types
     27
     28output basic types
    1829A
    19301 2 3 4 5 6 7 8
     
    21321.1+2.3i 1.1-2.3i 1.1-2.3i
    2233
     34tuples
     351, 2, 3 3, 4, 5
     36
     37toggle separator
    23381.11.21.3
    24391.1+2.3i1.1-2.3i1.1-2.3i
    25  abcxyz
    26 abcxyz
     40 abcxyz 
     41abcxyz 
    2742
     43change separator
     44from "  "to " , $"
    28451.1, $1.2, $1.3
    29461.1+2.3i, $1.1-2.3i, $1.1-2.3i
    30 abc, $xyz
     47abc, $xyz, $
     481, 2, 3, $3, 4, 5
    3149
    32 1, 2, 3, 4
    33 1, $2, $3 ", $"
    34 1 2 3 " "
     50from ", $"to " "
     511.1 1.2 1.3
     521.1+2.3i 1.1-2.3i 1.1-2.3i
     53abc xyz
     541, 2, 3 3, 4, 5
     55
     56 1 2 3
     5712 3
    3558 1 2 3
    36 12 3
     591 2 3
     60 1 2 3
     61
    3762123
    38631 23
    39641 2 3
    40 1 2 3 4 " "
    41 1, 2, 3, 4 ", "
    42 1, 2, 3, 4
     65123
     661 2 3
     67123
     681 2 3
     69
     701 2 3 3 4 5 " "
     711, 2, 3 3, 4, 5 ", "
     721, 2, 3 3, 4, 5
     73
    43743, 4, a, 7.2
    44753, 4, a, 7.2
    45763 4 a 7.2
    4677 3 4 a 7.234a7.23 4 a 7.2
    47 3-4-a-7.2^3^4-3-4-a-7.2
     783-4-a-7.2^3^4^3-4-a-7.2
  • TabularUnified src/tests/Makefile.am

    rb1e63ac5 r208e5be  
    3232BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ ${EXTRA_FLAGS}
    3333TEST_FLAGS = $(if $(test), 2> .err/${@}.log, )
    34 CFLAGS = ${TEST_FLAGS} ${BUILD_FLAGS}
     34AM_CFLAGS = ${TEST_FLAGS} ${BUILD_FLAGS}
    3535CC = @CFA_BINDIR@/@CFA_NAME@
    3636
     
    3939
    4040fstream_test_SOURCES = fstream_test.c
     41fstream_test_CFLAGS = $(if $(test), 2>> .err/fstream_test.log, ) ${BUILD_FLAGS}
     42
    4143vector_test_SOURCES = vector/vector_int.c vector/array.c vector/vector_test.c
     44vector_test_CFLAGS = $(if $(test), 2>> .err/vector_test.log, ) ${BUILD_FLAGS}
     45
    4246avl_test_SOURCES = avltree/avl_test.c avltree/avl0.c avltree/avl1.c avltree/avl2.c avltree/avl3.c avltree/avl4.c avltree/avl-private.c
     47avl_test_CFLAGS = $(if $(test), 2>> .err/avl_test.log, ) ${BUILD_FLAGS}
    4348
    4449all-local :
     
    6267
    6368% : %.c @CFA_BINDIR@/@CFA_NAME@
    64         ${CC} ${CFLAGS} ${<} -o ${@}
     69        ${CC} ${AM_CFLAGS} ${CFLAGS} ${<} -o ${@}
    6570
    6671dtor-early-exit-ERR1: dtor-early-exit.c @CFA_BINDIR@/@CFA_NAME@
    67         ${CC} ${CFLAGS} -DERR1 ${<} -o ${@}
     72        ${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@}
    6873
    6974dtor-early-exit-ERR2: dtor-early-exit.c @CFA_BINDIR@/@CFA_NAME@
    70         ${CC} ${CFLAGS} -DERR2 ${<} -o ${@}
     75        ${CC} ${AM_CFLAGS} ${CFLAGS} -DERR2 ${<} -o ${@}
    7176
    7277declarationSpecifier: declarationSpecifier.c @CFA_BINDIR@/@CFA_NAME@
    73         ${CC} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
     78        ${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
    7479
    7580gccExtensions : gccExtensions.c @CFA_BINDIR@/@CFA_NAME@
    76         ${CC} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
     81        ${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
    7782
    7883extension : extension.c @CFA_BINDIR@/@CFA_NAME@
    79         ${CC} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
     84        ${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
    8085
    8186attributes : attributes.c @CFA_BINDIR@/@CFA_NAME@
    82         ${CC} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
     87        ${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
    8388
    8489KRfunctions : KRfunctions.c @CFA_BINDIR@/@CFA_NAME@
    85         ${CC} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
     90        ${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
    8691
    8792gmp : gmp.c @CFA_BINDIR@/@CFA_NAME@
    88         ${CC} ${CFLAGS} -lgmp ${<} -o ${@}
     93        ${CC} ${AM_CFLAGS} ${CFLAGS} -lgmp ${<} -o ${@}
    8994
    9095memberCtors-ERR1: memberCtors.c @CFA_BINDIR@/@CFA_NAME@
    91         ${CC} ${CFLAGS} -DERR1 ${<} -o ${@}
     96        ${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@}
    9297
    9398completeTypeError : completeTypeError.c @CFA_BINDIR@/@CFA_NAME@
    94         ${CC} ${CFLAGS} -DERR1 ${<} -o ${@}
     99        ${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@}
  • TabularUnified src/tests/Makefile.in

    rb1e63ac5 r208e5be  
    1 # Makefile.in generated by automake 1.11.3 from Makefile.am.
     1# Makefile.in generated by automake 1.15 from Makefile.am.
    22# @configure_input@
    33
    4 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
    5 # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
    6 # Foundation, Inc.
     4# Copyright (C) 1994-2014 Free Software Foundation, Inc.
     5
    76# This Makefile.in is free software; the Free Software Foundation
    87# gives unlimited permission to copy and/or distribute it,
     
    1918###############################################################################
    2019VPATH = @srcdir@
     20am__is_gnu_make = { \
     21  if test -z '$(MAKELEVEL)'; then \
     22    false; \
     23  elif test -n '$(MAKE_HOST)'; then \
     24    true; \
     25  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
     26    true; \
     27  else \
     28    false; \
     29  fi; \
     30}
     31am__make_running_with_option = \
     32  case $${target_option-} in \
     33      ?) ;; \
     34      *) echo "am__make_running_with_option: internal error: invalid" \
     35              "target option '$${target_option-}' specified" >&2; \
     36         exit 1;; \
     37  esac; \
     38  has_opt=no; \
     39  sane_makeflags=$$MAKEFLAGS; \
     40  if $(am__is_gnu_make); then \
     41    sane_makeflags=$$MFLAGS; \
     42  else \
     43    case $$MAKEFLAGS in \
     44      *\\[\ \   ]*) \
     45        bs=\\; \
     46        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
     47          | sed "s/$$bs$$bs[$$bs $$bs   ]*//g"`;; \
     48    esac; \
     49  fi; \
     50  skip_next=no; \
     51  strip_trailopt () \
     52  { \
     53    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
     54  }; \
     55  for flg in $$sane_makeflags; do \
     56    test $$skip_next = yes && { skip_next=no; continue; }; \
     57    case $$flg in \
     58      *=*|--*) continue;; \
     59        -*I) strip_trailopt 'I'; skip_next=yes;; \
     60      -*I?*) strip_trailopt 'I';; \
     61        -*O) strip_trailopt 'O'; skip_next=yes;; \
     62      -*O?*) strip_trailopt 'O';; \
     63        -*l) strip_trailopt 'l'; skip_next=yes;; \
     64      -*l?*) strip_trailopt 'l';; \
     65      -[dEDm]) skip_next=yes;; \
     66      -[JT]) skip_next=yes;; \
     67    esac; \
     68    case $$flg in \
     69      *$$target_option*) has_opt=yes; break;; \
     70    esac; \
     71  done; \
     72  test $$has_opt = yes
     73am__make_dryrun = (target_option=n; $(am__make_running_with_option))
     74am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
    2175pkgdatadir = $(datadir)/@PACKAGE@
    2276pkgincludedir = $(includedir)/@PACKAGE@
     
    4195        avl_test$(EXEEXT)
    4296subdir = src/tests
    43 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
    4497ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    4598am__aclocal_m4_deps = $(top_srcdir)/configure.ac
    4699am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    47100        $(ACLOCAL_M4)
     101DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
    48102mkinstalldirs = $(install_sh) -d
    49103CONFIG_HEADER = $(top_builddir)/config.h
    50104CONFIG_CLEAN_FILES =
    51105CONFIG_CLEAN_VPATH_FILES =
    52 am_avl_test_OBJECTS = avl_test.$(OBJEXT) avl0.$(OBJEXT) avl1.$(OBJEXT) \
    53         avl2.$(OBJEXT) avl3.$(OBJEXT) avl4.$(OBJEXT) \
    54         avl-private.$(OBJEXT)
     106am__dirstamp = $(am__leading_dot)dirstamp
     107am_avl_test_OBJECTS = avltree/avl_test-avl_test.$(OBJEXT) \
     108        avltree/avl_test-avl0.$(OBJEXT) \
     109        avltree/avl_test-avl1.$(OBJEXT) \
     110        avltree/avl_test-avl2.$(OBJEXT) \
     111        avltree/avl_test-avl3.$(OBJEXT) \
     112        avltree/avl_test-avl4.$(OBJEXT) \
     113        avltree/avl_test-avl-private.$(OBJEXT)
    55114avl_test_OBJECTS = $(am_avl_test_OBJECTS)
    56115avl_test_LDADD = $(LDADD)
    57 am_fstream_test_OBJECTS = fstream_test.$(OBJEXT)
     116avl_test_LINK = $(CCLD) $(avl_test_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
     117        $(LDFLAGS) -o $@
     118am_fstream_test_OBJECTS = fstream_test-fstream_test.$(OBJEXT)
    58119fstream_test_OBJECTS = $(am_fstream_test_OBJECTS)
    59120fstream_test_LDADD = $(LDADD)
    60 am_vector_test_OBJECTS = vector_int.$(OBJEXT) array.$(OBJEXT) \
    61         vector_test.$(OBJEXT)
     121fstream_test_LINK = $(CCLD) $(fstream_test_CFLAGS) $(CFLAGS) \
     122        $(AM_LDFLAGS) $(LDFLAGS) -o $@
     123am_vector_test_OBJECTS = vector/vector_test-vector_int.$(OBJEXT) \
     124        vector/vector_test-array.$(OBJEXT) \
     125        vector/vector_test-vector_test.$(OBJEXT)
    62126vector_test_OBJECTS = $(am_vector_test_OBJECTS)
    63127vector_test_LDADD = $(LDADD)
     128vector_test_LINK = $(CCLD) $(vector_test_CFLAGS) $(CFLAGS) \
     129        $(AM_LDFLAGS) $(LDFLAGS) -o $@
     130AM_V_P = $(am__v_P_@AM_V@)
     131am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
     132am__v_P_0 = false
     133am__v_P_1 = :
     134AM_V_GEN = $(am__v_GEN_@AM_V@)
     135am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
     136am__v_GEN_0 = @echo "  GEN     " $@;
     137am__v_GEN_1 =
     138AM_V_at = $(am__v_at_@AM_V@)
     139am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
     140am__v_at_0 = @
     141am__v_at_1 =
    64142DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
    65143depcomp = $(SHELL) $(top_srcdir)/automake/depcomp
     
    69147am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
    70148am__v_lt_0 = --silent
     149am__v_lt_1 =
    71150COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
    72151        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
    73152AM_V_CC = $(am__v_CC_@AM_V@)
    74153am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
    75 am__v_CC_0 = @echo "  CC    " $@;
    76 AM_V_at = $(am__v_at_@AM_V@)
    77 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
    78 am__v_at_0 = @
     154am__v_CC_0 = @echo "  CC      " $@;
     155am__v_CC_1 =
    79156CCLD = $(CC)
    80157LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
    81158AM_V_CCLD = $(am__v_CCLD_@AM_V@)
    82159am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
    83 am__v_CCLD_0 = @echo "  CCLD  " $@;
    84 AM_V_GEN = $(am__v_GEN_@AM_V@)
    85 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
    86 am__v_GEN_0 = @echo "  GEN   " $@;
     160am__v_CCLD_0 = @echo "  CCLD    " $@;
     161am__v_CCLD_1 =
    87162SOURCES = $(avl_test_SOURCES) $(fstream_test_SOURCES) \
    88163        $(vector_test_SOURCES)
    89164DIST_SOURCES = $(avl_test_SOURCES) $(fstream_test_SOURCES) \
    90165        $(vector_test_SOURCES)
     166am__can_run_installinfo = \
     167  case $$AM_UPDATE_INFO_DIR in \
     168    n|no|NO) false;; \
     169    *) (install-info --version) >/dev/null 2>&1;; \
     170  esac
     171am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
     172# Read a list of newline-separated strings from the standard input,
     173# and print each of them once, without duplicates.  Input order is
     174# *not* preserved.
     175am__uniquify_input = $(AWK) '\
     176  BEGIN { nonempty = 0; } \
     177  { items[$$0] = 1; nonempty = 1; } \
     178  END { if (nonempty) { for (i in items) print i; }; } \
     179'
     180# Make sure the list of sources is unique.  This is necessary because,
     181# e.g., the same source file might be shared among _SOURCES variables
     182# for different programs/libraries.
     183am__define_uniq_tagged_files = \
     184  list='$(am__tagged_files)'; \
     185  unique=`for i in $$list; do \
     186    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
     187  done | $(am__uniquify_input)`
    91188ETAGS = etags
    92189CTAGS = ctags
     190am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/automake/depcomp
    93191DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
    94192ACLOCAL = @ACLOCAL@
     
    113211CFA_NAME = @CFA_NAME@
    114212CFA_PREFIX = @CFA_PREFIX@
    115 CFLAGS = ${TEST_FLAGS} ${BUILD_FLAGS}
     213CFLAGS = @CFLAGS@
    116214CPP = @CPP@
    117215CPPFLAGS = @CPPFLAGS@
     
    203301program_transform_name = @program_transform_name@
    204302psdir = @psdir@
     303runstatedir = @runstatedir@
    205304sbindir = @sbindir@
    206305sharedstatedir = @sharedstatedir@
     
    224323BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ ${EXTRA_FLAGS}
    225324TEST_FLAGS = $(if $(test), 2> .err/${@}.log, )
     325AM_CFLAGS = ${TEST_FLAGS} ${BUILD_FLAGS}
    226326fstream_test_SOURCES = fstream_test.c
     327fstream_test_CFLAGS = $(if $(test), 2>> .err/fstream_test.log, ) ${BUILD_FLAGS}
    227328vector_test_SOURCES = vector/vector_int.c vector/array.c vector/vector_test.c
     329vector_test_CFLAGS = $(if $(test), 2>> .err/vector_test.log, ) ${BUILD_FLAGS}
    228330avl_test_SOURCES = avltree/avl_test.c avltree/avl0.c avltree/avl1.c avltree/avl2.c avltree/avl3.c avltree/avl4.c avltree/avl-private.c
     331avl_test_CFLAGS = $(if $(test), 2>> .err/avl_test.log, ) ${BUILD_FLAGS}
    229332all: all-am
    230333
     
    240343          esac; \
    241344        done; \
    242         echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/tests/Makefile'; \
     345        echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/tests/Makefile'; \
    243346        $(am__cd) $(top_srcdir) && \
    244           $(AUTOMAKE) --foreign src/tests/Makefile
    245 .PRECIOUS: Makefile
     347          $(AUTOMAKE) --gnu src/tests/Makefile
    246348Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
    247349        @case '$?' in \
     
    261363        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
    262364$(am__aclocal_m4_deps):
     365avltree/$(am__dirstamp):
     366        @$(MKDIR_P) avltree
     367        @: > avltree/$(am__dirstamp)
     368avltree/$(DEPDIR)/$(am__dirstamp):
     369        @$(MKDIR_P) avltree/$(DEPDIR)
     370        @: > avltree/$(DEPDIR)/$(am__dirstamp)
     371avltree/avl_test-avl_test.$(OBJEXT): avltree/$(am__dirstamp) \
     372        avltree/$(DEPDIR)/$(am__dirstamp)
     373avltree/avl_test-avl0.$(OBJEXT): avltree/$(am__dirstamp) \
     374        avltree/$(DEPDIR)/$(am__dirstamp)
     375avltree/avl_test-avl1.$(OBJEXT): avltree/$(am__dirstamp) \
     376        avltree/$(DEPDIR)/$(am__dirstamp)
     377avltree/avl_test-avl2.$(OBJEXT): avltree/$(am__dirstamp) \
     378        avltree/$(DEPDIR)/$(am__dirstamp)
     379avltree/avl_test-avl3.$(OBJEXT): avltree/$(am__dirstamp) \
     380        avltree/$(DEPDIR)/$(am__dirstamp)
     381avltree/avl_test-avl4.$(OBJEXT): avltree/$(am__dirstamp) \
     382        avltree/$(DEPDIR)/$(am__dirstamp)
     383avltree/avl_test-avl-private.$(OBJEXT): avltree/$(am__dirstamp) \
     384        avltree/$(DEPDIR)/$(am__dirstamp)
     385
    263386avl_test$(EXEEXT): $(avl_test_OBJECTS) $(avl_test_DEPENDENCIES) $(EXTRA_avl_test_DEPENDENCIES)
    264387        @rm -f avl_test$(EXEEXT)
    265         $(AM_V_CCLD)$(LINK) $(avl_test_OBJECTS) $(avl_test_LDADD) $(LIBS)
     388        $(AM_V_CCLD)$(avl_test_LINK) $(avl_test_OBJECTS) $(avl_test_LDADD) $(LIBS)
     389
    266390fstream_test$(EXEEXT): $(fstream_test_OBJECTS) $(fstream_test_DEPENDENCIES) $(EXTRA_fstream_test_DEPENDENCIES)
    267391        @rm -f fstream_test$(EXEEXT)
    268         $(AM_V_CCLD)$(LINK) $(fstream_test_OBJECTS) $(fstream_test_LDADD) $(LIBS)
     392        $(AM_V_CCLD)$(fstream_test_LINK) $(fstream_test_OBJECTS) $(fstream_test_LDADD) $(LIBS)
     393vector/$(am__dirstamp):
     394        @$(MKDIR_P) vector
     395        @: > vector/$(am__dirstamp)
     396vector/$(DEPDIR)/$(am__dirstamp):
     397        @$(MKDIR_P) vector/$(DEPDIR)
     398        @: > vector/$(DEPDIR)/$(am__dirstamp)
     399vector/vector_test-vector_int.$(OBJEXT): vector/$(am__dirstamp) \
     400        vector/$(DEPDIR)/$(am__dirstamp)
     401vector/vector_test-array.$(OBJEXT): vector/$(am__dirstamp) \
     402        vector/$(DEPDIR)/$(am__dirstamp)
     403vector/vector_test-vector_test.$(OBJEXT): vector/$(am__dirstamp) \
     404        vector/$(DEPDIR)/$(am__dirstamp)
     405
    269406vector_test$(EXEEXT): $(vector_test_OBJECTS) $(vector_test_DEPENDENCIES) $(EXTRA_vector_test_DEPENDENCIES)
    270407        @rm -f vector_test$(EXEEXT)
    271         $(AM_V_CCLD)$(LINK) $(vector_test_OBJECTS) $(vector_test_LDADD) $(LIBS)
     408        $(AM_V_CCLD)$(vector_test_LINK) $(vector_test_OBJECTS) $(vector_test_LDADD) $(LIBS)
    272409
    273410mostlyclean-compile:
    274411        -rm -f *.$(OBJEXT)
     412        -rm -f avltree/*.$(OBJEXT)
     413        -rm -f vector/*.$(OBJEXT)
    275414
    276415distclean-compile:
    277416        -rm -f *.tab.c
    278417
    279 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/array.Po@am__quote@
    280 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl-private.Po@am__quote@
    281 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl0.Po@am__quote@
    282 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl1.Po@am__quote@
    283 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl2.Po@am__quote@
    284 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl3.Po@am__quote@
    285 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl4.Po@am__quote@
    286 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl_test.Po@am__quote@
    287 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fstream_test.Po@am__quote@
    288 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector_int.Po@am__quote@
    289 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector_test.Po@am__quote@
     418@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fstream_test-fstream_test.Po@am__quote@
     419@AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl_test-avl-private.Po@am__quote@
     420@AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl_test-avl0.Po@am__quote@
     421@AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl_test-avl1.Po@am__quote@
     422@AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl_test-avl2.Po@am__quote@
     423@AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl_test-avl3.Po@am__quote@
     424@AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl_test-avl4.Po@am__quote@
     425@AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl_test-avl_test.Po@am__quote@
     426@AMDEP_TRUE@@am__include@ @am__quote@vector/$(DEPDIR)/vector_test-array.Po@am__quote@
     427@AMDEP_TRUE@@am__include@ @am__quote@vector/$(DEPDIR)/vector_test-vector_int.Po@am__quote@
     428@AMDEP_TRUE@@am__include@ @am__quote@vector/$(DEPDIR)/vector_test-vector_test.Po@am__quote@
    290429
    291430.c.o:
    292 @am__fastdepCC_TRUE@    $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
    293 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
     431@am__fastdepCC_TRUE@    $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
     432@am__fastdepCC_TRUE@    $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
     433@am__fastdepCC_TRUE@    $(am__mv) $$depbase.Tpo $$depbase.Po
    294434@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
    295435@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    296 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
     436@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
    297437
    298438.c.obj:
    299 @am__fastdepCC_TRUE@    $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
    300 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
     439@am__fastdepCC_TRUE@    $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
     440@am__fastdepCC_TRUE@    $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
     441@am__fastdepCC_TRUE@    $(am__mv) $$depbase.Tpo $$depbase.Po
    301442@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
    302443@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    303 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
    304 
    305 avl_test.o: avltree/avl_test.c
    306 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl_test.o -MD -MP -MF $(DEPDIR)/avl_test.Tpo -c -o avl_test.o `test -f 'avltree/avl_test.c' || echo '$(srcdir)/'`avltree/avl_test.c
    307 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl_test.Tpo $(DEPDIR)/avl_test.Po
    308 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl_test.c' object='avl_test.o' libtool=no @AMDEPBACKSLASH@
    309 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    310 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl_test.o `test -f 'avltree/avl_test.c' || echo '$(srcdir)/'`avltree/avl_test.c
    311 
    312 avl_test.obj: avltree/avl_test.c
    313 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl_test.obj -MD -MP -MF $(DEPDIR)/avl_test.Tpo -c -o avl_test.obj `if test -f 'avltree/avl_test.c'; then $(CYGPATH_W) 'avltree/avl_test.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl_test.c'; fi`
    314 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl_test.Tpo $(DEPDIR)/avl_test.Po
    315 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl_test.c' object='avl_test.obj' libtool=no @AMDEPBACKSLASH@
    316 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    317 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl_test.obj `if test -f 'avltree/avl_test.c'; then $(CYGPATH_W) 'avltree/avl_test.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl_test.c'; fi`
    318 
    319 avl0.o: avltree/avl0.c
    320 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl0.o -MD -MP -MF $(DEPDIR)/avl0.Tpo -c -o avl0.o `test -f 'avltree/avl0.c' || echo '$(srcdir)/'`avltree/avl0.c
    321 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl0.Tpo $(DEPDIR)/avl0.Po
    322 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl0.c' object='avl0.o' libtool=no @AMDEPBACKSLASH@
    323 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    324 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl0.o `test -f 'avltree/avl0.c' || echo '$(srcdir)/'`avltree/avl0.c
    325 
    326 avl0.obj: avltree/avl0.c
    327 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl0.obj -MD -MP -MF $(DEPDIR)/avl0.Tpo -c -o avl0.obj `if test -f 'avltree/avl0.c'; then $(CYGPATH_W) 'avltree/avl0.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl0.c'; fi`
    328 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl0.Tpo $(DEPDIR)/avl0.Po
    329 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl0.c' object='avl0.obj' libtool=no @AMDEPBACKSLASH@
    330 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    331 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl0.obj `if test -f 'avltree/avl0.c'; then $(CYGPATH_W) 'avltree/avl0.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl0.c'; fi`
    332 
    333 avl1.o: avltree/avl1.c
    334 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl1.o -MD -MP -MF $(DEPDIR)/avl1.Tpo -c -o avl1.o `test -f 'avltree/avl1.c' || echo '$(srcdir)/'`avltree/avl1.c
    335 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl1.Tpo $(DEPDIR)/avl1.Po
    336 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl1.c' object='avl1.o' libtool=no @AMDEPBACKSLASH@
    337 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    338 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl1.o `test -f 'avltree/avl1.c' || echo '$(srcdir)/'`avltree/avl1.c
    339 
    340 avl1.obj: avltree/avl1.c
    341 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl1.obj -MD -MP -MF $(DEPDIR)/avl1.Tpo -c -o avl1.obj `if test -f 'avltree/avl1.c'; then $(CYGPATH_W) 'avltree/avl1.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl1.c'; fi`
    342 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl1.Tpo $(DEPDIR)/avl1.Po
    343 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl1.c' object='avl1.obj' libtool=no @AMDEPBACKSLASH@
    344 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    345 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl1.obj `if test -f 'avltree/avl1.c'; then $(CYGPATH_W) 'avltree/avl1.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl1.c'; fi`
    346 
    347 avl2.o: avltree/avl2.c
    348 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl2.o -MD -MP -MF $(DEPDIR)/avl2.Tpo -c -o avl2.o `test -f 'avltree/avl2.c' || echo '$(srcdir)/'`avltree/avl2.c
    349 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl2.Tpo $(DEPDIR)/avl2.Po
    350 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl2.c' object='avl2.o' libtool=no @AMDEPBACKSLASH@
    351 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    352 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl2.o `test -f 'avltree/avl2.c' || echo '$(srcdir)/'`avltree/avl2.c
    353 
    354 avl2.obj: avltree/avl2.c
    355 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl2.obj -MD -MP -MF $(DEPDIR)/avl2.Tpo -c -o avl2.obj `if test -f 'avltree/avl2.c'; then $(CYGPATH_W) 'avltree/avl2.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl2.c'; fi`
    356 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl2.Tpo $(DEPDIR)/avl2.Po
    357 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl2.c' object='avl2.obj' libtool=no @AMDEPBACKSLASH@
    358 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    359 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl2.obj `if test -f 'avltree/avl2.c'; then $(CYGPATH_W) 'avltree/avl2.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl2.c'; fi`
    360 
    361 avl3.o: avltree/avl3.c
    362 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl3.o -MD -MP -MF $(DEPDIR)/avl3.Tpo -c -o avl3.o `test -f 'avltree/avl3.c' || echo '$(srcdir)/'`avltree/avl3.c
    363 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl3.Tpo $(DEPDIR)/avl3.Po
    364 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl3.c' object='avl3.o' libtool=no @AMDEPBACKSLASH@
    365 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    366 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl3.o `test -f 'avltree/avl3.c' || echo '$(srcdir)/'`avltree/avl3.c
    367 
    368 avl3.obj: avltree/avl3.c
    369 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl3.obj -MD -MP -MF $(DEPDIR)/avl3.Tpo -c -o avl3.obj `if test -f 'avltree/avl3.c'; then $(CYGPATH_W) 'avltree/avl3.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl3.c'; fi`
    370 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl3.Tpo $(DEPDIR)/avl3.Po
    371 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl3.c' object='avl3.obj' libtool=no @AMDEPBACKSLASH@
    372 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    373 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl3.obj `if test -f 'avltree/avl3.c'; then $(CYGPATH_W) 'avltree/avl3.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl3.c'; fi`
    374 
    375 avl4.o: avltree/avl4.c
    376 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl4.o -MD -MP -MF $(DEPDIR)/avl4.Tpo -c -o avl4.o `test -f 'avltree/avl4.c' || echo '$(srcdir)/'`avltree/avl4.c
    377 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl4.Tpo $(DEPDIR)/avl4.Po
    378 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl4.c' object='avl4.o' libtool=no @AMDEPBACKSLASH@
    379 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    380 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl4.o `test -f 'avltree/avl4.c' || echo '$(srcdir)/'`avltree/avl4.c
    381 
    382 avl4.obj: avltree/avl4.c
    383 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl4.obj -MD -MP -MF $(DEPDIR)/avl4.Tpo -c -o avl4.obj `if test -f 'avltree/avl4.c'; then $(CYGPATH_W) 'avltree/avl4.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl4.c'; fi`
    384 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl4.Tpo $(DEPDIR)/avl4.Po
    385 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl4.c' object='avl4.obj' libtool=no @AMDEPBACKSLASH@
    386 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    387 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl4.obj `if test -f 'avltree/avl4.c'; then $(CYGPATH_W) 'avltree/avl4.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl4.c'; fi`
    388 
    389 avl-private.o: avltree/avl-private.c
    390 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl-private.o -MD -MP -MF $(DEPDIR)/avl-private.Tpo -c -o avl-private.o `test -f 'avltree/avl-private.c' || echo '$(srcdir)/'`avltree/avl-private.c
    391 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl-private.Tpo $(DEPDIR)/avl-private.Po
    392 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl-private.c' object='avl-private.o' libtool=no @AMDEPBACKSLASH@
    393 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    394 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl-private.o `test -f 'avltree/avl-private.c' || echo '$(srcdir)/'`avltree/avl-private.c
    395 
    396 avl-private.obj: avltree/avl-private.c
    397 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl-private.obj -MD -MP -MF $(DEPDIR)/avl-private.Tpo -c -o avl-private.obj `if test -f 'avltree/avl-private.c'; then $(CYGPATH_W) 'avltree/avl-private.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl-private.c'; fi`
    398 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/avl-private.Tpo $(DEPDIR)/avl-private.Po
    399 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl-private.c' object='avl-private.obj' libtool=no @AMDEPBACKSLASH@
    400 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    401 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl-private.obj `if test -f 'avltree/avl-private.c'; then $(CYGPATH_W) 'avltree/avl-private.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl-private.c'; fi`
    402 
    403 vector_int.o: vector/vector_int.c
    404 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vector_int.o -MD -MP -MF $(DEPDIR)/vector_int.Tpo -c -o vector_int.o `test -f 'vector/vector_int.c' || echo '$(srcdir)/'`vector/vector_int.c
    405 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/vector_int.Tpo $(DEPDIR)/vector_int.Po
    406 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='vector/vector_int.c' object='vector_int.o' libtool=no @AMDEPBACKSLASH@
    407 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    408 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vector_int.o `test -f 'vector/vector_int.c' || echo '$(srcdir)/'`vector/vector_int.c
    409 
    410 vector_int.obj: vector/vector_int.c
    411 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vector_int.obj -MD -MP -MF $(DEPDIR)/vector_int.Tpo -c -o vector_int.obj `if test -f 'vector/vector_int.c'; then $(CYGPATH_W) 'vector/vector_int.c'; else $(CYGPATH_W) '$(srcdir)/vector/vector_int.c'; fi`
    412 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/vector_int.Tpo $(DEPDIR)/vector_int.Po
    413 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='vector/vector_int.c' object='vector_int.obj' libtool=no @AMDEPBACKSLASH@
    414 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    415 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vector_int.obj `if test -f 'vector/vector_int.c'; then $(CYGPATH_W) 'vector/vector_int.c'; else $(CYGPATH_W) '$(srcdir)/vector/vector_int.c'; fi`
    416 
    417 array.o: vector/array.c
    418 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT array.o -MD -MP -MF $(DEPDIR)/array.Tpo -c -o array.o `test -f 'vector/array.c' || echo '$(srcdir)/'`vector/array.c
    419 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/array.Tpo $(DEPDIR)/array.Po
    420 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='vector/array.c' object='array.o' libtool=no @AMDEPBACKSLASH@
    421 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    422 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o array.o `test -f 'vector/array.c' || echo '$(srcdir)/'`vector/array.c
    423 
    424 array.obj: vector/array.c
    425 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT array.obj -MD -MP -MF $(DEPDIR)/array.Tpo -c -o array.obj `if test -f 'vector/array.c'; then $(CYGPATH_W) 'vector/array.c'; else $(CYGPATH_W) '$(srcdir)/vector/array.c'; fi`
    426 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/array.Tpo $(DEPDIR)/array.Po
    427 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='vector/array.c' object='array.obj' libtool=no @AMDEPBACKSLASH@
    428 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    429 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o array.obj `if test -f 'vector/array.c'; then $(CYGPATH_W) 'vector/array.c'; else $(CYGPATH_W) '$(srcdir)/vector/array.c'; fi`
    430 
    431 vector_test.o: vector/vector_test.c
    432 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vector_test.o -MD -MP -MF $(DEPDIR)/vector_test.Tpo -c -o vector_test.o `test -f 'vector/vector_test.c' || echo '$(srcdir)/'`vector/vector_test.c
    433 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/vector_test.Tpo $(DEPDIR)/vector_test.Po
    434 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='vector/vector_test.c' object='vector_test.o' libtool=no @AMDEPBACKSLASH@
    435 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    436 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vector_test.o `test -f 'vector/vector_test.c' || echo '$(srcdir)/'`vector/vector_test.c
    437 
    438 vector_test.obj: vector/vector_test.c
    439 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vector_test.obj -MD -MP -MF $(DEPDIR)/vector_test.Tpo -c -o vector_test.obj `if test -f 'vector/vector_test.c'; then $(CYGPATH_W) 'vector/vector_test.c'; else $(CYGPATH_W) '$(srcdir)/vector/vector_test.c'; fi`
    440 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/vector_test.Tpo $(DEPDIR)/vector_test.Po
    441 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='vector/vector_test.c' object='vector_test.obj' libtool=no @AMDEPBACKSLASH@
    442 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    443 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vector_test.obj `if test -f 'vector/vector_test.c'; then $(CYGPATH_W) 'vector/vector_test.c'; else $(CYGPATH_W) '$(srcdir)/vector/vector_test.c'; fi`
    444 
    445 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
    446         list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
    447         unique=`for i in $$list; do \
    448             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    449           done | \
    450           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    451               END { if (nonempty) { for (i in files) print i; }; }'`; \
    452         mkid -fID $$unique
    453 tags: TAGS
    454 
    455 TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
    456                 $(TAGS_FILES) $(LISP)
     444@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
     445
     446avltree/avl_test-avl_test.o: avltree/avl_test.c
     447@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl_test.o -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl_test.Tpo -c -o avltree/avl_test-avl_test.o `test -f 'avltree/avl_test.c' || echo '$(srcdir)/'`avltree/avl_test.c
     448@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl_test.Tpo avltree/$(DEPDIR)/avl_test-avl_test.Po
     449@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl_test.c' object='avltree/avl_test-avl_test.o' libtool=no @AMDEPBACKSLASH@
     450@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     451@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl_test.o `test -f 'avltree/avl_test.c' || echo '$(srcdir)/'`avltree/avl_test.c
     452
     453avltree/avl_test-avl_test.obj: avltree/avl_test.c
     454@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl_test.obj -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl_test.Tpo -c -o avltree/avl_test-avl_test.obj `if test -f 'avltree/avl_test.c'; then $(CYGPATH_W) 'avltree/avl_test.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl_test.c'; fi`
     455@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl_test.Tpo avltree/$(DEPDIR)/avl_test-avl_test.Po
     456@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl_test.c' object='avltree/avl_test-avl_test.obj' libtool=no @AMDEPBACKSLASH@
     457@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     458@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl_test.obj `if test -f 'avltree/avl_test.c'; then $(CYGPATH_W) 'avltree/avl_test.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl_test.c'; fi`
     459
     460avltree/avl_test-avl0.o: avltree/avl0.c
     461@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl0.o -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl0.Tpo -c -o avltree/avl_test-avl0.o `test -f 'avltree/avl0.c' || echo '$(srcdir)/'`avltree/avl0.c
     462@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl0.Tpo avltree/$(DEPDIR)/avl_test-avl0.Po
     463@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl0.c' object='avltree/avl_test-avl0.o' libtool=no @AMDEPBACKSLASH@
     464@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     465@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl0.o `test -f 'avltree/avl0.c' || echo '$(srcdir)/'`avltree/avl0.c
     466
     467avltree/avl_test-avl0.obj: avltree/avl0.c
     468@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl0.obj -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl0.Tpo -c -o avltree/avl_test-avl0.obj `if test -f 'avltree/avl0.c'; then $(CYGPATH_W) 'avltree/avl0.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl0.c'; fi`
     469@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl0.Tpo avltree/$(DEPDIR)/avl_test-avl0.Po
     470@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl0.c' object='avltree/avl_test-avl0.obj' libtool=no @AMDEPBACKSLASH@
     471@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     472@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl0.obj `if test -f 'avltree/avl0.c'; then $(CYGPATH_W) 'avltree/avl0.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl0.c'; fi`
     473
     474avltree/avl_test-avl1.o: avltree/avl1.c
     475@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl1.o -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl1.Tpo -c -o avltree/avl_test-avl1.o `test -f 'avltree/avl1.c' || echo '$(srcdir)/'`avltree/avl1.c
     476@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl1.Tpo avltree/$(DEPDIR)/avl_test-avl1.Po
     477@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl1.c' object='avltree/avl_test-avl1.o' libtool=no @AMDEPBACKSLASH@
     478@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     479@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl1.o `test -f 'avltree/avl1.c' || echo '$(srcdir)/'`avltree/avl1.c
     480
     481avltree/avl_test-avl1.obj: avltree/avl1.c
     482@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl1.obj -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl1.Tpo -c -o avltree/avl_test-avl1.obj `if test -f 'avltree/avl1.c'; then $(CYGPATH_W) 'avltree/avl1.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl1.c'; fi`
     483@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl1.Tpo avltree/$(DEPDIR)/avl_test-avl1.Po
     484@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl1.c' object='avltree/avl_test-avl1.obj' libtool=no @AMDEPBACKSLASH@
     485@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     486@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl1.obj `if test -f 'avltree/avl1.c'; then $(CYGPATH_W) 'avltree/avl1.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl1.c'; fi`
     487
     488avltree/avl_test-avl2.o: avltree/avl2.c
     489@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl2.o -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl2.Tpo -c -o avltree/avl_test-avl2.o `test -f 'avltree/avl2.c' || echo '$(srcdir)/'`avltree/avl2.c
     490@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl2.Tpo avltree/$(DEPDIR)/avl_test-avl2.Po
     491@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl2.c' object='avltree/avl_test-avl2.o' libtool=no @AMDEPBACKSLASH@
     492@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     493@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl2.o `test -f 'avltree/avl2.c' || echo '$(srcdir)/'`avltree/avl2.c
     494
     495avltree/avl_test-avl2.obj: avltree/avl2.c
     496@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl2.obj -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl2.Tpo -c -o avltree/avl_test-avl2.obj `if test -f 'avltree/avl2.c'; then $(CYGPATH_W) 'avltree/avl2.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl2.c'; fi`
     497@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl2.Tpo avltree/$(DEPDIR)/avl_test-avl2.Po
     498@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl2.c' object='avltree/avl_test-avl2.obj' libtool=no @AMDEPBACKSLASH@
     499@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     500@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl2.obj `if test -f 'avltree/avl2.c'; then $(CYGPATH_W) 'avltree/avl2.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl2.c'; fi`
     501
     502avltree/avl_test-avl3.o: avltree/avl3.c
     503@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl3.o -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl3.Tpo -c -o avltree/avl_test-avl3.o `test -f 'avltree/avl3.c' || echo '$(srcdir)/'`avltree/avl3.c
     504@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl3.Tpo avltree/$(DEPDIR)/avl_test-avl3.Po
     505@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl3.c' object='avltree/avl_test-avl3.o' libtool=no @AMDEPBACKSLASH@
     506@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     507@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl3.o `test -f 'avltree/avl3.c' || echo '$(srcdir)/'`avltree/avl3.c
     508
     509avltree/avl_test-avl3.obj: avltree/avl3.c
     510@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl3.obj -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl3.Tpo -c -o avltree/avl_test-avl3.obj `if test -f 'avltree/avl3.c'; then $(CYGPATH_W) 'avltree/avl3.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl3.c'; fi`
     511@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl3.Tpo avltree/$(DEPDIR)/avl_test-avl3.Po
     512@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl3.c' object='avltree/avl_test-avl3.obj' libtool=no @AMDEPBACKSLASH@
     513@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     514@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl3.obj `if test -f 'avltree/avl3.c'; then $(CYGPATH_W) 'avltree/avl3.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl3.c'; fi`
     515
     516avltree/avl_test-avl4.o: avltree/avl4.c
     517@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl4.o -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl4.Tpo -c -o avltree/avl_test-avl4.o `test -f 'avltree/avl4.c' || echo '$(srcdir)/'`avltree/avl4.c
     518@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl4.Tpo avltree/$(DEPDIR)/avl_test-avl4.Po
     519@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl4.c' object='avltree/avl_test-avl4.o' libtool=no @AMDEPBACKSLASH@
     520@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     521@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl4.o `test -f 'avltree/avl4.c' || echo '$(srcdir)/'`avltree/avl4.c
     522
     523avltree/avl_test-avl4.obj: avltree/avl4.c
     524@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl4.obj -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl4.Tpo -c -o avltree/avl_test-avl4.obj `if test -f 'avltree/avl4.c'; then $(CYGPATH_W) 'avltree/avl4.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl4.c'; fi`
     525@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl4.Tpo avltree/$(DEPDIR)/avl_test-avl4.Po
     526@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl4.c' object='avltree/avl_test-avl4.obj' libtool=no @AMDEPBACKSLASH@
     527@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     528@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl4.obj `if test -f 'avltree/avl4.c'; then $(CYGPATH_W) 'avltree/avl4.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl4.c'; fi`
     529
     530avltree/avl_test-avl-private.o: avltree/avl-private.c
     531@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl-private.o -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl-private.Tpo -c -o avltree/avl_test-avl-private.o `test -f 'avltree/avl-private.c' || echo '$(srcdir)/'`avltree/avl-private.c
     532@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl-private.Tpo avltree/$(DEPDIR)/avl_test-avl-private.Po
     533@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl-private.c' object='avltree/avl_test-avl-private.o' libtool=no @AMDEPBACKSLASH@
     534@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     535@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl-private.o `test -f 'avltree/avl-private.c' || echo '$(srcdir)/'`avltree/avl-private.c
     536
     537avltree/avl_test-avl-private.obj: avltree/avl-private.c
     538@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl-private.obj -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl-private.Tpo -c -o avltree/avl_test-avl-private.obj `if test -f 'avltree/avl-private.c'; then $(CYGPATH_W) 'avltree/avl-private.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl-private.c'; fi`
     539@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl-private.Tpo avltree/$(DEPDIR)/avl_test-avl-private.Po
     540@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='avltree/avl-private.c' object='avltree/avl_test-avl-private.obj' libtool=no @AMDEPBACKSLASH@
     541@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     542@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl-private.obj `if test -f 'avltree/avl-private.c'; then $(CYGPATH_W) 'avltree/avl-private.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl-private.c'; fi`
     543
     544fstream_test-fstream_test.o: fstream_test.c
     545@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fstream_test_CFLAGS) $(CFLAGS) -MT fstream_test-fstream_test.o -MD -MP -MF $(DEPDIR)/fstream_test-fstream_test.Tpo -c -o fstream_test-fstream_test.o `test -f 'fstream_test.c' || echo '$(srcdir)/'`fstream_test.c
     546@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/fstream_test-fstream_test.Tpo $(DEPDIR)/fstream_test-fstream_test.Po
     547@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='fstream_test.c' object='fstream_test-fstream_test.o' libtool=no @AMDEPBACKSLASH@
     548@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     549@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fstream_test_CFLAGS) $(CFLAGS) -c -o fstream_test-fstream_test.o `test -f 'fstream_test.c' || echo '$(srcdir)/'`fstream_test.c
     550
     551fstream_test-fstream_test.obj: fstream_test.c
     552@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fstream_test_CFLAGS) $(CFLAGS) -MT fstream_test-fstream_test.obj -MD -MP -MF $(DEPDIR)/fstream_test-fstream_test.Tpo -c -o fstream_test-fstream_test.obj `if test -f 'fstream_test.c'; then $(CYGPATH_W) 'fstream_test.c'; else $(CYGPATH_W) '$(srcdir)/fstream_test.c'; fi`
     553@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/fstream_test-fstream_test.Tpo $(DEPDIR)/fstream_test-fstream_test.Po
     554@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='fstream_test.c' object='fstream_test-fstream_test.obj' libtool=no @AMDEPBACKSLASH@
     555@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     556@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fstream_test_CFLAGS) $(CFLAGS) -c -o fstream_test-fstream_test.obj `if test -f 'fstream_test.c'; then $(CYGPATH_W) 'fstream_test.c'; else $(CYGPATH_W) '$(srcdir)/fstream_test.c'; fi`
     557
     558vector/vector_test-vector_int.o: vector/vector_int.c
     559@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -MT vector/vector_test-vector_int.o -MD -MP -MF vector/$(DEPDIR)/vector_test-vector_int.Tpo -c -o vector/vector_test-vector_int.o `test -f 'vector/vector_int.c' || echo '$(srcdir)/'`vector/vector_int.c
     560@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) vector/$(DEPDIR)/vector_test-vector_int.Tpo vector/$(DEPDIR)/vector_test-vector_int.Po
     561@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='vector/vector_int.c' object='vector/vector_test-vector_int.o' libtool=no @AMDEPBACKSLASH@
     562@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     563@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -c -o vector/vector_test-vector_int.o `test -f 'vector/vector_int.c' || echo '$(srcdir)/'`vector/vector_int.c
     564
     565vector/vector_test-vector_int.obj: vector/vector_int.c
     566@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -MT vector/vector_test-vector_int.obj -MD -MP -MF vector/$(DEPDIR)/vector_test-vector_int.Tpo -c -o vector/vector_test-vector_int.obj `if test -f 'vector/vector_int.c'; then $(CYGPATH_W) 'vector/vector_int.c'; else $(CYGPATH_W) '$(srcdir)/vector/vector_int.c'; fi`
     567@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) vector/$(DEPDIR)/vector_test-vector_int.Tpo vector/$(DEPDIR)/vector_test-vector_int.Po
     568@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='vector/vector_int.c' object='vector/vector_test-vector_int.obj' libtool=no @AMDEPBACKSLASH@
     569@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     570@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -c -o vector/vector_test-vector_int.obj `if test -f 'vector/vector_int.c'; then $(CYGPATH_W) 'vector/vector_int.c'; else $(CYGPATH_W) '$(srcdir)/vector/vector_int.c'; fi`
     571
     572vector/vector_test-array.o: vector/array.c
     573@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -MT vector/vector_test-array.o -MD -MP -MF vector/$(DEPDIR)/vector_test-array.Tpo -c -o vector/vector_test-array.o `test -f 'vector/array.c' || echo '$(srcdir)/'`vector/array.c
     574@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) vector/$(DEPDIR)/vector_test-array.Tpo vector/$(DEPDIR)/vector_test-array.Po
     575@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='vector/array.c' object='vector/vector_test-array.o' libtool=no @AMDEPBACKSLASH@
     576@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     577@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -c -o vector/vector_test-array.o `test -f 'vector/array.c' || echo '$(srcdir)/'`vector/array.c
     578
     579vector/vector_test-array.obj: vector/array.c
     580@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -MT vector/vector_test-array.obj -MD -MP -MF vector/$(DEPDIR)/vector_test-array.Tpo -c -o vector/vector_test-array.obj `if test -f 'vector/array.c'; then $(CYGPATH_W) 'vector/array.c'; else $(CYGPATH_W) '$(srcdir)/vector/array.c'; fi`
     581@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) vector/$(DEPDIR)/vector_test-array.Tpo vector/$(DEPDIR)/vector_test-array.Po
     582@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='vector/array.c' object='vector/vector_test-array.obj' libtool=no @AMDEPBACKSLASH@
     583@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     584@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -c -o vector/vector_test-array.obj `if test -f 'vector/array.c'; then $(CYGPATH_W) 'vector/array.c'; else $(CYGPATH_W) '$(srcdir)/vector/array.c'; fi`
     585
     586vector/vector_test-vector_test.o: vector/vector_test.c
     587@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -MT vector/vector_test-vector_test.o -MD -MP -MF vector/$(DEPDIR)/vector_test-vector_test.Tpo -c -o vector/vector_test-vector_test.o `test -f 'vector/vector_test.c' || echo '$(srcdir)/'`vector/vector_test.c
     588@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) vector/$(DEPDIR)/vector_test-vector_test.Tpo vector/$(DEPDIR)/vector_test-vector_test.Po
     589@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='vector/vector_test.c' object='vector/vector_test-vector_test.o' libtool=no @AMDEPBACKSLASH@
     590@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     591@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -c -o vector/vector_test-vector_test.o `test -f 'vector/vector_test.c' || echo '$(srcdir)/'`vector/vector_test.c
     592
     593vector/vector_test-vector_test.obj: vector/vector_test.c
     594@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -MT vector/vector_test-vector_test.obj -MD -MP -MF vector/$(DEPDIR)/vector_test-vector_test.Tpo -c -o vector/vector_test-vector_test.obj `if test -f 'vector/vector_test.c'; then $(CYGPATH_W) 'vector/vector_test.c'; else $(CYGPATH_W) '$(srcdir)/vector/vector_test.c'; fi`
     595@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) vector/$(DEPDIR)/vector_test-vector_test.Tpo vector/$(DEPDIR)/vector_test-vector_test.Po
     596@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='vector/vector_test.c' object='vector/vector_test-vector_test.obj' libtool=no @AMDEPBACKSLASH@
     597@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     598@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -c -o vector/vector_test-vector_test.obj `if test -f 'vector/vector_test.c'; then $(CYGPATH_W) 'vector/vector_test.c'; else $(CYGPATH_W) '$(srcdir)/vector/vector_test.c'; fi`
     599
     600ID: $(am__tagged_files)
     601        $(am__define_uniq_tagged_files); mkid -fID $$unique
     602tags: tags-am
     603TAGS: tags
     604
     605tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
    457606        set x; \
    458607        here=`pwd`; \
    459         list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
    460         unique=`for i in $$list; do \
    461             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    462           done | \
    463           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    464               END { if (nonempty) { for (i in files) print i; }; }'`; \
     608        $(am__define_uniq_tagged_files); \
    465609        shift; \
    466610        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
     
    474618          fi; \
    475619        fi
    476 ctags: CTAGS
    477 CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
    478                 $(TAGS_FILES) $(LISP)
    479         list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
    480         unique=`for i in $$list; do \
    481             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    482           done | \
    483           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    484               END { if (nonempty) { for (i in files) print i; }; }'`; \
     620ctags: ctags-am
     621
     622CTAGS: ctags
     623ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
     624        $(am__define_uniq_tagged_files); \
    485625        test -z "$(CTAGS_ARGS)$$unique" \
    486626          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
     
    491631          && $(am__cd) $(top_srcdir) \
    492632          && gtags -i $(GTAGS_ARGS) "$$here"
     633cscopelist: cscopelist-am
     634
     635cscopelist-am: $(am__tagged_files)
     636        list='$(am__tagged_files)'; \
     637        case "$(srcdir)" in \
     638          [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
     639          *) sdir=$(subdir)/$(srcdir) ;; \
     640        esac; \
     641        for i in $$list; do \
     642          if test -f "$$i"; then \
     643            echo "$(subdir)/$$i"; \
     644          else \
     645            echo "$$sdir/$$i"; \
     646          fi; \
     647        done >> $(top_builddir)/cscope.files
    493648
    494649distclean-tags:
     
    555710        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
    556711        -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
     712        -rm -f avltree/$(DEPDIR)/$(am__dirstamp)
     713        -rm -f avltree/$(am__dirstamp)
     714        -rm -f vector/$(DEPDIR)/$(am__dirstamp)
     715        -rm -f vector/$(am__dirstamp)
    557716
    558717maintainer-clean-generic:
     
    564723
    565724distclean: distclean-am
    566         -rm -rf ./$(DEPDIR)
     725        -rm -rf ./$(DEPDIR) avltree/$(DEPDIR) vector/$(DEPDIR)
    567726        -rm -f Makefile
    568727distclean-am: clean-am distclean-compile distclean-generic \
     
    610769
    611770maintainer-clean: maintainer-clean-am
    612         -rm -rf ./$(DEPDIR)
     771        -rm -rf ./$(DEPDIR) avltree/$(DEPDIR) vector/$(DEPDIR)
    613772        -rm -f Makefile
    614773maintainer-clean-am: distclean-am maintainer-clean-generic
     
    630789.MAKE: install-am install-strip
    631790
    632 .PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
    633         clean-generic clean-local ctags distclean distclean-compile \
    634         distclean-generic distclean-tags distdir dvi dvi-am html \
    635         html-am info info-am install install-am install-data \
    636         install-data-am install-dvi install-dvi-am install-exec \
    637         install-exec-am install-html install-html-am install-info \
    638         install-info-am install-man install-pdf install-pdf-am \
    639         install-ps install-ps-am install-strip installcheck \
    640         installcheck-am installdirs maintainer-clean \
    641         maintainer-clean-generic mostlyclean mostlyclean-compile \
    642         mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
    643         uninstall-am
     791.PHONY: CTAGS GTAGS TAGS all all-am all-local check check-am clean \
     792        clean-generic clean-local cscopelist-am ctags ctags-am \
     793        distclean distclean-compile distclean-generic distclean-tags \
     794        distdir dvi dvi-am html html-am info info-am install \
     795        install-am install-data install-data-am install-dvi \
     796        install-dvi-am install-exec install-exec-am install-html \
     797        install-html-am install-info install-info-am install-man \
     798        install-pdf install-pdf-am install-ps install-ps-am \
     799        install-strip installcheck installcheck-am installdirs \
     800        maintainer-clean maintainer-clean-generic mostlyclean \
     801        mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
     802        tags tags-am uninstall uninstall-am
     803
     804.PRECIOUS: Makefile
    644805
    645806
     
    665826
    666827% : %.c @CFA_BINDIR@/@CFA_NAME@
    667         ${CC} ${CFLAGS} ${<} -o ${@}
     828        ${CC} ${AM_CFLAGS} ${CFLAGS} ${<} -o ${@}
    668829
    669830dtor-early-exit-ERR1: dtor-early-exit.c @CFA_BINDIR@/@CFA_NAME@
    670         ${CC} ${CFLAGS} -DERR1 ${<} -o ${@}
     831        ${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@}
    671832
    672833dtor-early-exit-ERR2: dtor-early-exit.c @CFA_BINDIR@/@CFA_NAME@
    673         ${CC} ${CFLAGS} -DERR2 ${<} -o ${@}
     834        ${CC} ${AM_CFLAGS} ${CFLAGS} -DERR2 ${<} -o ${@}
    674835
    675836declarationSpecifier: declarationSpecifier.c @CFA_BINDIR@/@CFA_NAME@
    676         ${CC} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
     837        ${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
    677838
    678839gccExtensions : gccExtensions.c @CFA_BINDIR@/@CFA_NAME@
    679         ${CC} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
     840        ${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
    680841
    681842extension : extension.c @CFA_BINDIR@/@CFA_NAME@
    682         ${CC} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
     843        ${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
    683844
    684845attributes : attributes.c @CFA_BINDIR@/@CFA_NAME@
    685         ${CC} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
     846        ${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
    686847
    687848KRfunctions : KRfunctions.c @CFA_BINDIR@/@CFA_NAME@
    688         ${CC} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
     849        ${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
    689850
    690851gmp : gmp.c @CFA_BINDIR@/@CFA_NAME@
    691         ${CC} ${CFLAGS} -lgmp ${<} -o ${@}
     852        ${CC} ${AM_CFLAGS} ${CFLAGS} -lgmp ${<} -o ${@}
    692853
    693854memberCtors-ERR1: memberCtors.c @CFA_BINDIR@/@CFA_NAME@
    694         ${CC} ${CFLAGS} -DERR1 ${<} -o ${@}
     855        ${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@}
    695856
    696857completeTypeError : completeTypeError.c @CFA_BINDIR@/@CFA_NAME@
    697         ${CC} ${CFLAGS} -DERR1 ${<} -o ${@}
     858        ${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@}
    698859
    699860# Tell versions [3.59,3.63) of GNU make to not export all variables.
  • TabularUnified src/tests/io.c

    rb1e63ac5 r208e5be  
    1010// Created On       : Wed Mar  2 16:56:02 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jun  8 09:52:10 2017
    13 // Update Count     : 51
     12// Last Modified On : Sun Jul  2 09:40:58 2017
     13// Update Count     : 68
    1414//
    1515
     
    4242        sout | endl;
    4343
     44        sout | "opening delimiters" | endl;
    4445        sout
    45                 // opening delimiters
    4646                | "x (" | 1
    4747                | "x [" | 2
     
    5454                | "x ¿" | 9
    5555                | "x «" | 10
    56                 | endl;
     56                | endl | endl;
     57
     58        sout | "closing delimiters" | endl;
    5759        sout
    58                 // closing delimiters
    5960                | 1 | ", x"
    6061                | 2 | ". x"
     
    6869                | 10 | "] x"
    6970                | 11 | "} x"
    70                 | endl;
     71                | endl | endl;
     72
     73        sout | "opening/closing delimiters" | endl;
    7174        sout
    72                 // opening-closing delimiters
    7375                | "x`" | 1 | "`x'" | 2
    7476                | "'x\"" | 3 | "\"x:" | 4
     
    7678                | "\tx\f" | 7 | "\fx\v" | 8
    7779                | "\vx\n" | 9 | "\nx\r" | 10
    78                 | "\rx" |
    79                 endl;
     80                | "\rx"
     81                | endl | endl;
     82
     83        sout | "override opening/closing delimiters" | endl;
    8084        sout | "x ( " | 1 | " ) x" | 2 | " , x" | 3 | " :x: " | 4 | endl;
     85        sout | endl;
    8186
    8287        ifstream in;                                                                            // create / open file
    8388        open( &in, "io.data", "r" );
    8489
     90        sout | "input bacis types" | endl;
    8591        &in | &c                                                                                        // character
    8692                | &si | &usi | &i | &ui | &li | &uli | &lli | &ulli     // integral
     
    8894                | &fc | &dc | &ldc                                                              // floating-point complex
    8995                | cstr( s1 ) | cstr( s2, size );                                // C string, length unchecked and checked
     96        sout | endl;
    9097
     98        sout | "output basic types" | endl;
    9199        sout | c | ' ' | endl                                                           // character
    92100                | si | usi | i | ui | li | uli | lli | ulli | endl // integral
     
    94102                | fc | dc | ldc | endl;                                                 // complex
    95103        sout | endl;
     104
     105        sout | "tuples" | endl;
     106        [int, [ int, int ] ] t1 = [ 1, [ 2, 3 ] ], t2 = [ 3, [ 4, 5 ] ];
     107        sout | t1 | t2 | endl;                                                          // print tuple
     108        sout | endl;
     109
     110        sout | "toggle separator" | endl;
    96111        sout | f | "" | d | "" | ld | endl                                      // floating point without separator
    97112                | sepDisable | fc | dc | ldc | sepEnable | endl // complex without separator
     
    100115        sout | endl;
    101116
     117        sout | "change separator" | endl;
     118        sout | "from \" " | sepGet( sout ) | "\"";
    102119        sepSet( sout, ", $" );                                                          // change separator, maximum of 15 characters
     120        sout | "to \" " | sepGet( sout ) | "\"" | endl;
    103121        sout | f | d | ld | endl
    104122                | fc | dc | ldc | endl
    105                 | s1 | s2 | endl;
     123                | s1 | s2 | endl
     124                | t1 | t2 | endl;                                                               // print tuple
     125        sout | endl;
     126        sout | "from \"" | sepGet( sout ) | "\"";
     127        sepSet( sout, " " );                                                            // restore separator
     128        sout | "to \"" | sepGet( sout ) | "\"" | endl;
     129        sout | f | d | ld | endl
     130                | fc | dc | ldc | endl
     131                | s1 | s2 | endl
     132                | t1 | t2 | endl;                                                               // print tuple
    106133        sout | endl;
    107134
    108         [int, int] t1 = [1, 2], t2 = [3, 4];
    109         sout | t1 | t2 | endl;                                                          // print tuple
    110 
    111         sepSet( sout, " " );
    112         sepSet( sout, ", $" );                                                          // set separator from " " to ", $"
    113         sout | 1 | 2 | 3 | " \"" | sepGet( sout ) | "\"" | endl;
    114         sepSet( sout, " " );                                                            // reset separator to " "
    115         sout | 1 | 2 | 3 | " \"" | sepGet( sout ) | "\"" | endl;
    116 
    117         sout | sepOn | 1 | 2 | 3 | sepOn | endl;                        // separator at start of line
     135        sout | sepOn | 1 | 2 | 3 | sepOn | endl;                        // separator at start/end of line
    118136        sout | 1 | sepOff | 2 | 3 | endl;                                       // locally turn off implicit separator
     137        sout | sepOn | 1 | 2 | 3 | sepOn | sepOff | endl;       // separator at start of line
     138        sout | 1 | 2 | 3 | endl | sepOn;                                        // separator at start of next line
     139        sout | 1 | 2 | 3 | endl;
     140        sout | endl;
    119141
    120142        sout | sepDisable | 1 | 2 | 3 | endl;                           // globally turn off implicit separation
    121143        sout | 1 | sepOn | 2 | 3 | endl;                                        // locally turn on implicit separator
    122         sout | sepEnable | 1 | 2 | 3 | endl;                            // globally turn on implicit separation
     144        sout | sepEnable | 1 | 2 | 3 | endl | sepDisable;       // globally turn on/off implicit separation
     145        sout | 1 | 2 | 3 | endl | sepEnable;                            // globally turn on implicit separation
     146        sout | 1 | 2 | 3 | sepOn | sepDisable | endl;           // ignore seperate at end of line
     147        sout | 1 | 2 | 3 | sepOn | sepEnable | endl;            // separator at end of line
     148        sout | 1 | 2 | 3 | endl;
     149        sout | endl;
    123150
    124151        sepSetTuple( sout, " " );                                                       // set tuple separator from ", " to " "
     
    126153        sepSetTuple( sout, ", " );                                                      // reset tuple separator to ", "
    127154        sout | t1 | t2 | " \"" | sepGetTuple( sout ) | "\"" | endl;
    128 
    129155        sout | t1 | t2 | endl;                                                          // print tuple
     156        sout | endl;
    130157
    131158        [int, int, const char *, double] t3 = { 3, 4, "a", 7.2 };
  • TabularUnified src/tests/preempt_longrun/Makefile.in

    rb1e63ac5 r208e5be  
    1 # Makefile.in generated by automake 1.11.3 from Makefile.am.
     1# Makefile.in generated by automake 1.15 from Makefile.am.
    22# @configure_input@
    33
    4 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
    5 # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
    6 # Foundation, Inc.
     4# Copyright (C) 1994-2014 Free Software Foundation, Inc.
     5
    76# This Makefile.in is free software; the Free Software Foundation
    87# gives unlimited permission to copy and/or distribute it,
     
    1918###############################################################################
    2019VPATH = @srcdir@
     20am__is_gnu_make = { \
     21  if test -z '$(MAKELEVEL)'; then \
     22    false; \
     23  elif test -n '$(MAKE_HOST)'; then \
     24    true; \
     25  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
     26    true; \
     27  else \
     28    false; \
     29  fi; \
     30}
     31am__make_running_with_option = \
     32  case $${target_option-} in \
     33      ?) ;; \
     34      *) echo "am__make_running_with_option: internal error: invalid" \
     35              "target option '$${target_option-}' specified" >&2; \
     36         exit 1;; \
     37  esac; \
     38  has_opt=no; \
     39  sane_makeflags=$$MAKEFLAGS; \
     40  if $(am__is_gnu_make); then \
     41    sane_makeflags=$$MFLAGS; \
     42  else \
     43    case $$MAKEFLAGS in \
     44      *\\[\ \   ]*) \
     45        bs=\\; \
     46        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
     47          | sed "s/$$bs$$bs[$$bs $$bs   ]*//g"`;; \
     48    esac; \
     49  fi; \
     50  skip_next=no; \
     51  strip_trailopt () \
     52  { \
     53    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
     54  }; \
     55  for flg in $$sane_makeflags; do \
     56    test $$skip_next = yes && { skip_next=no; continue; }; \
     57    case $$flg in \
     58      *=*|--*) continue;; \
     59        -*I) strip_trailopt 'I'; skip_next=yes;; \
     60      -*I?*) strip_trailopt 'I';; \
     61        -*O) strip_trailopt 'O'; skip_next=yes;; \
     62      -*O?*) strip_trailopt 'O';; \
     63        -*l) strip_trailopt 'l'; skip_next=yes;; \
     64      -*l?*) strip_trailopt 'l';; \
     65      -[dEDm]) skip_next=yes;; \
     66      -[JT]) skip_next=yes;; \
     67    esac; \
     68    case $$flg in \
     69      *$$target_option*) has_opt=yes; break;; \
     70    esac; \
     71  done; \
     72  test $$has_opt = yes
     73am__make_dryrun = (target_option=n; $(am__make_running_with_option))
     74am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
    2175pkgdatadir = $(datadir)/@PACKAGE@
    2276pkgincludedir = $(includedir)/@PACKAGE@
     
    3892host_triplet = @host@
    3993subdir = src/tests/preempt_longrun
    40 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
    4194ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    4295am__aclocal_m4_deps = $(top_srcdir)/configure.ac
    4396am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    4497        $(ACLOCAL_M4)
     98DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
    4599mkinstalldirs = $(install_sh) -d
    46100CONFIG_HEADER = $(top_builddir)/config.h
    47101CONFIG_CLEAN_FILES =
    48102CONFIG_CLEAN_VPATH_FILES =
     103AM_V_P = $(am__v_P_@AM_V@)
     104am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
     105am__v_P_0 = false
     106am__v_P_1 = :
    49107AM_V_GEN = $(am__v_GEN_@AM_V@)
    50108am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
    51 am__v_GEN_0 = @echo "  GEN   " $@;
     109am__v_GEN_0 = @echo "  GEN     " $@;
     110am__v_GEN_1 =
    52111AM_V_at = $(am__v_at_@AM_V@)
    53112am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
    54113am__v_at_0 = @
     114am__v_at_1 =
    55115SOURCES =
    56116DIST_SOURCES =
    57 am__tty_colors = \
    58 red=; grn=; lgn=; blu=; std=
     117am__can_run_installinfo = \
     118  case $$AM_UPDATE_INFO_DIR in \
     119    n|no|NO) false;; \
     120    *) (install-info --version) >/dev/null 2>&1;; \
     121  esac
     122am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
     123am__tty_colors_dummy = \
     124  mgn= red= grn= lgn= blu= brg= std=; \
     125  am__color_tests=no
     126am__tty_colors = { \
     127  $(am__tty_colors_dummy); \
     128  if test "X$(AM_COLOR_TESTS)" = Xno; then \
     129    am__color_tests=no; \
     130  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
     131    am__color_tests=yes; \
     132  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
     133    am__color_tests=yes; \
     134  fi; \
     135  if test $$am__color_tests = yes; then \
     136    red='[0;31m'; \
     137    grn='[0;32m'; \
     138    lgn='[1;32m'; \
     139    blu='[1;34m'; \
     140    mgn='[0;35m'; \
     141    brg='[1m'; \
     142    std='[m'; \
     143  fi; \
     144}
     145am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
     146am__vpath_adj = case $$p in \
     147    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
     148    *) f=$$p;; \
     149  esac;
     150am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
     151am__install_max = 40
     152am__nobase_strip_setup = \
     153  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
     154am__nobase_strip = \
     155  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
     156am__nobase_list = $(am__nobase_strip_setup); \
     157  for p in $$list; do echo "$$p $$p"; done | \
     158  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
     159  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
     160    if (++n[$$2] == $(am__install_max)) \
     161      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
     162    END { for (dir in files) print dir, files[dir] }'
     163am__base_list = \
     164  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
     165  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
     166am__uninstall_files_from_dir = { \
     167  test -z "$$files" \
     168    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
     169    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
     170         $(am__cd) "$$dir" && rm -f $$files; }; \
     171  }
     172am__recheck_rx = ^[     ]*:recheck:[    ]*
     173am__global_test_result_rx = ^[  ]*:global-test-result:[         ]*
     174am__copy_in_global_log_rx = ^[  ]*:copy-in-global-log:[         ]*
     175# A command that, given a newline-separated list of test names on the
     176# standard input, print the name of the tests that are to be re-run
     177# upon "make recheck".
     178am__list_recheck_tests = $(AWK) '{ \
     179  recheck = 1; \
     180  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
     181    { \
     182      if (rc < 0) \
     183        { \
     184          if ((getline line2 < ($$0 ".log")) < 0) \
     185            recheck = 0; \
     186          break; \
     187        } \
     188      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
     189        { \
     190          recheck = 0; \
     191          break; \
     192        } \
     193      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
     194        { \
     195          break; \
     196        } \
     197    }; \
     198  if (recheck) \
     199    print $$0; \
     200  close ($$0 ".trs"); \
     201  close ($$0 ".log"); \
     202}'
     203# A command that, given a newline-separated list of test names on the
     204# standard input, create the global log from their .trs and .log files.
     205am__create_global_log = $(AWK) ' \
     206function fatal(msg) \
     207{ \
     208  print "fatal: making $@: " msg | "cat >&2"; \
     209  exit 1; \
     210} \
     211function rst_section(header) \
     212{ \
     213  print header; \
     214  len = length(header); \
     215  for (i = 1; i <= len; i = i + 1) \
     216    printf "="; \
     217  printf "\n\n"; \
     218} \
     219{ \
     220  copy_in_global_log = 1; \
     221  global_test_result = "RUN"; \
     222  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
     223    { \
     224      if (rc < 0) \
     225         fatal("failed to read from " $$0 ".trs"); \
     226      if (line ~ /$(am__global_test_result_rx)/) \
     227        { \
     228          sub("$(am__global_test_result_rx)", "", line); \
     229          sub("[        ]*$$", "", line); \
     230          global_test_result = line; \
     231        } \
     232      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
     233        copy_in_global_log = 0; \
     234    }; \
     235  if (copy_in_global_log) \
     236    { \
     237      rst_section(global_test_result ": " $$0); \
     238      while ((rc = (getline line < ($$0 ".log"))) != 0) \
     239      { \
     240        if (rc < 0) \
     241          fatal("failed to read from " $$0 ".log"); \
     242        print line; \
     243      }; \
     244      printf "\n"; \
     245    }; \
     246  close ($$0 ".trs"); \
     247  close ($$0 ".log"); \
     248}'
     249# Restructured Text title.
     250am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
     251# Solaris 10 'make', and several other traditional 'make' implementations,
     252# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
     253# by disabling -e (using the XSI extension "set +e") if it's set.
     254am__sh_e_setup = case $$- in *e*) set +e;; esac
     255# Default flags passed to test drivers.
     256am__common_driver_flags = \
     257  --color-tests "$$am__color_tests" \
     258  --enable-hard-errors "$$am__enable_hard_errors" \
     259  --expect-failure "$$am__expect_failure"
     260# To be inserted before the command running the test.  Creates the
     261# directory for the log if needed.  Stores in $dir the directory
     262# containing $f, in $tst the test, in $log the log.  Executes the
     263# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
     264# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
     265# will run the test scripts (or their associated LOG_COMPILER, if
     266# thy have one).
     267am__check_pre = \
     268$(am__sh_e_setup);                                      \
     269$(am__vpath_adj_setup) $(am__vpath_adj)                 \
     270$(am__tty_colors);                                      \
     271srcdir=$(srcdir); export srcdir;                        \
     272case "$@" in                                            \
     273  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;    \
     274    *) am__odir=.;;                                     \
     275esac;                                                   \
     276test "x$$am__odir" = x"." || test -d "$$am__odir"       \
     277  || $(MKDIR_P) "$$am__odir" || exit $$?;               \
     278if test -f "./$$f"; then dir=./;                        \
     279elif test -f "$$f"; then dir=;                          \
     280else dir="$(srcdir)/"; fi;                              \
     281tst=$$dir$$f; log='$@';                                 \
     282if test -n '$(DISABLE_HARD_ERRORS)'; then               \
     283  am__enable_hard_errors=no;                            \
     284else                                                    \
     285  am__enable_hard_errors=yes;                           \
     286fi;                                                     \
     287case " $(XFAIL_TESTS) " in                              \
     288  *[\ \ ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
     289    am__expect_failure=yes;;                            \
     290  *)                                                    \
     291    am__expect_failure=no;;                             \
     292esac;                                                   \
     293$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
     294# A shell command to get the names of the tests scripts with any registered
     295# extension removed (i.e., equivalently, the names of the test logs, with
     296# the '.log' extension removed).  The result is saved in the shell variable
     297# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
     298# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
     299# since that might cause problem with VPATH rewrites for suffix-less tests.
     300# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
     301am__set_TESTS_bases = \
     302  bases='$(TEST_LOGS)'; \
     303  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
     304  bases=`echo $$bases`
     305RECHECK_LOGS = $(TEST_LOGS)
     306AM_RECURSIVE_TARGETS = check recheck
     307TEST_SUITE_LOG = test-suite.log
     308TEST_EXTENSIONS = @EXEEXT@ .test
     309LOG_DRIVER = $(SHELL) $(top_srcdir)/automake/test-driver
     310LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
     311am__set_b = \
     312  case '$@' in \
     313    */*) \
     314      case '$*' in \
     315        */*) b='$*';; \
     316          *) b=`echo '$@' | sed 's/\.log$$//'`; \
     317       esac;; \
     318    *) \
     319      b='$*';; \
     320  esac
     321am__test_logs1 = $(TESTS:=.log)
     322am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
     323TEST_LOGS = $(am__test_logs2:.test.log=.log)
     324TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/automake/test-driver
     325TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
     326        $(TEST_LOG_FLAGS)
     327am__DIST_COMMON = $(srcdir)/Makefile.in \
     328        $(top_srcdir)/automake/test-driver
    59329DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
    60330ACLOCAL = @ACLOCAL@
     
    169439program_transform_name = @program_transform_name@
    170440psdir = @psdir@
     441runstatedir = @runstatedir@
    171442sbindir = @sbindir@
    172443sharedstatedir = @sharedstatedir@
     
    186457
    187458.SUFFIXES:
     459.SUFFIXES: .log .test .test$(EXEEXT) .trs
    188460$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
    189461        @for dep in $?; do \
     
    195467          esac; \
    196468        done; \
    197         echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/tests/preempt_longrun/Makefile'; \
     469        echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/tests/preempt_longrun/Makefile'; \
    198470        $(am__cd) $(top_srcdir) && \
    199           $(AUTOMAKE) --foreign src/tests/preempt_longrun/Makefile
    200 .PRECIOUS: Makefile
     471          $(AUTOMAKE) --gnu src/tests/preempt_longrun/Makefile
    201472Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
    202473        @case '$?' in \
     
    216487        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
    217488$(am__aclocal_m4_deps):
    218 tags: TAGS
    219 TAGS:
    220 
    221 ctags: CTAGS
    222 CTAGS:
    223 
    224 
    225 check-TESTS: $(TESTS)
    226         @failed=0; all=0; xfail=0; xpass=0; skip=0; \
    227         srcdir=$(srcdir); export srcdir; \
    228         list=' $(TESTS) '; \
    229         $(am__tty_colors); \
    230         if test -n "$$list"; then \
    231           for tst in $$list; do \
    232             if test -f ./$$tst; then dir=./; \
    233             elif test -f $$tst; then dir=; \
    234             else dir="$(srcdir)/"; fi; \
    235             if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
    236               all=`expr $$all + 1`; \
    237               case " $(XFAIL_TESTS) " in \
    238               *[\ \     ]$$tst[\ \      ]*) \
    239                 xpass=`expr $$xpass + 1`; \
    240                 failed=`expr $$failed + 1`; \
    241                 col=$$red; res=XPASS; \
    242               ;; \
    243               *) \
    244                 col=$$grn; res=PASS; \
    245               ;; \
    246               esac; \
    247             elif test $$? -ne 77; then \
    248               all=`expr $$all + 1`; \
    249               case " $(XFAIL_TESTS) " in \
    250               *[\ \     ]$$tst[\ \      ]*) \
    251                 xfail=`expr $$xfail + 1`; \
    252                 col=$$lgn; res=XFAIL; \
    253               ;; \
    254               *) \
    255                 failed=`expr $$failed + 1`; \
    256                 col=$$red; res=FAIL; \
    257               ;; \
    258               esac; \
     489tags TAGS:
     490
     491ctags CTAGS:
     492
     493cscope cscopelist:
     494
     495
     496# Recover from deleted '.trs' file; this should ensure that
     497# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
     498# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
     499# to avoid problems with "make -n".
     500.log.trs:
     501        rm -f $< $@
     502        $(MAKE) $(AM_MAKEFLAGS) $<
     503
     504# Leading 'am--fnord' is there to ensure the list of targets does not
     505# expand to empty, as could happen e.g. with make check TESTS=''.
     506am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
     507am--force-recheck:
     508        @:
     509
     510$(TEST_SUITE_LOG): $(TEST_LOGS)
     511        @$(am__set_TESTS_bases); \
     512        am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
     513        redo_bases=`for i in $$bases; do \
     514                      am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
     515                    done`; \
     516        if test -n "$$redo_bases"; then \
     517          redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
     518          redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
     519          if $(am__make_dryrun); then :; else \
     520            rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
     521          fi; \
     522        fi; \
     523        if test -n "$$am__remaking_logs"; then \
     524          echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
     525               "recursion detected" >&2; \
     526        elif test -n "$$redo_logs"; then \
     527          am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
     528        fi; \
     529        if $(am__make_dryrun); then :; else \
     530          st=0;  \
     531          errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
     532          for i in $$redo_bases; do \
     533            test -f $$i.trs && test -r $$i.trs \
     534              || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
     535            test -f $$i.log && test -r $$i.log \
     536              || { echo "$$errmsg $$i.log" >&2; st=1; }; \
     537          done; \
     538          test $$st -eq 0 || exit 1; \
     539        fi
     540        @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
     541        ws='[   ]'; \
     542        results=`for b in $$bases; do echo $$b.trs; done`; \
     543        test -n "$$results" || results=/dev/null; \
     544        all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
     545        pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
     546        fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
     547        skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
     548        xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
     549        xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
     550        error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
     551        if test `expr $$fail + $$xpass + $$error` -eq 0; then \
     552          success=true; \
     553        else \
     554          success=false; \
     555        fi; \
     556        br='==================='; br=$$br$$br$$br$$br; \
     557        result_count () \
     558        { \
     559            if test x"$$1" = x"--maybe-color"; then \
     560              maybe_colorize=yes; \
     561            elif test x"$$1" = x"--no-color"; then \
     562              maybe_colorize=no; \
    259563            else \
    260               skip=`expr $$skip + 1`; \
    261               col=$$blu; res=SKIP; \
     564              echo "$@: invalid 'result_count' usage" >&2; exit 4; \
    262565            fi; \
    263             echo "$${col}$$res$${std}: $$tst"; \
    264           done; \
    265           if test "$$all" -eq 1; then \
    266             tests="test"; \
    267             All=""; \
    268           else \
    269             tests="tests"; \
    270             All="All "; \
    271           fi; \
    272           if test "$$failed" -eq 0; then \
    273             if test "$$xfail" -eq 0; then \
    274               banner="$$All$$all $$tests passed"; \
     566            shift; \
     567            desc=$$1 count=$$2; \
     568            if test $$maybe_colorize = yes && test $$count -gt 0; then \
     569              color_start=$$3 color_end=$$std; \
    275570            else \
    276               if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
    277               banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
     571              color_start= color_end=; \
    278572            fi; \
    279           else \
    280             if test "$$xpass" -eq 0; then \
    281               banner="$$failed of $$all $$tests failed"; \
    282             else \
    283               if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
    284               banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
    285             fi; \
    286           fi; \
    287           dashes="$$banner"; \
    288           skipped=""; \
    289           if test "$$skip" -ne 0; then \
    290             if test "$$skip" -eq 1; then \
    291               skipped="($$skip test was not run)"; \
    292             else \
    293               skipped="($$skip tests were not run)"; \
    294             fi; \
    295             test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
    296               dashes="$$skipped"; \
    297           fi; \
    298           report=""; \
    299           if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
    300             report="Please report to $(PACKAGE_BUGREPORT)"; \
    301             test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
    302               dashes="$$report"; \
    303           fi; \
    304           dashes=`echo "$$dashes" | sed s/./=/g`; \
    305           if test "$$failed" -eq 0; then \
    306             col="$$grn"; \
    307           else \
    308             col="$$red"; \
    309           fi; \
    310           echo "$${col}$$dashes$${std}"; \
    311           echo "$${col}$$banner$${std}"; \
    312           test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
    313           test -z "$$report" || echo "$${col}$$report$${std}"; \
    314           echo "$${col}$$dashes$${std}"; \
    315           test "$$failed" -eq 0; \
    316         else :; fi
     573            echo "$${color_start}# $$desc $$count$${color_end}"; \
     574        }; \
     575        create_testsuite_report () \
     576        { \
     577          result_count $$1 "TOTAL:" $$all   "$$brg"; \
     578          result_count $$1 "PASS: " $$pass  "$$grn"; \
     579          result_count $$1 "SKIP: " $$skip  "$$blu"; \
     580          result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
     581          result_count $$1 "FAIL: " $$fail  "$$red"; \
     582          result_count $$1 "XPASS:" $$xpass "$$red"; \
     583          result_count $$1 "ERROR:" $$error "$$mgn"; \
     584        }; \
     585        {                                                               \
     586          echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
     587            $(am__rst_title);                                           \
     588          create_testsuite_report --no-color;                           \
     589          echo;                                                         \
     590          echo ".. contents:: :depth: 2";                               \
     591          echo;                                                         \
     592          for b in $$bases; do echo $$b; done                           \
     593            | $(am__create_global_log);                                 \
     594        } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
     595        mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
     596        if $$success; then                                              \
     597          col="$$grn";                                                  \
     598         else                                                           \
     599          col="$$red";                                                  \
     600          test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
     601        fi;                                                             \
     602        echo "$${col}$$br$${std}";                                      \
     603        echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
     604        echo "$${col}$$br$${std}";                                      \
     605        create_testsuite_report --maybe-color;                          \
     606        echo "$$col$$br$$std";                                          \
     607        if $$success; then :; else                                      \
     608          echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
     609          if test -n "$(PACKAGE_BUGREPORT)"; then                       \
     610            echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
     611          fi;                                                           \
     612          echo "$$col$$br$$std";                                        \
     613        fi;                                                             \
     614        $$success || exit 1
     615
     616check-TESTS:
     617        @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
     618        @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
     619        @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
     620        @set +e; $(am__set_TESTS_bases); \
     621        log_list=`for i in $$bases; do echo $$i.log; done`; \
     622        trs_list=`for i in $$bases; do echo $$i.trs; done`; \
     623        log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
     624        $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
     625        exit $$?;
     626recheck: all
     627        @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
     628        @set +e; $(am__set_TESTS_bases); \
     629        bases=`for i in $$bases; do echo $$i; done \
     630                 | $(am__list_recheck_tests)` || exit 1; \
     631        log_list=`for i in $$bases; do echo $$i.log; done`; \
     632        log_list=`echo $$log_list`; \
     633        $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
     634                am__force_recheck=am--force-recheck \
     635                TEST_LOGS="$$log_list"; \
     636        exit $$?
     637barge.log: barge
     638        @p='barge'; \
     639        b='barge'; \
     640        $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
     641        --log-file $$b.log --trs-file $$b.trs \
     642        $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
     643        "$$tst" $(AM_TESTS_FD_REDIRECT)
     644block.log: block
     645        @p='block'; \
     646        b='block'; \
     647        $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
     648        --log-file $$b.log --trs-file $$b.trs \
     649        $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
     650        "$$tst" $(AM_TESTS_FD_REDIRECT)
     651create.log: create
     652        @p='create'; \
     653        b='create'; \
     654        $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
     655        --log-file $$b.log --trs-file $$b.trs \
     656        $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
     657        "$$tst" $(AM_TESTS_FD_REDIRECT)
     658disjoint.log: disjoint
     659        @p='disjoint'; \
     660        b='disjoint'; \
     661        $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
     662        --log-file $$b.log --trs-file $$b.trs \
     663        $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
     664        "$$tst" $(AM_TESTS_FD_REDIRECT)
     665processor.log: processor
     666        @p='processor'; \
     667        b='processor'; \
     668        $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
     669        --log-file $$b.log --trs-file $$b.trs \
     670        $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
     671        "$$tst" $(AM_TESTS_FD_REDIRECT)
     672stack.log: stack
     673        @p='stack'; \
     674        b='stack'; \
     675        $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
     676        --log-file $$b.log --trs-file $$b.trs \
     677        $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
     678        "$$tst" $(AM_TESTS_FD_REDIRECT)
     679wait.log: wait
     680        @p='wait'; \
     681        b='wait'; \
     682        $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
     683        --log-file $$b.log --trs-file $$b.trs \
     684        $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
     685        "$$tst" $(AM_TESTS_FD_REDIRECT)
     686yield.log: yield
     687        @p='yield'; \
     688        b='yield'; \
     689        $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
     690        --log-file $$b.log --trs-file $$b.trs \
     691        $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
     692        "$$tst" $(AM_TESTS_FD_REDIRECT)
     693.test.log:
     694        @p='$<'; \
     695        $(am__set_b); \
     696        $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
     697        --log-file $$b.log --trs-file $$b.trs \
     698        $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
     699        "$$tst" $(AM_TESTS_FD_REDIRECT)
     700@am__EXEEXT_TRUE@.test$(EXEEXT).log:
     701@am__EXEEXT_TRUE@       @p='$<'; \
     702@am__EXEEXT_TRUE@       $(am__set_b); \
     703@am__EXEEXT_TRUE@       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
     704@am__EXEEXT_TRUE@       --log-file $$b.log --trs-file $$b.trs \
     705@am__EXEEXT_TRUE@       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
     706@am__EXEEXT_TRUE@       "$$tst" $(AM_TESTS_FD_REDIRECT)
    317707
    318708distdir: $(DISTFILES)
     
    371761        fi
    372762mostlyclean-generic:
     763        -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
     764        -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
     765        -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
    373766
    374767clean-generic:
     
    450843
    451844.PHONY: all all-am all-local check check-TESTS check-am clean \
    452         clean-generic distclean distclean-generic distdir dvi dvi-am \
    453         html html-am info info-am install install-am install-data \
    454         install-data-am install-dvi install-dvi-am install-exec \
    455         install-exec-am install-html install-html-am install-info \
    456         install-info-am install-man install-pdf install-pdf-am \
    457         install-ps install-ps-am install-strip installcheck \
    458         installcheck-am installdirs maintainer-clean \
    459         maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
    460         pdf-am ps ps-am uninstall uninstall-am
     845        clean-generic cscopelist-am ctags-am distclean \
     846        distclean-generic distdir dvi dvi-am html html-am info info-am \
     847        install install-am install-data install-data-am install-dvi \
     848        install-dvi-am install-exec install-exec-am install-html \
     849        install-html-am install-info install-info-am install-man \
     850        install-pdf install-pdf-am install-ps install-ps-am \
     851        install-strip installcheck installcheck-am installdirs \
     852        maintainer-clean maintainer-clean-generic mostlyclean \
     853        mostlyclean-generic pdf pdf-am ps ps-am recheck tags-am \
     854        uninstall uninstall-am
     855
     856.PRECIOUS: Makefile
    461857
    462858
  • TabularUnified src/tests/test.py

    rb1e63ac5 r208e5be  
    161161
    162162        # remove any outputs from the previous tests to prevent side effects
    163         rm( (out_file, test.name), dry_run )
     163        rm( (out_file, err_file, test.name), dry_run )
    164164
    165165        options = "-debug" if debug else "-nodebug"
  • TabularUnified tools/cfa.nanorc

    rb1e63ac5 r208e5be  
    1818# Control Flow Structures
    1919color brightyellow "\<(if|else|while|do|for|switch|choose|case|default)\>"
    20 color brightyellow "\<(try|catch|catchResume|finally)\>"
     20color brightyellow "\<(try|catch(Resume)?|finally)\>"
    2121
    2222# Control Flow Statements
    23 color magenta "\<(return|break|continue|fallthru|throw|throwResume)\>"
     23color magenta "\<(goto|return|break|continue|fallthr(u|ough)|throw(Resume)?)\>"
    2424
    2525# Operator Names
  • TabularUnified tools/prettyprinter/Makefile.am

    rb1e63ac5 r208e5be  
    1515###############################################################################
    1616
    17 BUILT_SOURCES = parser.h
     17BUILT_SOURCES = parser.hh
    1818
    1919AM_YFLAGS = -d -t -v
  • TabularUnified tools/prettyprinter/Makefile.in

    rb1e63ac5 r208e5be  
    1 # Makefile.in generated by automake 1.11.3 from Makefile.am.
     1# Makefile.in generated by automake 1.15 from Makefile.am.
    22# @configure_input@
    33
    4 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
    5 # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
    6 # Foundation, Inc.
     4# Copyright (C) 1994-2014 Free Software Foundation, Inc.
     5
    76# This Makefile.in is free software; the Free Software Foundation
    87# gives unlimited permission to copy and/or distribute it,
     
    2019
    2120VPATH = @srcdir@
     21am__is_gnu_make = { \
     22  if test -z '$(MAKELEVEL)'; then \
     23    false; \
     24  elif test -n '$(MAKE_HOST)'; then \
     25    true; \
     26  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
     27    true; \
     28  else \
     29    false; \
     30  fi; \
     31}
     32am__make_running_with_option = \
     33  case $${target_option-} in \
     34      ?) ;; \
     35      *) echo "am__make_running_with_option: internal error: invalid" \
     36              "target option '$${target_option-}' specified" >&2; \
     37         exit 1;; \
     38  esac; \
     39  has_opt=no; \
     40  sane_makeflags=$$MAKEFLAGS; \
     41  if $(am__is_gnu_make); then \
     42    sane_makeflags=$$MFLAGS; \
     43  else \
     44    case $$MAKEFLAGS in \
     45      *\\[\ \   ]*) \
     46        bs=\\; \
     47        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
     48          | sed "s/$$bs$$bs[$$bs $$bs   ]*//g"`;; \
     49    esac; \
     50  fi; \
     51  skip_next=no; \
     52  strip_trailopt () \
     53  { \
     54    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
     55  }; \
     56  for flg in $$sane_makeflags; do \
     57    test $$skip_next = yes && { skip_next=no; continue; }; \
     58    case $$flg in \
     59      *=*|--*) continue;; \
     60        -*I) strip_trailopt 'I'; skip_next=yes;; \
     61      -*I?*) strip_trailopt 'I';; \
     62        -*O) strip_trailopt 'O'; skip_next=yes;; \
     63      -*O?*) strip_trailopt 'O';; \
     64        -*l) strip_trailopt 'l'; skip_next=yes;; \
     65      -*l?*) strip_trailopt 'l';; \
     66      -[dEDm]) skip_next=yes;; \
     67      -[JT]) skip_next=yes;; \
     68    esac; \
     69    case $$flg in \
     70      *$$target_option*) has_opt=yes; break;; \
     71    esac; \
     72  done; \
     73  test $$has_opt = yes
     74am__make_dryrun = (target_option=n; $(am__make_running_with_option))
     75am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
    2276pkgdatadir = $(datadir)/@PACKAGE@
    2377pkgincludedir = $(includedir)/@PACKAGE@
     
    4094tools_prettyprinter_PROGRAMS = pretty$(EXEEXT)
    4195subdir = tools/prettyprinter
    42 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in lex.cc \
    43         parser.cc parser.h
    4496ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    4597am__aclocal_m4_deps = $(top_srcdir)/configure.ac
    4698am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    4799        $(ACLOCAL_M4)
     100DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
    48101mkinstalldirs = $(install_sh) -d
    49102CONFIG_HEADER = $(top_builddir)/config.h
     
    61114pretty_LINK = $(CXXLD) $(pretty_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
    62115        $(LDFLAGS) -o $@
     116AM_V_P = $(am__v_P_@AM_V@)
     117am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
     118am__v_P_0 = false
     119am__v_P_1 = :
     120AM_V_GEN = $(am__v_GEN_@AM_V@)
     121am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
     122am__v_GEN_0 = @echo "  GEN     " $@;
     123am__v_GEN_1 =
     124AM_V_at = $(am__v_at_@AM_V@)
     125am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
     126am__v_at_0 = @
     127am__v_at_1 =
    63128DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
    64129depcomp = $(SHELL) $(top_srcdir)/automake/depcomp
     
    68133am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
    69134am__v_lt_0 = --silent
     135am__v_lt_1 =
    70136CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
    71137        $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
    72138AM_V_CXX = $(am__v_CXX_@AM_V@)
    73139am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
    74 am__v_CXX_0 = @echo "  CXX   " $@;
    75 AM_V_at = $(am__v_at_@AM_V@)
    76 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
    77 am__v_at_0 = @
     140am__v_CXX_0 = @echo "  CXX     " $@;
     141am__v_CXX_1 =
    78142CXXLD = $(CXX)
    79143CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
     
    81145AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
    82146am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
    83 am__v_CXXLD_0 = @echo "  CXXLD " $@;
     147am__v_CXXLD_0 = @echo "  CXXLD   " $@;
     148am__v_CXXLD_1 =
    84149@MAINTAINER_MODE_FALSE@am__skiplex = test -f $@ ||
    85150LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS)
    86151AM_V_LEX = $(am__v_LEX_@AM_V@)
    87152am__v_LEX_ = $(am__v_LEX_@AM_DEFAULT_V@)
    88 am__v_LEX_0 = @echo "  LEX   " $@;
     153am__v_LEX_0 = @echo "  LEX     " $@;
     154am__v_LEX_1 =
    89155YLWRAP = $(top_srcdir)/automake/ylwrap
    90156@MAINTAINER_MODE_FALSE@am__skipyacc = test -f $@ ||
     157am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \
     158                   -e s/c++$$/h++/ -e s/c$$/h/
    91159YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS)
    92160AM_V_YACC = $(am__v_YACC_@AM_V@)
    93161am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@)
    94 am__v_YACC_0 = @echo "  YACC  " $@;
     162am__v_YACC_0 = @echo "  YACC    " $@;
     163am__v_YACC_1 =
    95164COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
    96165        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
    97166AM_V_CC = $(am__v_CC_@AM_V@)
    98167am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
    99 am__v_CC_0 = @echo "  CC    " $@;
     168am__v_CC_0 = @echo "  CC      " $@;
     169am__v_CC_1 =
    100170CCLD = $(CC)
    101171LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
    102172AM_V_CCLD = $(am__v_CCLD_@AM_V@)
    103173am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
    104 am__v_CCLD_0 = @echo "  CCLD  " $@;
    105 AM_V_GEN = $(am__v_GEN_@AM_V@)
    106 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
    107 am__v_GEN_0 = @echo "  GEN   " $@;
     174am__v_CCLD_0 = @echo "  CCLD    " $@;
     175am__v_CCLD_1 =
    108176SOURCES = $(pretty_SOURCES)
    109177DIST_SOURCES = $(pretty_SOURCES)
     178am__can_run_installinfo = \
     179  case $$AM_UPDATE_INFO_DIR in \
     180    n|no|NO) false;; \
     181    *) (install-info --version) >/dev/null 2>&1;; \
     182  esac
     183am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
     184# Read a list of newline-separated strings from the standard input,
     185# and print each of them once, without duplicates.  Input order is
     186# *not* preserved.
     187am__uniquify_input = $(AWK) '\
     188  BEGIN { nonempty = 0; } \
     189  { items[$$0] = 1; nonempty = 1; } \
     190  END { if (nonempty) { for (i in items) print i; }; } \
     191'
     192# Make sure the list of sources is unique.  This is necessary because,
     193# e.g., the same source file might be shared among _SOURCES variables
     194# for different programs/libraries.
     195am__define_uniq_tagged_files = \
     196  list='$(am__tagged_files)'; \
     197  unique=`for i in $$list; do \
     198    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
     199  done | $(am__uniquify_input)`
    110200ETAGS = etags
    111201CTAGS = ctags
     202am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/automake/depcomp \
     203        $(top_srcdir)/automake/ylwrap lex.cc parser.cc parser.hh
    112204DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
    113205ACLOCAL = @ACLOCAL@
     
    222314program_transform_name = @program_transform_name@
    223315psdir = @psdir@
     316runstatedir = @runstatedir@
    224317sbindir = @sbindir@
    225318sharedstatedir = @sharedstatedir@
     
    230323top_builddir = @top_builddir@
    231324top_srcdir = @top_srcdir@
    232 BUILT_SOURCES = parser.h
     325BUILT_SOURCES = parser.hh
    233326AM_YFLAGS = -d -t -v
    234327SRC = lex.ll \
     
    257350          esac; \
    258351        done; \
    259         echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tools/prettyprinter/Makefile'; \
     352        echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/prettyprinter/Makefile'; \
    260353        $(am__cd) $(top_srcdir) && \
    261           $(AUTOMAKE) --foreign tools/prettyprinter/Makefile
    262 .PRECIOUS: Makefile
     354          $(AUTOMAKE) --gnu tools/prettyprinter/Makefile
    263355Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
    264356        @case '$?' in \
     
    280372install-tools_prettyprinterPROGRAMS: $(tools_prettyprinter_PROGRAMS)
    281373        @$(NORMAL_INSTALL)
    282         test -z "$(tools_prettyprinterdir)" || $(MKDIR_P) "$(DESTDIR)$(tools_prettyprinterdir)"
    283374        @list='$(tools_prettyprinter_PROGRAMS)'; test -n "$(tools_prettyprinterdir)" || list=; \
     375        if test -n "$$list"; then \
     376          echo " $(MKDIR_P) '$(DESTDIR)$(tools_prettyprinterdir)'"; \
     377          $(MKDIR_P) "$(DESTDIR)$(tools_prettyprinterdir)" || exit 1; \
     378        fi; \
    284379        for p in $$list; do echo "$$p $$p"; done | \
    285380        sed 's/$(EXEEXT)$$//' | \
    286         while read p p1; do if test -f $$p; \
    287           then echo "$$p"; echo "$$p"; else :; fi; \
     381        while read p p1; do if test -f $$p \
     382          ; then echo "$$p"; echo "$$p"; else :; fi; \
    288383        done | \
    289         sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
     384        sed -e 'p;s,.*/,,;n;h' \
     385            -e 's|.*|.|' \
    290386            -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
    291387        sed 'N;N;N;s,\n, ,g' | \
     
    308404        files=`for p in $$list; do echo "$$p"; done | \
    309405          sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
    310               -e 's/$$/$(EXEEXT)/' `; \
     406              -e 's/$$/$(EXEEXT)/' \
     407        `; \
    311408        test -n "$$list" || exit 0; \
    312409        echo " ( cd '$(DESTDIR)$(tools_prettyprinterdir)' && rm -f" $$files ")"; \
     
    315412clean-tools_prettyprinterPROGRAMS:
    316413        -test -z "$(tools_prettyprinter_PROGRAMS)" || rm -f $(tools_prettyprinter_PROGRAMS)
    317 parser.h: parser.cc
     414parser.hh: parser.cc
    318415        @if test ! -f $@; then rm -f parser.cc; else :; fi
    319416        @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) parser.cc; else :; fi
     417
    320418pretty$(EXEEXT): $(pretty_OBJECTS) $(pretty_DEPENDENCIES) $(EXTRA_pretty_DEPENDENCIES)
    321419        @rm -f pretty$(EXEEXT)
     
    335433
    336434.cc.o:
    337 @am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
    338 @am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
     435@am__fastdepCXX_TRUE@   $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
     436@am__fastdepCXX_TRUE@   $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
     437@am__fastdepCXX_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Po
    339438@AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
    340439@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     
    342441
    343442.cc.obj:
    344 @am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
    345 @am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
     443@am__fastdepCXX_TRUE@   $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
     444@am__fastdepCXX_TRUE@   $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
     445@am__fastdepCXX_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Po
    346446@AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
    347447@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     
    422522
    423523.yy.cc:
    424         $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
    425 
    426 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
    427         list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
    428         unique=`for i in $$list; do \
    429             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    430           done | \
    431           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    432               END { if (nonempty) { for (i in files) print i; }; }'`; \
    433         mkid -fID $$unique
    434 tags: TAGS
    435 
    436 TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
    437                 $(TAGS_FILES) $(LISP)
     524        $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE)
     525
     526ID: $(am__tagged_files)
     527        $(am__define_uniq_tagged_files); mkid -fID $$unique
     528tags: tags-am
     529TAGS: tags
     530
     531tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
    438532        set x; \
    439533        here=`pwd`; \
    440         list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
    441         unique=`for i in $$list; do \
    442             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    443           done | \
    444           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    445               END { if (nonempty) { for (i in files) print i; }; }'`; \
     534        $(am__define_uniq_tagged_files); \
    446535        shift; \
    447536        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
     
    455544          fi; \
    456545        fi
    457 ctags: CTAGS
    458 CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
    459                 $(TAGS_FILES) $(LISP)
    460         list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
    461         unique=`for i in $$list; do \
    462             if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
    463           done | \
    464           $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
    465               END { if (nonempty) { for (i in files) print i; }; }'`; \
     546ctags: ctags-am
     547
     548CTAGS: ctags
     549ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
     550        $(am__define_uniq_tagged_files); \
    466551        test -z "$(CTAGS_ARGS)$$unique" \
    467552          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
     
    472557          && $(am__cd) $(top_srcdir) \
    473558          && gtags -i $(GTAGS_ARGS) "$$here"
     559cscopelist: cscopelist-am
     560
     561cscopelist-am: $(am__tagged_files)
     562        list='$(am__tagged_files)'; \
     563        case "$(srcdir)" in \
     564          [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
     565          *) sdir=$(subdir)/$(srcdir) ;; \
     566        esac; \
     567        for i in $$list; do \
     568          if test -f "$$i"; then \
     569            echo "$(subdir)/$$i"; \
     570          else \
     571            echo "$$sdir/$$i"; \
     572          fi; \
     573        done >> $(top_builddir)/cscope.files
    474574
    475575distclean-tags:
     
    547647        -rm -f lex.cc
    548648        -rm -f parser.cc
    549         -rm -f parser.h
     649        -rm -f parser.hh
    550650        -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
    551651        -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
     
    622722.MAKE: all check install install-am install-strip
    623723
    624 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
    625         clean-tools_prettyprinterPROGRAMS ctags distclean \
    626         distclean-compile distclean-generic distclean-tags distdir dvi \
    627         dvi-am html html-am info info-am install install-am \
    628         install-data install-data-am install-dvi install-dvi-am \
    629         install-exec install-exec-am install-html install-html-am \
    630         install-info install-info-am install-man install-pdf \
    631         install-pdf-am install-ps install-ps-am install-strip \
    632         install-tools_prettyprinterPROGRAMS installcheck \
     724.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
     725        clean-tools_prettyprinterPROGRAMS cscopelist-am ctags ctags-am \
     726        distclean distclean-compile distclean-generic distclean-tags \
     727        distdir dvi dvi-am html html-am info info-am install \
     728        install-am install-data install-data-am install-dvi \
     729        install-dvi-am install-exec install-exec-am install-html \
     730        install-html-am install-info install-info-am install-man \
     731        install-pdf install-pdf-am install-ps install-ps-am \
     732        install-strip install-tools_prettyprinterPROGRAMS installcheck \
    633733        installcheck-am installdirs maintainer-clean \
    634734        maintainer-clean-generic mostlyclean mostlyclean-compile \
    635         mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
     735        mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
    636736        uninstall-am uninstall-tools_prettyprinterPROGRAMS
     737
     738.PRECIOUS: Makefile
    637739
    638740
  • TabularUnified tools/prettyprinter/filter.cc

    rb1e63ac5 r208e5be  
    1919using namespace std;
    2020#include "filter.h"
    21 #include "parser.h"
     21#include "parser.hh"
    2222
    2323
  • TabularUnified tools/prettyprinter/filter.h

    rb1e63ac5 r208e5be  
    1717#define __FILTER_H__
    1818
    19 #include "parser.hh"
     19#include "ParserTypes.h"
    2020
    2121extern void (* filter)( Token * tree );                                 // pointer to filter for parse tree
  • TabularUnified tools/prettyprinter/lex.ll

    rb1e63ac5 r208e5be  
    2323#include <iostream>
    2424using namespace std;
     25#include "ParserTypes.h"
    2526#include "parser.hh"
    26 #include "parser.h"
    2727
    2828#define RETURN_TOKEN( kind ) yylval.tokenp = new Token( yytext, ws_list, kind ); return kind;
  • TabularUnified tools/prettyprinter/parser.hh

    rb1e63ac5 r208e5be  
    1 //                              -*- Mode: C++ -*-
    2 //
    3 // Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
    4 //
    5 // The contents of this file are covered under the licence agreement in the
    6 // file "LICENCE" distributed with Cforall.
    7 //
    8 // parse.h - Various declarations that are needed so that the generated parser
    9 //           and lexer compile with C++, and to share information between the
    10 //           parser, lexer, and driver program
    11 //
    12 // Author           : Richard C. Bilson and Rodolfo G. Esteves
    13 // Created On       : Sun Dec 16 15:00:49 2001
    14 // Last Modified By : Peter A. Buhr
    15 // Last Modified On : Wed Jun 28 22:59:27 2017
    16 // Update Count     : 174
    17 //
     1/* A Bison parser, made by GNU Bison 3.0.4.  */
    182
    19 #ifndef __PARSER_HH__
    20 #define __PARSER_HH__
     3/* Bison interface for Yacc-like parsers in C
    214
    22 int yylex();
     5   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
    236
    24 #include <string>
    25 #include <list>
    26 #include "token.h"
     7   This program is free software: you can redistribute it and/or modify
     8   it under the terms of the GNU General Public License as published by
     9   the Free Software Foundation, either version 3 of the License, or
     10   (at your option) any later version.
    2711
    28 #endif // __PARSER_HH__
     12   This program is distributed in the hope that it will be useful,
     13   but WITHOUT ANY WARRANTY; without even the implied warranty of
     14   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15   GNU General Public License for more details.
    2916
    30 // Local Variables: //
    31 // mode: c++ //
    32 // tab-width: 4 //
    33 // compile-command: "make install" //
    34 // End: //
     17   You should have received a copy of the GNU General Public License
     18   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     19
     20/* As a special exception, you may create a larger work that contains
     21   part or all of the Bison parser skeleton and distribute that work
     22   under terms of your choice, so long as that work isn't itself a
     23   parser generator using the skeleton or a modified version thereof
     24   as a parser skeleton.  Alternatively, if you modify or redistribute
     25   the parser skeleton itself, you may (at your option) remove this
     26   special exception, which will cause the skeleton and the resulting
     27   Bison output files to be licensed under the GNU General Public
     28   License without this special exception.
     29
     30   This special exception was added by the Free Software Foundation in
     31   version 2.2 of Bison.  */
     32
     33#ifndef YY_YY_PARSER_HH_INCLUDED
     34# define YY_YY_PARSER_HH_INCLUDED
     35/* Debug traces.  */
     36#ifndef YYDEBUG
     37# define YYDEBUG 1
     38#endif
     39#if YYDEBUG
     40extern int yydebug;
     41#endif
     42
     43/* Token type.  */
     44#ifndef YYTOKENTYPE
     45# define YYTOKENTYPE
     46  enum yytokentype
     47  {
     48    MARK = 258,
     49    LCURL = 259,
     50    RCURL = 260,
     51    INTEGER = 261,
     52    CHARACTER = 262,
     53    IDENTIFIER = 263,
     54    CODE = 264,
     55    START = 265,
     56    UNION = 266,
     57    TOKEN = 267,
     58    LEFT = 268,
     59    RIGHT = 269,
     60    NONASSOC = 270,
     61    TYPE = 271,
     62    PURE_PARSER = 272,
     63    SEMANTIC_PARSER = 273,
     64    EXPECT = 274,
     65    THONG = 275,
     66    PREC = 276,
     67    END_TERMINALS = 277,
     68    _SECTIONS = 278,
     69    _DEFSECTION_OPT = 279,
     70    _LITERALBLOCK = 280,
     71    _DECLARATION = 281,
     72    _TAG_OPT = 282,
     73    _NAMENOLIST = 283,
     74    _NAMENO = 284,
     75    _NAMELIST = 285,
     76    _RULESECTION = 286,
     77    _RULE = 287,
     78    _LHS = 288,
     79    _RHS = 289,
     80    _PREC = 290,
     81    _ACTION = 291,
     82    _USERSECTION_OPT = 292
     83  };
     84#endif
     85/* Tokens.  */
     86#define MARK 258
     87#define LCURL 259
     88#define RCURL 260
     89#define INTEGER 261
     90#define CHARACTER 262
     91#define IDENTIFIER 263
     92#define CODE 264
     93#define START 265
     94#define UNION 266
     95#define TOKEN 267
     96#define LEFT 268
     97#define RIGHT 269
     98#define NONASSOC 270
     99#define TYPE 271
     100#define PURE_PARSER 272
     101#define SEMANTIC_PARSER 273
     102#define EXPECT 274
     103#define THONG 275
     104#define PREC 276
     105#define END_TERMINALS 277
     106#define _SECTIONS 278
     107#define _DEFSECTION_OPT 279
     108#define _LITERALBLOCK 280
     109#define _DECLARATION 281
     110#define _TAG_OPT 282
     111#define _NAMENOLIST 283
     112#define _NAMENO 284
     113#define _NAMELIST 285
     114#define _RULESECTION 286
     115#define _RULE 287
     116#define _LHS 288
     117#define _RHS 289
     118#define _PREC 290
     119#define _ACTION 291
     120#define _USERSECTION_OPT 292
     121
     122/* Value type.  */
     123#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
     124
     125union YYSTYPE
     126{
     127#line 41 "parser.yy" /* yacc.c:1909  */
     128
     129        Token *tokenp;
     130
     131#line 132 "parser.hh" /* yacc.c:1909  */
     132};
     133
     134typedef union YYSTYPE YYSTYPE;
     135# define YYSTYPE_IS_TRIVIAL 1
     136# define YYSTYPE_IS_DECLARED 1
     137#endif
     138
     139
     140extern YYSTYPE yylval;
     141
     142int yyparse (void);
     143
     144#endif /* !YY_YY_PARSER_HH_INCLUDED  */
  • TabularUnified tools/prettyprinter/parser.yy

    rb1e63ac5 r208e5be  
    2020#include <iostream>
    2121using namespace std;
    22 #include "parser.hh"
     22#include "ParserTypes.h"
    2323#include "filter.h"
    2424
  • TabularUnified tools/prettyprinter/token.cc

    rb1e63ac5 r208e5be  
    1616#include <string>
    1717using namespace std;
    18 #include "parser.hh"
    19 #include "parser.h"
     18#include "ParserTypes.h"
     19#include "parser.hh"
    2020#include "filter.h"
    2121
Note: See TracChangeset for help on using the changeset viewer.