commit-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[mig] 01/02: Imported Upstream version 1.6+git20160502


From: Samuel Thibault
Subject: [mig] 01/02: Imported Upstream version 1.6+git20160502
Date: Tue, 03 May 2016 00:37:56 +0000

This is an automated email from the git hooks/post-receive script.

sthibault pushed a commit to branch master
in repository mig.

commit 3cc6fae21568bd89c6af8d6b1418157a32bdec56
Author: Samuel Thibault <address@hidden>
Date:   Mon May 2 22:45:52 2016 +0000

    Imported Upstream version 1.6+git20160502
---
 ChangeLog                                     |  116 +++
 Makefile.am                                   |    8 +-
 Makefile.in                                   |  216 ++++-
 NEWS                                          |   19 +
 README                                        |    2 +-
 build-aux/test-driver                         |  148 +++
 configure                                     |   26 +-
 configure.ac                                  |    7 +-
 lexxer.c                                      | 1287 ++++++++++++-------------
 lexxer.l                                      |  115 +--
 parser.c                                      | 1054 ++++++++++----------
 parser.h                                      |  260 +++--
 parser.y                                      |   35 +-
 routine.c                                     |   85 +-
 routine.h                                     |   22 +-
 server.c                                      |   33 +-
 tests/Makeconf.am                             |   23 +
 tests/Makefile.am                             |    3 +
 tests/Makefile.in                             |  601 ++++++++++++
 tests/bad/Makefile.am                         |   23 +
 tests/bad/Makefile.in                         |  828 ++++++++++++++++
 tests/bad/invalid_subsystem.defs              |   19 +
 tests/bad/no_request_port.defs                |   23 +
 tests/bad/no_subsystem.defs                   |   19 +
 tests/bad/run_bad_test.sh                     |   28 +
 tests/base_types.defs                         |    4 +
 tests/generate-only/Makefile.am               |   23 +
 tests/generate-only/Makefile.in               |  828 ++++++++++++++++
 tests/generate-only/run_generate_only_test.sh |   28 +
 tests/generate-only/subsystem-kernel.defs     |   20 +
 tests/generate-only/subsystem-user.defs       |   20 +
 tests/good/Makefile.am                        |   24 +
 tests/good/Makefile.in                        |  830 ++++++++++++++++
 tests/good/case.defs                          |   27 +
 tests/good/complex-types.defs                 |   40 +
 tests/good/directions.defs                    |   62 ++
 tests/good/import.defs                        |   24 +
 tests/good/routine.defs                       |   35 +
 tests/good/run_good_test.sh                   |   32 +
 tests/good/types.defs                         |   74 ++
 tests/good/waittime.defs                      |   36 +
 tests/includes/all.h                          |    1 +
 tests/includes/mach/mig_support.h             |    1 +
 tests/includes/server.h                       |    1 +
 tests/includes/types.h                        |   41 +
 tests/includes/user.h                         |    1 +
 tests/test_lib.sh                             |   43 +
 type.c                                        |   14 +-
 type.h                                        |    5 +
 user.c                                        |   55 +-
 utils.c                                       |    2 +-
 51 files changed, 5708 insertions(+), 1563 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index f10b514..c463000 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,119 @@
+2016-04-26  Flavio Cruz  <address@hidden>
+
+       Simplify ArgumentType production rule.
+       * parser.y: Move syColon from ArgumentType into Argument.
+
+2016-04-20  David Michael  <address@hidden>
+
+       Make Git ignore some more automatically generated files
+       * .gitignore: Ignore parser.h and all Makefile/Makefile.in files.
+
+       Use the target platform compiler in the test scripts
+       * tests/Makeconf.am (AM_TESTS_ENVIRONMENT): Set CC to $(TARGET_CC).
+
+2016-04-20  Justus Winter  <address@hidden>
+
+       Update NEWS
+
+2016-04-19  Flavio Cruz  <address@hidden>
+
+       Simple testsuite for MIG.
+       This includes a set of valid and invalid definition files that MIG will
+       try to process. For valid definitions, GCC will compile the stubs to
+       check if valid C code was generated.
+
+       * configure.ac: Add new test Makefiles.
+       * Makefile.am: Add SUBDIRS.
+       * tests/Makeconf.am: Automake definitions shared by all test
+       subdirectories.
+       * tests/test_lib.sh: Library of functions shared by all test drivers.
+       * tests/good/run_good_test.sh: Script to run valid definition files.
+       * tests/good/Makefile.am: New file.
+       * tests/bad/Makefile.am: New file.
+       * tests/generate-only/Makefile.am: New file.
+       * tests/bad/run_bad_test.sh: Script to run invalid definition files.
+       * tests/generate-only/run_generate_only.sh: Script to run valid
+       definition files that should be generated only.
+       * tests/includes/*.h: Test header files that are included by test stubs.
+       * tests/good/*.defs: Valid definition files where
+       generated stubs can be compiled.
+       * tests/generate_only/*.defs: Valid definition files that can be
+       generated but no compilation should be attempted.
+       * tests/bad/*.defs: Definition files with problems that should be
+       detected by MIG.
+
+2016-04-15  Justus Winter  <address@hidden>
+
+       Update NEWS file
+
+2016-04-05  Flavio Cruz  <address@hidden>
+
+       Include stdint.h in stub code by default.
+       * server.c: Include stdint.h in the header code.
+       * user.c: Likewise.
+
+2016-04-04  Flavio Cruz  <address@hidden>
+
+       Use uint32_t instead of unsigned32_t.
+       * utils.c: Generate code using uint32_t.
+
+2016-04-04  Flavio Cruz  <address@hidden>
+
+       Fix use of stringize in lexxer.l
+       The fields instr and outstr should be set to a string and not to the
+       stringified number represented by the string. This improves the 
readability of
+       mig stubs code that creates mach_msg_type_t values for messages.
+
+       * lexxer.l: Inline stringize in TPRETURN and TRETURN.
+
+2016-04-03  Flavio Cruz  <address@hidden>
+
+       Use word_size instead of 4.
+       * server.c: Use word_size and update comments.
+       * type.c: Use word_size to compute padding.
+       * user.c: Use word_size and update comments.
+
+2016-03-20  Flavio Cruz  <address@hidden>
+
+       Remove functions, procedures and simple procedures.
+       This has been tested by cross-compiling a base Hurd system to make sure
+       these kinds of routines are no longer used.
+
+       * lexxer.l: Remove tokens.
+       * parser.y: Remove token types and production rules.
+       * routine.c: Remove rtMakeProcedure, rtMakeSimpleProcedure,
+       rtMakeFunction.
+       * routine.h: Remove enum values rkSimpleProcedure, rkProcedure,
+       rkFunction. Remove dead fields from struct routine.
+       * user.c: Simplify and remove dead code.
+
+2016-03-19  Flavio Cruz  <address@hidden>
+
+       Simpler lexer regexps of case insensitive keywords.
+       * lexxer.l: Use (?i) for matching case insensitive keywords.
+       * README: Fix typo.
+
+2016-03-15  Flavio Cruz  <address@hidden>
+
+       Automatically generate parser.h.
+       * Makefile.am: Set AM_YFLAGS to -d to generate parser.h. Add parser.h to
+       CLEANFILES and include parser.h as a dependency of lexxer.c.
+       * lexxer.l: Declare yyerror here.
+       * parser.h: Remove file since yacc will generate the same content
+       automatically.
+
+2016-03-07  Flavio Cruz  <address@hidden>
+
+       Correctly initialize prototype in itAlloc.
+       * type.c (itAlloc): Initialize itKernelPort to FALSE.
+
+2016-02-09  Flavio Cruz  <address@hidden>
+
+       Cast kernel server port arguments to the correct type.
+       * server.c: Add cast for ipc_port_t arguments that are handled 
differently.
+       * type.c: Set itKernelPort when the mach_port_t is treated as a 
ipc_port_t.
+       * type.h: Add itKernelPort to struct ipc_type.
+
 2015-10-31  Thomas Schwinge  <address@hidden>
 
        GNU MIG 1.6
diff --git a/Makefile.am b/Makefile.am
index 3e6dfcf..5d924da 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -3,9 +3,13 @@
 libexec_PROGRAMS = migcom
 bin_SCRIPTS = mig
 
+AM_YFLAGS = -d
+
 EXTRA_DIST = gensym.awk cpu.sym
 
-CLEANFILES = cpu.h *.sym[co] lexxer.c parser.c
+CLEANFILES = cpu.h *.sym[co] lexxer.c parser.c parser.h
+
+SUBDIRS = tests
 
 AWK_V = $(AWK_V_$(V))
 AWK_V_ = $(AWK_V_$(AM_DEFAULT_VERBOSITY))
@@ -29,6 +33,8 @@ SUFFIXES = .h .symo .symc .sym
            $< > $@
 cpu.symc: $(srcdir)/gensym.awk
 
+lexxer.c: parser.h
+
 $(migcom_OBJECTS): cpu.h
 
 #
diff --git a/Makefile.in b/Makefile.in
index f677e41..fe51580 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -183,11 +183,27 @@ am__v_YACC_0 = @echo "  YACC    " $@;
 am__v_YACC_1 = 
 SOURCES = $(migcom_SOURCES)
 DIST_SOURCES = $(migcom_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+       ctags-recursive dvi-recursive html-recursive info-recursive \
+       install-data-recursive install-dvi-recursive \
+       install-exec-recursive install-html-recursive \
+       install-info-recursive install-pdf-recursive \
+       install-ps-recursive install-recursive installcheck-recursive \
+       installdirs-recursive pdf-recursive ps-recursive \
+       tags-recursive uninstall-recursive
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+       cscope distdir dist dist-all distcheck
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 # Read a list of newline-separated strings from the standard input,
 # and print each of them once, without duplicates.  Input order is
@@ -208,7 +224,7 @@ am__define_uniq_tagged_files = \
 ETAGS = etags
 CTAGS = ctags
 CSCOPE = cscope
-AM_RECURSIVE_TARGETS = cscope
+DIST_SUBDIRS = $(SUBDIRS)
 am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/mig.in \
        $(top_srcdir)/build-aux/compile \
        $(top_srcdir)/build-aux/config.guess \
@@ -219,7 +235,7 @@ am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/mig.in \
        AUTHORS COPYING ChangeLog INSTALL NEWS README \
        build-aux/compile build-aux/config.guess build-aux/config.sub \
        build-aux/depcomp build-aux/install-sh build-aux/missing \
-       build-aux/ylwrap lexxer.c parser.c
+       build-aux/ylwrap lexxer.c parser.c parser.h
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
@@ -230,6 +246,31 @@ am__remove_distdir = \
       || { sleep 5 && rm -rf "$(distdir)"; }; \
   else :; fi
 am__post_remove_distdir = $(am__remove_distdir)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
 DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
 GZIP_ENV = --best
 DIST_TARGETS = dist-bzip2 dist-gzip
@@ -348,8 +389,10 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 bin_SCRIPTS = mig
+AM_YFLAGS = -d
 EXTRA_DIST = gensym.awk cpu.sym
-CLEANFILES = cpu.h *.sym[co] lexxer.c parser.c
+CLEANFILES = cpu.h *.sym[co] lexxer.c parser.c parser.h
+SUBDIRS = tests
 AWK_V = $(AWK_V_$(V))
 AWK_V_ = $(AWK_V_$(AM_DEFAULT_VERBOSITY))
 AWK_V_0 = @echo "  AWK    $@";
@@ -363,7 +406,7 @@ migcom_LDADD = @LEXLIB@
 SUFFIXES = .h .symo .symc .sym
 gen_start_commit = 12a56fa3ce0d65a25e7bcf68aba03d8ba189273f
 ChangeLog_files = ChangeLog
-all: all-am
+all: all-recursive
 
 .SUFFIXES:
 .SUFFIXES: .h .symo .symc .sym .c .l .o .obj .y
@@ -444,6 +487,9 @@ uninstall-libexecPROGRAMS:
 
 clean-libexecPROGRAMS:
        -test -z "$(libexec_PROGRAMS)" || rm -f $(libexec_PROGRAMS)
+parser.h: parser.c
+       @if test ! -f $@; then rm -f parser.c; else :; fi
+       @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) parser.c; else :; fi
 
 migcom$(EXEEXT): $(migcom_OBJECTS) $(migcom_DEPENDENCIES) 
$(EXTRA_migcom_DEPENDENCIES) 
        @rm -f migcom$(EXEEXT)
@@ -525,14 +571,61 @@ distclean-compile:
 .y.c:
        $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h 
`echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE)
 
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+       @fail=; \
+       if $(am__make_keepgoing); then \
+         failcom='fail=yes'; \
+       else \
+         failcom='exit 1'; \
+       fi; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
 ID: $(am__tagged_files)
        $(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-am
+tags: tags-recursive
 TAGS: tags
 
 tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
        set x; \
        here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
        $(am__define_uniq_tagged_files); \
        shift; \
        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
@@ -545,7 +638,7 @@ tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
              $$unique; \
          fi; \
        fi
-ctags: ctags-am
+ctags: ctags-recursive
 
 CTAGS: ctags
 ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
@@ -564,7 +657,7 @@ cscope: cscope.files
 clean-cscope:
        -rm -f cscope.files
 cscope.files: clean-cscope cscopelist
-cscopelist: cscopelist-am
+cscopelist: cscopelist-recursive
 
 cscopelist-am: $(am__tagged_files)
        list='$(am__tagged_files)'; \
@@ -616,6 +709,31 @@ distdir: $(DISTFILES)
            || exit 1; \
          fi; \
        done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           $(am__make_dryrun) \
+             || test -d "$(distdir)/$$subdir" \
+             || $(MKDIR_P) "$(distdir)/$$subdir" \
+             || exit 1; \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) 
top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: 
am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               am__skip_mode_fix=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
        $(MAKE) $(AM_MAKEFLAGS) \
          top_distdir="$(top_distdir)" distdir="$(distdir)" \
          dist-hook
@@ -750,21 +868,22 @@ distcleancheck: distclean
               $(distcleancheck_listfiles) ; \
               exit 1; } >&2
 check-am: all-am
-check: check-am
+check: check-recursive
 all-am: Makefile $(PROGRAMS) $(SCRIPTS)
-installdirs:
+installdirs: installdirs-recursive
+installdirs-am:
        for dir in "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(bindir)"; do \
          test -z "$$dir" || $(MKDIR_P) "$$dir"; \
        done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
 
 install-am: all-am
        @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
 
-installcheck: installcheck-am
+installcheck: installcheck-recursive
 install-strip:
        if test -z '$(STRIP)'; then \
          $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
@@ -789,97 +908,98 @@ maintainer-clean-generic:
        @echo "it deletes files that may require special tools to rebuild."
        -rm -f lexxer.c
        -rm -f parser.c
-clean: clean-am
+       -rm -f parser.h
+clean: clean-recursive
 
 clean-am: clean-generic clean-libexecPROGRAMS mostlyclean-am
 
-distclean: distclean-am
+distclean: distclean-recursive
        -rm -f $(am__CONFIG_DISTCLEAN_FILES)
        -rm -rf ./$(DEPDIR)
        -rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
        distclean-tags
 
-dvi: dvi-am
+dvi: dvi-recursive
 
 dvi-am:
 
-html: html-am
+html: html-recursive
 
 html-am:
 
-info: info-am
+info: info-recursive
 
 info-am:
 
 install-data-am:
 
-install-dvi: install-dvi-am
+install-dvi: install-dvi-recursive
 
 install-dvi-am:
 
 install-exec-am: install-binSCRIPTS install-libexecPROGRAMS
 
-install-html: install-html-am
+install-html: install-html-recursive
 
 install-html-am:
 
-install-info: install-info-am
+install-info: install-info-recursive
 
 install-info-am:
 
 install-man:
 
-install-pdf: install-pdf-am
+install-pdf: install-pdf-recursive
 
 install-pdf-am:
 
-install-ps: install-ps-am
+install-ps: install-ps-recursive
 
 install-ps-am:
 
 installcheck-am:
 
-maintainer-clean: maintainer-clean-am
+maintainer-clean: maintainer-clean-recursive
        -rm -f $(am__CONFIG_DISTCLEAN_FILES)
        -rm -rf $(top_srcdir)/autom4te.cache
        -rm -rf ./$(DEPDIR)
        -rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
-mostlyclean: mostlyclean-am
+mostlyclean: mostlyclean-recursive
 
 mostlyclean-am: mostlyclean-compile mostlyclean-generic
 
-pdf: pdf-am
+pdf: pdf-recursive
 
 pdf-am:
 
-ps: ps-am
+ps: ps-recursive
 
 ps-am:
 
 uninstall-am: uninstall-binSCRIPTS uninstall-libexecPROGRAMS
 
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-am clean \
-       clean-cscope clean-generic clean-libexecPROGRAMS cscope \
-       cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
-       dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \
-       dist-zip distcheck distclean distclean-compile \
-       distclean-generic distclean-tags distcleancheck distdir \
-       distuninstallcheck dvi dvi-am html html-am info info-am \
-       install install-am install-binSCRIPTS install-data \
-       install-data-am install-dvi install-dvi-am install-exec \
-       install-exec-am install-html install-html-am install-info \
-       install-info-am install-libexecPROGRAMS install-man \
-       install-pdf install-pdf-am install-ps install-ps-am \
-       install-strip installcheck installcheck-am installdirs \
-       maintainer-clean maintainer-clean-generic mostlyclean \
-       mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
-       tags tags-am uninstall uninstall-am uninstall-binSCRIPTS \
-       uninstall-libexecPROGRAMS
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+       am--refresh check check-am clean clean-cscope clean-generic \
+       clean-libexecPROGRAMS cscope cscopelist-am ctags ctags-am dist \
+       dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \
+       dist-tarZ dist-xz dist-zip distcheck distclean \
+       distclean-compile distclean-generic distclean-tags \
+       distcleancheck distdir distuninstallcheck dvi dvi-am html \
+       html-am info info-am install install-am install-binSCRIPTS \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-libexecPROGRAMS \
+       install-man install-pdf install-pdf-am install-ps \
+       install-ps-am install-strip installcheck installcheck-am \
+       installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
+       uninstall-am uninstall-binSCRIPTS uninstall-libexecPROGRAMS
 
 .PRECIOUS: Makefile
 
@@ -893,6 +1013,8 @@ uninstall-am: uninstall-binSCRIPTS 
uninstall-libexecPROGRAMS
            $< > $@
 cpu.symc: $(srcdir)/gensym.awk
 
+lexxer.c: parser.h
+
 $(migcom_OBJECTS): cpu.h
 
 #
diff --git a/NEWS b/NEWS
index 809ac66..03fa1c5 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,22 @@
+Version 1.7 (2016-04-XX)
+
+* MIG now has a test suite.  It includes a set of valid and invalid
+  definition files that MIG will try to process.  For valid
+  definitions, GCC will compile the stubs to check if valid C code was
+  generated.
+
+* The generated code uses integer types from 'stdint.h' now instead of
+  the old Mach types.
+
+* Code that was hard-coding the word size has been identified and
+  fixed.
+
+* Support for the obsolete kinds of RPC routines 'functions',
+  'procedures', and 'simple procedures' has been removed.
+
+* MIG now emits code that casts objects translated from capabilities
+  to the correct C type.
+
 Version 1.6 (2015-10-31)
 
 * MIG now emits RPC lookup functions that are declared `static inline'
diff --git a/README b/README
index e4c0639..2c693d8 100644
--- a/README
+++ b/README
@@ -2,7 +2,7 @@ This is GNU MIG, the GNU distribution of the Mach 3.0 Interface 
Generator
 (MIG), <http://www.gnu.org/software/hurd/microkernel/mach/mig/gnu_mig.html>.
 Welcome.
 
-This tool translates Remore Procedure Call (RPC) definition files to C
+This tool translates Remote Procedure Call (RPC) definition files to C
 code, and is required to compile any packages that are receiving or
 invoking RPCs, such as GNU Mach, GNU Hurd, and the GNU C Library (glibc)
 when compiled for the Hurd.
diff --git a/build-aux/test-driver b/build-aux/test-driver
new file mode 100755
index 0000000..8e575b0
--- /dev/null
+++ b/build-aux/test-driver
@@ -0,0 +1,148 @@
+#! /bin/sh
+# test-driver - basic testsuite driver script.
+
+scriptversion=2013-07-13.22; # UTC
+
+# Copyright (C) 2011-2014 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <address@hidden> or send patches to
+# <address@hidden>.
+
+# Make unconditional expansion of undefined variables an error.  This
+# helps a lot in preventing typo-related bugs.
+set -u
+
+usage_error ()
+{
+  echo "$0: $*" >&2
+  print_usage >&2
+  exit 2
+}
+
+print_usage ()
+{
+  cat <<END
+Usage:
+  test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
+              [--expect-failure={yes|no}] [--color-tests={yes|no}]
+              [--enable-hard-errors={yes|no}] [--]
+              TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
+The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+END
+}
+
+test_name= # Used for reporting.
+log_file=  # Where to save the output of the test script.
+trs_file=  # Where to save the metadata of the test run.
+expect_failure=no
+color_tests=no
+enable_hard_errors=yes
+while test $# -gt 0; do
+  case $1 in
+  --help) print_usage; exit $?;;
+  --version) echo "test-driver $scriptversion"; exit $?;;
+  --test-name) test_name=$2; shift;;
+  --log-file) log_file=$2; shift;;
+  --trs-file) trs_file=$2; shift;;
+  --color-tests) color_tests=$2; shift;;
+  --expect-failure) expect_failure=$2; shift;;
+  --enable-hard-errors) enable_hard_errors=$2; shift;;
+  --) shift; break;;
+  -*) usage_error "invalid option: '$1'";;
+   *) break;;
+  esac
+  shift
+done
+
+missing_opts=
+test x"$test_name" = x && missing_opts="$missing_opts --test-name"
+test x"$log_file"  = x && missing_opts="$missing_opts --log-file"
+test x"$trs_file"  = x && missing_opts="$missing_opts --trs-file"
+if test x"$missing_opts" != x; then
+  usage_error "the following mandatory options are missing:$missing_opts"
+fi
+
+if test $# -eq 0; then
+  usage_error "missing argument"
+fi
+
+if test $color_tests = yes; then
+  # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
+  red='' # Red.
+  grn='' # Green.
+  lgn='' # Light green.
+  blu='' # Blue.
+  mgn='' # Magenta.
+  std=''     # No color.
+else
+  red= grn= lgn= blu= mgn= std=
+fi
+
+do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
+trap "st=129; $do_exit" 1
+trap "st=130; $do_exit" 2
+trap "st=141; $do_exit" 13
+trap "st=143; $do_exit" 15
+
+# Test script is run here.
+"$@" >$log_file 2>&1
+estatus=$?
+
+if test $enable_hard_errors = no && test $estatus -eq 99; then
+  tweaked_estatus=1
+else
+  tweaked_estatus=$estatus
+fi
+
+case $tweaked_estatus:$expect_failure in
+  0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
+  0:*)   col=$grn res=PASS  recheck=no  gcopy=no;;
+  77:*)  col=$blu res=SKIP  recheck=no  gcopy=yes;;
+  99:*)  col=$mgn res=ERROR recheck=yes gcopy=yes;;
+  *:yes) col=$lgn res=XFAIL recheck=no  gcopy=yes;;
+  *:*)   col=$red res=FAIL  recheck=yes gcopy=yes;;
+esac
+
+# Report the test outcome and exit status in the logs, so that one can
+# know whether the test passed or failed simply by looking at the '.log'
+# file, without the need of also peaking into the corresponding '.trs'
+# file (automake bug#11814).
+echo "$res $test_name (exit status: $estatus)" >>$log_file
+
+# Report outcome to console.
+echo "${col}${res}${std}: $test_name"
+
+# Register the test result, and other relevant metadata.
+echo ":test-result: $res" > $trs_file
+echo ":global-test-result: $res" >> $trs_file
+echo ":recheck: $recheck" >> $trs_file
+echo ":copy-in-global-log: $gcopy" >> $trs_file
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/configure b/configure
index e25a1a2..8005eca 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for GNU MIG 1.6.
+# Generated by GNU Autoconf 2.69 for GNU MIG 1.6+git20160502.
 #
 # Report bugs to <address@hidden>.
 #
@@ -580,8 +580,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='GNU MIG'
 PACKAGE_TARNAME='mig'
-PACKAGE_VERSION='1.6'
-PACKAGE_STRING='GNU MIG 1.6'
+PACKAGE_VERSION='1.6+git20160502'
+PACKAGE_STRING='GNU MIG 1.6+git20160502'
 PACKAGE_BUGREPORT='address@hidden'
 PACKAGE_URL='http://www.gnu.org/software/mig/'
 
@@ -1265,7 +1265,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures GNU MIG 1.6 to adapt to many kinds of systems.
+\`configure' configures GNU MIG 1.6+git20160502 to adapt to many kinds of 
systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1337,7 +1337,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of GNU MIG 1.6:";;
+     short | recursive ) echo "Configuration of GNU MIG 1.6+git20160502:";;
    esac
   cat <<\_ACEOF
 
@@ -1436,7 +1436,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-GNU MIG configure 1.6
+GNU MIG configure 1.6+git20160502
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1683,7 +1683,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by GNU MIG $as_me 1.6, which was
+It was created by GNU MIG $as_me 1.6+git20160502, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2660,7 +2660,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='mig'
- VERSION='1.6'
+ VERSION='1.6+git20160502'
 
 
 # Some tools Automake needs.
@@ -4535,7 +4535,7 @@ MIGCOM=`echo migcom | sed "$program_transform_name"`
 MIG=`echo mig | sed "$program_transform_name"`
 
 
-ac_config_files="$ac_config_files Makefile mig"
+ac_config_files="$ac_config_files Makefile mig tests/Makefile 
tests/good/Makefile tests/generate-only/Makefile tests/bad/Makefile"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -5103,7 +5103,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by GNU MIG $as_me 1.6, which was
+This file was extended by GNU MIG $as_me 1.6+git20160502, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -5162,7 +5162,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-GNU MIG config.status 1.6
+GNU MIG config.status 1.6+git20160502
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -5283,6 +5283,10 @@ do
     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
     "mig") CONFIG_FILES="$CONFIG_FILES mig" ;;
+    "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+    "tests/good/Makefile") CONFIG_FILES="$CONFIG_FILES tests/good/Makefile" ;;
+    "tests/generate-only/Makefile") CONFIG_FILES="$CONFIG_FILES 
tests/generate-only/Makefile" ;;
+    "tests/bad/Makefile") CONFIG_FILES="$CONFIG_FILES tests/bad/Makefile" ;;
 
   *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
diff --git a/configure.ac b/configure.ac
index 6ffbeda..ddd0d4e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@ dnl configure script for GNU MIG.
 
 AC_PREREQ([2.53])
 
-AC_INIT([GNU MIG], [1.6], address@hidden)
+AC_INIT([GNU MIG], [1.6+git20160502], address@hidden)
 AC_CONFIG_SRCDIR([migcom.c])
 AC_CONFIG_AUX_DIR([build-aux])
 
@@ -59,4 +59,7 @@ AC_SUBST([MIGCOM])
 [MIG=`echo mig | sed "$program_transform_name"`]
 AC_SUBST([MIG])
 
-AC_OUTPUT([Makefile mig])
+AC_OUTPUT([Makefile mig tests/Makefile \
+           tests/good/Makefile \
+           tests/generate-only/Makefile \
+           tests/bad/Makefile])
diff --git a/lexxer.c b/lexxer.c
index d5e2238..6025a2b 100644
--- a/lexxer.c
+++ b/lexxer.c
@@ -369,8 +369,8 @@ static void yy_fatal_error (yyconst char msg[]  );
        *yy_cp = '\0'; \
        (yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 103
-#define YY_END_OF_BUFFER 104
+#define YY_NUM_RULES 100
+#define YY_END_OF_BUFFER 101
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -378,67 +378,64 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[534] =
+static yyconst flex_int16_t yy_accept[509] =
     {   0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  104,  102,  100,  101,   97,   79,   80,   77,
-       75,   74,   76,   78,   90,   72,   73,   84,   81,   85,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   86,   87,   82,
-       89,   88,   83,   91,  102,  102,  102,   99,   99,   98,
-       97,    0,    0,   95,    0,   90,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   11,   89,   89,
-       89,   89,   89,   19,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-
-       89,   91,    0,   92,    0,    0,   93,    0,    0,    0,
-        0,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   12,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-        0,   94,    0,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   31,   89,   89,   89,   28,   89,
-       89,   89,   89,    0,   18,   89,   89,   37,   89,   89,
-
-       89,   89,   20,   89,   89,   13,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   24,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,    0,   89,   89,   89,   89,   89,   89,
-       89,   25,   33,   41,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   32,   89,   89,   89,   89,   89,    0,   89,
-       89,   89,   89,   43,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   35,   89,   89,   89,   89,
-       47,    1,   89,   89,   89,   89,   89,   27,   89,   89,
-
-       26,   89,   89,   89,   96,   89,   89,   89,   40,   89,
-        2,   89,   89,   89,   89,   89,   89,    8,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,    9,   89,   89,   38,   89,   89,   42,
-       89,   89,   89,    7,   89,   89,   89,    3,   15,   89,
-       89,   89,   89,   89,   89,   89,    6,   89,   89,   46,
-       89,   36,   89,   89,   30,   89,   44,   10,   89,   89,
-       45,   89,   89,   89,   89,   17,   16,   22,   39,   89,
-       89,   89,   48,   14,   23,   89,   89,   89,   89,   29,
-       89,   21,   89,   89,   34,   89,   89,    5,   89,   89,
-
-       89,   89,   89,   89,   89,   89,   89,   89,    4,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   50,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   56,   55,   89,   89,   89,
-       89,   89,   89,   58,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   59,   89,   51,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   60,   89,
-       62,   89,   89,   89,   57,   63,   89,   64,   89,   67,
-
-       89,   69,   89,   52,   53,   54,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   71,   89,   89,   89,
-       89,   61,   89,   68,   89,   49,   89,   89,   89,   65,
-       66,   70,    0
+        0,    0,  101,   99,   97,   98,   94,   76,   77,   74,
+       72,   71,   73,   75,   87,   69,   70,   81,   78,   82,
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,   86,   83,   84,   79,   86,
+       85,   80,   88,   99,   99,   99,   96,   96,   95,   94,
+        0,    0,   92,    0,   87,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,    8,   86,   86,   86,   86,
+       86,   16,   86,   86,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,   86,   86,   86,   88,    0,
+
+       89,    0,    0,   90,    0,    0,    0,    0,   86,   86,
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,   86,   86,    9,   86,   86,
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,    0,   91,    0,   86,   86,
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,   86,   86,   28,   86,   86,
+       86,   25,   86,   86,   86,   86,    0,   15,   86,   86,
+       34,   86,   86,   86,   86,   17,   86,   10,   86,   86,
+
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   21,
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,    0,   86,   86,   86,   86,   86,
+       86,   22,   30,   38,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
+       86,   29,   86,   86,   86,   86,   86,    0,   86,   86,
+       86,   86,   40,   86,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   32,   86,   86,   86,   44,    1,   86,
+       86,   86,   86,   24,   86,   86,   23,   86,   86,   86,
+       93,   86,   86,   86,   37,   86,   86,   86,   86,   86,
+
+       86,   86,    5,   86,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,   86,    6,   86,   86,   35,
+       86,   86,   39,   86,   86,   86,    4,   86,   86,   86,
+       12,   86,   86,   86,   86,   86,   86,    3,   86,   86,
+       43,   86,   33,   86,   86,   27,   86,   41,    7,   86,
+       86,   42,   86,   86,   86,   14,   13,   19,   36,   86,
+       86,   86,   45,   11,   20,   86,   86,   86,   26,   86,
+       18,   86,   31,   86,    2,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,   86,   47,   86,   86,   86,
+
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
+       53,   52,   86,   86,   86,   86,   86,   86,   55,   86,
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
+       56,   86,   48,   86,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   57,   86,   59,   86,   86,   86,   54,
+       60,   86,   61,   86,   64,   86,   66,   86,   49,   50,
+       51,   86,   86,   86,   86,   86,   86,   86,   86,   86,
+       86,   68,   86,   86,   86,   86,   58,   86,   65,   86,
+
+       46,   86,   86,   86,   62,   63,   67,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -455,8 +452,8 @@ static yyconst flex_int32_t yy_ec[256] =
        52,    1,   53,   54,   55,    1,   56,   57,   58,   59,
 
        60,   61,   62,   63,   64,   36,   65,   66,   67,   68,
-       69,   70,   43,   71,   72,   73,   74,   75,   49,   50,
-       76,   36,    1,   77,    1,   78,    1,    1,    1,    1,
+       69,   70,   71,   72,   73,   74,   75,   76,   77,   78,
+       79,   36,    1,   80,    1,   81,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -473,7 +470,7 @@ static yyconst flex_int32_t yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[79] =
+static yyconst flex_int32_t yy_meta[82] =
     {   0,
         1,    1,    2,    1,    1,    1,    3,    1,    1,    1,
         1,    1,    3,    3,    4,    4,    4,    4,    4,    4,
@@ -482,266 +479,256 @@ static yyconst flex_int32_t yy_meta[79] =
         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
         4,    1,    1,    1,    4,    4,    4,    4,    4,    4,
         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-        4,    4,    4,    4,    4,    4,    1,    1
+        4,    4,    4,    4,    4,    4,    4,    4,    4,    1,
+        1
     } ;
 
-static yyconst flex_int16_t yy_base[543] =
+static yyconst flex_int16_t yy_base[518] =
     {   0,
-        0,    3,    9, 1016,   87,  165,   98,  102,  112,  125,
-      116,  130, 1021, 1023, 1023, 1023,  133, 1023, 1023, 1023,
-     1023, 1023, 1023, 1023,  140, 1023, 1023, 1023, 1023, 1023,
-       50,    0,  138,  112,  134,  134,  155,  149,  159,  155,
-      167,  185,  203,  242,   87,  195,  179, 1023, 1023, 1023,
-      153, 1023, 1023,    0, 1015,  993, 1013, 1023, 1023, 1023,
-      276,  306,  326,  334,  957,  230,    0,  189,  190,  205,
-      162,  210,  212,  231,  227,  213,  220,  288,  318,  230,
-      987,  237,  291,    0,  239,  245,  263,  288,  320,  301,
-      321,  292,  332,  337,  327,  342,  330,  334,  343,  345,
-
-      342,    0, 1010, 1023,  988, 1008, 1023,  405,  140, 1007,
-      950,  352,  343,  341,  345,  357,  343,  353,  356,  363,
-      384,  377,  367,  383,  387,  389,  391,  976,  392,  404,
-      409,  389,  224,  409,  404,  405,  398,  411,  401,  400,
-      407,  408,  409,  406,  410,  413,  415,  418,  422,  424,
-     1004, 1023,  944,  318,  430,  433,  452,  440,  442,  449,
-      445,  446,  445,  448,  448,  468,  458,  450,  468,  952,
-      459,  471,  473,  470,  456,  468,  478,  480,  469,  483,
-      481,  490,  499,  499,    0,  494,  512,  485,    0,  503,
-      508,  505,  496,  938,    0,  513,  518,    0,  506,  516,
-
-      512,  508,    0,  521,  511,    0,  518,  529,  526,  528,
-      966,  517,  961,  540,  525,  546,  535,  553,    0,  545,
-      544,  558,  553,  551,  566,  556,  548,  555,  558,  561,
-      555,  563,  573,  943,  570,  565,  563,  573,  582,  589,
-      579,    0,  581,    0,  584,  588,  957,  594,  602,  605,
-      573,  604,  605,  603,  604,  606,  623,  624,  627,  617,
-      617,  622,    0,  620,  621,  626,  643,  639,  121,  639,
-      629,  639,  649,    0,  643,  651,  668,  658,  668,  655,
-      968,  660,  663,  667,  672,    0,  668,  668,  669,  672,
-        0,    0,  674,  686,  674,  676,  680,    0,  681,  692,
-
-        0,  684,  698,  700, 1023,  687,  686,  704,    0,  700,
-        0,  697,  718,  700,  723,  945,  716,    0,  716,  719,
-      729,  734,  709,  726,  726,  731,  741,  733,  719,  732,
-      738,  735,  740,    0,  735,  745,    0,  745,  752,    0,
-      749,  755,  953,    0,  749,  757,  756,    0,    0,  756,
-      758,  763,  779,  783,  773,  775,    0,  776,  948,    0,
-      782,    0,  782,  783,    0,  946,    0,    0,  796,  782,
-        0,  946,  794,  799,  796,    0,    0,    0,    0,  805,
-      791,  953,    0,    0,    0,  944,  806,  798,  809,    0,
-      962,    0,  797,  814,    0,  937,  806,    0,  828,  816,
-
-      843,  845,  951,  174,  949,  958,  942,  947,    0,  940,
-      944,  938,  956,  940,  935,  943,  931,  159,  951,  933,
-      931,    0,  937,  943,  929,  921,  940,  939,  938,  917,
-      921,  928,  930,  918,  932,    0,    0,  907,  928,  905,
-      904,  919,  902,    0,  916,  911,  927,  908,  921,  906,
-      102,  909,  176,  916,  901,  907,  915,  901,  913,  912,
-      911,  897,  913,  908,  907,  882,  907,    0,  895,  879,
-      893,  903,  891,  888,  890,  899,  887,  897,  879,  888,
-      867,  884,  879,  863,  858,  860,  859,  859,    0,  835,
-        0,  861,  863,  850,    0,  809,  818,  797,  798,    0,
-
-      630,  451,  408,    0,    0,    0,  354,  334,  340,  351,
-      330,  279,  288,  278,  286,  274,    0,  278,  265,  239,
-      239,    0,  223,    0,  173,    0,  151,  131,   93,    0,
-        0,    0, 1023,  894,  898,  902,    4,  904,  908,  912,
-      916,  920
+        0,    3,    9,  977,   90,  171,  101,  105,  115,  128,
+      119,  133,  982,  984,  984,  984,  143,  984,  984,  984,
+      984,  984,  984,  984,  133,  984,  984,  984,  984,  984,
+       83,    0,  143,   66,   84,  146,  107,  142,   99,  160,
+      137,  170,  196,  153,  165,  178,  984,  984,  984,  163,
+      984,  984,    0,  976,  954,  974,  984,  984,  984,  260,
+      270,  280,  305,  918,  229,    0,  182,  194,  232,  204,
+      220,  221,  284,  258,  261,  267,  266,  261,  948,  281,
+      289,    0,  270,  279,  273,  305,  280,  284,  298,  304,
+      311,  305,  324,  308,  315,  327,  328,  325,    0,  971,
+
+      984,  949,  969,  984,  381,  365,  968,  911,  334,  324,
+      336,  342,  331,  347,  356,  349,  362,  363,  358,  362,
+      366,  368,  370,  937,  370,  383,  389,  372,  368,  385,
+      386,  378,  397,  382,  381,  388,  394,  398,  394,  399,
+      417,  408,  409,  410,  413,  965,  984,  905,  409,  415,
+      414,  432,  421,  422,  429,  426,  427,  429,  428,  448,
+      440,  435,  445,  913,  441,  453,  454,  451,  447,  457,
+      467,  449,  472,  465,  472,  479,  479,    0,  474,  489,
+      465,    0,  480,  484,  481,  479,  899,    0,  492,  498,
+        0,  485,  498,  494,  490,    0,  492,    0,  501,  509,
+
+      508,  514,  927,  508,  512,  516,  511,  533,  523,    0,
+      525,  523,  531,  530,  529,  544,  533,  527,  533,  536,
+      540,  535,  543,  553,  905,  551,  549,  543,  557,  570,
+      571,    0,  560,    0,  562,  563,  919,  576,  573,  578,
+      572,  580,  579,  583,  580,  596,  601,  605,  593,  593,
+      600,    0,  597,  599,  607,  602,  611,  218,  612,  609,
+      615,  625,    0,  614,  639,  628,  638,  627,  930,  633,
+      635,  641,  645,    0,  640,  640,  644,    0,    0,  648,
+      659,  648,  652,    0,  653,  666,    0,  658,  669,  672,
+      984,  658,  655,  677,    0,  670,  662,  682,  674,  685,
+
+      907,  683,    0,  683,  686,  694,  685,  694,  694,  699,
+      698,  693,  698,  704,  703,  713,    0,  704,  712,    0,
+      711,  718,    0,  712,  717,  915,    0,  733,  734,  732,
+        0,  725,  721,  726,  742,  730,  733,    0,  734,  731,
+        0,  754,    0,  746,  759,    0,  909,    0,    0,  763,
+      749,    0,  748,  758,  764,    0,    0,    0,    0,  775,
+      761,  917,    0,    0,    0,  756,  770,  781,    0,  927,
+        0,  781,    0,  902,    0,  807,  802,  779,  916,  226,
+      914,  923,  907,  912,  905,  909,  903,  921,  905,  900,
+      908,  896,  780,  916,  898,  896,    0,  902,  908,  894,
+
+      886,  905,  904,  903,  882,  886,  893,  895,  883,  897,
+        0,    0,  872,  893,  870,  869,  884,  867,    0,  881,
+      876,  892,  873,  886,  871,  121,  874,  785,  881,  866,
+      872,  880,  866,  878,  877,  876,  862,  878,  873,  872,
+      847,  872,    0,  860,  844,  858,  868,  856,  853,  855,
+      864,  852,  862,  838,  850,  839,  846,  827,  826,  816,
+      817,  816,  815,    0,  797,    0,  819,  815,  808,    0,
+      762,  781,  731,  714,    0,  656,  604,  532,    0,    0,
+        0,  489,  379,  376,  385,  326,  332,  341,  313,  284,
+      272,    0,  242,  219,  228,  228,    0,  174,    0,  128,
+
+        0,  115,  110,   93,    0,    0,    0,  984,  860,  864,
+      868,    4,  870,  874,  878,  882,  886
     } ;
 
-static yyconst flex_int16_t yy_def[543] =
+static yyconst flex_int16_t yy_def[518] =
     {   0,
-      534,  534,  533,    3,  535,  535,  534,  534,  534,  534,
-      536,  536,  533,  533,  533,  533,  533,  533,  533,  533,
-      533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  533,  533,  533,
-      537,  533,  533,  538,  539,  540,  541,  533,  533,  533,
-      533,  533,  533,  533,  533,  533,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-
-      537,  538,  539,  533,  540,  541,  533,  533,  533,  542,
-      533,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      542,  533,  533,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  533,  537,  537,  537,  537,  537,  537,
-
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  533,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  533,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-
-      537,  537,  537,  537,  533,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,    0,  533,  533,  533,  533,  533,  533,  533,
-      533,  533
+      509,  509,  508,    3,  510,  510,  509,  509,  509,  509,
+      511,  511,  508,  508,  508,  508,  508,  508,  508,  508,
+      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  508,  508,  508,  512,
+      508,  508,  513,  514,  515,  516,  508,  508,  508,  508,
+      508,  508,  508,  508,  508,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  513,  514,
+
+      508,  515,  516,  508,  508,  508,  517,  508,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  517,  508,  508,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  508,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  508,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  508,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      508,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+
+      512,  512,  512,  512,  512,  512,  512,    0,  508,  508,
+      508,  508,  508,  508,  508,  508,  508
     } ;
 
-static yyconst flex_int16_t yy_nxt[1102] =
+static yyconst flex_int16_t yy_nxt[1066] =
     {   0,
-      533,   15,   16,   15,   15,   16,   15,   67,   17,   14,
+      508,   15,   16,   15,   15,   16,   15,   66,   17,   14,
        15,   16,   15,   14,   14,   14,   18,   19,   20,   21,
        22,   23,   24,   25,   25,   25,   25,   25,   25,   25,
        26,   27,   28,   29,   30,   31,   32,   33,   34,   35,
-       36,   32,   32,   37,   32,   38,   32,   39,   40,   41,
-       42,   32,   43,   44,   45,   46,   32,   47,   32,   32,
-       48,   49,   50,   32,   31,   32,   33,   34,   35,   36,
-       32,   32,   37,   38,   32,   51,   40,   41,   42,   43,
-       44,   45,   46,   32,   32,   52,   53,   14,   15,   16,
-       15,   14,   14,   68,   14,   14,   14,   14,   14,   15,
-
-       16,   15,   55,   15,   16,   15,   55,   17,   14,   14,
-       14,   14,   14,   15,   16,   15,   57,   59,   60,   59,
-       68,   56,  305,  532,  305,   56,   15,   16,   15,   57,
-       17,   59,   60,   59,   62,   61,   63,   97,   14,   14,
-       14,  109,   74,  109,  110,  460,  461,   64,   64,   64,
-       64,   64,   64,   64,   66,   66,   66,   66,   66,   66,
-       66,  531,   97,   14,   14,   14,   15,   16,   15,   14,
-       17,   74,   14,   14,   14,   14,   14,   75,   69,   80,
-       76,  530,   70,   71,   72,   81,   14,   14,   14,   14,
-       14,   65,   73,   77,   78,   83,  430,   82,   84,   79,
-
-      416,  529,  431,   82,   75,  101,   69,   76,   80,   70,
-       71,   72,  115,   85,  417,  463,   14,   14,   14,  464,
-      465,   77,   78,   83,   82,   86,   79,   84,   87,   98,
-       82,   88,  112,   89,  101,  114,  113,  115,   99,  100,
-       85,   14,   14,   90,   66,   66,   66,   66,   66,   66,
-       66,  528,  121,   86,  116,   87,  117,  118,   98,  112,
-       88,  122,   89,  113,  114,   99,  100,  527,  526,  129,
-      120,   90,   91,  127,  176,  119,   92,   62,   93,   63,
-      121,  116,  133,  117,  132,   94,  118,   95,   96,  122,
-       64,   64,   64,   64,   64,   64,   64,  120,  129,  176,
-
-      127,   91,  119,  134,  525,   92,   93,   62,  524,   62,
-      133,  132,   94,  523,   95,   96,  522,  521,  520,  519,
-      108,  108,  108,  108,  108,  108,  108,   62,  123,   63,
-      141,  134,  135,  124,   65,  109,  130,  109,  110,  131,
-       64,   64,   64,   64,   64,   64,   64,  139,   64,   64,
-       64,   64,   64,   64,   64,  125,  123,  126,  141,  135,
-      124,  136,  137,  130,  140,  138,  142,  143,  195,  145,
-      144,  146,  147,  148,  139,  149,  150,  518,  154,  517,
-      516,  515,  155,  125,  156,  126,  157,  158,  159,  136,
-      160,  140,  138,  195,  514,  142,  143,  144,  145,  146,
-
-      147,  161,  148,  162,  149,  150,  109,  154,  109,  110,
-      155,  156,  163,  165,  157,  159,  158,  164,  160,  108,
-      108,  108,  108,  108,  108,  108,  166,  167,  161,  168,
-      169,  162,  171,  173,  175,  174,  172,  177,  178,  181,
-      165,  163,  179,  189,  180,  164,  182,  183,  184,  185,
-      186,  513,  187,  166,  188,  167,  190,  168,  169,  191,
-      171,  175,  173,  172,  174,  192,  177,  178,  181,  193,
-      179,  180,  189,  182,  183,  196,  184,  185,  186,  187,
-      197,  188,  198,  199,  190,  200,  201,  191,  202,  203,
-      204,  205,  192,  206,  207,  209,  193,  208,  210,  216,
-
-      212,  213,  196,  214,  215,  512,  217,  197,  218,  219,
-      199,  198,  200,  221,  201,  202,  203,  204,  205,  220,
-      206,  222,  209,  207,  223,  208,  216,  210,  212,  224,
-      213,  227,  214,  215,  217,  229,  225,  218,  219,  226,
-      228,  233,  221,  230,  220,  231,  232,  235,  236,  222,
-      238,  237,  239,  223,  240,  241,  242,  243,  224,  227,
-      229,  244,  248,  245,  225,  246,  250,  226,  233,  228,
-      251,  230,  252,  231,  232,  253,  235,  236,  237,  238,
-      239,  240,  254,  242,  241,  243,  255,  257,  256,  248,
-      244,  245,  258,  246,  259,  250,  260,  251,  262,  261,
-
-      263,  252,  264,  253,  265,  266,  267,  268,  271,  270,
-      274,  254,  273,  272,  255,  256,  257,  275,  285,  276,
-      258,  259,  277,  262,  278,  260,  261,  263,  282,  264,
-      266,  265,  279,  267,  280,  271,  268,  270,  272,  274,
-      273,  283,  284,  286,  289,  285,  275,  276,  287,  288,
-      277,  290,  278,  291,  292,  293,  294,  282,  296,  279,
-      297,  280,  298,  299,  511,  300,  301,  302,  295,  283,
-      284,  286,  289,  303,  307,  287,  288,  304,  290,  306,
-      308,  309,  291,  292,  293,  294,  296,  297,  310,  298,
-      311,  299,  300,  301,  312,  302,  295,  313,  314,  315,
-
-      317,  307,  303,  318,  319,  304,  320,  306,  308,  321,
-      309,  322,  323,  324,  325,  310,  326,  327,  311,  328,
-      329,  330,  331,  312,  332,  313,  315,  314,  317,  333,
-      334,  318,  319,  335,  337,  320,  336,  321,  322,  323,
-      338,  324,  325,  341,  327,  326,  328,  339,  329,  330,
-      340,  331,  332,  342,  349,  344,  345,  346,  333,  334,
-      335,  336,  347,  337,  348,  355,  350,  351,  338,  352,
-      341,  353,  339,  354,  359,  356,  357,  367,  358,  340,
-      360,  349,  342,  344,  345,  346,  361,  368,  362,  363,
-      369,  347,  355,  348,  350,  351,  364,  352,  365,  370,
-
-      353,  354,  356,  359,  357,  358,  367,  360,  371,  372,
-      373,  374,  379,  381,  361,  362,  368,  363,  375,  369,
-      376,  377,  380,  364,  383,  365,  370,  384,  386,  387,
-      388,  389,  510,  371,  390,  393,  372,  394,  395,  373,
-      374,  379,  381,  397,  398,  375,  409,  376,  377,  400,
-      380,  509,  508,  383,  384,  401,  402,  386,  387,  388,
-      389,  390,  403,  507,  393,  394,  404,  395,  506,  405,
-      397,  406,  407,  398,  408,  409,  400,  410,  413,  505,
-      504,  503,  492,  411,  493,  414,  494,  495,  502,  501,
-      500,  499,  498,  412,   14,   14,   14,   14,   54,   54,
-
-       54,   54,   58,   58,   58,   58,  102,  102,  103,  497,
-      103,  103,  105,  496,  105,  105,  106,  491,  106,  106,
-      151,  151,  151,  151,  490,  489,  488,  487,  486,  485,
-      484,  483,  482,  481,  480,  479,  478,  477,  476,  475,
-      474,  473,  472,  471,  470,  469,  468,  467,  466,  462,
-      459,  458,  457,  456,  455,  454,  453,  452,  451,  450,
-      449,  448,  447,  446,  445,  444,  443,  442,  441,  440,
-      439,  438,  437,  436,  435,  434,  433,  432,  429,  428,
-      427,  426,  425,  424,  423,  422,  421,  420,  419,  418,
-      415,  399,  396,  392,  391,  385,  382,  378,  366,  343,
-
-      316,  281,  269,  249,  247,  234,  211,  194,  152,  170,
-      153,  152,  107,  104,  104,  128,  111,  107,  104,  104,
-      533,   17,   13,  533,  533,  533,  533,  533,  533,  533,
-      533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
-      533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
-      533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
-      533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
-      533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
-      533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
-      533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
-
-      533
+       32,   32,   32,   36,   32,   37,   32,   38,   39,   40,
+       41,   32,   42,   43,   44,   45,   32,   46,   32,   32,
+       47,   48,   49,   32,   31,   32,   33,   34,   35,   32,
+       32,   32,   36,   37,   32,   50,   39,   40,   41,   32,
+       42,   43,   44,   45,   32,   46,   32,   32,   51,   52,
+       14,   15,   16,   15,   14,   14,   73,   14,   14,   14,
+
+       14,   14,   15,   16,   15,   54,   15,   16,   15,   54,
+       17,   14,   14,   14,   14,   14,   15,   16,   15,   56,
+       58,   59,   58,  507,   55,   73,   67,   74,   55,   15,
+       16,   15,   56,   17,   58,   59,   58,   78,   60,   81,
+      506,   14,   14,   14,   61,  505,   62,   65,   65,   65,
+       65,   65,   65,   65,   67,   74,  504,   63,   63,   63,
+       63,   63,   63,   63,  435,  436,   78,   81,   79,   14,
+       14,   14,   15,   16,   15,   14,   17,   84,   14,   14,
+       14,   14,   14,   68,   75,   76,   80,   69,   70,   71,
+       77,   82,   14,   14,   14,   14,   14,   72,   85,   95,
+
+       86,   64,  503,   94,   98,   84,   83,   80,   96,   97,
+       87,   68,   75,   76,   80,   69,   70,   71,   77,  291,
+       82,  291,   14,   14,   14,  109,   88,   85,   95,   86,
+       89,   94,   90,   98,   83,   80,   96,   97,   87,   91,
+      110,   92,   93,   65,   65,   65,   65,   65,   65,   65,
+       14,   14,  391,  109,  112,   88,  502,  501,  500,   89,
+       90,   61,  111,   62,  113,  114,  392,   91,  110,   92,
+       93,   61,  499,   61,   63,   63,   63,   63,   63,   63,
+       63,   61,  112,   62,  105,  105,  105,  105,  105,  105,
+      105,  111,  113,  114,   63,   63,   63,   63,   63,   63,
+
+       63,  117,  118,  121,  123,  122,  106,  119,  106,  107,
+      115,  498,  120,  125,  497,  128,  129,  130,   64,   63,
+       63,   63,   63,   63,   63,   63,  134,  135,  116,  117,
+      118,  121,  123,  122,  126,  119,  136,  127,  137,  115,
+      120,  138,  125,  128,  129,  130,  131,  132,  139,  141,
+      133,  140,  496,  142,  134,  135,  116,  143,  144,  145,
+      149,  153,  126,  150,  136,  127,  106,  137,  106,  107,
+      138,  495,  494,  493,  131,  132,  139,  141,  133,  151,
+      140,  142,  106,  152,  106,  107,  143,  144,  145,  149,
+      153,  150,  154,  155,  156,  105,  105,  105,  105,  105,
+
+      105,  105,  157,  158,  159,  160,  161,  151,  162,  163,
+      165,  152,  167,  492,  166,  168,  491,  169,  170,  171,
+      154,  155,  156,  172,  173,  174,  490,  175,  176,  177,
+      157,  158,  159,  160,  161,  178,  162,  163,  165,  179,
+      180,  167,  166,  181,  168,  169,  170,  182,  171,  183,
+      184,  172,  173,  185,  174,  175,  176,  177,  186,  188,
+      189,  190,  191,  178,  192,  193,  194,  179,  180,  195,
+      196,  181,  197,  198,  199,  202,  182,  183,  184,  200,
+      201,  185,  204,  205,  206,  207,  186,  188,  189,  190,
+      208,  191,  192,  193,  194,  209,  210,  195,  196,  211,
+
+      197,  198,  212,  199,  202,  213,  214,  200,  201,  215,
+      204,  218,  205,  206,  207,  220,  216,  219,  208,  217,
+      221,  222,  223,  209,  224,  210,  226,  211,  227,  489,
+      228,  212,  229,  213,  230,  214,  231,  232,  215,  218,
+      233,  234,  240,  220,  216,  235,  219,  217,  221,  222,
+      223,  236,  224,  238,  239,  226,  241,  227,  228,  242,
+      246,  229,  230,  243,  231,  232,  244,  245,  233,  247,
+      234,  240,  248,  235,  249,  488,  250,  251,  252,  236,
+      253,  238,  239,  254,  241,  255,  256,  257,  242,  246,
+      259,  243,  260,  261,  244,  245,  262,  247,  263,  264,
+
+      248,  265,  266,  249,  250,  251,  252,  267,  253,  268,
+      270,  254,  271,  255,  256,  272,  257,  273,  259,  274,
+      260,  261,  275,  276,  262,  277,  278,  263,  264,  265,
+      266,  279,  289,  280,  281,  267,  283,  268,  284,  270,
+      271,  285,  286,  272,  287,  273,  282,  274,  288,  290,
+      275,  276,  292,  277,  293,  278,  294,  295,  487,  296,
+      279,  289,  280,  281,  283,  297,  284,  298,  299,  285,
+      286,  300,  287,  302,  282,  303,  288,  290,  304,  305,
+      292,  306,  293,  307,  294,  308,  295,  296,  309,  310,
+      486,  311,  312,  313,  297,  298,  314,  299,  315,  300,
+
+      316,  302,  317,  303,  318,  319,  304,  320,  305,  306,
+      321,  307,  322,  308,  323,  325,  309,  324,  310,  311,
+      312,  313,  327,  328,  329,  314,  315,  330,  335,  316,
+      331,  317,  318,  319,  332,  333,  320,  334,  321,  336,
+      322,  337,  338,  323,  325,  324,  339,  340,  485,  341,
+      327,  328,  329,  342,  343,  344,  330,  335,  331,  345,
+      346,  348,  332,  333,  349,  334,  350,  336,  351,  337,
+      338,  352,  353,  354,  339,  355,  340,  341,  356,  357,
+      358,  342,  343,  344,  359,  484,  360,  345,  346,  361,
+      348,  363,  366,  349,  364,  350,  351,  365,  367,  352,
+
+      353,  368,  354,  355,  369,  371,  356,  357,  358,  372,
+      373,  375,  388,  359,  360,  483,  482,  405,  361,  389,
+      363,  366,  364,  406,  438,  365,  481,  367,  439,  440,
+      368,  480,  369,  371,  377,  378,  385,  372,  479,  373,
+      375,  379,  386,  478,  477,  380,  476,  475,  381,  474,
+      382,  383,  387,  384,  467,  473,  468,  472,  469,  470,
+       14,   14,   14,   14,   53,   53,   53,   53,   57,   57,
+       57,   57,   99,   99,  100,  471,  100,  100,  102,  466,
+      102,  102,  103,  465,  103,  103,  146,  146,  146,  146,
+      464,  463,  462,  461,  460,  459,  458,  457,  456,  455,
+
+      454,  453,  452,  451,  450,  449,  448,  447,  446,  445,
+      444,  443,  442,  441,  437,  434,  433,  432,  431,  430,
+      429,  428,  427,  426,  425,  424,  423,  422,  421,  420,
+      419,  418,  417,  416,  415,  414,  413,  412,  411,  410,
+      409,  408,  407,  404,  403,  402,  401,  400,  399,  398,
+      397,  396,  395,  394,  393,  390,  376,  374,  370,  362,
+      347,  326,  301,  269,  258,  237,  225,  203,  187,  147,
+      164,  148,  147,  104,  101,  101,  124,  108,  104,  101,
+      101,  508,   17,   13,  508,  508,  508,  508,  508,  508,
+      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
+
+      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
+      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
+      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
+      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
+      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
+      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
+      508,  508,  508,  508,  508
     } ;
 
-static yyconst flex_int16_t yy_chk[1102] =
+static yyconst flex_int16_t yy_chk[1066] =
     {   0,
-        0,    1,    1,    1,    2,    2,    2,  537,    2,    3,
+        0,    1,    1,    1,    2,    2,    2,  512,    2,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
@@ -749,120 +736,115 @@ static yyconst flex_int16_t yy_chk[1102] =
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,    3,    3,    3,    3,    3,    3,    5,    5,    5,
-        5,    5,    5,   31,    5,    5,    5,    5,    5,    7,
-
-        7,    7,    7,    8,    8,    8,    8,    8,    5,    5,
-        5,    5,    5,    9,    9,    9,    9,   11,   11,   11,
-       31,    7,  269,  529,  269,    8,   10,   10,   10,   10,
-       10,   12,   12,   12,   17,   12,   17,   45,    5,    5,
-        5,  109,   34,  109,  109,  451,  451,   17,   17,   17,
-       17,   17,   17,   17,   25,   25,   25,   25,   25,   25,
-       25,  528,   45,    5,    5,    6,    6,    6,    6,    6,
-        6,   34,    6,    6,    6,    6,    6,   35,   33,   38,
-       36,  527,   33,   33,   33,   39,    6,    6,    6,    6,
-        6,   17,   33,   37,   37,   40,  418,   51,   41,   37,
-
-      404,  525,  418,   39,   35,   47,   33,   36,   38,   33,
-       33,   33,   71,   41,  404,  453,    6,    6,    6,  453,
-      453,   37,   37,   40,   51,   42,   37,   41,   42,   46,
-       39,   43,   68,   43,   47,   70,   69,   71,   46,   46,
-       41,    6,    6,   43,   66,   66,   66,   66,   66,   66,
-       66,  523,   76,   42,   72,   42,   73,   74,   46,   68,
-       43,   77,   43,   69,   70,   46,   46,  521,  520,   82,
-       75,   43,   44,   80,  133,   74,   44,   61,   44,   61,
-       76,   72,   86,   73,   85,   44,   74,   44,   44,   77,
-       61,   61,   61,   61,   61,   61,   61,   75,   82,  133,
-
-       80,   44,   74,   87,  519,   44,   44,   62,  518,   62,
-       86,   85,   44,  516,   44,   44,  515,  514,  513,  512,
-       62,   62,   62,   62,   62,   62,   62,   63,   78,   63,
-       92,   87,   88,   78,   61,   64,   83,   64,   64,   83,
-       63,   63,   63,   63,   63,   63,   63,   90,   64,   64,
-       64,   64,   64,   64,   64,   79,   78,   79,   92,   88,
-       78,   89,   89,   83,   91,   89,   93,   94,  154,   96,
-       95,   97,   98,   99,   90,  100,  101,  511,  112,  510,
-      509,  508,  113,   79,  114,   79,  115,  116,  117,   89,
-      118,   91,   89,  154,  507,   93,   94,   95,   96,   97,
-
-       98,  119,   99,  120,  100,  101,  108,  112,  108,  108,
-      113,  114,  121,  123,  115,  117,  116,  122,  118,  108,
-      108,  108,  108,  108,  108,  108,  124,  125,  119,  126,
-      127,  120,  129,  130,  132,  131,  129,  134,  135,  138,
-      123,  121,  136,  146,  137,  122,  139,  140,  141,  142,
-      143,  503,  144,  124,  145,  125,  147,  126,  127,  148,
-      129,  132,  130,  129,  131,  149,  134,  135,  138,  150,
-      136,  137,  146,  139,  140,  155,  141,  142,  143,  144,
-      156,  145,  157,  158,  147,  159,  160,  148,  161,  162,
-      163,  164,  149,  165,  166,  168,  150,  167,  169,  175,
-
-      171,  172,  155,  173,  174,  502,  176,  156,  177,  178,
-      158,  157,  159,  180,  160,  161,  162,  163,  164,  179,
-      165,  181,  168,  166,  182,  167,  175,  169,  171,  183,
-      172,  186,  173,  174,  176,  188,  184,  177,  178,  184,
-      187,  193,  180,  190,  179,  191,  192,  196,  197,  181,
-      200,  199,  201,  182,  202,  204,  205,  207,  183,  186,
-      188,  208,  212,  209,  184,  210,  214,  184,  193,  187,
-      215,  190,  216,  191,  192,  217,  196,  197,  199,  200,
-      201,  202,  218,  205,  204,  207,  220,  222,  221,  212,
-      208,  209,  223,  210,  224,  214,  225,  215,  227,  226,
-
-      228,  216,  229,  217,  230,  231,  232,  233,  236,  235,
-      239,  218,  238,  237,  220,  221,  222,  240,  251,  241,
-      223,  224,  243,  227,  245,  225,  226,  228,  248,  229,
-      231,  230,  246,  232,  246,  236,  233,  235,  237,  239,
-      238,  249,  250,  252,  255,  251,  240,  241,  253,  254,
-      243,  256,  245,  257,  258,  259,  259,  248,  260,  246,
-      260,  246,  261,  262,  501,  264,  265,  266,  259,  249,
-      250,  252,  255,  267,  271,  253,  254,  268,  256,  270,
-      272,  273,  257,  258,  259,  259,  260,  260,  275,  261,
-      276,  262,  264,  265,  277,  266,  259,  278,  279,  280,
-
-      282,  271,  267,  283,  284,  268,  285,  270,  272,  287,
-      273,  288,  289,  290,  293,  275,  294,  295,  276,  296,
-      297,  299,  300,  277,  302,  278,  280,  279,  282,  303,
-      304,  283,  284,  306,  308,  285,  307,  287,  288,  289,
-      310,  290,  293,  314,  295,  294,  296,  312,  297,  299,
-      313,  300,  302,  315,  323,  317,  319,  320,  303,  304,
-      306,  307,  321,  308,  322,  329,  324,  325,  310,  326,
-      314,  327,  312,  328,  333,  330,  331,  345,  332,  313,
-      335,  323,  315,  317,  319,  320,  336,  346,  338,  339,
-      347,  321,  329,  322,  324,  325,  341,  326,  342,  350,
-
-      327,  328,  330,  333,  331,  332,  345,  335,  351,  352,
-      353,  354,  361,  364,  336,  338,  346,  339,  355,  347,
-      356,  358,  363,  341,  369,  342,  350,  370,  373,  374,
-      375,  380,  499,  351,  381,  387,  352,  388,  389,  353,
-      354,  361,  364,  393,  394,  355,  400,  356,  358,  397,
-      363,  498,  497,  369,  370,  399,  399,  373,  374,  375,
-      380,  381,  399,  496,  387,  388,  399,  389,  494,  399,
-      393,  399,  399,  394,  399,  400,  397,  401,  402,  493,
-      492,  490,  481,  401,  481,  402,  481,  481,  488,  487,
-      486,  485,  484,  401,  534,  534,  534,  534,  535,  535,
-
-      535,  535,  536,  536,  536,  536,  538,  538,  539,  483,
-      539,  539,  540,  482,  540,  540,  541,  480,  541,  541,
-      542,  542,  542,  542,  479,  478,  477,  476,  475,  474,
-      473,  472,  471,  470,  469,  467,  466,  465,  464,  463,
-      462,  461,  460,  459,  458,  457,  456,  455,  454,  452,
-      450,  449,  448,  447,  446,  445,  443,  442,  441,  440,
-      439,  438,  435,  434,  433,  432,  431,  430,  429,  428,
-      427,  426,  425,  424,  423,  421,  420,  419,  417,  416,
-      415,  414,  413,  412,  411,  410,  408,  407,  406,  405,
-      403,  396,  391,  386,  382,  372,  366,  359,  343,  316,
-
-      281,  247,  234,  213,  211,  194,  170,  153,  151,  128,
-      111,  110,  106,  105,  103,   81,   65,   57,   56,   55,
-       13,    4,  533,  533,  533,  533,  533,  533,  533,  533,
-      533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
-      533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
-      533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
-      533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
-      533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
-      533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
-      533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
-
-      533
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        5,    5,    5,    5,    5,    5,   34,    5,    5,    5,
+
+        5,    5,    7,    7,    7,    7,    8,    8,    8,    8,
+        8,    5,    5,    5,    5,    5,    9,    9,    9,    9,
+       11,   11,   11,  504,    7,   34,   31,   35,    8,   10,
+       10,   10,   10,   10,   12,   12,   12,   37,   12,   39,
+      503,    5,    5,    5,   17,  502,   17,   25,   25,   25,
+       25,   25,   25,   25,   31,   35,  500,   17,   17,   17,
+       17,   17,   17,   17,  426,  426,   37,   39,   38,    5,
+        5,    6,    6,    6,    6,    6,    6,   41,    6,    6,
+        6,    6,    6,   33,   36,   36,   38,   33,   33,   33,
+       36,   40,    6,    6,    6,    6,    6,   33,   42,   45,
+
+       42,   17,  498,   44,   46,   41,   40,   50,   45,   45,
+       42,   33,   36,   36,   38,   33,   33,   33,   36,  258,
+       40,  258,    6,    6,    6,   67,   43,   42,   45,   42,
+       43,   44,   43,   46,   40,   50,   45,   45,   42,   43,
+       68,   43,   43,   65,   65,   65,   65,   65,   65,   65,
+        6,    6,  380,   67,   70,   43,  496,  495,  494,   43,
+       43,   60,   69,   60,   71,   72,  380,   43,   68,   43,
+       43,   61,  493,   61,   60,   60,   60,   60,   60,   60,
+       60,   62,   70,   62,   61,   61,   61,   61,   61,   61,
+       61,   69,   71,   72,   62,   62,   62,   62,   62,   62,
+
+       62,   74,   75,   77,   78,   77,   63,   76,   63,   63,
+       73,  491,   76,   80,  490,   83,   84,   85,   60,   63,
+       63,   63,   63,   63,   63,   63,   87,   88,   73,   74,
+       75,   77,   78,   77,   81,   76,   89,   81,   90,   73,
+       76,   91,   80,   83,   84,   85,   86,   86,   92,   94,
+       86,   93,  489,   95,   87,   88,   73,   96,   97,   98,
+      109,  113,   81,  110,   89,   81,  106,   90,  106,  106,
+       91,  488,  487,  486,   86,   86,   92,   94,   86,  111,
+       93,   95,  105,  112,  105,  105,   96,   97,   98,  109,
+      113,  110,  114,  115,  116,  105,  105,  105,  105,  105,
+
+      105,  105,  117,  118,  119,  120,  121,  111,  122,  123,
+      125,  112,  126,  485,  125,  127,  484,  128,  129,  130,
+      114,  115,  116,  131,  132,  133,  483,  134,  135,  136,
+      117,  118,  119,  120,  121,  137,  122,  123,  125,  138,
+      139,  126,  125,  140,  127,  128,  129,  141,  130,  142,
+      143,  131,  132,  144,  133,  134,  135,  136,  145,  149,
+      150,  151,  152,  137,  153,  154,  155,  138,  139,  156,
+      157,  140,  158,  159,  160,  163,  141,  142,  143,  161,
+      162,  144,  165,  166,  167,  168,  145,  149,  150,  151,
+      169,  152,  153,  154,  155,  170,  171,  156,  157,  172,
+
+      158,  159,  173,  160,  163,  174,  175,  161,  162,  176,
+      165,  179,  166,  167,  168,  181,  177,  180,  169,  177,
+      183,  184,  185,  170,  186,  171,  189,  172,  190,  482,
+      192,  173,  193,  174,  194,  175,  195,  197,  176,  179,
+      199,  200,  206,  181,  177,  201,  180,  177,  183,  184,
+      185,  202,  186,  204,  205,  189,  207,  190,  192,  208,
+      213,  193,  194,  209,  195,  197,  211,  212,  199,  214,
+      200,  206,  215,  201,  216,  478,  217,  218,  219,  202,
+      220,  204,  205,  221,  207,  222,  223,  224,  208,  213,
+      226,  209,  227,  228,  211,  212,  229,  214,  230,  231,
+
+      215,  233,  235,  216,  217,  218,  219,  236,  220,  236,
+      238,  221,  239,  222,  223,  240,  224,  241,  226,  242,
+      227,  228,  243,  244,  229,  245,  246,  230,  231,  233,
+      235,  247,  256,  248,  248,  236,  249,  236,  250,  238,
+      239,  251,  253,  240,  254,  241,  248,  242,  255,  257,
+      243,  244,  259,  245,  260,  246,  261,  262,  477,  264,
+      247,  256,  248,  248,  249,  265,  250,  266,  267,  251,
+      253,  268,  254,  270,  248,  271,  255,  257,  272,  273,
+      259,  275,  260,  276,  261,  277,  262,  264,  280,  281,
+      476,  282,  283,  285,  265,  266,  286,  267,  288,  268,
+
+      289,  270,  290,  271,  292,  293,  272,  294,  273,  275,
+      296,  276,  297,  277,  298,  300,  280,  299,  281,  282,
+      283,  285,  302,  304,  305,  286,  288,  306,  311,  289,
+      307,  290,  292,  293,  308,  309,  294,  310,  296,  312,
+      297,  313,  314,  298,  300,  299,  315,  316,  474,  318,
+      302,  304,  305,  319,  321,  322,  306,  311,  307,  324,
+      325,  328,  308,  309,  329,  310,  330,  312,  332,  313,
+      314,  333,  334,  335,  315,  336,  316,  318,  337,  339,
+      340,  319,  321,  322,  342,  473,  344,  324,  325,  345,
+      328,  350,  354,  329,  351,  330,  332,  353,  355,  333,
+
+      334,  360,  335,  336,  361,  366,  337,  339,  340,  367,
+      368,  372,  378,  342,  344,  472,  471,  393,  345,  378,
+      350,  354,  351,  393,  428,  353,  469,  355,  428,  428,
+      360,  468,  361,  366,  376,  376,  377,  367,  467,  368,
+      372,  376,  377,  465,  463,  376,  462,  461,  376,  460,
+      376,  376,  377,  376,  456,  459,  456,  458,  456,  456,
+      509,  509,  509,  509,  510,  510,  510,  510,  511,  511,
+      511,  511,  513,  513,  514,  457,  514,  514,  515,  455,
+      515,  515,  516,  454,  516,  516,  517,  517,  517,  517,
+      453,  452,  451,  450,  449,  448,  447,  446,  445,  444,
+
+      442,  441,  440,  439,  438,  437,  436,  435,  434,  433,
+      432,  431,  430,  429,  427,  425,  424,  423,  422,  421,
+      420,  418,  417,  416,  415,  414,  413,  410,  409,  408,
+      407,  406,  405,  404,  403,  402,  401,  400,  399,  398,
+      396,  395,  394,  392,  391,  390,  389,  388,  387,  386,
+      385,  384,  383,  382,  381,  379,  374,  370,  362,  347,
+      326,  301,  269,  237,  225,  203,  187,  164,  148,  146,
+      124,  108,  107,  103,  102,  100,   79,   64,   56,   55,
+       54,   13,    4,  508,  508,  508,  508,  508,  508,  508,
+      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
+
+      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
+      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
+      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
+      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
+      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
+      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
+      508,  508,  508,  508,  508
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -879,8 +861,8 @@ int yy_flex_debug = 0;
 #define YY_MORE_ADJ 0
 #define YY_RESTORE_YY_MORE_OFFSET
 char *yytext;
-#line 1 "../release/lexxer.l"
-#line 17 "../release/lexxer.l"
+#line 1 "lexxer.l"
+#line 17 "lexxer.l"
 /*
  * Mach Operating System
  * Copyright (c) 1991,1990 Carnegie Mellon University
@@ -920,8 +902,6 @@ char *yytext;
 /* We do not need the input function.  */
 #define YY_NO_INPUT
 
-#define        stringize(x)    #x
-
 #ifdef LDEBUG
 #define RETURN(sym)                                                    \
 {                                                                      \
@@ -935,14 +915,22 @@ char *yytext;
 #define        TPRETURN(intype, outtype, tsize)                                
\
 {                                                                      \
     yylval.symtype.innumber = (intype);                                        
\
-    yylval.symtype.instr = stringize(intype);                          \
+    yylval.symtype.instr = #intype;                                    \
     yylval.symtype.outnumber = (outtype);                              \
-    yylval.symtype.outstr = stringize(outtype);                                
\
+    yylval.symtype.outstr = #outtype;                                  \
     yylval.symtype.size = (tsize);                                     \
     RETURN(sySymbolicType);                                            \
 }
 
-#define        TRETURN(type, tsize)    TPRETURN(type,type,tsize)
+#define        TRETURN(type, tsize)                                            
\
+{                                                                      \
+    yylval.symtype.innumber = (type);                                  \
+    yylval.symtype.instr = #type;                                      \
+    yylval.symtype.outnumber = (type);                                 \
+    yylval.symtype.outstr = #type;                                     \
+    yylval.symtype.size = (tsize);                                     \
+    RETURN(sySymbolicType);                                            \
+}
 
 #define        FRETURN(val)                                                    
\
 {                                                                      \
@@ -952,6 +940,8 @@ char *yytext;
 
 extern YYSTYPE yylval;         /* added by rm */
 
+extern void yyerror(const char *);
+
 int lineno;
 char *inname;
 
@@ -967,7 +957,7 @@ static struct yysvf *oldYYBegin;
 
 static void doSharp(const char *body); /* process body of # directives */
 
-#line 971 "lexxer.c"
+#line 961 "lexxer.c"
 
 #define INITIAL 0
 #define Normal 1
@@ -1187,10 +1177,10 @@ YY_DECL
                }
 
        {
-#line 106 "../release/lexxer.l"
+#line 114 "lexxer.l"
 
 
-#line 1194 "lexxer.c"
+#line 1184 "lexxer.c"
 
        while ( 1 )             /* loops until end-of-file is reached */
                {
@@ -1218,13 +1208,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != 
yy_current_state )
                                {
                                yy_current_state = (int) 
yy_def[yy_current_state];
-                               if ( yy_current_state >= 534 )
+                               if ( yy_current_state >= 509 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + 
(unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 1023 );
+               while ( yy_base[yy_current_state] != 984 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -1250,535 +1240,520 @@ do_action:    /* This label is used only to access 
EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 108 "../release/lexxer.l"
+#line 116 "lexxer.l"
 RETURN(syRoutine);
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 109 "../release/lexxer.l"
-RETURN(syFunction);
-       YY_BREAK
-case 3:
-YY_RULE_SETUP
-#line 110 "../release/lexxer.l"
-RETURN(syProcedure);
-       YY_BREAK
-case 4:
-YY_RULE_SETUP
-#line 111 "../release/lexxer.l"
-RETURN(sySimpleProcedure);
-       YY_BREAK
-case 5:
-YY_RULE_SETUP
-#line 112 "../release/lexxer.l"
+#line 117 "lexxer.l"
 RETURN(sySimpleRoutine);
        YY_BREAK
-case 6:
+case 3:
 YY_RULE_SETUP
-#line 113 "../release/lexxer.l"
+#line 118 "lexxer.l"
 RETURN(sySubsystem);
        YY_BREAK
-case 7:
+case 4:
 YY_RULE_SETUP
-#line 114 "../release/lexxer.l"
+#line 119 "lexxer.l"
 RETURN(syMsgOption);
        YY_BREAK
-case 8:
+case 5:
 YY_RULE_SETUP
-#line 115 "../release/lexxer.l"
+#line 120 "lexxer.l"
 RETURN(syMsgSeqno);
        YY_BREAK
-case 9:
+case 6:
 YY_RULE_SETUP
-#line 116 "../release/lexxer.l"
+#line 121 "lexxer.l"
 RETURN(syWaitTime);
        YY_BREAK
-case 10:
+case 7:
 YY_RULE_SETUP
-#line 117 "../release/lexxer.l"
+#line 122 "lexxer.l"
 RETURN(syNoWaitTime);
        YY_BREAK
-case 11:
+case 8:
 YY_RULE_SETUP
-#line 118 "../release/lexxer.l"
+#line 123 "lexxer.l"
 RETURN(syIn);
        YY_BREAK
-case 12:
+case 9:
 YY_RULE_SETUP
-#line 119 "../release/lexxer.l"
+#line 124 "lexxer.l"
 RETURN(syOut);
        YY_BREAK
-case 13:
+case 10:
 YY_RULE_SETUP
-#line 120 "../release/lexxer.l"
+#line 125 "lexxer.l"
 RETURN(syInOut);
        YY_BREAK
-case 14:
+case 11:
 YY_RULE_SETUP
-#line 121 "../release/lexxer.l"
+#line 126 "lexxer.l"
 RETURN(syRequestPort);
        YY_BREAK
-case 15:
+case 12:
 YY_RULE_SETUP
-#line 122 "../release/lexxer.l"
+#line 127 "lexxer.l"
 RETURN(syReplyPort);
        YY_BREAK
-case 16:
+case 13:
 YY_RULE_SETUP
-#line 123 "../release/lexxer.l"
+#line 128 "lexxer.l"
 RETURN(syUReplyPort);
        YY_BREAK
-case 17:
+case 14:
 YY_RULE_SETUP
-#line 124 "../release/lexxer.l"
+#line 129 "lexxer.l"
 RETURN(sySReplyPort);
        YY_BREAK
-case 18:
+case 15:
 YY_RULE_SETUP
-#line 125 "../release/lexxer.l"
+#line 130 "lexxer.l"
 RETURN(syArray);
        YY_BREAK
-case 19:
+case 16:
 YY_RULE_SETUP
-#line 126 "../release/lexxer.l"
+#line 131 "lexxer.l"
 RETURN(syOf);
        YY_BREAK
-case 20:
+case 17:
 YY_RULE_SETUP
-#line 127 "../release/lexxer.l"
+#line 132 "lexxer.l"
 RETURN(syErrorProc);
        YY_BREAK
-case 21:
+case 18:
 YY_RULE_SETUP
-#line 128 "../release/lexxer.l"
+#line 133 "lexxer.l"
 RETURN(syServerPrefix);
        YY_BREAK
-case 22:
+case 19:
 YY_RULE_SETUP
-#line 129 "../release/lexxer.l"
+#line 134 "lexxer.l"
 RETURN(syUserPrefix);
        YY_BREAK
-case 23:
+case 20:
 YY_RULE_SETUP
-#line 130 "../release/lexxer.l"
+#line 135 "lexxer.l"
 RETURN(syServerDemux);
        YY_BREAK
-case 24:
+case 21:
 YY_RULE_SETUP
-#line 131 "../release/lexxer.l"
+#line 136 "lexxer.l"
 RETURN(syRCSId);
        YY_BREAK
-case 25:
+case 22:
 YY_RULE_SETUP
-#line 132 "../release/lexxer.l"
+#line 137 "lexxer.l"
 RETURN(syImport);
        YY_BREAK
-case 26:
+case 23:
 YY_RULE_SETUP
-#line 133 "../release/lexxer.l"
+#line 138 "lexxer.l"
 RETURN(syUImport);
        YY_BREAK
-case 27:
+case 24:
 YY_RULE_SETUP
-#line 134 "../release/lexxer.l"
+#line 139 "lexxer.l"
 RETURN(sySImport);
        YY_BREAK
-case 28:
+case 25:
 YY_RULE_SETUP
-#line 135 "../release/lexxer.l"
+#line 140 "lexxer.l"
 RETURN(syType);
        YY_BREAK
-case 29:
+case 26:
 YY_RULE_SETUP
-#line 136 "../release/lexxer.l"
+#line 141 "lexxer.l"
 RETURN(syKernelServer);
        YY_BREAK
-case 30:
+case 27:
 YY_RULE_SETUP
-#line 137 "../release/lexxer.l"
+#line 142 "lexxer.l"
 RETURN(syKernelUser);
        YY_BREAK
-case 31:
+case 28:
 YY_RULE_SETUP
-#line 138 "../release/lexxer.l"
+#line 143 "lexxer.l"
 RETURN(sySkip);
        YY_BREAK
-case 32:
+case 29:
 YY_RULE_SETUP
-#line 139 "../release/lexxer.l"
+#line 144 "lexxer.l"
 RETURN(syStruct);
        YY_BREAK
-case 33:
+case 30:
 YY_RULE_SETUP
-#line 140 "../release/lexxer.l"
+#line 145 "lexxer.l"
 RETURN(syInTran);
        YY_BREAK
-case 34:
+case 31:
 YY_RULE_SETUP
-#line 141 "../release/lexxer.l"
+#line 146 "lexxer.l"
 RETURN(syInTranPayload);
        YY_BREAK
-case 35:
+case 32:
 YY_RULE_SETUP
-#line 142 "../release/lexxer.l"
+#line 147 "lexxer.l"
 RETURN(syOutTran);
        YY_BREAK
-case 36:
+case 33:
 YY_RULE_SETUP
-#line 143 "../release/lexxer.l"
+#line 148 "lexxer.l"
 RETURN(syDestructor);
        YY_BREAK
-case 37:
+case 34:
 YY_RULE_SETUP
-#line 144 "../release/lexxer.l"
+#line 149 "lexxer.l"
 RETURN(syCType);
        YY_BREAK
-case 38:
+case 35:
 YY_RULE_SETUP
-#line 145 "../release/lexxer.l"
+#line 150 "lexxer.l"
 RETURN(syCUserType);
        YY_BREAK
-case 39:
+case 36:
 YY_RULE_SETUP
-#line 146 "../release/lexxer.l"
+#line 151 "lexxer.l"
 RETURN(syCServerType);
        YY_BREAK
-case 40:
+case 37:
 YY_RULE_SETUP
-#line 147 "../release/lexxer.l"
+#line 152 "lexxer.l"
 RETURN(syCString);
        YY_BREAK
-case 41:
+case 38:
 YY_RULE_SETUP
-#line 149 "../release/lexxer.l"
+#line 154 "lexxer.l"
 FRETURN(flLong);
        YY_BREAK
-case 42:
+case 39:
 YY_RULE_SETUP
-#line 150 "../release/lexxer.l"
+#line 155 "lexxer.l"
 FRETURN(flNotLong);
        YY_BREAK
-case 43:
+case 40:
 YY_RULE_SETUP
-#line 151 "../release/lexxer.l"
+#line 156 "lexxer.l"
 FRETURN(flDealloc);
        YY_BREAK
-case 44:
+case 41:
 YY_RULE_SETUP
-#line 152 "../release/lexxer.l"
+#line 157 "lexxer.l"
 FRETURN(flNotDealloc);
        YY_BREAK
-case 45:
+case 42:
 YY_RULE_SETUP
-#line 153 "../release/lexxer.l"
+#line 158 "lexxer.l"
 FRETURN(flServerCopy);
        YY_BREAK
-case 46:
+case 43:
 YY_RULE_SETUP
-#line 154 "../release/lexxer.l"
+#line 159 "lexxer.l"
 FRETURN(flCountInOut);
        YY_BREAK
-case 47:
+case 44:
 YY_RULE_SETUP
-#line 155 "../release/lexxer.l"
+#line 160 "lexxer.l"
 FRETURN(flNone);
        YY_BREAK
-case 48:
+case 45:
 YY_RULE_SETUP
-#line 157 "../release/lexxer.l"
+#line 162 "lexxer.l"
 TRETURN(MACH_MSG_TYPE_POLYMORPHIC,word_size_in_bits);
        YY_BREAK
-case 49:
+case 46:
 YY_RULE_SETUP
-#line 159 "../release/lexxer.l"
+#line 164 "lexxer.l"
 TRETURN(MACH_MSG_TYPE_UNSTRUCTURED,0);
        YY_BREAK
-case 50:
+case 47:
 YY_RULE_SETUP
-#line 160 "../release/lexxer.l"
+#line 165 "lexxer.l"
 TRETURN(MACH_MSG_TYPE_BIT,1);
        YY_BREAK
-case 51:
+case 48:
 YY_RULE_SETUP
-#line 161 "../release/lexxer.l"
+#line 166 "lexxer.l"
 TRETURN(MACH_MSG_TYPE_BOOLEAN,32);
        YY_BREAK
-case 52:
+case 49:
 YY_RULE_SETUP
-#line 162 "../release/lexxer.l"
+#line 167 "lexxer.l"
 TRETURN(MACH_MSG_TYPE_INTEGER_16,16);
        YY_BREAK
-case 53:
+case 50:
 YY_RULE_SETUP
-#line 163 "../release/lexxer.l"
+#line 168 "lexxer.l"
 TRETURN(MACH_MSG_TYPE_INTEGER_32,32);
        YY_BREAK
-case 54:
+case 51:
 YY_RULE_SETUP
-#line 164 "../release/lexxer.l"
+#line 169 "lexxer.l"
 TRETURN(MACH_MSG_TYPE_INTEGER_64,64);
        YY_BREAK
-case 55:
+case 52:
 YY_RULE_SETUP
-#line 165 "../release/lexxer.l"
+#line 170 "lexxer.l"
 TRETURN(MACH_MSG_TYPE_CHAR,8);
        YY_BREAK
-case 56:
+case 53:
 YY_RULE_SETUP
-#line 166 "../release/lexxer.l"
+#line 171 "lexxer.l"
 TRETURN(MACH_MSG_TYPE_BYTE,8);
        YY_BREAK
-case 57:
+case 54:
 YY_RULE_SETUP
-#line 167 "../release/lexxer.l"
+#line 172 "lexxer.l"
 TRETURN(MACH_MSG_TYPE_INTEGER_8,8);
        YY_BREAK
-case 58:
+case 55:
 YY_RULE_SETUP
-#line 168 "../release/lexxer.l"
+#line 173 "lexxer.l"
 TRETURN(MACH_MSG_TYPE_REAL,0);
        YY_BREAK
-case 59:
+case 56:
 YY_RULE_SETUP
-#line 169 "../release/lexxer.l"
+#line 174 "lexxer.l"
 TRETURN(MACH_MSG_TYPE_STRING,0);
        YY_BREAK
-case 60:
+case 57:
 YY_RULE_SETUP
-#line 170 "../release/lexxer.l"
+#line 175 "lexxer.l"
 TRETURN(MACH_MSG_TYPE_STRING_C,0);
        YY_BREAK
-case 61:
+case 58:
 YY_RULE_SETUP
-#line 172 "../release/lexxer.l"
+#line 177 "lexxer.l"
 
TPRETURN(MACH_MSG_TYPE_MOVE_RECEIVE,MACH_MSG_TYPE_PORT_RECEIVE,word_size_in_bits);
        YY_BREAK
-case 62:
+case 59:
 YY_RULE_SETUP
-#line 173 "../release/lexxer.l"
+#line 178 "lexxer.l"
 TPRETURN(MACH_MSG_TYPE_COPY_SEND,MACH_MSG_TYPE_PORT_SEND,word_size_in_bits);
        YY_BREAK
-case 63:
+case 60:
 YY_RULE_SETUP
-#line 174 "../release/lexxer.l"
+#line 179 "lexxer.l"
 TPRETURN(MACH_MSG_TYPE_MAKE_SEND,MACH_MSG_TYPE_PORT_SEND,word_size_in_bits);
        YY_BREAK
-case 64:
+case 61:
 YY_RULE_SETUP
-#line 175 "../release/lexxer.l"
+#line 180 "lexxer.l"
 TPRETURN(MACH_MSG_TYPE_MOVE_SEND,MACH_MSG_TYPE_PORT_SEND,word_size_in_bits);
        YY_BREAK
-case 65:
+case 62:
 YY_RULE_SETUP
-#line 176 "../release/lexxer.l"
+#line 181 "lexxer.l"
 
TPRETURN(MACH_MSG_TYPE_MAKE_SEND_ONCE,MACH_MSG_TYPE_PORT_SEND_ONCE,word_size_in_bits);
        YY_BREAK
-case 66:
+case 63:
 YY_RULE_SETUP
-#line 177 "../release/lexxer.l"
+#line 182 "lexxer.l"
 
TPRETURN(MACH_MSG_TYPE_MOVE_SEND_ONCE,MACH_MSG_TYPE_PORT_SEND_ONCE,word_size_in_bits);
        YY_BREAK
-case 67:
+case 64:
 YY_RULE_SETUP
-#line 179 "../release/lexxer.l"
+#line 184 "lexxer.l"
 TRETURN(MACH_MSG_TYPE_PORT_NAME,word_size_in_bits);
        YY_BREAK
-case 68:
+case 65:
 YY_RULE_SETUP
-#line 180 "../release/lexxer.l"
+#line 185 "lexxer.l"
 
TPRETURN(MACH_MSG_TYPE_POLYMORPHIC,MACH_MSG_TYPE_PORT_RECEIVE,word_size_in_bits);
        YY_BREAK
-case 69:
+case 66:
 YY_RULE_SETUP
-#line 181 "../release/lexxer.l"
+#line 186 "lexxer.l"
 TPRETURN(MACH_MSG_TYPE_POLYMORPHIC,MACH_MSG_TYPE_PORT_SEND,word_size_in_bits);
        YY_BREAK
-case 70:
+case 67:
 YY_RULE_SETUP
-#line 182 "../release/lexxer.l"
+#line 187 "lexxer.l"
 
TPRETURN(MACH_MSG_TYPE_POLYMORPHIC,MACH_MSG_TYPE_PORT_SEND_ONCE,word_size_in_bits);
        YY_BREAK
-case 71:
+case 68:
 YY_RULE_SETUP
-#line 183 "../release/lexxer.l"
+#line 188 "lexxer.l"
 TRETURN(MACH_MSG_TYPE_POLYMORPHIC,0);
        YY_BREAK
-case 72:
+case 69:
 YY_RULE_SETUP
-#line 185 "../release/lexxer.l"
+#line 190 "lexxer.l"
 RETURN(syColon);
        YY_BREAK
-case 73:
+case 70:
 YY_RULE_SETUP
-#line 186 "../release/lexxer.l"
+#line 191 "lexxer.l"
 RETURN(sySemi);
        YY_BREAK
-case 74:
+case 71:
 YY_RULE_SETUP
-#line 187 "../release/lexxer.l"
+#line 192 "lexxer.l"
 RETURN(syComma);
        YY_BREAK
-case 75:
+case 72:
 YY_RULE_SETUP
-#line 188 "../release/lexxer.l"
+#line 193 "lexxer.l"
 RETURN(syPlus);
        YY_BREAK
-case 76:
+case 73:
 YY_RULE_SETUP
-#line 189 "../release/lexxer.l"
+#line 194 "lexxer.l"
 RETURN(syMinus);
        YY_BREAK
-case 77:
+case 74:
 YY_RULE_SETUP
-#line 190 "../release/lexxer.l"
+#line 195 "lexxer.l"
 RETURN(syStar);
        YY_BREAK
-case 78:
+case 75:
 YY_RULE_SETUP
-#line 191 "../release/lexxer.l"
+#line 196 "lexxer.l"
 RETURN(syDiv);
        YY_BREAK
-case 79:
+case 76:
 YY_RULE_SETUP
-#line 192 "../release/lexxer.l"
+#line 197 "lexxer.l"
 RETURN(syLParen);
        YY_BREAK
-case 80:
+case 77:
 YY_RULE_SETUP
-#line 193 "../release/lexxer.l"
+#line 198 "lexxer.l"
 RETURN(syRParen);
        YY_BREAK
-case 81:
+case 78:
 YY_RULE_SETUP
-#line 194 "../release/lexxer.l"
+#line 199 "lexxer.l"
 RETURN(syEqual);
        YY_BREAK
-case 82:
+case 79:
 YY_RULE_SETUP
-#line 195 "../release/lexxer.l"
+#line 200 "lexxer.l"
 RETURN(syCaret);
        YY_BREAK
-case 83:
+case 80:
 YY_RULE_SETUP
-#line 196 "../release/lexxer.l"
+#line 201 "lexxer.l"
 RETURN(syTilde);
        YY_BREAK
-case 84:
+case 81:
 YY_RULE_SETUP
-#line 197 "../release/lexxer.l"
+#line 202 "lexxer.l"
 RETURN(syLAngle);
        YY_BREAK
-case 85:
+case 82:
 YY_RULE_SETUP
-#line 198 "../release/lexxer.l"
+#line 203 "lexxer.l"
 RETURN(syRAngle);
        YY_BREAK
-case 86:
+case 83:
 YY_RULE_SETUP
-#line 199 "../release/lexxer.l"
+#line 204 "lexxer.l"
 RETURN(syLBrack);
        YY_BREAK
-case 87:
+case 84:
 YY_RULE_SETUP
-#line 200 "../release/lexxer.l"
+#line 205 "lexxer.l"
 RETURN(syRBrack);
        YY_BREAK
-case 88:
+case 85:
 YY_RULE_SETUP
-#line 201 "../release/lexxer.l"
+#line 206 "lexxer.l"
 RETURN(syBar);
        YY_BREAK
-case 89:
+case 86:
 YY_RULE_SETUP
-#line 203 "../release/lexxer.l"
+#line 208 "lexxer.l"
 { yylval.identifier = strmake(yytext);
                          RETURN(syIdentifier); }
        YY_BREAK
-case 90:
+case 87:
 YY_RULE_SETUP
-#line 205 "../release/lexxer.l"
+#line 210 "lexxer.l"
 { yylval.number = atoi(yytext); RETURN(syNumber); }
        YY_BREAK
-case 91:
+case 88:
 YY_RULE_SETUP
-#line 207 "../release/lexxer.l"
+#line 212 "lexxer.l"
 { yylval.string = strmake(yytext);
                          BEGIN Normal; RETURN(syString); }
        YY_BREAK
-case 92:
+case 89:
 YY_RULE_SETUP
-#line 209 "../release/lexxer.l"
+#line 214 "lexxer.l"
 { yylval.string = strmake(yytext);
                          BEGIN Normal; RETURN(syFileName); }
        YY_BREAK
-case 93:
+case 90:
 YY_RULE_SETUP
-#line 211 "../release/lexxer.l"
+#line 216 "lexxer.l"
 { yylval.string = strmake(yytext);
                          BEGIN Normal; RETURN(syQString); }
        YY_BREAK
-case 94:
-/* rule 94 can match eol */
+case 91:
+/* rule 91 can match eol */
 YY_RULE_SETUP
-#line 214 "../release/lexxer.l"
+#line 219 "lexxer.l"
 { doSharp(yytext+1);
                                          SAVE_BEGIN;
                                          BEGIN SkipToEOL; }
        YY_BREAK
-case 95:
+case 92:
 YY_RULE_SETUP
-#line 217 "../release/lexxer.l"
+#line 222 "lexxer.l"
 { doSharp(yytext+1);
                                          SAVE_BEGIN;
                                          BEGIN SkipToEOL; }
        YY_BREAK
-case 96:
+case 93:
 YY_RULE_SETUP
-#line 220 "../release/lexxer.l"
+#line 225 "lexxer.l"
 { /* GCC's pre-processor might emit those.  */
                                          SAVE_BEGIN;
                                          BEGIN SkipToEOL; }
        YY_BREAK
-case 97:
+case 94:
 YY_RULE_SETUP
-#line 223 "../release/lexxer.l"
+#line 228 "lexxer.l"
 { yyerror("illegal # directive");
                                          SAVE_BEGIN;
                                          BEGIN SkipToEOL; }
        YY_BREAK
-case 98:
-/* rule 98 can match eol */
+case 95:
+/* rule 95 can match eol */
 YY_RULE_SETUP
-#line 227 "../release/lexxer.l"
+#line 232 "lexxer.l"
 RSTR_BEGIN;
        YY_BREAK
-case 99:
+case 96:
 YY_RULE_SETUP
-#line 228 "../release/lexxer.l"
+#line 233 "lexxer.l"
 ;
        YY_BREAK
-case 100:
+case 97:
 YY_RULE_SETUP
-#line 230 "../release/lexxer.l"
+#line 235 "lexxer.l"
 ;
        YY_BREAK
-case 101:
-/* rule 101 can match eol */
+case 98:
+/* rule 98 can match eol */
 YY_RULE_SETUP
-#line 231 "../release/lexxer.l"
+#line 236 "lexxer.l"
 { lineno++; }
        YY_BREAK
-case 102:
+case 99:
 YY_RULE_SETUP
-#line 232 "../release/lexxer.l"
+#line 237 "lexxer.l"
 { BEGIN Normal; RETURN(syError); }
        YY_BREAK
-case 103:
+case 100:
 YY_RULE_SETUP
-#line 234 "../release/lexxer.l"
+#line 239 "lexxer.l"
 ECHO;
        YY_BREAK
-#line 1782 "lexxer.c"
+#line 1757 "lexxer.c"
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(Normal):
 case YY_STATE_EOF(String):
@@ -2077,7 +2052,7 @@ static int yy_get_next_buffer (void)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != 
yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 534 )
+                       if ( yy_current_state >= 509 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned 
int) yy_c];
@@ -2105,11 +2080,11 @@ static int yy_get_next_buffer (void)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 534 )
+               if ( yy_current_state >= 509 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) 
yy_c];
-       yy_is_jam = (yy_current_state == 533);
+       yy_is_jam = (yy_current_state == 508);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2744,7 +2719,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 233 "../release/lexxer.l"
+#line 238 "lexxer.l"
 
 
 
diff --git a/lexxer.l b/lexxer.l
index 7ff5677..9579522 100644
--- a/lexxer.l
+++ b/lexxer.l
@@ -53,8 +53,6 @@ FileName      ({QString}|{AString})
 /* We do not need the input function.  */
 #define YY_NO_INPUT
 
-#define        stringize(x)    #x
-
 #ifdef LDEBUG
 #define RETURN(sym)                                                    \
 {                                                                      \
@@ -68,14 +66,22 @@ FileName    ({QString}|{AString})
 #define        TPRETURN(intype, outtype, tsize)                                
\
 {                                                                      \
     yylval.symtype.innumber = (intype);                                        
\
-    yylval.symtype.instr = stringize(intype);                          \
+    yylval.symtype.instr = #intype;                                    \
     yylval.symtype.outnumber = (outtype);                              \
-    yylval.symtype.outstr = stringize(outtype);                                
\
+    yylval.symtype.outstr = #outtype;                                  \
     yylval.symtype.size = (tsize);                                     \
     RETURN(sySymbolicType);                                            \
 }
 
-#define        TRETURN(type, tsize)    TPRETURN(type,type,tsize)
+#define        TRETURN(type, tsize)                                            
\
+{                                                                      \
+    yylval.symtype.innumber = (type);                                  \
+    yylval.symtype.instr = #type;                                      \
+    yylval.symtype.outnumber = (type);                                 \
+    yylval.symtype.outstr = #type;                                     \
+    yylval.symtype.size = (tsize);                                     \
+    RETURN(sySymbolicType);                                            \
+}
 
 #define        FRETURN(val)                                                    
\
 {                                                                      \
@@ -85,6 +91,8 @@ FileName      ({QString}|{AString})
 
 extern YYSTYPE yylval;         /* added by rm */
 
+extern void yyerror(const char *);
+
 int lineno;
 char *inname;
 
@@ -105,56 +113,53 @@ static void doSharp(const char *body); /* process body of 
# directives */
 
 %%
 
-<Normal>[Rr][Oo][Uu][Tt][Ii][Nn][Ee]           RETURN(syRoutine);
-<Normal>[Ff][Uu][Nn][Cc][Tt][Ii][Oo][Nn]       RETURN(syFunction);
-<Normal>[Pp][Rr][Oo][Cc][Ee][Dd][Uu][Rr][Ee]   RETURN(syProcedure);
-<Normal>[Ss][Ii][Mm][Pp][Ll][Ee][Pp][Rr][Oo][Cc][Ee][Dd][Uu][Rr][Ee] 
RETURN(sySimpleProcedure);
-<Normal>[Ss][Ii][Mm][Pp][Ll][Ee][Rr][Oo][Uu][Tt][Ii][Nn][Ee] 
RETURN(sySimpleRoutine);
-<Normal>[Ss][Uu][Bb][Ss][Yy][Ss][Tt][Ee][Mm]   RETURN(sySubsystem);
-<Normal>[Mm][Ss][Gg][Oo][Pp][Tt][Ii][Oo][Nn]   RETURN(syMsgOption);
-<Normal>[Mm][Ss][Gg][Ss][Ee][Qq][Nn][Oo]       RETURN(syMsgSeqno);
-<Normal>[Ww][Aa][Ii][Tt][Tt][Ii][Mm][Ee]       RETURN(syWaitTime);
-<Normal>[Nn][Oo][Ww][Aa][Ii][Tt][Tt][Ii][Mm][Ee]       RETURN(syNoWaitTime);
-<Normal>[Ii][Nn]                               RETURN(syIn);
-<Normal>[Oo][Uu][Tt]                           RETURN(syOut);
-<Normal>[Ii][Nn][Oo][Uu][Tt]                   RETURN(syInOut);
-<Normal>[Rr][Ee][Qq][Uu][Ee][Ss][Tt][Pp][Oo][Rr][Tt]   RETURN(syRequestPort);
-<Normal>[Rr][Ee][Pp][Ll][Yy][Pp][Oo][Rr][Tt]           RETURN(syReplyPort);
-<Normal>[Uu][Rr][Ee][Pp][Ll][Yy][Pp][Oo][Rr][Tt]       RETURN(syUReplyPort);
-<Normal>[Ss][Rr][Ee][Pp][Ll][Yy][Pp][Oo][Rr][Tt]       RETURN(sySReplyPort);
-<Normal>[Aa][Rr][Rr][Aa][Yy]                   RETURN(syArray);
-<Normal>[Oo][Ff]                               RETURN(syOf);
-<Normal>[Ee][Rr][Rr][Oo][Rr]                   RETURN(syErrorProc);
-<Normal>[Ss][Ee][Rr][Vv][Ee][Rr][Pp][Rr][Ee][Ff][Ii][Xx] 
RETURN(syServerPrefix);
-<Normal>[Uu][Ss][Ee][Rr][Pp][Rr][Ee][Ff][Ii][Xx]       RETURN(syUserPrefix);
-<Normal>[Ss][Ee][Rr][Vv][Ee][Rr][Dd][Ee][Mm][Uu][Xx]   RETURN(syServerDemux);
-<Normal>[Rr][Cc][Ss][Ii][Dd]                   RETURN(syRCSId);
-<Normal>[Ii][Mm][Pp][Oo][Rr][Tt]               RETURN(syImport);
-<Normal>[Uu][Ii][Mm][Pp][Oo][Rr][Tt]           RETURN(syUImport);
-<Normal>[Ss][Ii][Mm][Pp][Oo][Rr][Tt]           RETURN(sySImport);
-<Normal>[Tt][Yy][Pp][Ee]                       RETURN(syType);
-<Normal>[Kk][Ee][Rr][Nn][Ee][Ll][Ss][Ee][Rr][Vv][Ee][Rr] 
RETURN(syKernelServer);
-<Normal>[Kk][Ee][Rr][Nn][Ee][Ll][Uu][Ss][Ee][Rr]       RETURN(syKernelUser);
-<Normal>[Ss][Kk][Ii][Pp]                       RETURN(sySkip);
-<Normal>[Ss][Tt][Rr][Uu][Cc][Tt]               RETURN(syStruct);
-<Normal>[Ii][Nn][Tt][Rr][Aa][Nn]               RETURN(syInTran);
-<Normal>[Ii][Nn][Tt][Rr][Aa][Nn][Pp][Aa][Yy][Ll][Oo][Aa][Dd] 
RETURN(syInTranPayload);
-<Normal>[Oo][Uu][Tt][Tt][Rr][Aa][Nn]           RETURN(syOutTran);
-<Normal>[Dd][Ee][Ss][Tt][Rr][Uu][Cc][Tt][Oo][Rr]       RETURN(syDestructor);
-<Normal>[Cc][Tt][Yy][Pp][Ee]                           RETURN(syCType);
-<Normal>[Cc][Uu][Ss][Ee][Rr][Tt][Yy][Pp][Ee]           RETURN(syCUserType);
-<Normal>[Cc][Ss][Ee][Rr][Vv][Ee][Rr][Tt][Yy][Pp][Ee]   RETURN(syCServerType);
-<Normal>[Cc]_[Ss][Tt][Rr][Ii][Nn][Gg]                  RETURN(syCString);
-
-<Normal>[Ii][Ss][Ll][Oo][Nn][Gg]               FRETURN(flLong);
-<Normal>[Ii][Ss][Nn][Oo][Tt][Ll][Oo][Nn][Gg]   FRETURN(flNotLong);
-<Normal>[Dd][Ee][Aa][Ll][Ll][Oo][Cc]           FRETURN(flDealloc);
-<Normal>[Nn][Oo][Tt][Dd][Ee][Aa][Ll][Ll][Oo][Cc] FRETURN(flNotDealloc);
-<Normal>[Ss][Ee][Rr][Vv][Ee][Rr][Cc][Oo][Pp][Yy] FRETURN(flServerCopy);
-<Normal>[Cc][Oo][Uu][Nn][Tt][Ii][Nn][Oo][Uu][Tt] FRETURN(flCountInOut);
-<Normal>[Rr][Ee][Tt][Cc][Oo][Dd][Ee]           FRETURN(flNone);
-
-<Normal>[Pp][Oo][Ll][Yy][Mm][Oo][Rr][Pp][Hh][Ii][Cc]   
TRETURN(MACH_MSG_TYPE_POLYMORPHIC,word_size_in_bits);
+<Normal>(?i:routine)           RETURN(syRoutine);
+<Normal>(?i:simpleroutine)     RETURN(sySimpleRoutine);
+<Normal>(?i:subsystem)         RETURN(sySubsystem);
+<Normal>(?i:msgoption)         RETURN(syMsgOption);
+<Normal>(?i:msgseqno)          RETURN(syMsgSeqno);
+<Normal>(?i:waittime)          RETURN(syWaitTime);
+<Normal>(?i:nowaittime)                RETURN(syNoWaitTime);
+<Normal>(?i:in)                        RETURN(syIn);
+<Normal>(?i:out)               RETURN(syOut);
+<Normal>(?i:inout)             RETURN(syInOut);
+<Normal>(?i:requestport)       RETURN(syRequestPort);
+<Normal>(?i:replyport)         RETURN(syReplyPort);
+<Normal>(?i:ureplyport)                RETURN(syUReplyPort);
+<Normal>(?i:sreplyport)                RETURN(sySReplyPort);
+<Normal>(?i:array)             RETURN(syArray);
+<Normal>(?i:of)                        RETURN(syOf);
+<Normal>(?i:error)             RETURN(syErrorProc);
+<Normal>(?i:serverprefix)       RETURN(syServerPrefix);
+<Normal>(?i:userprefix)                RETURN(syUserPrefix);
+<Normal>(?i:serverdemux)       RETURN(syServerDemux);
+<Normal>(?i:rcsid)             RETURN(syRCSId);
+<Normal>(?i:import)            RETURN(syImport);
+<Normal>(?i:uimport)           RETURN(syUImport);
+<Normal>(?i:simport)           RETURN(sySImport);
+<Normal>(?i:type)              RETURN(syType);
+<Normal>(?i:kernelserver)      RETURN(syKernelServer);
+<Normal>(?i:kerneluser)                RETURN(syKernelUser);
+<Normal>(?i:skip)              RETURN(sySkip);
+<Normal>(?i:struct)            RETURN(syStruct);
+<Normal>(?i:intran)            RETURN(syInTran);
+<Normal>(?i:intranpayload)      RETURN(syInTranPayload);
+<Normal>(?i:outtran)           RETURN(syOutTran);
+<Normal>(?i:destructor)                RETURN(syDestructor);
+<Normal>(?i:ctype)             RETURN(syCType);
+<Normal>(?i:cusertype)         RETURN(syCUserType);
+<Normal>(?i:cservertype)       RETURN(syCServerType);
+<Normal>(?i:c_string)          RETURN(syCString);
+
+<Normal>(?i:islong)            FRETURN(flLong);
+<Normal>(?i:isnotlong)         FRETURN(flNotLong);
+<Normal>(?i:dealloc)           FRETURN(flDealloc);
+<Normal>(?i:notdealloc)         FRETURN(flNotDealloc);
+<Normal>(?i:servercopy)         FRETURN(flServerCopy);
+<Normal>(?i:countinout)                FRETURN(flCountInOut);
+<Normal>(?i:retcode)           FRETURN(flNone);
+
+<Normal>(?i:polymorphic)       
TRETURN(MACH_MSG_TYPE_POLYMORPHIC,word_size_in_bits);
 
 <Normal>"MACH_MSG_TYPE_UNSTRUCTURED"   TRETURN(MACH_MSG_TYPE_UNSTRUCTURED,0);
 <Normal>"MACH_MSG_TYPE_BIT"            TRETURN(MACH_MSG_TYPE_BIT,1);
diff --git a/parser.c b/parser.c
index 2174eda..ae6c890 100644
--- a/parser.c
+++ b/parser.c
@@ -62,7 +62,7 @@
 
 
 /* Copy the first part of user declarations.  */
-#line 119 "../release/parser.y" /* yacc.c:339  */
+#line 115 "parser.y" /* yacc.c:339  */
 
 
 #include <stdio.h>
@@ -101,7 +101,10 @@ yyerror(const char *s)
 # define YYERROR_VERBOSE 0
 #endif
 
-
+/* In a future release of Bison, this section will be replaced
+   by #include "y.tab.h".  */
+#ifndef YY_YY_PARSER_H_INCLUDED
+# define YY_YY_PARSER_H_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
@@ -118,143 +121,137 @@ extern int yydebug;
     sySkip = 258,
     syRoutine = 259,
     sySimpleRoutine = 260,
-    sySimpleProcedure = 261,
-    syProcedure = 262,
-    syFunction = 263,
-    sySubsystem = 264,
-    syKernelUser = 265,
-    syKernelServer = 266,
-    syMsgOption = 267,
-    syMsgSeqno = 268,
-    syWaitTime = 269,
-    syNoWaitTime = 270,
-    syErrorProc = 271,
-    syServerPrefix = 272,
-    syUserPrefix = 273,
-    syServerDemux = 274,
-    syRCSId = 275,
-    syImport = 276,
-    syUImport = 277,
-    sySImport = 278,
-    syIn = 279,
-    syOut = 280,
-    syInOut = 281,
-    syRequestPort = 282,
-    syReplyPort = 283,
-    sySReplyPort = 284,
-    syUReplyPort = 285,
-    syType = 286,
-    syArray = 287,
-    syStruct = 288,
-    syOf = 289,
-    syInTran = 290,
-    syOutTran = 291,
-    syDestructor = 292,
-    syCType = 293,
-    syCUserType = 294,
-    syCServerType = 295,
-    syCString = 296,
-    syColon = 297,
-    sySemi = 298,
-    syComma = 299,
-    syPlus = 300,
-    syMinus = 301,
-    syStar = 302,
-    syDiv = 303,
-    syLParen = 304,
-    syRParen = 305,
-    syEqual = 306,
-    syCaret = 307,
-    syTilde = 308,
-    syLAngle = 309,
-    syRAngle = 310,
-    syLBrack = 311,
-    syRBrack = 312,
-    syBar = 313,
-    syError = 314,
-    syNumber = 315,
-    sySymbolicType = 316,
-    syIdentifier = 317,
-    syString = 318,
-    syQString = 319,
-    syFileName = 320,
-    syIPCFlag = 321,
-    syInTranPayload = 322
+    sySubsystem = 261,
+    syKernelUser = 262,
+    syKernelServer = 263,
+    syMsgOption = 264,
+    syMsgSeqno = 265,
+    syWaitTime = 266,
+    syNoWaitTime = 267,
+    syErrorProc = 268,
+    syServerPrefix = 269,
+    syUserPrefix = 270,
+    syServerDemux = 271,
+    syRCSId = 272,
+    syImport = 273,
+    syUImport = 274,
+    sySImport = 275,
+    syIn = 276,
+    syOut = 277,
+    syInOut = 278,
+    syRequestPort = 279,
+    syReplyPort = 280,
+    sySReplyPort = 281,
+    syUReplyPort = 282,
+    syType = 283,
+    syArray = 284,
+    syStruct = 285,
+    syOf = 286,
+    syInTran = 287,
+    syOutTran = 288,
+    syDestructor = 289,
+    syCType = 290,
+    syCUserType = 291,
+    syCServerType = 292,
+    syCString = 293,
+    syColon = 294,
+    sySemi = 295,
+    syComma = 296,
+    syPlus = 297,
+    syMinus = 298,
+    syStar = 299,
+    syDiv = 300,
+    syLParen = 301,
+    syRParen = 302,
+    syEqual = 303,
+    syCaret = 304,
+    syTilde = 305,
+    syLAngle = 306,
+    syRAngle = 307,
+    syLBrack = 308,
+    syRBrack = 309,
+    syBar = 310,
+    syError = 311,
+    syNumber = 312,
+    sySymbolicType = 313,
+    syIdentifier = 314,
+    syString = 315,
+    syQString = 316,
+    syFileName = 317,
+    syIPCFlag = 318,
+    syInTranPayload = 319
   };
 #endif
 /* Tokens.  */
 #define sySkip 258
 #define syRoutine 259
 #define sySimpleRoutine 260
-#define sySimpleProcedure 261
-#define syProcedure 262
-#define syFunction 263
-#define sySubsystem 264
-#define syKernelUser 265
-#define syKernelServer 266
-#define syMsgOption 267
-#define syMsgSeqno 268
-#define syWaitTime 269
-#define syNoWaitTime 270
-#define syErrorProc 271
-#define syServerPrefix 272
-#define syUserPrefix 273
-#define syServerDemux 274
-#define syRCSId 275
-#define syImport 276
-#define syUImport 277
-#define sySImport 278
-#define syIn 279
-#define syOut 280
-#define syInOut 281
-#define syRequestPort 282
-#define syReplyPort 283
-#define sySReplyPort 284
-#define syUReplyPort 285
-#define syType 286
-#define syArray 287
-#define syStruct 288
-#define syOf 289
-#define syInTran 290
-#define syOutTran 291
-#define syDestructor 292
-#define syCType 293
-#define syCUserType 294
-#define syCServerType 295
-#define syCString 296
-#define syColon 297
-#define sySemi 298
-#define syComma 299
-#define syPlus 300
-#define syMinus 301
-#define syStar 302
-#define syDiv 303
-#define syLParen 304
-#define syRParen 305
-#define syEqual 306
-#define syCaret 307
-#define syTilde 308
-#define syLAngle 309
-#define syRAngle 310
-#define syLBrack 311
-#define syRBrack 312
-#define syBar 313
-#define syError 314
-#define syNumber 315
-#define sySymbolicType 316
-#define syIdentifier 317
-#define syString 318
-#define syQString 319
-#define syFileName 320
-#define syIPCFlag 321
-#define syInTranPayload 322
+#define sySubsystem 261
+#define syKernelUser 262
+#define syKernelServer 263
+#define syMsgOption 264
+#define syMsgSeqno 265
+#define syWaitTime 266
+#define syNoWaitTime 267
+#define syErrorProc 268
+#define syServerPrefix 269
+#define syUserPrefix 270
+#define syServerDemux 271
+#define syRCSId 272
+#define syImport 273
+#define syUImport 274
+#define sySImport 275
+#define syIn 276
+#define syOut 277
+#define syInOut 278
+#define syRequestPort 279
+#define syReplyPort 280
+#define sySReplyPort 281
+#define syUReplyPort 282
+#define syType 283
+#define syArray 284
+#define syStruct 285
+#define syOf 286
+#define syInTran 287
+#define syOutTran 288
+#define syDestructor 289
+#define syCType 290
+#define syCUserType 291
+#define syCServerType 292
+#define syCString 293
+#define syColon 294
+#define sySemi 295
+#define syComma 296
+#define syPlus 297
+#define syMinus 298
+#define syStar 299
+#define syDiv 300
+#define syLParen 301
+#define syRParen 302
+#define syEqual 303
+#define syCaret 304
+#define syTilde 305
+#define syLAngle 306
+#define syRAngle 307
+#define syLBrack 308
+#define syRBrack 309
+#define syBar 310
+#define syError 311
+#define syNumber 312
+#define sySymbolicType 313
+#define syIdentifier 314
+#define syString 315
+#define syQString 316
+#define syFileName 317
+#define syIPCFlag 318
+#define syInTranPayload 319
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 
 union YYSTYPE
 {
-#line 141 "../release/parser.y" /* yacc.c:355  */
+#line 137 "parser.y" /* yacc.c:355  */
 
     u_int number;
     identifier_t identifier;
@@ -274,7 +271,7 @@ union YYSTYPE
     argument_t *argument;
     ipc_flags_t flag;
 
-#line 278 "parser.c" /* yacc.c:355  */
+#line 275 "parser.c" /* yacc.c:355  */
 };
 
 typedef union YYSTYPE YYSTYPE;
@@ -287,11 +284,11 @@ extern YYSTYPE yylval;
 
 int yyparse (void);
 
-
+#endif /* !YY_YY_PARSER_H_INCLUDED  */
 
 /* Copy the second part of user declarations.  */
 
-#line 295 "parser.c" /* yacc.c:358  */
+#line 292 "parser.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -533,21 +530,21 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   223
+#define YYLAST   246
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  68
+#define YYNTOKENS  65
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  46
+#define YYNNTS  43
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  109
+#define YYNRULES  103
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  217
+#define YYNSTATES  204
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   322
+#define YYMAXUTOK   319
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -587,25 +584,24 @@ static const yytype_uint8 yytranslate[] =
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   163,   163,   164,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   185,   187,   189,   190,   191,   192,   196,
-     209,   221,   222,   225,   231,   239,   242,   245,   262,   268,
-     276,   284,   292,   300,   308,   319,   320,   321,   324,   334,
-     344,   348,   350,   370,   385,   405,   420,   434,   443,   455,
-     457,   459,   461,   463,   465,   467,   471,   477,   487,   488,
-     495,   504,   510,   514,   516,   540,   544,   546,   548,   553,
-     557,   561,   563,   568,   570,   572,   574,   576,   578,   583,
-     584,   585,   586,   587,   590,   594,   598,   602,   606,   610,
-     612,   617,   619,   626,   636,   637,   638,   639,   640,   641,
-     642,   643,   644,   645,   646,   649,   655,   660,   664,   668
+       0,   159,   159,   160,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   181,   183,   185,   186,   187,   188,   192,
+     205,   217,   218,   221,   227,   235,   238,   241,   258,   264,
+     272,   280,   288,   296,   304,   315,   316,   317,   320,   330,
+     340,   344,   346,   366,   381,   401,   416,   430,   439,   451,
+     453,   455,   457,   459,   461,   463,   467,   473,   483,   484,
+     491,   500,   506,   510,   512,   536,   540,   542,   544,   549,
+     553,   557,   559,   564,   566,   568,   570,   572,   574,   579,
+     580,   583,   587,   591,   593,   598,   600,   607,   617,   618,
+     619,   620,   621,   622,   623,   624,   625,   626,   627,   630,
+     636,   641,   645,   649
 };
 #endif
 
@@ -615,28 +611,27 @@ static const yytype_uint16 yyrline[] =
 static const char *const yytname[] =
 {
   "$end", "error", "$undefined", "sySkip", "syRoutine", "sySimpleRoutine",
-  "sySimpleProcedure", "syProcedure", "syFunction", "sySubsystem",
-  "syKernelUser", "syKernelServer", "syMsgOption", "syMsgSeqno",
-  "syWaitTime", "syNoWaitTime", "syErrorProc", "syServerPrefix",
-  "syUserPrefix", "syServerDemux", "syRCSId", "syImport", "syUImport",
-  "sySImport", "syIn", "syOut", "syInOut", "syRequestPort", "syReplyPort",
-  "sySReplyPort", "syUReplyPort", "syType", "syArray", "syStruct", "syOf",
-  "syInTran", "syOutTran", "syDestructor", "syCType", "syCUserType",
-  "syCServerType", "syCString", "syColon", "sySemi", "syComma", "syPlus",
-  "syMinus", "syStar", "syDiv", "syLParen", "syRParen", "syEqual",
-  "syCaret", "syTilde", "syLAngle", "syRAngle", "syLBrack", "syRBrack",
-  "syBar", "syError", "syNumber", "sySymbolicType", "syIdentifier",
-  "syString", "syQString", "syFileName", "syIPCFlag", "syInTranPayload",
-  "$accept", "Statements", "Statement", "Subsystem", "SubsystemStart",
-  "SubsystemMods", "SubsystemMod", "SubsystemName", "SubsystemBase",
-  "MsgOption", "WaitTime", "Error", "ServerPrefix", "UserPrefix",
-  "ServerDemux", "Import", "ImportIndicant", "RCSDecl", "TypeDecl",
-  "NamedTypeSpec", "TransTypeSpec", "TypeSpec", "BasicTypeSpec",
-  "IPCFlags", "PrimIPCType", "IPCType", "PrevTypeSpec", "VarArrayHead",
-  "ArrayHead", "StructHead", "CStringSpec", "IntExp", "RoutineDecl",
-  "Routine", "SimpleRoutine", "Procedure", "SimpleProcedure", "Function",
-  "Arguments", "ArgumentList", "Argument", "Direction", "ArgumentType",
-  "LookString", "LookFileName", "LookQString", YY_NULLPTR
+  "sySubsystem", "syKernelUser", "syKernelServer", "syMsgOption",
+  "syMsgSeqno", "syWaitTime", "syNoWaitTime", "syErrorProc",
+  "syServerPrefix", "syUserPrefix", "syServerDemux", "syRCSId", "syImport",
+  "syUImport", "sySImport", "syIn", "syOut", "syInOut", "syRequestPort",
+  "syReplyPort", "sySReplyPort", "syUReplyPort", "syType", "syArray",
+  "syStruct", "syOf", "syInTran", "syOutTran", "syDestructor", "syCType",
+  "syCUserType", "syCServerType", "syCString", "syColon", "sySemi",
+  "syComma", "syPlus", "syMinus", "syStar", "syDiv", "syLParen",
+  "syRParen", "syEqual", "syCaret", "syTilde", "syLAngle", "syRAngle",
+  "syLBrack", "syRBrack", "syBar", "syError", "syNumber", "sySymbolicType",
+  "syIdentifier", "syString", "syQString", "syFileName", "syIPCFlag",
+  "syInTranPayload", "$accept", "Statements", "Statement", "Subsystem",
+  "SubsystemStart", "SubsystemMods", "SubsystemMod", "SubsystemName",
+  "SubsystemBase", "MsgOption", "WaitTime", "Error", "ServerPrefix",
+  "UserPrefix", "ServerDemux", "Import", "ImportIndicant", "RCSDecl",
+  "TypeDecl", "NamedTypeSpec", "TransTypeSpec", "TypeSpec",
+  "BasicTypeSpec", "IPCFlags", "PrimIPCType", "IPCType", "PrevTypeSpec",
+  "VarArrayHead", "ArrayHead", "StructHead", "CStringSpec", "IntExp",
+  "RoutineDecl", "Routine", "SimpleRoutine", "Arguments", "ArgumentList",
+  "Argument", "Direction", "ArgumentType", "LookString", "LookFileName",
+  "LookQString", YY_NULLPTR
 };
 #endif
 
@@ -651,16 +646,16 @@ static const yytype_uint16 yytoknum[] =
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322
+     315,   316,   317,   318,   319
 };
 # endif
 
-#define YYPACT_NINF -130
+#define YYPACT_NINF -114
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-130)))
+  (!!((Yystate) == (-114)))
 
-#define YYTABLE_NINF -110
+#define YYTABLE_NINF -104
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -669,28 +664,27 @@ static const yytype_uint16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    -130,    50,  -130,   -29,   -22,   -43,    -1,     1,    33,    49,
-    -130,  -130,    55,    70,    75,    76,    88,  -130,  -130,    -3,
-    -130,    93,   101,   108,   109,   110,   111,   112,   113,   114,
-     115,  -130,  -130,  -130,  -130,  -130,    34,    81,   139,  -130,
-    -130,   117,   116,   116,   116,   116,   116,  -130,  -130,  -130,
-    -130,   118,  -130,  -130,   -10,  -130,  -130,  -130,  -130,  -130,
-    -130,  -130,  -130,  -130,  -130,    98,    99,  -130,  -130,  -130,
-     102,   100,  -130,    62,  -130,  -130,  -130,  -130,   121,    64,
-    -130,  -130,  -130,  -130,   106,  -130,  -130,  -130,  -130,  -130,
-    -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
-     120,   125,   119,   122,  -130,   123,   124,   126,   -49,    64,
-    -130,  -130,  -130,   -31,  -130,  -130,   127,  -130,  -130,    64,
-      64,    64,  -130,  -130,  -130,  -130,     4,   121,   118,  -130,
-     -34,     0,   -25,   128,  -130,   129,   131,   132,   133,   134,
-     135,   136,   -49,  -130,  -130,  -130,  -130,  -130,   -32,     0,
-     149,  -130,    37,    53,   144,    61,     0,   130,   137,   138,
-     140,   141,   142,   143,  -130,   145,     0,   153,    95,  -130,
-       0,     0,     0,     0,   154,   156,     0,  -130,    32,   146,
-     147,   148,  -130,  -130,  -130,   150,   151,    74,  -130,  -130,
-      67,    67,  -130,  -130,  -130,  -130,    82,    -5,   152,   157,
-     158,  -130,   155,   159,  -130,  -130,   160,   161,   163,   162,
-    -130,   164,   165,  -130,  -130,  -130,  -130
+    -114,    50,  -114,    -5,   -29,   -21,    -2,  -114,  -114,     1,
+      23,    40,    51,    53,  -114,  -114,    18,  -114,    74,    75,
+      92,    93,    95,    96,    97,    99,   100,   108,  -114,  -114,
+      22,    -1,   133,  -114,  -114,   111,   106,   106,  -114,  -114,
+    -114,  -114,    68,  -114,  -114,    -7,  -114,  -114,  -114,  -114,
+    -114,  -114,  -114,  -114,  -114,  -114,    94,    98,  -114,  -114,
+    -114,    91,   101,  -114,    62,  -114,  -114,   -17,  -114,  -114,
+    -114,  -114,   103,  -114,  -114,  -114,  -114,  -114,  -114,  -114,
+    -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,   109,   115,
+     104,   112,   113,   114,   -35,   -17,  -114,  -114,  -114,   -28,
+    -114,  -114,   116,  -114,  -114,   -17,   -17,   -17,  -114,  -114,
+    -114,  -114,    70,   118,   -20,   -32,    54,   120,  -114,   125,
+     129,   130,   131,   134,   135,   136,   -35,  -114,  -114,  -114,
+    -114,   117,   -24,   -32,   128,  -114,    59,    63,   138,    76,
+     -32,   119,   121,   122,   123,   124,   126,   127,  -114,    68,
+    -114,  -114,   -32,   141,   102,  -114,   -32,   -32,   -32,   -32,
+     148,   153,   -32,  -114,    32,   132,   137,   142,  -114,  -114,
+    -114,   139,   146,    80,  -114,  -114,     3,     3,  -114,  -114,
+    -114,  -114,    84,   -31,   143,   144,   140,  -114,   145,   161,
+    -114,  -114,   147,   150,   154,   149,  -114,   156,   157,  -114,
+     151,  -114,  -114,  -114
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -698,48 +692,47 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       2,     0,     1,     0,     0,     0,     0,     0,     0,     0,
-      20,    29,     0,     0,     0,     0,     0,    17,     3,     0,
-      21,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    79,    80,    81,    82,    83,     0,     0,     0,    18,
-      13,     0,     0,     0,     0,     0,     0,    30,    31,    32,
-      33,     0,    39,     4,     0,     6,     5,     7,     8,     9,
-      10,    15,    16,    11,    12,     0,     0,    35,    36,    37,
-       0,     0,    14,    94,    84,    85,    87,    86,     0,     0,
-      23,    24,    25,    22,     0,    27,    28,    34,    38,   103,
-     104,   102,    95,    96,    97,    98,    99,   100,   101,    89,
-       0,    91,     0,     0,    88,     0,     0,     0,     0,     0,
-      61,    62,    65,    40,    41,    49,    63,    56,    50,     0,
-       0,     0,    55,    26,    19,    90,    94,     0,   105,   106,
-       0,     0,     0,     0,    53,     0,     0,     0,     0,     0,
-       0,     0,     0,    51,    52,    54,    92,    58,     0,     0,
-       0,    77,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    64,    93,     0,     0,     0,    66,
-       0,     0,     0,     0,     0,     0,     0,    71,    58,     0,
-       0,     0,    46,    47,    48,     0,     0,     0,    67,    78,
-      73,    74,    75,    76,    69,    70,     0,     0,     0,     0,
-       0,    43,    59,     0,    72,    57,     0,     0,     0,     0,
-      68,     0,     0,    45,    60,    42,    44
+       2,     0,     1,     0,     0,     0,     0,    20,    29,     0,
+       0,     0,     0,     0,    17,     3,     0,    21,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    79,    80,
+       0,     0,     0,    18,    13,     0,     0,     0,    30,    31,
+      32,    33,     0,    39,     4,     0,     6,     5,     7,     8,
+       9,    10,    15,    16,    11,    12,     0,     0,    35,    36,
+      37,     0,     0,    14,    88,    81,    82,     0,    23,    24,
+      25,    22,     0,    27,    28,    34,    38,    97,    98,    96,
+      89,    90,    91,    92,    93,    94,    95,    83,     0,    85,
+       0,     0,     0,     0,     0,     0,    61,    62,    65,    40,
+      41,    49,    63,    56,    50,     0,     0,     0,    55,    26,
+      19,    84,    88,     0,     0,     0,     0,     0,    53,     0,
+       0,     0,     0,     0,     0,     0,     0,    51,    52,    54,
+      86,     0,     0,     0,     0,    77,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    64,    99,
+     100,    58,     0,     0,     0,    66,     0,     0,     0,     0,
+       0,     0,     0,    71,    58,     0,     0,     0,    46,    47,
+      48,     0,    87,     0,    67,    78,    73,    74,    75,    76,
+      69,    70,     0,     0,     0,     0,     0,    43,     0,     0,
+      72,    57,     0,     0,     0,    59,    68,     0,     0,    45,
+       0,    42,    44,    60
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
-    -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,    91,
-    -130,    14,  -130,    13,    54,    87,  -130,  -130,  -130,  -130,
-    -130,  -129,  -130,  -130,  -130,  -130,  -130,  -130,   103,    72,
-    -130,  -130,    80,  -130,  -130,  -130
+    -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,
+    -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,    64,
+    -114,    36,  -114,    29,    71,   152,  -114,  -114,  -114,  -114,
+    -114,  -113,  -114,  -114,  -114,   163,    82,  -114,  -114,  -114,
+    -114,  -114,  -114
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,    18,    19,    20,    54,    83,    84,   124,    21,
-      22,    23,    24,    25,    26,    27,    70,    28,    29,    52,
-     113,   114,   115,   165,   116,   117,   118,   119,   120,   121,
-     122,   152,    30,    31,    32,    33,    34,    35,    74,   100,
-     101,   102,   104,    36,    37,    38
+      -1,     1,    15,    16,    17,    45,    71,    72,   110,    18,
+      19,    20,    21,    22,    23,    24,    61,    25,    26,    43,
+      99,   100,   101,   172,   102,   103,   104,   105,   106,   107,
+     108,   136,    27,    28,    29,    65,    88,    89,    90,   151,
+      30,    31,    32
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -747,100 +740,103 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      80,    81,   153,   155,   135,   136,   137,   138,   139,   140,
-     166,   110,   111,   148,    39,   149,    89,    90,    91,    42,
-     168,    40,   154,   150,   149,   167,   151,   178,    92,    93,
-      94,    95,    96,    97,    98,   151,   141,   187,    41,   186,
-      53,   190,   191,   192,   193,   205,    65,   196,    66,   149,
-       2,     3,    82,     4,     5,     6,     7,     8,     9,    10,
-     151,    43,  -107,    44,  -107,    11,    12,    13,    14,    15,
-    -109,  -108,  -108,  -108,    89,    90,    91,   170,   171,   172,
-     173,    16,   170,   171,   172,   173,    92,    93,    94,    95,
-      96,    97,    98,    17,   174,    45,   105,   106,   170,   171,
-     172,   173,    67,    68,    69,   107,   170,   171,   172,   173,
-     175,    46,    99,   108,   172,   173,   109,    47,   177,   170,
-     171,   172,   173,   134,   110,   111,   112,   170,   171,   172,
-     173,   203,    48,   143,   144,   145,    55,    49,    50,   204,
-     170,   171,   172,   173,    56,   189,    75,    76,    77,    78,
-      51,    57,    58,    59,    60,    61,    62,    63,    64,    71,
-      72,    85,    86,   103,    88,    73,   123,    87,   126,    79,
-     125,   157,   156,   158,   159,   160,   161,   162,   163,   130,
-     131,   127,   132,   169,   128,   142,   176,   188,   194,   186,
-     195,   197,   179,   210,   129,   133,   164,   200,   146,   180,
-     181,   206,   182,   183,   184,   185,   207,   147,   198,   199,
-       0,   209,   201,   213,   215,   216,     0,   202,     0,   214,
-     208,     0,   211,   212
+      68,    69,   137,   139,   119,   120,   121,   122,   123,   124,
+     188,    34,    91,    92,   133,   152,   191,    58,    59,    60,
+     154,    93,    96,    97,   132,   135,   133,   164,    35,    94,
+     153,    56,    95,    57,   134,    33,   125,   135,    36,   173,
+      96,    97,    98,   176,   177,   178,   179,   158,   159,   182,
+       2,     3,    70,     4,     5,     6,     7,    37,    44,  -101,
+      38,  -101,     8,     9,    10,    11,    12,  -103,  -102,  -102,
+    -102,    77,    78,    79,   156,   157,   158,   159,    13,    77,
+      78,    79,    39,    80,    81,    82,    83,    84,    85,    86,
+      14,    80,    81,    82,    83,    84,    85,    86,   138,    40,
+     133,   156,   157,   158,   159,   156,   157,   158,   159,    87,
+      41,   135,    42,   160,    46,    47,    67,   161,   156,   157,
+     158,   159,   156,   157,   158,   159,   156,   157,   158,   159,
+     163,   118,    48,    49,   189,    50,    51,    52,   190,    53,
+      54,   127,   128,   129,   156,   157,   158,   159,    55,   175,
+      62,    63,    64,    75,    73,   112,   111,   131,    74,   155,
+     109,   140,    76,   113,   141,   114,   115,   116,   142,   143,
+     144,   126,   174,   145,   146,   147,   149,   162,   165,   180,
+     166,   167,   168,   169,   181,   170,   171,   188,   186,   192,
+     193,   184,   196,   183,   130,   150,   185,   148,   187,   194,
+      66,   199,   200,   201,   202,   203,   197,     0,   195,   198,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   117
 };
 
 static const yytype_int16 yycheck[] =
 {
-      10,    11,   131,   132,    35,    36,    37,    38,    39,    40,
-      42,    60,    61,    47,    43,    49,    12,    13,    14,    62,
-     149,    43,    47,    57,    49,    57,    60,   156,    24,    25,
-      26,    27,    28,    29,    30,    60,    67,   166,    60,    44,
-      43,   170,   171,   172,   173,    50,    12,   176,    14,    49,
-       0,     1,    62,     3,     4,     5,     6,     7,     8,     9,
-      60,    62,    12,    62,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    12,    13,    14,    45,    46,    47,
-      48,    31,    45,    46,    47,    48,    24,    25,    26,    27,
-      28,    29,    30,    43,    57,    62,    32,    33,    45,    46,
-      47,    48,    21,    22,    23,    41,    45,    46,    47,    48,
-      57,    62,    50,    49,    47,    48,    52,    62,    57,    45,
-      46,    47,    48,   109,    60,    61,    62,    45,    46,    47,
-      48,    57,    62,   119,   120,   121,    43,    62,    62,    57,
-      45,    46,    47,    48,    43,    50,    43,    44,    45,    46,
-      62,    43,    43,    43,    43,    43,    43,    43,    43,    20,
-      43,    63,    63,    42,    64,    49,    60,    65,    43,    51,
-      50,    42,    44,    42,    42,    42,    42,    42,    42,    56,
-      56,    62,    56,    34,    62,    58,    42,    34,    34,    44,
-      34,   178,    62,    34,   103,   108,   142,    49,   126,    62,
-      62,    49,    62,    62,    62,    62,    49,   127,    62,    62,
-      -1,    56,    62,    50,    50,    50,    -1,    66,    -1,    57,
-      62,    -1,    62,    62
+       7,     8,   115,   116,    32,    33,    34,    35,    36,    37,
+      41,    40,    29,    30,    46,    39,    47,    18,    19,    20,
+     133,    38,    57,    58,    44,    57,    46,   140,    57,    46,
+      54,     9,    49,    11,    54,    40,    64,    57,    59,   152,
+      57,    58,    59,   156,   157,   158,   159,    44,    45,   162,
+       0,     1,    59,     3,     4,     5,     6,    59,    40,     9,
+      59,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,     9,    10,    11,    42,    43,    44,    45,    28,     9,
+      10,    11,    59,    21,    22,    23,    24,    25,    26,    27,
+      40,    21,    22,    23,    24,    25,    26,    27,    44,    59,
+      46,    42,    43,    44,    45,    42,    43,    44,    45,    47,
+      59,    57,    59,    54,    40,    40,    48,    54,    42,    43,
+      44,    45,    42,    43,    44,    45,    42,    43,    44,    45,
+      54,    95,    40,    40,    54,    40,    40,    40,    54,    40,
+      40,   105,   106,   107,    42,    43,    44,    45,    40,    47,
+      17,    40,    46,    62,    60,    40,    47,    39,    60,    31,
+      57,    41,    61,    59,    39,    53,    53,    53,    39,    39,
+      39,    55,    31,    39,    39,    39,    59,    39,    59,    31,
+      59,    59,    59,    59,    31,    59,    59,    41,    46,    46,
+      46,    59,    31,   164,   112,   131,    59,   126,    59,    59,
+      37,    47,    53,    47,    47,    54,    59,    -1,    63,    59,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    94
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,    69,     0,     1,     3,     4,     5,     6,     7,     8,
-       9,    15,    16,    17,    18,    19,    31,    43,    70,    71,
-      72,    77,    78,    79,    80,    81,    82,    83,    85,    86,
-     100,   101,   102,   103,   104,   105,   111,   112,   113,    43,
-      43,    60,    62,    62,    62,    62,    62,    62,    62,    62,
-      62,    62,    87,    43,    73,    43,    43,    43,    43,    43,
-      43,    43,    43,    43,    43,    12,    14,    21,    22,    23,
-      84,    20,    43,    49,   106,   106,   106,   106,   106,    51,
-      10,    11,    62,    74,    75,    63,    63,    65,    64,    12,
-      13,    14,    24,    25,    26,    27,    28,    29,    30,    50,
-     107,   108,   109,    42,   110,    32,    33,    41,    49,    52,
-      60,    61,    62,    88,    89,    90,    92,    93,    94,    95,
-      96,    97,    98,    60,    76,    50,    43,    62,    62,    87,
-      56,    56,    56,    93,    89,    35,    36,    37,    38,    39,
-      40,    67,    58,    89,    89,    89,   107,   110,    47,    49,
-      57,    60,    99,    99,    47,    99,    44,    42,    42,    42,
-      42,    42,    42,    42,    92,    91,    42,    57,    99,    34,
-      45,    46,    47,    48,    57,    57,    42,    57,    99,    62,
-      62,    62,    62,    62,    62,    62,    44,    99,    34,    50,
-      99,    99,    99,    99,    34,    34,    99,    91,    62,    62,
-      49,    62,    66,    57,    57,    50,    49,    49,    62,    56,
-      34,    62,    62,    50,    57,    50,    50
+       0,    66,     0,     1,     3,     4,     5,     6,    12,    13,
+      14,    15,    16,    28,    40,    67,    68,    69,    74,    75,
+      76,    77,    78,    79,    80,    82,    83,    97,    98,    99,
+     105,   106,   107,    40,    40,    57,    59,    59,    59,    59,
+      59,    59,    59,    84,    40,    70,    40,    40,    40,    40,
+      40,    40,    40,    40,    40,    40,     9,    11,    18,    19,
+      20,    81,    17,    40,    46,   100,   100,    48,     7,     8,
+      59,    71,    72,    60,    60,    62,    61,     9,    10,    11,
+      21,    22,    23,    24,    25,    26,    27,    47,   101,   102,
+     103,    29,    30,    38,    46,    49,    57,    58,    59,    85,
+      86,    87,    89,    90,    91,    92,    93,    94,    95,    57,
+      73,    47,    40,    59,    53,    53,    53,    90,    86,    32,
+      33,    34,    35,    36,    37,    64,    55,    86,    86,    86,
+     101,    39,    44,    46,    54,    57,    96,    96,    44,    96,
+      41,    39,    39,    39,    39,    39,    39,    39,    89,    59,
+      84,   104,    39,    54,    96,    31,    42,    43,    44,    45,
+      54,    54,    39,    54,    96,    59,    59,    59,    59,    59,
+      59,    59,    88,    96,    31,    47,    96,    96,    96,    96,
+      31,    31,    96,    88,    59,    59,    46,    59,    41,    54,
+      54,    47,    46,    46,    59,    63,    31,    59,    59,    47,
+      53,    47,    47,    54
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    68,    69,    69,    70,    70,    70,    70,    70,    70,
-      70,    70,    70,    70,    70,    70,    70,    70,    70,    71,
-      72,    73,    73,    74,    74,    75,    76,    77,    78,    78,
-      79,    80,    81,    82,    83,    84,    84,    84,    85,    86,
-      87,    88,    88,    88,    88,    88,    88,    88,    88,    89,
-      89,    89,    89,    89,    89,    89,    90,    90,    91,    91,
-      91,    92,    92,    93,    93,    94,    95,    95,    95,    96,
-      97,    98,    98,    99,    99,    99,    99,    99,    99,   100,
-     100,   100,   100,   100,   101,   102,   103,   104,   105,   106,
-     106,   107,   107,   108,   109,   109,   109,   109,   109,   109,
-     109,   109,   109,   109,   109,   110,   110,   111,   112,   113
+       0,    65,    66,    66,    67,    67,    67,    67,    67,    67,
+      67,    67,    67,    67,    67,    67,    67,    67,    67,    68,
+      69,    70,    70,    71,    71,    72,    73,    74,    75,    75,
+      76,    77,    78,    79,    80,    81,    81,    81,    82,    83,
+      84,    85,    85,    85,    85,    85,    85,    85,    85,    86,
+      86,    86,    86,    86,    86,    86,    87,    87,    88,    88,
+      88,    89,    89,    90,    90,    91,    92,    92,    92,    93,
+      94,    95,    95,    96,    96,    96,    96,    96,    96,    97,
+      97,    98,    99,   100,   100,   101,   101,   102,   103,   103,
+     103,   103,   103,   103,   103,   103,   103,   103,   103,   104,
+     104,   105,   106,   107
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -854,9 +850,9 @@ static const yytype_uint8 yyr2[] =
        1,     2,     2,     2,     2,     1,     1,     6,     0,     3,
        5,     1,     1,     1,     3,     1,     4,     5,     7,     5,
        5,     4,     6,     3,     3,     3,     3,     1,     3,     1,
-       1,     1,     1,     1,     3,     3,     3,     3,     4,     2,
-       3,     1,     3,     4,     0,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     2,     2,     0,     0,     0
+       1,     3,     3,     2,     3,     1,     3,     5,     0,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     0,     0,     0
 };
 
 
@@ -1533,7 +1529,7 @@ yyreduce:
   switch (yyn)
     {
         case 12:
-#line 176 "../release/parser.y" /* yacc.c:1646  */
+#line 172 "parser.y" /* yacc.c:1646  */
     {
     statement_t *st = stAlloc();
 
@@ -1543,29 +1539,29 @@ yyreduce:
     if (BeVerbose)
        rtPrintRoutine((yyvsp[-1].routine));
 }
-#line 1547 "parser.c" /* yacc.c:1646  */
+#line 1543 "parser.c" /* yacc.c:1646  */
     break;
 
   case 13:
-#line 186 "../release/parser.y" /* yacc.c:1646  */
+#line 182 "parser.y" /* yacc.c:1646  */
     { rtSkip(1); }
-#line 1553 "parser.c" /* yacc.c:1646  */
+#line 1549 "parser.c" /* yacc.c:1646  */
     break;
 
   case 14:
-#line 188 "../release/parser.y" /* yacc.c:1646  */
+#line 184 "parser.y" /* yacc.c:1646  */
     { rtSkip((yyvsp[-1].number)); }
-#line 1559 "parser.c" /* yacc.c:1646  */
+#line 1555 "parser.c" /* yacc.c:1646  */
     break;
 
   case 18:
-#line 193 "../release/parser.y" /* yacc.c:1646  */
+#line 189 "parser.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 1565 "parser.c" /* yacc.c:1646  */
+#line 1561 "parser.c" /* yacc.c:1646  */
     break;
 
   case 19:
-#line 198 "../release/parser.y" /* yacc.c:1646  */
+#line 194 "parser.y" /* yacc.c:1646  */
     {
     if (BeVerbose)
     {
@@ -1575,11 +1571,11 @@ yyreduce:
               IsKernelServer ? ", KernelServer" : "");
     }
 }
-#line 1579 "parser.c" /* yacc.c:1646  */
+#line 1575 "parser.c" /* yacc.c:1646  */
     break;
 
   case 20:
-#line 210 "../release/parser.y" /* yacc.c:1646  */
+#line 206 "parser.y" /* yacc.c:1646  */
     {
     if (SubsystemName != strNULL)
     {
@@ -1589,43 +1585,43 @@ yyreduce:
        strfree((string_t) SubsystemName);
     }
 }
-#line 1593 "parser.c" /* yacc.c:1646  */
+#line 1589 "parser.c" /* yacc.c:1646  */
     break;
 
   case 23:
-#line 226 "../release/parser.y" /* yacc.c:1646  */
+#line 222 "parser.y" /* yacc.c:1646  */
     {
     if (IsKernelUser)
        warn("duplicate KernelUser keyword");
     IsKernelUser = TRUE;
 }
-#line 1603 "parser.c" /* yacc.c:1646  */
+#line 1599 "parser.c" /* yacc.c:1646  */
     break;
 
   case 24:
-#line 232 "../release/parser.y" /* yacc.c:1646  */
+#line 228 "parser.y" /* yacc.c:1646  */
     {
     if (IsKernelServer)
        warn("duplicate KernelServer keyword");
     IsKernelServer = TRUE;
 }
-#line 1613 "parser.c" /* yacc.c:1646  */
+#line 1609 "parser.c" /* yacc.c:1646  */
     break;
 
   case 25:
-#line 239 "../release/parser.y" /* yacc.c:1646  */
+#line 235 "parser.y" /* yacc.c:1646  */
     { SubsystemName = (yyvsp[0].identifier); }
-#line 1619 "parser.c" /* yacc.c:1646  */
+#line 1615 "parser.c" /* yacc.c:1646  */
     break;
 
   case 26:
-#line 242 "../release/parser.y" /* yacc.c:1646  */
+#line 238 "parser.y" /* yacc.c:1646  */
     { SubsystemBase = (yyvsp[0].number); }
-#line 1625 "parser.c" /* yacc.c:1646  */
+#line 1621 "parser.c" /* yacc.c:1646  */
     break;
 
   case 27:
-#line 246 "../release/parser.y" /* yacc.c:1646  */
+#line 242 "parser.y" /* yacc.c:1646  */
     {
     if (streql((yyvsp[0].string), "MACH_MSG_OPTION_NONE"))
     {
@@ -1640,71 +1636,71 @@ yyreduce:
            printf("MsgOption %s\n\n",(yyvsp[0].string));
     }
 }
-#line 1644 "parser.c" /* yacc.c:1646  */
+#line 1640 "parser.c" /* yacc.c:1646  */
     break;
 
   case 28:
-#line 263 "../release/parser.y" /* yacc.c:1646  */
+#line 259 "parser.y" /* yacc.c:1646  */
     {
     WaitTime = (yyvsp[0].string);
     if (BeVerbose)
        printf("WaitTime %s\n\n", WaitTime);
 }
-#line 1654 "parser.c" /* yacc.c:1646  */
+#line 1650 "parser.c" /* yacc.c:1646  */
     break;
 
   case 29:
-#line 269 "../release/parser.y" /* yacc.c:1646  */
+#line 265 "parser.y" /* yacc.c:1646  */
     {
     WaitTime = strNULL;
     if (BeVerbose)
        printf("NoWaitTime\n\n");
 }
-#line 1664 "parser.c" /* yacc.c:1646  */
+#line 1660 "parser.c" /* yacc.c:1646  */
     break;
 
   case 30:
-#line 277 "../release/parser.y" /* yacc.c:1646  */
+#line 273 "parser.y" /* yacc.c:1646  */
     {
     ErrorProc = (yyvsp[0].identifier);
     if (BeVerbose)
        printf("ErrorProc %s\n\n", ErrorProc);
 }
-#line 1674 "parser.c" /* yacc.c:1646  */
+#line 1670 "parser.c" /* yacc.c:1646  */
     break;
 
   case 31:
-#line 285 "../release/parser.y" /* yacc.c:1646  */
+#line 281 "parser.y" /* yacc.c:1646  */
     {
     ServerPrefix = (yyvsp[0].identifier);
     if (BeVerbose)
        printf("ServerPrefix %s\n\n", ServerPrefix);
 }
-#line 1684 "parser.c" /* yacc.c:1646  */
+#line 1680 "parser.c" /* yacc.c:1646  */
     break;
 
   case 32:
-#line 293 "../release/parser.y" /* yacc.c:1646  */
+#line 289 "parser.y" /* yacc.c:1646  */
     {
     UserPrefix = (yyvsp[0].identifier);
     if (BeVerbose)
        printf("UserPrefix %s\n\n", UserPrefix);
 }
-#line 1694 "parser.c" /* yacc.c:1646  */
+#line 1690 "parser.c" /* yacc.c:1646  */
     break;
 
   case 33:
-#line 301 "../release/parser.y" /* yacc.c:1646  */
+#line 297 "parser.y" /* yacc.c:1646  */
     {
     ServerDemux = (yyvsp[0].identifier);
     if (BeVerbose)
        printf("ServerDemux %s\n\n", ServerDemux);
 }
-#line 1704 "parser.c" /* yacc.c:1646  */
+#line 1700 "parser.c" /* yacc.c:1646  */
     break;
 
   case 34:
-#line 309 "../release/parser.y" /* yacc.c:1646  */
+#line 305 "parser.y" /* yacc.c:1646  */
     {
     statement_t *st = stAlloc();
     st->stKind = (yyvsp[-1].statement_kind);
@@ -1713,29 +1709,29 @@ yyreduce:
     if (BeVerbose)
        printf("%s %s\n\n", import_name((yyvsp[-1].statement_kind)), 
(yyvsp[0].string));
 }
-#line 1717 "parser.c" /* yacc.c:1646  */
+#line 1713 "parser.c" /* yacc.c:1646  */
     break;
 
   case 35:
-#line 319 "../release/parser.y" /* yacc.c:1646  */
+#line 315 "parser.y" /* yacc.c:1646  */
     { (yyval.statement_kind) = skImport; }
-#line 1723 "parser.c" /* yacc.c:1646  */
+#line 1719 "parser.c" /* yacc.c:1646  */
     break;
 
   case 36:
-#line 320 "../release/parser.y" /* yacc.c:1646  */
+#line 316 "parser.y" /* yacc.c:1646  */
     { (yyval.statement_kind) = skUImport; }
-#line 1729 "parser.c" /* yacc.c:1646  */
+#line 1725 "parser.c" /* yacc.c:1646  */
     break;
 
   case 37:
-#line 321 "../release/parser.y" /* yacc.c:1646  */
+#line 317 "parser.y" /* yacc.c:1646  */
     { (yyval.statement_kind) = skSImport; }
-#line 1735 "parser.c" /* yacc.c:1646  */
+#line 1731 "parser.c" /* yacc.c:1646  */
     break;
 
   case 38:
-#line 325 "../release/parser.y" /* yacc.c:1646  */
+#line 321 "parser.y" /* yacc.c:1646  */
     {
     if (RCSId != strNULL)
        warn("previous RCS decl will be ignored");
@@ -1743,11 +1739,11 @@ yyreduce:
        printf("RCSId %s\n\n", (yyvsp[0].string));
     RCSId = (yyvsp[0].string);
 }
-#line 1747 "parser.c" /* yacc.c:1646  */
+#line 1743 "parser.c" /* yacc.c:1646  */
     break;
 
   case 39:
-#line 335 "../release/parser.y" /* yacc.c:1646  */
+#line 331 "parser.y" /* yacc.c:1646  */
     {
     identifier_t name = (yyvsp[0].type)->itName;
 
@@ -1755,23 +1751,23 @@ yyreduce:
        warn("overriding previous definition of %s", name);
     itInsert(name, (yyvsp[0].type));
 }
-#line 1759 "parser.c" /* yacc.c:1646  */
+#line 1755 "parser.c" /* yacc.c:1646  */
     break;
 
   case 40:
-#line 345 "../release/parser.y" /* yacc.c:1646  */
+#line 341 "parser.y" /* yacc.c:1646  */
     { itTypeDecl((yyvsp[-2].identifier), (yyval.type) = (yyvsp[0].type)); }
-#line 1765 "parser.c" /* yacc.c:1646  */
+#line 1761 "parser.c" /* yacc.c:1646  */
     break;
 
   case 41:
-#line 349 "../release/parser.y" /* yacc.c:1646  */
+#line 345 "parser.y" /* yacc.c:1646  */
     { (yyval.type) = itResetType((yyvsp[0].type)); }
-#line 1771 "parser.c" /* yacc.c:1646  */
+#line 1767 "parser.c" /* yacc.c:1646  */
     break;
 
   case 42:
-#line 352 "../release/parser.y" /* yacc.c:1646  */
+#line 348 "parser.y" /* yacc.c:1646  */
     {
     (yyval.type) = (yyvsp[-7].type);
 
@@ -1790,11 +1786,11 @@ yyreduce:
             (yyval.type)->itServerType, (yyvsp[-1].identifier));
     (yyval.type)->itServerType = (yyvsp[-1].identifier);
 }
-#line 1794 "parser.c" /* yacc.c:1646  */
+#line 1790 "parser.c" /* yacc.c:1646  */
     break;
 
   case 43:
-#line 372 "../release/parser.y" /* yacc.c:1646  */
+#line 368 "parser.y" /* yacc.c:1646  */
     {
     (yyval.type) = (yyvsp[-4].type);
 
@@ -1808,11 +1804,11 @@ yyreduce:
             (yyval.type)->itInTransPayload, (yyvsp[0].identifier));
     (yyval.type)->itInTransPayload = (yyvsp[0].identifier);
 }
-#line 1812 "parser.c" /* yacc.c:1646  */
+#line 1808 "parser.c" /* yacc.c:1646  */
     break;
 
   case 44:
-#line 387 "../release/parser.y" /* yacc.c:1646  */
+#line 383 "parser.y" /* yacc.c:1646  */
     {
     (yyval.type) = (yyvsp[-7].type);
 
@@ -1831,11 +1827,11 @@ yyreduce:
             (yyval.type)->itTransType, (yyvsp[-1].identifier));
     (yyval.type)->itTransType = (yyvsp[-1].identifier);
 }
-#line 1835 "parser.c" /* yacc.c:1646  */
+#line 1831 "parser.c" /* yacc.c:1646  */
     break;
 
   case 45:
-#line 407 "../release/parser.y" /* yacc.c:1646  */
+#line 403 "parser.y" /* yacc.c:1646  */
     {
     (yyval.type) = (yyvsp[-6].type);
 
@@ -1849,11 +1845,11 @@ yyreduce:
             (yyval.type)->itTransType, (yyvsp[-1].identifier));
     (yyval.type)->itTransType = (yyvsp[-1].identifier);
 }
-#line 1853 "parser.c" /* yacc.c:1646  */
+#line 1849 "parser.c" /* yacc.c:1646  */
     break;
 
   case 46:
-#line 421 "../release/parser.y" /* yacc.c:1646  */
+#line 417 "parser.y" /* yacc.c:1646  */
     {
     (yyval.type) = (yyvsp[-3].type);
 
@@ -1867,11 +1863,11 @@ yyreduce:
             (yyval.type)->itServerType, (yyvsp[0].identifier));
     (yyval.type)->itServerType = (yyvsp[0].identifier);
 }
-#line 1871 "parser.c" /* yacc.c:1646  */
+#line 1867 "parser.c" /* yacc.c:1646  */
     break;
 
   case 47:
-#line 435 "../release/parser.y" /* yacc.c:1646  */
+#line 431 "parser.y" /* yacc.c:1646  */
     {
     (yyval.type) = (yyvsp[-3].type);
 
@@ -1880,11 +1876,11 @@ yyreduce:
             (yyval.type)->itUserType, (yyvsp[0].identifier));
     (yyval.type)->itUserType = (yyvsp[0].identifier);
 }
-#line 1884 "parser.c" /* yacc.c:1646  */
+#line 1880 "parser.c" /* yacc.c:1646  */
     break;
 
   case 48:
-#line 445 "../release/parser.y" /* yacc.c:1646  */
+#line 441 "parser.y" /* yacc.c:1646  */
     {
     (yyval.type) = (yyvsp[-3].type);
 
@@ -1893,123 +1889,123 @@ yyreduce:
             (yyval.type)->itServerType, (yyvsp[0].identifier));
     (yyval.type)->itServerType = (yyvsp[0].identifier);
 }
-#line 1897 "parser.c" /* yacc.c:1646  */
+#line 1893 "parser.c" /* yacc.c:1646  */
     break;
 
   case 49:
-#line 456 "../release/parser.y" /* yacc.c:1646  */
+#line 452 "parser.y" /* yacc.c:1646  */
     { (yyval.type) = (yyvsp[0].type); }
-#line 1903 "parser.c" /* yacc.c:1646  */
+#line 1899 "parser.c" /* yacc.c:1646  */
     break;
 
   case 50:
-#line 458 "../release/parser.y" /* yacc.c:1646  */
+#line 454 "parser.y" /* yacc.c:1646  */
     { (yyval.type) = (yyvsp[0].type); }
-#line 1909 "parser.c" /* yacc.c:1646  */
+#line 1905 "parser.c" /* yacc.c:1646  */
     break;
 
   case 51:
-#line 460 "../release/parser.y" /* yacc.c:1646  */
+#line 456 "parser.y" /* yacc.c:1646  */
     { (yyval.type) = itVarArrayDecl((yyvsp[-1].number), (yyvsp[0].type)); }
-#line 1915 "parser.c" /* yacc.c:1646  */
+#line 1911 "parser.c" /* yacc.c:1646  */
     break;
 
   case 52:
-#line 462 "../release/parser.y" /* yacc.c:1646  */
+#line 458 "parser.y" /* yacc.c:1646  */
     { (yyval.type) = itArrayDecl((yyvsp[-1].number), (yyvsp[0].type)); }
-#line 1921 "parser.c" /* yacc.c:1646  */
+#line 1917 "parser.c" /* yacc.c:1646  */
     break;
 
   case 53:
-#line 464 "../release/parser.y" /* yacc.c:1646  */
+#line 460 "parser.y" /* yacc.c:1646  */
     { (yyval.type) = itPtrDecl((yyvsp[0].type)); }
-#line 1927 "parser.c" /* yacc.c:1646  */
+#line 1923 "parser.c" /* yacc.c:1646  */
     break;
 
   case 54:
-#line 466 "../release/parser.y" /* yacc.c:1646  */
+#line 462 "parser.y" /* yacc.c:1646  */
     { (yyval.type) = itStructDecl((yyvsp[-1].number), (yyvsp[0].type)); }
-#line 1933 "parser.c" /* yacc.c:1646  */
+#line 1929 "parser.c" /* yacc.c:1646  */
     break;
 
   case 55:
-#line 468 "../release/parser.y" /* yacc.c:1646  */
+#line 464 "parser.y" /* yacc.c:1646  */
     { (yyval.type) = (yyvsp[0].type); }
-#line 1939 "parser.c" /* yacc.c:1646  */
+#line 1935 "parser.c" /* yacc.c:1646  */
     break;
 
   case 56:
-#line 472 "../release/parser.y" /* yacc.c:1646  */
+#line 468 "parser.y" /* yacc.c:1646  */
     {
     (yyval.type) = itShortDecl((yyvsp[0].symtype).innumber, 
(yyvsp[0].symtype).instr,
                     (yyvsp[0].symtype).outnumber, (yyvsp[0].symtype).outstr,
                     (yyvsp[0].symtype).size);
 }
-#line 1949 "parser.c" /* yacc.c:1646  */
+#line 1945 "parser.c" /* yacc.c:1646  */
     break;
 
   case 57:
-#line 479 "../release/parser.y" /* yacc.c:1646  */
+#line 475 "parser.y" /* yacc.c:1646  */
     {
     (yyval.type) = itLongDecl((yyvsp[-4].symtype).innumber, 
(yyvsp[-4].symtype).instr,
                    (yyvsp[-4].symtype).outnumber, (yyvsp[-4].symtype).outstr,
                    (yyvsp[-4].symtype).size, (yyvsp[-2].number), 
(yyvsp[-1].flag));
 }
-#line 1959 "parser.c" /* yacc.c:1646  */
+#line 1955 "parser.c" /* yacc.c:1646  */
     break;
 
   case 58:
-#line 487 "../release/parser.y" /* yacc.c:1646  */
+#line 483 "parser.y" /* yacc.c:1646  */
     { (yyval.flag) = flNone; }
-#line 1965 "parser.c" /* yacc.c:1646  */
+#line 1961 "parser.c" /* yacc.c:1646  */
     break;
 
   case 59:
-#line 489 "../release/parser.y" /* yacc.c:1646  */
+#line 485 "parser.y" /* yacc.c:1646  */
     {
     if ((yyvsp[-2].flag) & (yyvsp[0].flag))
        warn("redundant IPC flag ignored");
     else
        (yyval.flag) = (yyvsp[-2].flag) | (yyvsp[0].flag);
 }
-#line 1976 "parser.c" /* yacc.c:1646  */
+#line 1972 "parser.c" /* yacc.c:1646  */
     break;
 
   case 60:
-#line 496 "../release/parser.y" /* yacc.c:1646  */
+#line 492 "parser.y" /* yacc.c:1646  */
     {
     if ((yyvsp[-2].flag) != flDealloc)
        warn("only Dealloc is variable");
     else
        (yyval.flag) = (yyvsp[-4].flag) | flMaybeDealloc;
 }
-#line 1987 "parser.c" /* yacc.c:1646  */
+#line 1983 "parser.c" /* yacc.c:1646  */
     break;
 
   case 61:
-#line 505 "../release/parser.y" /* yacc.c:1646  */
+#line 501 "parser.y" /* yacc.c:1646  */
     {
     (yyval.symtype).innumber = (yyval.symtype).outnumber = (yyvsp[0].number);
     (yyval.symtype).instr = (yyval.symtype).outstr = strNULL;
     (yyval.symtype).size = 0;
 }
-#line 1997 "parser.c" /* yacc.c:1646  */
+#line 1993 "parser.c" /* yacc.c:1646  */
     break;
 
   case 62:
-#line 511 "../release/parser.y" /* yacc.c:1646  */
+#line 507 "parser.y" /* yacc.c:1646  */
     { (yyval.symtype) = (yyvsp[0].symtype); }
-#line 2003 "parser.c" /* yacc.c:1646  */
+#line 1999 "parser.c" /* yacc.c:1646  */
     break;
 
   case 63:
-#line 515 "../release/parser.y" /* yacc.c:1646  */
+#line 511 "parser.y" /* yacc.c:1646  */
     { (yyval.symtype) = (yyvsp[0].symtype); }
-#line 2009 "parser.c" /* yacc.c:1646  */
+#line 2005 "parser.c" /* yacc.c:1646  */
     break;
 
   case 64:
-#line 517 "../release/parser.y" /* yacc.c:1646  */
+#line 513 "parser.y" /* yacc.c:1646  */
     {
     if ((yyvsp[-2].symtype).size != (yyvsp[0].symtype).size)
     {
@@ -2031,294 +2027,258 @@ yyreduce:
     (yyval.symtype).outnumber = (yyvsp[0].symtype).outnumber;
     (yyval.symtype).outstr = (yyvsp[0].symtype).outstr;
 }
-#line 2035 "parser.c" /* yacc.c:1646  */
+#line 2031 "parser.c" /* yacc.c:1646  */
     break;
 
   case 65:
-#line 541 "../release/parser.y" /* yacc.c:1646  */
+#line 537 "parser.y" /* yacc.c:1646  */
     { (yyval.type) = itPrevDecl((yyvsp[0].identifier)); }
-#line 2041 "parser.c" /* yacc.c:1646  */
+#line 2037 "parser.c" /* yacc.c:1646  */
     break;
 
   case 66:
-#line 545 "../release/parser.y" /* yacc.c:1646  */
+#line 541 "parser.y" /* yacc.c:1646  */
     { (yyval.number) = 0; }
-#line 2047 "parser.c" /* yacc.c:1646  */
+#line 2043 "parser.c" /* yacc.c:1646  */
     break;
 
   case 67:
-#line 547 "../release/parser.y" /* yacc.c:1646  */
+#line 543 "parser.y" /* yacc.c:1646  */
     { (yyval.number) = 0; }
-#line 2053 "parser.c" /* yacc.c:1646  */
+#line 2049 "parser.c" /* yacc.c:1646  */
     break;
 
   case 68:
-#line 550 "../release/parser.y" /* yacc.c:1646  */
+#line 546 "parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[-2].number); }
-#line 2059 "parser.c" /* yacc.c:1646  */
+#line 2055 "parser.c" /* yacc.c:1646  */
     break;
 
   case 69:
-#line 554 "../release/parser.y" /* yacc.c:1646  */
+#line 550 "parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[-2].number); }
-#line 2065 "parser.c" /* yacc.c:1646  */
+#line 2061 "parser.c" /* yacc.c:1646  */
     break;
 
   case 70:
-#line 558 "../release/parser.y" /* yacc.c:1646  */
+#line 554 "parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[-2].number); }
-#line 2071 "parser.c" /* yacc.c:1646  */
+#line 2067 "parser.c" /* yacc.c:1646  */
     break;
 
   case 71:
-#line 562 "../release/parser.y" /* yacc.c:1646  */
+#line 558 "parser.y" /* yacc.c:1646  */
     { (yyval.type) = itCStringDecl((yyvsp[-1].number), FALSE); }
-#line 2077 "parser.c" /* yacc.c:1646  */
+#line 2073 "parser.c" /* yacc.c:1646  */
     break;
 
   case 72:
-#line 565 "../release/parser.y" /* yacc.c:1646  */
+#line 561 "parser.y" /* yacc.c:1646  */
     { (yyval.type) = itCStringDecl((yyvsp[-1].number), TRUE); }
-#line 2083 "parser.c" /* yacc.c:1646  */
+#line 2079 "parser.c" /* yacc.c:1646  */
     break;
 
   case 73:
-#line 569 "../release/parser.y" /* yacc.c:1646  */
+#line 565 "parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[-2].number) + (yyvsp[0].number); }
-#line 2089 "parser.c" /* yacc.c:1646  */
+#line 2085 "parser.c" /* yacc.c:1646  */
     break;
 
   case 74:
-#line 571 "../release/parser.y" /* yacc.c:1646  */
+#line 567 "parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[-2].number) - (yyvsp[0].number); }
-#line 2095 "parser.c" /* yacc.c:1646  */
+#line 2091 "parser.c" /* yacc.c:1646  */
     break;
 
   case 75:
-#line 573 "../release/parser.y" /* yacc.c:1646  */
+#line 569 "parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[-2].number) * (yyvsp[0].number); }
-#line 2101 "parser.c" /* yacc.c:1646  */
+#line 2097 "parser.c" /* yacc.c:1646  */
     break;
 
   case 76:
-#line 575 "../release/parser.y" /* yacc.c:1646  */
+#line 571 "parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[-2].number) / (yyvsp[0].number); }
-#line 2107 "parser.c" /* yacc.c:1646  */
+#line 2103 "parser.c" /* yacc.c:1646  */
     break;
 
   case 77:
-#line 577 "../release/parser.y" /* yacc.c:1646  */
+#line 573 "parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[0].number);      }
-#line 2113 "parser.c" /* yacc.c:1646  */
+#line 2109 "parser.c" /* yacc.c:1646  */
     break;
 
   case 78:
-#line 579 "../release/parser.y" /* yacc.c:1646  */
+#line 575 "parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[-1].number);     }
-#line 2119 "parser.c" /* yacc.c:1646  */
+#line 2115 "parser.c" /* yacc.c:1646  */
     break;
 
   case 79:
-#line 583 "../release/parser.y" /* yacc.c:1646  */
+#line 579 "parser.y" /* yacc.c:1646  */
     { (yyval.routine) = (yyvsp[0].routine); }
-#line 2125 "parser.c" /* yacc.c:1646  */
+#line 2121 "parser.c" /* yacc.c:1646  */
     break;
 
   case 80:
-#line 584 "../release/parser.y" /* yacc.c:1646  */
+#line 580 "parser.y" /* yacc.c:1646  */
     { (yyval.routine) = (yyvsp[0].routine); }
-#line 2131 "parser.c" /* yacc.c:1646  */
+#line 2127 "parser.c" /* yacc.c:1646  */
     break;
 
   case 81:
-#line 585 "../release/parser.y" /* yacc.c:1646  */
-    { (yyval.routine) = (yyvsp[0].routine); }
-#line 2137 "parser.c" /* yacc.c:1646  */
-    break;
-
-  case 82:
-#line 586 "../release/parser.y" /* yacc.c:1646  */
-    { (yyval.routine) = (yyvsp[0].routine); }
-#line 2143 "parser.c" /* yacc.c:1646  */
-    break;
-
-  case 83:
-#line 587 "../release/parser.y" /* yacc.c:1646  */
-    { (yyval.routine) = (yyvsp[0].routine); }
-#line 2149 "parser.c" /* yacc.c:1646  */
-    break;
-
-  case 84:
-#line 591 "../release/parser.y" /* yacc.c:1646  */
+#line 584 "parser.y" /* yacc.c:1646  */
     { (yyval.routine) = rtMakeRoutine((yyvsp[-1].identifier), 
(yyvsp[0].argument)); }
-#line 2155 "parser.c" /* yacc.c:1646  */
+#line 2133 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 85:
-#line 595 "../release/parser.y" /* yacc.c:1646  */
+  case 82:
+#line 588 "parser.y" /* yacc.c:1646  */
     { (yyval.routine) = rtMakeSimpleRoutine((yyvsp[-1].identifier), 
(yyvsp[0].argument)); }
-#line 2161 "parser.c" /* yacc.c:1646  */
-    break;
-
-  case 86:
-#line 599 "../release/parser.y" /* yacc.c:1646  */
-    { (yyval.routine) = rtMakeProcedure((yyvsp[-1].identifier), 
(yyvsp[0].argument)); }
-#line 2167 "parser.c" /* yacc.c:1646  */
+#line 2139 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 87:
-#line 603 "../release/parser.y" /* yacc.c:1646  */
-    { (yyval.routine) = rtMakeSimpleProcedure((yyvsp[-1].identifier), 
(yyvsp[0].argument)); }
-#line 2173 "parser.c" /* yacc.c:1646  */
-    break;
-
-  case 88:
-#line 607 "../release/parser.y" /* yacc.c:1646  */
-    { (yyval.routine) = rtMakeFunction((yyvsp[-2].identifier), 
(yyvsp[-1].argument), (yyvsp[0].type)); }
-#line 2179 "parser.c" /* yacc.c:1646  */
-    break;
-
-  case 89:
-#line 611 "../release/parser.y" /* yacc.c:1646  */
+  case 83:
+#line 592 "parser.y" /* yacc.c:1646  */
     { (yyval.argument) = argNULL; }
-#line 2185 "parser.c" /* yacc.c:1646  */
+#line 2145 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 90:
-#line 613 "../release/parser.y" /* yacc.c:1646  */
+  case 84:
+#line 594 "parser.y" /* yacc.c:1646  */
     { (yyval.argument) = (yyvsp[-1].argument); }
-#line 2191 "parser.c" /* yacc.c:1646  */
+#line 2151 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 91:
-#line 618 "../release/parser.y" /* yacc.c:1646  */
+  case 85:
+#line 599 "parser.y" /* yacc.c:1646  */
     { (yyval.argument) = (yyvsp[0].argument); }
-#line 2197 "parser.c" /* yacc.c:1646  */
+#line 2157 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 92:
-#line 620 "../release/parser.y" /* yacc.c:1646  */
+  case 86:
+#line 601 "parser.y" /* yacc.c:1646  */
     {
     (yyval.argument) = (yyvsp[-2].argument);
     (yyval.argument)->argNext = (yyvsp[0].argument);
 }
-#line 2206 "parser.c" /* yacc.c:1646  */
+#line 2166 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 93:
-#line 627 "../release/parser.y" /* yacc.c:1646  */
+  case 87:
+#line 608 "parser.y" /* yacc.c:1646  */
     {
     (yyval.argument) = argAlloc();
-    (yyval.argument)->argKind = (yyvsp[-3].direction);
-    (yyval.argument)->argName = (yyvsp[-2].identifier);
+    (yyval.argument)->argKind = (yyvsp[-4].direction);
+    (yyval.argument)->argName = (yyvsp[-3].identifier);
     (yyval.argument)->argType = (yyvsp[-1].type);
     (yyval.argument)->argFlags = (yyvsp[0].flag);
 }
-#line 2218 "parser.c" /* yacc.c:1646  */
+#line 2178 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 94:
-#line 636 "../release/parser.y" /* yacc.c:1646  */
+  case 88:
+#line 617 "parser.y" /* yacc.c:1646  */
     { (yyval.direction) = akNone; }
-#line 2224 "parser.c" /* yacc.c:1646  */
+#line 2184 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 95:
-#line 637 "../release/parser.y" /* yacc.c:1646  */
+  case 89:
+#line 618 "parser.y" /* yacc.c:1646  */
     { (yyval.direction) = akIn; }
-#line 2230 "parser.c" /* yacc.c:1646  */
+#line 2190 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 96:
-#line 638 "../release/parser.y" /* yacc.c:1646  */
+  case 90:
+#line 619 "parser.y" /* yacc.c:1646  */
     { (yyval.direction) = akOut; }
-#line 2236 "parser.c" /* yacc.c:1646  */
+#line 2196 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 97:
-#line 639 "../release/parser.y" /* yacc.c:1646  */
+  case 91:
+#line 620 "parser.y" /* yacc.c:1646  */
     { (yyval.direction) = akInOut; }
-#line 2242 "parser.c" /* yacc.c:1646  */
+#line 2202 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 98:
-#line 640 "../release/parser.y" /* yacc.c:1646  */
+  case 92:
+#line 621 "parser.y" /* yacc.c:1646  */
     { (yyval.direction) = akRequestPort; }
-#line 2248 "parser.c" /* yacc.c:1646  */
+#line 2208 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 99:
-#line 641 "../release/parser.y" /* yacc.c:1646  */
+  case 93:
+#line 622 "parser.y" /* yacc.c:1646  */
     { (yyval.direction) = akReplyPort; }
-#line 2254 "parser.c" /* yacc.c:1646  */
+#line 2214 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 100:
-#line 642 "../release/parser.y" /* yacc.c:1646  */
+  case 94:
+#line 623 "parser.y" /* yacc.c:1646  */
     { (yyval.direction) = akSReplyPort; }
-#line 2260 "parser.c" /* yacc.c:1646  */
+#line 2220 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 101:
-#line 643 "../release/parser.y" /* yacc.c:1646  */
+  case 95:
+#line 624 "parser.y" /* yacc.c:1646  */
     { (yyval.direction) = akUReplyPort; }
-#line 2266 "parser.c" /* yacc.c:1646  */
+#line 2226 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 102:
-#line 644 "../release/parser.y" /* yacc.c:1646  */
+  case 96:
+#line 625 "parser.y" /* yacc.c:1646  */
     { (yyval.direction) = akWaitTime; }
-#line 2272 "parser.c" /* yacc.c:1646  */
+#line 2232 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 103:
-#line 645 "../release/parser.y" /* yacc.c:1646  */
+  case 97:
+#line 626 "parser.y" /* yacc.c:1646  */
     { (yyval.direction) = akMsgOption; }
-#line 2278 "parser.c" /* yacc.c:1646  */
+#line 2238 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 104:
-#line 646 "../release/parser.y" /* yacc.c:1646  */
+  case 98:
+#line 627 "parser.y" /* yacc.c:1646  */
     { (yyval.direction) = akMsgSeqno; }
-#line 2284 "parser.c" /* yacc.c:1646  */
+#line 2244 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 105:
-#line 650 "../release/parser.y" /* yacc.c:1646  */
+  case 99:
+#line 631 "parser.y" /* yacc.c:1646  */
     {
     (yyval.type) = itLookUp((yyvsp[0].identifier));
     if ((yyval.type) == itNULL)
        error("type '%s' not defined", (yyvsp[0].identifier));
 }
-#line 2294 "parser.c" /* yacc.c:1646  */
+#line 2254 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 106:
-#line 656 "../release/parser.y" /* yacc.c:1646  */
+  case 100:
+#line 637 "parser.y" /* yacc.c:1646  */
     { (yyval.type) = (yyvsp[0].type); }
-#line 2300 "parser.c" /* yacc.c:1646  */
+#line 2260 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 107:
-#line 660 "../release/parser.y" /* yacc.c:1646  */
+  case 101:
+#line 641 "parser.y" /* yacc.c:1646  */
     { LookString(); }
-#line 2306 "parser.c" /* yacc.c:1646  */
+#line 2266 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 108:
-#line 664 "../release/parser.y" /* yacc.c:1646  */
+  case 102:
+#line 645 "parser.y" /* yacc.c:1646  */
     { LookFileName(); }
-#line 2312 "parser.c" /* yacc.c:1646  */
+#line 2272 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 109:
-#line 668 "../release/parser.y" /* yacc.c:1646  */
+  case 103:
+#line 649 "parser.y" /* yacc.c:1646  */
     { LookQString(); }
-#line 2318 "parser.c" /* yacc.c:1646  */
+#line 2278 "parser.c" /* yacc.c:1646  */
     break;
 
 
-#line 2322 "parser.c" /* yacc.c:1646  */
+#line 2282 "parser.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -2546,7 +2506,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 671 "../release/parser.y" /* yacc.c:1906  */
+#line 652 "parser.y" /* yacc.c:1906  */
 
 
 static const char *
diff --git a/parser.h b/parser.h
index 96e9b5d..0188b64 100644
--- a/parser.h
+++ b/parser.h
@@ -1,5 +1,185 @@
-typedef union
+/* A Bison parser, made by GNU Bison 3.0.4.  */
+
+/* Bison interface for Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+#ifndef YY_YY_PARSER_H_INCLUDED
+# define YY_YY_PARSER_H_INCLUDED
+/* Debug traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
+
+/* Token type.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+  enum yytokentype
+  {
+    sySkip = 258,
+    syRoutine = 259,
+    sySimpleRoutine = 260,
+    sySubsystem = 261,
+    syKernelUser = 262,
+    syKernelServer = 263,
+    syMsgOption = 264,
+    syMsgSeqno = 265,
+    syWaitTime = 266,
+    syNoWaitTime = 267,
+    syErrorProc = 268,
+    syServerPrefix = 269,
+    syUserPrefix = 270,
+    syServerDemux = 271,
+    syRCSId = 272,
+    syImport = 273,
+    syUImport = 274,
+    sySImport = 275,
+    syIn = 276,
+    syOut = 277,
+    syInOut = 278,
+    syRequestPort = 279,
+    syReplyPort = 280,
+    sySReplyPort = 281,
+    syUReplyPort = 282,
+    syType = 283,
+    syArray = 284,
+    syStruct = 285,
+    syOf = 286,
+    syInTran = 287,
+    syOutTran = 288,
+    syDestructor = 289,
+    syCType = 290,
+    syCUserType = 291,
+    syCServerType = 292,
+    syCString = 293,
+    syColon = 294,
+    sySemi = 295,
+    syComma = 296,
+    syPlus = 297,
+    syMinus = 298,
+    syStar = 299,
+    syDiv = 300,
+    syLParen = 301,
+    syRParen = 302,
+    syEqual = 303,
+    syCaret = 304,
+    syTilde = 305,
+    syLAngle = 306,
+    syRAngle = 307,
+    syLBrack = 308,
+    syRBrack = 309,
+    syBar = 310,
+    syError = 311,
+    syNumber = 312,
+    sySymbolicType = 313,
+    syIdentifier = 314,
+    syString = 315,
+    syQString = 316,
+    syFileName = 317,
+    syIPCFlag = 318,
+    syInTranPayload = 319
+  };
+#endif
+/* Tokens.  */
+#define sySkip 258
+#define syRoutine 259
+#define sySimpleRoutine 260
+#define sySubsystem 261
+#define syKernelUser 262
+#define syKernelServer 263
+#define syMsgOption 264
+#define syMsgSeqno 265
+#define syWaitTime 266
+#define syNoWaitTime 267
+#define syErrorProc 268
+#define syServerPrefix 269
+#define syUserPrefix 270
+#define syServerDemux 271
+#define syRCSId 272
+#define syImport 273
+#define syUImport 274
+#define sySImport 275
+#define syIn 276
+#define syOut 277
+#define syInOut 278
+#define syRequestPort 279
+#define syReplyPort 280
+#define sySReplyPort 281
+#define syUReplyPort 282
+#define syType 283
+#define syArray 284
+#define syStruct 285
+#define syOf 286
+#define syInTran 287
+#define syOutTran 288
+#define syDestructor 289
+#define syCType 290
+#define syCUserType 291
+#define syCServerType 292
+#define syCString 293
+#define syColon 294
+#define sySemi 295
+#define syComma 296
+#define syPlus 297
+#define syMinus 298
+#define syStar 299
+#define syDiv 300
+#define syLParen 301
+#define syRParen 302
+#define syEqual 303
+#define syCaret 304
+#define syTilde 305
+#define syLAngle 306
+#define syRAngle 307
+#define syLBrack 308
+#define syRBrack 309
+#define syBar 310
+#define syError 311
+#define syNumber 312
+#define sySymbolicType 313
+#define syIdentifier 314
+#define syString 315
+#define syQString 316
+#define syFileName 317
+#define syIPCFlag 318
+#define syInTranPayload 319
+
+/* Value type.  */
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+
+union YYSTYPE
 {
+#line 137 "parser.y" /* yacc.c:1909  */
+
     u_int number;
     identifier_t identifier;
     const_string_t string;
@@ -17,74 +197,18 @@ typedef union
     arg_kind_t direction;
     argument_t *argument;
     ipc_flags_t flag;
-} YYSTYPE;
-#define        sySkip  258
-#define        syRoutine       259
-#define        sySimpleRoutine 260
-#define        sySimpleProcedure       261
-#define        syProcedure     262
-#define        syFunction      263
-#define        sySubsystem     264
-#define        syKernelUser    265
-#define        syKernelServer  266
-#define        syMsgOption     267
-#define        syMsgSeqno      268
-#define        syWaitTime      269
-#define        syNoWaitTime    270
-#define        syErrorProc     271
-#define        syServerPrefix  272
-#define        syUserPrefix    273
-#define        syServerDemux   274
-#define        syRCSId 275
-#define        syImport        276
-#define        syUImport       277
-#define        sySImport       278
-#define        syIn    279
-#define        syOut   280
-#define        syInOut 281
-#define        syRequestPort   282
-#define        syReplyPort     283
-#define        sySReplyPort    284
-#define        syUReplyPort    285
-#define        syType  286
-#define        syArray 287
-#define        syStruct        288
-#define        syOf    289
-#define        syInTran        290
-#define        syOutTran       291
-#define        syDestructor    292
-#define        syCType 293
-#define        syCUserType     294
-#define        syCServerType   295
-#define        syCString       296
-#define        syColon 297
-#define        sySemi  298
-#define        syComma 299
-#define        syPlus  300
-#define        syMinus 301
-#define        syStar  302
-#define        syDiv   303
-#define        syLParen        304
-#define        syRParen        305
-#define        syEqual 306
-#define        syCaret 307
-#define        syTilde 308
-#define        syLAngle        309
-#define        syRAngle        310
-#define        syLBrack        311
-#define        syRBrack        312
-#define        syBar   313
-#define        syError 314
-#define        syNumber        315
-#define        sySymbolicType  316
-#define        syIdentifier    317
-#define        syString        318
-#define        syQString       319
-#define        syFileName      320
-#define        syIPCFlag       321
-#define        syInTranPayload 322
+
+#line 202 "parser.h" /* yacc.c:1909  */
+};
+
+typedef union YYSTYPE YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define YYSTYPE_IS_DECLARED 1
+#endif
 
 
 extern YYSTYPE yylval;
 
-extern void yyerror(const char *);
+int yyparse (void);
+
+#endif /* !YY_YY_PARSER_H_INCLUDED  */
diff --git a/parser.y b/parser.y
index e88fd22..8c2190b 100644
--- a/parser.y
+++ b/parser.y
@@ -27,9 +27,6 @@
 %token sySkip
 %token syRoutine
 %token sySimpleRoutine
-%token sySimpleProcedure
-%token syProcedure
-%token syFunction
 
 %token sySubsystem
 %token syKernelUser
@@ -111,7 +108,6 @@
 %type  <type> BasicTypeSpec PrevTypeSpec ArgumentType
 %type  <symtype> PrimIPCType IPCType
 %type  <routine> RoutineDecl Routine SimpleRoutine
-%type  <routine> Procedure SimpleProcedure Function
 %type  <direction> Direction
 %type  <argument> Argument Arguments ArgumentList
 %type  <flag> IPCFlags
@@ -582,9 +578,6 @@ IntExp                      :       IntExp  syPlus  IntExp
  
 RoutineDecl            :       Routine                 { $$ = $1; }
                        |       SimpleRoutine           { $$ = $1; }
-                       |       Procedure               { $$ = $1; }
-                       |       SimpleProcedure         { $$ = $1; }
-                       |       Function                { $$ = $1; }
                        ;
 
 Routine                        :       syRoutine syIdentifier Arguments
@@ -595,18 +588,6 @@ SimpleRoutine              :       sySimpleRoutine 
syIdentifier Arguments
                                { $$ = rtMakeSimpleRoutine($2, $3); }
                        ;
 
-Procedure              :       syProcedure syIdentifier Arguments
-                               { $$ = rtMakeProcedure($2, $3); }
-                       ;
-
-SimpleProcedure                :       sySimpleProcedure syIdentifier Arguments
-                               { $$ = rtMakeSimpleProcedure($2, $3); }
-                       ;
-
-Function               :       syFunction syIdentifier Arguments ArgumentType
-                               { $$ = rtMakeFunction($2, $3, $4); }
-                       ;
-
 Arguments              :       syLParen syRParen
                                { $$ = argNULL; }
                        |       syLParen ArgumentList syRParen
@@ -623,13 +604,13 @@ ArgumentList              :       Argument
 }
                        ;
 
-Argument               :       Direction syIdentifier ArgumentType IPCFlags
+Argument               :       Direction syIdentifier syColon ArgumentType 
IPCFlags
 {
     $$ = argAlloc();
     $$->argKind = $1;
     $$->argName = $2;
-    $$->argType = $3;
-    $$->argFlags = $4;
+    $$->argType = $4;
+    $$->argFlags = $5;
 }
                        ;
 
@@ -646,14 +627,14 @@ Direction         :       /* empty */     { $$ = akNone; }
                        |       syMsgSeqno      { $$ = akMsgSeqno; }
                        ;
 
-ArgumentType           :       syColon syIdentifier
+ArgumentType           :       syIdentifier
 {
-    $$ = itLookUp($2);
+    $$ = itLookUp($1);
     if ($$ == itNULL)
-       error("type '%s' not defined", $2);
+       error("type '%s' not defined", $1);
 }
-                       |       syColon NamedTypeSpec
-                               { $$ = $2; }
+                       |       NamedTypeSpec
+                               { $$ = $1; }
                        ;
 
 LookString             :       /* empty */
diff --git a/routine.c b/routine.c
index ddf5770..d9154ef 100644
--- a/routine.c
+++ b/routine.c
@@ -59,7 +59,6 @@ rtAlloc(void)
        fatal("rtAlloc(): %s", unix_error_string(errno));
     new->rtNumber = rtNumber++;
     new->rtName = strNULL;
-    new->rtErrorName = strNULL;
     new->rtUserName = strNULL;
     new->rtServerName = strNULL;
 
@@ -136,54 +135,6 @@ rtMakeSimpleRoutine(identifier_t name, argument_t *args)
     return rt;
 }
 
-routine_t *
-rtMakeProcedure(identifier_t name, argument_t *args)
-{
-    routine_t *rt = rtAlloc();
-
-    rt->rtName = name;
-    rt->rtKind = rkProcedure;
-    rt->rtArgs = args;
-
-    warn("Procedure %s: obsolete routine kind", name);
-
-    return rt;
-}
-
-routine_t *
-rtMakeSimpleProcedure(identifier_t name, argument_t *args)
-{
-    routine_t *rt = rtAlloc();
-
-    rt->rtName = name;
-    rt->rtKind = rkSimpleProcedure;
-    rt->rtArgs = args;
-
-    warn("SimpleProcedure %s: obsolete routine kind", name);
-
-    return rt;
-}
-
-routine_t *
-rtMakeFunction(identifier_t name, argument_t *args, ipc_type_t *type)
-{
-    routine_t *rt = rtAlloc();
-    argument_t *ret = argAlloc();
-
-    ret->argName = name;
-    ret->argKind = akReturn;
-    ret->argType = type;
-    ret->argNext = args;
-
-    rt->rtName = name;
-    rt->rtKind = rkFunction;
-    rt->rtArgs = ret;
-
-    warn("Function %s: obsolete routine kind", name);
-
-    return rt;
-}
-
 const char *
 rtRoutineKindToStr(routine_kind_t rk)
 {
@@ -193,12 +144,6 @@ rtRoutineKindToStr(routine_kind_t rk)
        return "Routine";
       case rkSimpleRoutine:
        return "SimpleRoutine";
-      case rkProcedure:
-       return "Procedure";
-      case rkSimpleProcedure:
-       return "SimpleProcedure";
-      case rkFunction:
-       return "Function";
       default:
        fatal("rtRoutineKindToStr(%d): not a routine_kind_t", rk);
        /*NOTREACHED*/
@@ -290,12 +235,7 @@ rtPrintRoutine(const routine_t *rt)
     for (arg = rt->rtArgs; arg != argNULL; arg = arg->argNext)
        rtPrintArg(arg);
 
-    if (rt->rtKind == rkFunction)
-       printf("): %s\n", rt->rtReturn->argType->itName);
-    else
-       printf(")\n");
-
-    printf("\n");
+    printf(")\n");
 }
 
 /*
@@ -932,15 +872,10 @@ rtCheckArgTypes(routine_t *rt)
        error("%s %s doesn't have a server port argument",
              rtRoutineKindToStr(rt->rtKind), rt->rtName);
 
-    if ((rt->rtKind == rkFunction) &&
-       (rt->rtReturn == argNULL))
-       error("Function %s doesn't have a return arg", rt->rtName);
+    if (rt->rtReturn != argNULL)
+       error("routine %s has a return arg", rt->rtName);
 
-    if ((rt->rtKind != rkFunction) &&
-       (rt->rtReturn != argNULL))
-       error("non-function %s has a return arg", rt->rtName);
-
-    if ((rt->rtReturn == argNULL) && !rt->rtProcedure)
+    if (rt->rtReturn == argNULL)
        rt->rtReturn = rt->rtRetCode;
 
     rt->rtServerReturn = rt->rtReturn;
@@ -1250,12 +1185,7 @@ rtCheckRoutine(routine_t *rt)
 {
     /* Initialize random fields. */
 
-    rt->rtErrorName = ErrorProc;
-    rt->rtOneWay = ((rt->rtKind == rkSimpleProcedure) ||
-                   (rt->rtKind == rkSimpleRoutine));
-    rt->rtProcedure = ((rt->rtKind == rkProcedure) ||
-                      (rt->rtKind == rkSimpleProcedure));
-    rt->rtUseError = rt->rtProcedure || (rt->rtKind == rkFunction);
+    rt->rtOneWay = (rt->rtKind == rkSimpleRoutine);
     rt->rtServerName = strconcat(ServerPrefix, rt->rtName);
     rt->rtServerName = strconcat(RoutinePrefix, rt->rtServerName);
     rt->rtUserName = strconcat(UserPrefix, rt->rtName);
@@ -1342,8 +1272,5 @@ rtCheckRoutine(routine_t *rt)
     rtCheckDestroy(rt);
     rtAddByReference(rt);
 
-    if (rt->rtKind == rkFunction)
-       rt->rtNoReplyArgs = FALSE;
-    else
-       rt->rtNoReplyArgs = !rtCheckMask(rt->rtArgs, akbReturnSnd);
+    rt->rtNoReplyArgs = !rtCheckMask(rt->rtArgs, akbReturnSnd);
 }
diff --git a/routine.h b/routine.h
index f80a174..2b79b27 100644
--- a/routine.h
+++ b/routine.h
@@ -264,7 +264,6 @@ typedef u_int  arg_kind_t;
 
 typedef struct argument
 {
-    /* if argKind == akReturn, then argName is name of the function */
     identifier_t argName;
     struct argument *argNext;
 
@@ -305,18 +304,14 @@ typedef struct argument
 
 /*
  * The various routine kinds' peculiarities are abstracted by rtCheckRoutine
- * into attributes like rtOneWay, rtProcedure, etc.  These are what
- * code generation should use.  It is Bad Form for code generation to
- * test rtKind.
+ * into attributes like rtOneWay, etc.  These are what code generation should
+ * use.  It is bad Form for code generation to test rtKind.
  */
 
 typedef enum
 {
     rkRoutine,
     rkSimpleRoutine,
-    rkSimpleProcedure,
-    rkProcedure,
-    rkFunction,
 } routine_kind_t;
 
 typedef struct routine
@@ -329,12 +324,7 @@ typedef struct routine
     identifier_t rtUserName;   /* user-visible name (UserPrefix + Name) */
     identifier_t rtServerName; /* server-side name (ServerPrefix + Name) */
 
-    /* rtErrorName is only used for Procs, SimpleProcs, & Functions */
-    identifier_t rtErrorName;  /* error-handler name */
-
-    boolean_t rtOneWay;                /* SimpleProcedure or SimpleRoutine */
-    boolean_t rtProcedure;     /* Procedure or SimpleProcedure */
-    boolean_t rtUseError;      /* Procedure or Function */
+    boolean_t rtOneWay;                /* TRUE for SimpleRoutine */
 
     boolean_t rtSimpleFixedRequest;    /* fixed msg-simple value in request */
     boolean_t rtSimpleSendRequest;     /* in any case, initial value */
@@ -362,7 +352,7 @@ typedef struct routine
     argument_t *rtRequestPort; /* always non-NULL, defaults to first arg */
     argument_t *rtUReplyPort;  /* always non-NULL, defaults to Mig-supplied */
     argument_t *rtSReplyPort;  /* always non-NULL, defaults to Mig-supplied */
-    argument_t *rtReturn;      /* non-NULL unless rtProcedure */
+    argument_t *rtReturn;      /* non-NULL */
     argument_t *rtServerReturn;        /* NULL or rtReturn  */
     argument_t *rtRetCode;     /* always non-NULL */
     argument_t *rtWaitTime;    /* if non-NULL, will use MACH_RCV_TIMEOUT */
@@ -388,10 +378,6 @@ extern boolean_t rtCheckMaskFunction(const argument_t 
*args, u_int mask,
 
 extern routine_t *rtMakeRoutine(identifier_t name, argument_t *args);
 extern routine_t *rtMakeSimpleRoutine(identifier_t name, argument_t *args);
-extern routine_t *rtMakeProcedure(identifier_t name, argument_t *args);
-extern routine_t *rtMakeSimpleProcedure(identifier_t name, argument_t *args);
-extern routine_t *rtMakeFunction(identifier_t name, argument_t *args,
-                                ipc_type_t *type);
 
 extern void rtPrintRoutine(const routine_t *rt);
 extern void rtCheckRoutine(routine_t *rt);
diff --git a/server.c b/server.c
index a08795b..9634887 100644
--- a/server.c
+++ b/server.c
@@ -47,6 +47,7 @@ WriteIncludes(FILE *file)
     fprintf(file, "#include <mach/mig_support.h>\n");
     if (IsKernelServer)
        fprintf(file, "#include <ipc/ipc_port.h>\n");
+    fprintf(file, "#include <stdint.h>\n");
     fprintf(file, "\n");
 }
 
@@ -479,7 +480,7 @@ WriteCheckArgSize(FILE *file, const argument_t *arg)
                arg->argLongForm ? ".msgtl_header" : "");
     }
 
-    if (btype->itTypeSize % 4 != 0)
+    if (btype->itTypeSize % word_size != 0)
        fprintf(file, "(");
 
     if (multiplier > 1)
@@ -487,10 +488,10 @@ WriteCheckArgSize(FILE *file, const argument_t *arg)
 
     fprintf(file, "In%dP->%s", arg->argRequestPos, count->argMsgField);
 
-    /* If the base type size of the data field isn`t a multiple of 4,
+    /* If the base type size of the data field isn`t a multiple of word_size,
        we have to round up. */
-    if (btype->itTypeSize % 4 != 0)
-       fprintf(file, " + 3) & ~3");
+    if (btype->itTypeSize % word_size != 0)
+       fprintf(file, " + %d) & ~%d", word_size - 1, word_size - 1);
 
     if (ptype->itIndefinite) {
        fprintf(file, " : sizeof(%s *)", FetchServerType(btype));
@@ -526,8 +527,8 @@ WriteCheckMsgSize(FILE *file, const argument_t *arg)
        boolean_t LastVarArg = arg->argRequestPos+1 == rt->rtNumRequestVar;
 
        /* calculate the actual size in bytes of the data field.  note
-          that this quantity must be a multiple of four.  hence, if
-          the base type size isn't a multiple of four, we have to
+          that this quantity must be a multiple of word_size.  hence, if
+          the base type size isn't a multiple of word_size, we have to
           round up.  note also that btype->itNumber must
           divide btype->itTypeSize (see itCalculateSizeInfo). */
 
@@ -749,6 +750,18 @@ WriteServerCallArg(FILE *file, const argument_t *arg)
     const ipc_type_t *it = arg->argType;
     boolean_t NeedClose = FALSE;
 
+    if (IsKernelServer) {
+        /* If the type (incl. array) is handled differently, then we need to
+           cast it to the real argument type.  */
+        if (it->itKernelPort ||
+            it->itInLine && it->itVarArray && it->itElement->itKernelPort) {
+            /* Some arguments are transformed into the correct type already.  
*/
+            if (!akCheckAll(arg->argKind, akbSendRcv|akbVarNeeded))
+              fprintf(file, "(%s%s)", it->itTransType,
+                      arg->argByReferenceServer ? "*" : "");
+        }
+    }
+
     if (arg->argByReferenceServer)
        fprintf(file, "&");
 
@@ -1071,7 +1084,7 @@ WriteArgSize(FILE *file, const argument_t *arg)
                arg->argLongForm ? ".msgtl_header" : "");
     }
 
-    if (bsize % 4 != 0)
+    if (bsize % word_size != 0)
        fprintf(file, "(");
 
     if (bsize > 1)
@@ -1084,11 +1097,11 @@ WriteArgSize(FILE *file, const argument_t *arg)
        fprintf(file, "%s", count->argVarName);
 
     /*
-     * If the base type size is not a multiple of sizeof(int) [4],
+     * If the base type size is not a multiple of word_size,
      * we have to round up.
      */
-    if (bsize % 4 != 0)
-       fprintf(file, " + 3) & ~3");
+    if (bsize % word_size != 0)
+       fprintf(file, " + %d) & ~%d", word_size - 1, word_size - 1);
 
     if (ptype->itIndefinite) {
        fprintf(file, " : sizeof(%s *)",
diff --git a/tests/Makeconf.am b/tests/Makeconf.am
new file mode 100644
index 0000000..a1ae21b
--- /dev/null
+++ b/tests/Makeconf.am
@@ -0,0 +1,23 @@
+# Copyright (C) 2016 Free Software Foundation, Inc.
+#
+# This file is part of GNU MIG.
+#
+# GNU MIG is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2, or (at
+# your option) any later version.
+#
+# GNU MIG is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+MOSTLYCLEANFILES = *.[coh]
+
+TEST_EXTENSIONS = .defs
+AM_TESTS_ENVIRONMENT = SRCDIR='$(top_srcdir)' BUILDDIR='$(top_builddir)' \
+                       CC='$(TARGET_CC)'
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644
index 0000000..be2e8d0
--- /dev/null
+++ b/tests/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS = good generate-only bad
+
+EXTRA_DIST = base_types.defs test_lib.sh includes/all.h 
includes/mach/mig_support.h includes/server.h includes/types.h includes/user.h
diff --git a/tests/Makefile.in b/tests/Makefile.in
new file mode 100644
index 0000000..72cf857
--- /dev/null
+++ b/tests/Makefile.in
@@ -0,0 +1,601 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
address@hidden@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = tests
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(address@hidden@)
+am__v_P_ = $(address@hidden@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(address@hidden@)
+am__v_GEN_ = $(address@hidden@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(address@hidden@)
+am__v_at_ = $(address@hidden@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+       ctags-recursive dvi-recursive html-recursive info-recursive \
+       install-data-recursive install-dvi-recursive \
+       install-exec-recursive install-html-recursive \
+       install-info-recursive install-pdf-recursive \
+       install-ps-recursive install-recursive installcheck-recursive \
+       installdirs-recursive pdf-recursive ps-recursive \
+       tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+       distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MIG = @MIG@
+MIGCOM = @MIGCOM@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TARGET_CC = @TARGET_CC@
+TARGET_CFLAGS = @TARGET_CFLAGS@
+TARGET_CPPFLAGS = @TARGET_CPPFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = good generate-only bad
+EXTRA_DIST = base_types.defs test_lib.sh includes/all.h 
includes/mach/mig_support.h includes/server.h includes/types.h includes/user.h
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu tests/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ 
$(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ 
$(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure 
$(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+       @fail=; \
+       if $(am__make_keepgoing); then \
+         failcom='fail=yes'; \
+       else \
+         failcom='exit 1'; \
+       fi; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       $(am__define_uniq_tagged_files); \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx 
{} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx 
{} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           $(am__make_dryrun) \
+             || test -d "$(distdir)/$$subdir" \
+             || $(MKDIR_P) "$(distdir)/$$subdir" \
+             || exit 1; \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) 
top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: 
am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               am__skip_mode_fix=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s 
\
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s 
\
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f 
$(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+       check-am clean clean-generic cscopelist-am ctags ctags-am \
+       distclean distclean-generic distclean-tags distdir dvi dvi-am \
+       html html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+       pdf-am ps ps-am tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/bad/Makefile.am b/tests/bad/Makefile.am
new file mode 100644
index 0000000..2e1bf37
--- /dev/null
+++ b/tests/bad/Makefile.am
@@ -0,0 +1,23 @@
+# Copyright (C) 2016 Free Software Foundation, Inc.
+#
+# This file is part of GNU MIG.
+#
+# GNU MIG is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2, or (at
+# your option) any later version.
+#
+# GNU MIG is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+TESTS = invalid_subsystem.defs no_request_port.defs no_subsystem.defs
+EXTRA_DIST = $(TESTS) run_bad_test.sh
+DEFS_LOG_COMPILER = sh ./$(srcdir)/run_bad_test.sh
+
+include $(srcdir)/../Makeconf.am
diff --git a/tests/bad/Makefile.in b/tests/bad/Makefile.in
new file mode 100644
index 0000000..4fd17c7
--- /dev/null
+++ b/tests/bad/Makefile.in
@@ -0,0 +1,828 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
address@hidden@
+
+# Copyright (C) 2016 Free Software Foundation, Inc.
+#
+# This file is part of GNU MIG.
+#
+# GNU MIG is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2, or (at
+# your option) any later version.
+#
+# GNU MIG is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+# Copyright (C) 2016 Free Software Foundation, Inc.
+#
+# This file is part of GNU MIG.
+#
+# GNU MIG is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2, or (at
+# your option) any later version.
+#
+# GNU MIG is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.
+#
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = tests/bad
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(address@hidden@)
+am__v_P_ = $(address@hidden@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(address@hidden@)
+am__v_GEN_ = $(address@hidden@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(address@hidden@)
+am__v_at_ = $(address@hidden@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(MKDIR_P) "$$am__odir" || exit $$?;              \
+if test -f "./$$f"; then dir=./;                       \
+elif test -f "$$f"; then dir=;                         \
+else dir="$(srcdir)/"; fi;                             \
+tst=$$dir$$f; log='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@address@hidden)
+TEST_LOGS = $(am__test_logs2:.defs.log=.log)
+DEFS_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver
+DEFS_LOG_COMPILE = $(DEFS_LOG_COMPILER) $(AM_DEFS_LOG_FLAGS) \
+       $(DEFS_LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__DIST_COMMON = $(srcdir)/../Makeconf.am $(srcdir)/Makefile.in \
+       $(top_srcdir)/build-aux/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MIG = @MIG@
+MIGCOM = @MIGCOM@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TARGET_CC = @TARGET_CC@
+TARGET_CFLAGS = @TARGET_CFLAGS@
+TARGET_CPPFLAGS = @TARGET_CPPFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+TESTS = invalid_subsystem.defs no_request_port.defs no_subsystem.defs
+EXTRA_DIST = $(TESTS) run_bad_test.sh
+DEFS_LOG_COMPILER = sh ./$(srcdir)/run_bad_test.sh
+MOSTLYCLEANFILES = *.[coh]
+TEST_EXTENSIONS = .defs
+AM_TESTS_ENVIRONMENT = SRCDIR='$(top_srcdir)' BUILDDIR='$(top_builddir)' \
+                       CC='$(TARGET_CC)'
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .defs .defs$(EXEEXT) .log .trs
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/../Makeconf.am 
$(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/bad/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu tests/bad/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ 
$(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ 
$(am__depfiles_maybe);; \
+       esac;
+$(srcdir)/../Makeconf.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure 
$(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all 
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+.defs.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(DEFS_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_DEFS_LOG_DRIVER_FLAGS) 
$(DEFS_LOG_DRIVER_FLAGS) -- $(DEFS_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
address@hidden@.defs$(EXEEXT).log:
address@hidden@ @p='$<'; \
address@hidden@ $(am__set_b); \
address@hidden@ $(am__check_pre) $(DEFS_LOG_DRIVER) --test-name "$$f" \
address@hidden@ --log-file $$b.log --trs-file $$b.trs \
address@hidden@ $(am__common_driver_flags) $(AM_DEFS_LOG_DRIVER_FLAGS) 
$(DEFS_LOG_DRIVER_FLAGS) -- $(DEFS_LOG_COMPILE) \
address@hidden@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx 
{} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx 
{} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s 
\
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s 
\
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
+mostlyclean-generic:
+       -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+       -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+       -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f 
$(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: all all-am check check-TESTS check-am clean clean-generic \
+       cscopelist-am ctags-am distclean distclean-generic distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+       pdf-am ps ps-am recheck tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/bad/invalid_subsystem.defs b/tests/bad/invalid_subsystem.defs
new file mode 100644
index 0000000..8e0f299
--- /dev/null
+++ b/tests/bad/invalid_subsystem.defs
@@ -0,0 +1,19 @@
+/*
+   Copyright (C) 2016 Free Software Foundation, Inc.
+
+   This file is part of GNU MIG.
+
+   GNU MIG is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   GNU MIG is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.  */
+
+subsystem mysubsystem a;
diff --git a/tests/bad/no_request_port.defs b/tests/bad/no_request_port.defs
new file mode 100644
index 0000000..3264fb8
--- /dev/null
+++ b/tests/bad/no_request_port.defs
@@ -0,0 +1,23 @@
+/*
+   Copyright (C) 2016 Free Software Foundation, Inc.
+
+   This file is part of GNU MIG.
+
+   GNU MIG is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   GNU MIG is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.  */
+
+subsystem test 100;
+
+#include "../base_types.defs"
+
+routine myroutine(n : int64_t);
diff --git a/tests/bad/no_subsystem.defs b/tests/bad/no_subsystem.defs
new file mode 100644
index 0000000..7595fc2
--- /dev/null
+++ b/tests/bad/no_subsystem.defs
@@ -0,0 +1,19 @@
+/*
+   Copyright (C) 2016 Free Software Foundation, Inc.
+
+   This file is part of GNU MIG.
+
+   GNU MIG is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   GNU MIG is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "../base_types.defs"
diff --git a/tests/bad/run_bad_test.sh b/tests/bad/run_bad_test.sh
new file mode 100755
index 0000000..9d951bb
--- /dev/null
+++ b/tests/bad/run_bad_test.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# Copyright (C) 2016 Free Software Foundation, Inc.
+#
+# This file is part of GNU MIG.
+#
+# GNU MIG is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2, or (at
+# your option) any later version.
+#
+# GNU MIG is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+. $SRCDIR/tests/test_lib.sh
+
+file=$1
+module="$(basename $file .defs)"
+if run_mig $file $module; then
+  failure "$module was supposed to fail"
+  exit 1
+fi
diff --git a/tests/base_types.defs b/tests/base_types.defs
new file mode 100644
index 0000000..a226056
--- /dev/null
+++ b/tests/base_types.defs
@@ -0,0 +1,4 @@
+type int = MACH_MSG_TYPE_INTEGER_32;
+type int64_t = MACH_MSG_TYPE_INTEGER_64;
+type int32_t = MACH_MSG_TYPE_INTEGER_32;
+type mach_port_t = MACH_MSG_TYPE_COPY_SEND;
diff --git a/tests/generate-only/Makefile.am b/tests/generate-only/Makefile.am
new file mode 100644
index 0000000..d936d8a
--- /dev/null
+++ b/tests/generate-only/Makefile.am
@@ -0,0 +1,23 @@
+# Copyright (C) 2016 Free Software Foundation, Inc.
+#
+# This file is part of GNU MIG.
+#
+# GNU MIG is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2, or (at
+# your option) any later version.
+#
+# GNU MIG is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+TESTS = subsystem-kernel.defs subsystem-user.defs
+EXTRA_DIST = $(TESTS) run_generate_only_test.sh
+DEFS_LOG_COMPILER = sh ./$(srcdir)/run_generate_only_test.sh
+
+include $(srcdir)/../Makeconf.am
diff --git a/tests/generate-only/Makefile.in b/tests/generate-only/Makefile.in
new file mode 100644
index 0000000..4cd6766
--- /dev/null
+++ b/tests/generate-only/Makefile.in
@@ -0,0 +1,828 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
address@hidden@
+
+# Copyright (C) 2016 Free Software Foundation, Inc.
+#
+# This file is part of GNU MIG.
+#
+# GNU MIG is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2, or (at
+# your option) any later version.
+#
+# GNU MIG is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+# Copyright (C) 2016 Free Software Foundation, Inc.
+#
+# This file is part of GNU MIG.
+#
+# GNU MIG is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2, or (at
+# your option) any later version.
+#
+# GNU MIG is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.
+#
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = tests/generate-only
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(address@hidden@)
+am__v_P_ = $(address@hidden@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(address@hidden@)
+am__v_GEN_ = $(address@hidden@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(address@hidden@)
+am__v_at_ = $(address@hidden@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(MKDIR_P) "$$am__odir" || exit $$?;              \
+if test -f "./$$f"; then dir=./;                       \
+elif test -f "$$f"; then dir=;                         \
+else dir="$(srcdir)/"; fi;                             \
+tst=$$dir$$f; log='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@address@hidden)
+TEST_LOGS = $(am__test_logs2:.defs.log=.log)
+DEFS_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver
+DEFS_LOG_COMPILE = $(DEFS_LOG_COMPILER) $(AM_DEFS_LOG_FLAGS) \
+       $(DEFS_LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__DIST_COMMON = $(srcdir)/../Makeconf.am $(srcdir)/Makefile.in \
+       $(top_srcdir)/build-aux/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MIG = @MIG@
+MIGCOM = @MIGCOM@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TARGET_CC = @TARGET_CC@
+TARGET_CFLAGS = @TARGET_CFLAGS@
+TARGET_CPPFLAGS = @TARGET_CPPFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+TESTS = subsystem-kernel.defs subsystem-user.defs
+EXTRA_DIST = $(TESTS) run_generate_only_test.sh
+DEFS_LOG_COMPILER = sh ./$(srcdir)/run_generate_only_test.sh
+MOSTLYCLEANFILES = *.[coh]
+TEST_EXTENSIONS = .defs
+AM_TESTS_ENVIRONMENT = SRCDIR='$(top_srcdir)' BUILDDIR='$(top_builddir)' \
+                       CC='$(TARGET_CC)'
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .defs .defs$(EXEEXT) .log .trs
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/../Makeconf.am 
$(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu 
tests/generate-only/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu tests/generate-only/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ 
$(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ 
$(am__depfiles_maybe);; \
+       esac;
+$(srcdir)/../Makeconf.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure 
$(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all 
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+.defs.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(DEFS_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_DEFS_LOG_DRIVER_FLAGS) 
$(DEFS_LOG_DRIVER_FLAGS) -- $(DEFS_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
address@hidden@.defs$(EXEEXT).log:
address@hidden@ @p='$<'; \
address@hidden@ $(am__set_b); \
address@hidden@ $(am__check_pre) $(DEFS_LOG_DRIVER) --test-name "$$f" \
address@hidden@ --log-file $$b.log --trs-file $$b.trs \
address@hidden@ $(am__common_driver_flags) $(AM_DEFS_LOG_DRIVER_FLAGS) 
$(DEFS_LOG_DRIVER_FLAGS) -- $(DEFS_LOG_COMPILE) \
address@hidden@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx 
{} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx 
{} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s 
\
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s 
\
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
+mostlyclean-generic:
+       -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+       -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+       -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f 
$(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: all all-am check check-TESTS check-am clean clean-generic \
+       cscopelist-am ctags-am distclean distclean-generic distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+       pdf-am ps ps-am recheck tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/generate-only/run_generate_only_test.sh 
b/tests/generate-only/run_generate_only_test.sh
new file mode 100755
index 0000000..cbed19b
--- /dev/null
+++ b/tests/generate-only/run_generate_only_test.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# Copyright (C) 2016 Free Software Foundation, Inc.
+#
+# This file is part of GNU MIG.
+#
+# GNU MIG is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2, or (at
+# your option) any later version.
+#
+# GNU MIG is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+. $SRCDIR/tests/test_lib.sh
+
+file=$1
+module="$(basename $file .defs)"
+if ! run_mig $file $module; then
+  failure "Could not generate stubs for $module"
+  exit 1
+fi
diff --git a/tests/generate-only/subsystem-kernel.defs 
b/tests/generate-only/subsystem-kernel.defs
new file mode 100644
index 0000000..2408224
--- /dev/null
+++ b/tests/generate-only/subsystem-kernel.defs
@@ -0,0 +1,20 @@
+/*
+   Copyright (C) 2016 Free Software Foundation, Inc.
+
+   This file is part of GNU MIG.
+
+   GNU MIG is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   GNU MIG is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Tests a kernel server subsystem.  */
+subsystem KernelServer server 100;
diff --git a/tests/generate-only/subsystem-user.defs 
b/tests/generate-only/subsystem-user.defs
new file mode 100644
index 0000000..f0b8187
--- /dev/null
+++ b/tests/generate-only/subsystem-user.defs
@@ -0,0 +1,20 @@
+/*
+   Copyright (C) 2016 Free Software Foundation, Inc.
+
+   This file is part of GNU MIG.
+
+   GNU MIG is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   GNU MIG is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Tests a kernel user subsystem.  */
+subsystem KernelUser user 100;
diff --git a/tests/good/Makefile.am b/tests/good/Makefile.am
new file mode 100644
index 0000000..c5d8d7e
--- /dev/null
+++ b/tests/good/Makefile.am
@@ -0,0 +1,24 @@
+# Copyright (C) 2016 Free Software Foundation, Inc.
+#
+# This file is part of GNU MIG.
+#
+# GNU MIG is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2, or (at
+# your option) any later version.
+#
+# GNU MIG is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+TESTS = case.defs complex-types.defs directions.defs import.defs \
+        routine.defs types.defs waittime.defs
+EXTRA_DIST = $(TESTS) run_good_test.sh
+DEFS_LOG_COMPILER = sh ./$(srcdir)/run_good_test.sh
+
+include $(srcdir)/../Makeconf.am
diff --git a/tests/good/Makefile.in b/tests/good/Makefile.in
new file mode 100644
index 0000000..14678f3
--- /dev/null
+++ b/tests/good/Makefile.in
@@ -0,0 +1,830 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
address@hidden@
+
+# Copyright (C) 2016 Free Software Foundation, Inc.
+#
+# This file is part of GNU MIG.
+#
+# GNU MIG is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2, or (at
+# your option) any later version.
+#
+# GNU MIG is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+# Copyright (C) 2016 Free Software Foundation, Inc.
+#
+# This file is part of GNU MIG.
+#
+# GNU MIG is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2, or (at
+# your option) any later version.
+#
+# GNU MIG is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.
+#
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = tests/good
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(address@hidden@)
+am__v_P_ = $(address@hidden@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(address@hidden@)
+am__v_GEN_ = $(address@hidden@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(address@hidden@)
+am__v_at_ = $(address@hidden@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(MKDIR_P) "$$am__odir" || exit $$?;              \
+if test -f "./$$f"; then dir=./;                       \
+elif test -f "$$f"; then dir=;                         \
+else dir="$(srcdir)/"; fi;                             \
+tst=$$dir$$f; log='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@address@hidden)
+TEST_LOGS = $(am__test_logs2:.defs.log=.log)
+DEFS_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver
+DEFS_LOG_COMPILE = $(DEFS_LOG_COMPILER) $(AM_DEFS_LOG_FLAGS) \
+       $(DEFS_LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__DIST_COMMON = $(srcdir)/../Makeconf.am $(srcdir)/Makefile.in \
+       $(top_srcdir)/build-aux/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MIG = @MIG@
+MIGCOM = @MIGCOM@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TARGET_CC = @TARGET_CC@
+TARGET_CFLAGS = @TARGET_CFLAGS@
+TARGET_CPPFLAGS = @TARGET_CPPFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+TESTS = case.defs complex-types.defs directions.defs import.defs \
+        routine.defs types.defs waittime.defs
+
+EXTRA_DIST = $(TESTS) run_good_test.sh
+DEFS_LOG_COMPILER = sh ./$(srcdir)/run_good_test.sh
+MOSTLYCLEANFILES = *.[coh]
+TEST_EXTENSIONS = .defs
+AM_TESTS_ENVIRONMENT = SRCDIR='$(top_srcdir)' BUILDDIR='$(top_builddir)' \
+                       CC='$(TARGET_CC)'
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .defs .defs$(EXEEXT) .log .trs
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/../Makeconf.am 
$(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/good/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu tests/good/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ 
$(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ 
$(am__depfiles_maybe);; \
+       esac;
+$(srcdir)/../Makeconf.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure 
$(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all 
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+.defs.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(DEFS_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_DEFS_LOG_DRIVER_FLAGS) 
$(DEFS_LOG_DRIVER_FLAGS) -- $(DEFS_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
address@hidden@.defs$(EXEEXT).log:
address@hidden@ @p='$<'; \
address@hidden@ $(am__set_b); \
address@hidden@ $(am__check_pre) $(DEFS_LOG_DRIVER) --test-name "$$f" \
address@hidden@ --log-file $$b.log --trs-file $$b.trs \
address@hidden@ $(am__common_driver_flags) $(AM_DEFS_LOG_DRIVER_FLAGS) 
$(DEFS_LOG_DRIVER_FLAGS) -- $(DEFS_LOG_COMPILE) \
address@hidden@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx 
{} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx 
{} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s 
\
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s 
\
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
+mostlyclean-generic:
+       -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+       -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+       -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f 
$(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: all all-am check check-TESTS check-am clean clean-generic \
+       cscopelist-am ctags-am distclean distclean-generic distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+       pdf-am ps ps-am recheck tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/good/case.defs b/tests/good/case.defs
new file mode 100644
index 0000000..25ba510
--- /dev/null
+++ b/tests/good/case.defs
@@ -0,0 +1,27 @@
+/*
+   Copyright (C) 2016 Free Software Foundation, Inc.
+
+   This file is part of GNU MIG.
+
+   GNU MIG is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   GNU MIG is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Tests some keywords with different casing.  */
+SUBSYSTEM myroutine 100;
+
+TyPe int = MACH_MSG_TYPE_INTEGER_64;
+typE mach_port_t = MACH_MSG_TYPE_COPY_SEND;
+
+RouTine factorial(port : mach_port_t;
+                  n : int;
+                  out result : int);
diff --git a/tests/good/complex-types.defs b/tests/good/complex-types.defs
new file mode 100644
index 0000000..a10fc21
--- /dev/null
+++ b/tests/good/complex-types.defs
@@ -0,0 +1,40 @@
+/*
+   Copyright (C) 2016 Free Software Foundation, Inc.
+
+   This file is part of GNU MIG.
+
+   GNU MIG is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   GNU MIG is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Tests complex types such as pointers, arrays and structs.  */
+subsystem types 0;
+
+import <stdint.h>;
+import "types.h";
+
+type char = MACH_MSG_TYPE_BYTE;
+type intptr_t = ^char;
+type pointer_t = ^array[] of MACH_MSG_TYPE_BYTE
+       ctype: vm_offset_t;
+
+type mach_port_t = MACH_MSG_TYPE_COPY_SEND;
+type mach_port_array_t = array[] of mach_port_t;
+type char_struct_t = struct[4] of char;
+type string_t = array[256] of char;
+
+routine callcomplex(port : mach_port_t;
+                  p : pointer_t;
+                  q : intptr_t;
+                  str : char_struct_t;
+                  strt : string_t;
+                  out vec : mach_port_array_t);
diff --git a/tests/good/directions.defs b/tests/good/directions.defs
new file mode 100644
index 0000000..37c5767
--- /dev/null
+++ b/tests/good/directions.defs
@@ -0,0 +1,62 @@
+/*
+   Copyright (C) 2016 Free Software Foundation, Inc.
+
+   This file is part of GNU MIG.
+
+   GNU MIG is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   GNU MIG is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Tests arguments with different directions.  */
+subsystem directions 100;
+
+type char = MACH_MSG_TYPE_BYTE;
+type int = MACH_MSG_TYPE_INTEGER_32;
+
+type mach_port_t = MACH_MSG_TYPE_COPY_SEND;
+type mach_port_array_t = array[] of mach_port_t;
+
+routine callinout(port : mach_port_t;
+                  in n : int;
+                  out result : int);
+
+routine multiplein(port : mach_port_t;
+                   in n1 : int;
+                   in n2 : int;
+                   in n3 : int;
+                   out result : int);
+
+routine multipleout(port : mach_port_t;
+                    in n : int;
+                    out result1 : int;
+                    out result2 : int;
+                    out result3 : int);
+
+routine serverreplyport(port : mach_port_t;
+                        sreplyport server_port : mach_port_t;
+                        in n : int;
+                        out result : int);
+
+routine userreplyport(port : mach_port_t;
+                      ureplyport user_port : mach_port_t;
+                      out result : int);
+
+routine myrequestport(requestport port : mach_port_t;
+                      new_port : mach_port_t);
+
+routine singleinandout(port : mach_port_t;
+                       inout n : int);
+
+routine multipleinandout(port : mach_port_t;
+                         inout n1 : int;
+                         inout n2 : int;
+                         out result : int);
diff --git a/tests/good/import.defs b/tests/good/import.defs
new file mode 100644
index 0000000..e90558a
--- /dev/null
+++ b/tests/good/import.defs
@@ -0,0 +1,24 @@
+/*
+   Copyright (C) 2016 Free Software Foundation, Inc.
+
+   This file is part of GNU MIG.
+
+   GNU MIG is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   GNU MIG is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Tests the different import statements.  */
+subsystem myimport 100;
+
+simport "server.h";
+uimport "user.h";
+import "all.h";
diff --git a/tests/good/routine.defs b/tests/good/routine.defs
new file mode 100644
index 0000000..a108bc3
--- /dev/null
+++ b/tests/good/routine.defs
@@ -0,0 +1,35 @@
+/*
+   Copyright (C) 2016 Free Software Foundation, Inc.
+
+   This file is part of GNU MIG.
+
+   GNU MIG is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   GNU MIG is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Tests simple routines.  */
+subsystem myroutine 100;
+
+import <stdint.h>;
+#include "base_types.defs"
+
+routine factorial(port : mach_port_t;
+                  n : int64_t;
+                  out result : int64_t);
+
+routine timedoutfactorial(port : mach_port_t;
+                          n : int64_t;
+                          waittime timeout : int32_t;
+                          out result : int64_t);
+
+simpleroutine simple_factorial(port : mach_port_t;
+                               n : int64_t);
diff --git a/tests/good/run_good_test.sh b/tests/good/run_good_test.sh
new file mode 100755
index 0000000..01c2049
--- /dev/null
+++ b/tests/good/run_good_test.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+#
+# Copyright (C) 2016 Free Software Foundation, Inc.
+#
+# This file is part of GNU MIG.
+#
+# GNU MIG is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2, or (at
+# your option) any later version.
+#
+# GNU MIG is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+. $SRCDIR/tests/test_lib.sh
+
+file=$1
+module="$(basename $file .defs)"
+if ! run_mig $file $module; then
+  failure "Could not generate stubs for $module"
+  exit 1
+fi
+if ! test_module $module; then
+  failure "Could not compile stubs for $module"
+  exit 1
+fi
diff --git a/tests/good/types.defs b/tests/good/types.defs
new file mode 100644
index 0000000..a27c191
--- /dev/null
+++ b/tests/good/types.defs
@@ -0,0 +1,74 @@
+/*
+   Copyright (C) 2016 Free Software Foundation, Inc.
+
+   This file is part of GNU MIG.
+
+   GNU MIG is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   GNU MIG is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Tests simple types and port types.  */
+subsystem types 0;
+
+import <stdint.h>;
+import "types.h";
+#include "../base_types.defs"
+
+type char = MACH_MSG_TYPE_CHAR;
+type int16_t = MACH_MSG_TYPE_INTEGER_16;
+type boolean_t = MACH_MSG_TYPE_BOOLEAN;
+type uint16_t = MACH_MSG_TYPE_INTEGER_16;
+type uint32_t = MACH_MSG_TYPE_INTEGER_32;
+type uint64_t = MACH_MSG_TYPE_INTEGER_64;
+type move_receive_t = MACH_MSG_TYPE_MOVE_RECEIVE
+        ctype: mach_port_t;
+type copy_send_t = MACH_MSG_TYPE_COPY_SEND
+       ctype: mach_port_t;
+type move_send_t = MACH_MSG_TYPE_MOVE_SEND
+        ctype: mach_port_t;
+type move_send_once_t = MACH_MSG_TYPE_MOVE_SEND_ONCE
+        ctype : mach_port_t;
+type port_send_t = MACH_MSG_TYPE_PORT_SEND
+        ctype : mach_port_t;
+
+type another_int = int
+        cusertype: int32_t
+        cservertype: uint32_t;
+
+type trans_int = int
+        ctype: int
+        intran: int8_t int_to_int8(int)
+        outtran: int int8_to_int(int8_t);
+
+routine alltypes(port : mach_port_t;
+                 c : char; s : int16_t; i : int;
+                 i32 : int32_t; i64 : int64_t; bool : boolean_t;
+                 ui16 : uint16_t; ui32 : uint32_t; ui64 : uint64_t);
+
+/* This should fail.  */
+/* routine receive(port : move_receive_t); */
+
+routine movereceive(port : mach_port_t; copy : move_receive_t);
+
+routine movesend(port : mach_port_t; copy : move_send_t);
+
+routine movesendonce(port : mach_port_t; move : move_send_once_t);
+
+routine copysend(port : mach_port_t; receive : copy_send_t);
+
+routine portsend(port : mach_port_t; send : port_send_t);
+
+routine another(port : mach_port_t;
+                n : another_int);
+
+routine dotrans(port : mach_port_t;
+                inout n : trans_int);
diff --git a/tests/good/waittime.defs b/tests/good/waittime.defs
new file mode 100644
index 0000000..0de7aef
--- /dev/null
+++ b/tests/good/waittime.defs
@@ -0,0 +1,36 @@
+/*
+   Copyright (C) 2016 Free Software Foundation, Inc.
+
+   This file is part of GNU MIG.
+
+   GNU MIG is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   GNU MIG is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Tests the wait time directive.  */
+subsystem timeout 100;
+
+import <stdint.h>;
+#include "../base_types.defs"
+
+/* All routines will have this timeout.  */
+waittime 2;
+
+routine factorial(port : mach_port_t;
+                  n : int64_t;
+                  out result : int64_t);
+
+/* This routine has a waittime argument.  */
+routine factorial_waittime(port : mach_port_t;
+                           waittime wait : int32_t;
+                           n : int64_t;
+                           out result : int64_t);
diff --git a/tests/includes/all.h b/tests/includes/all.h
new file mode 100644
index 0000000..046b862
--- /dev/null
+++ b/tests/includes/all.h
@@ -0,0 +1 @@
+/* Empty. */
diff --git a/tests/includes/mach/mig_support.h 
b/tests/includes/mach/mig_support.h
new file mode 100644
index 0000000..e725a63
--- /dev/null
+++ b/tests/includes/mach/mig_support.h
@@ -0,0 +1 @@
+/* This file allows the testsuite to compile under Linux.  */
diff --git a/tests/includes/server.h b/tests/includes/server.h
new file mode 100644
index 0000000..046b862
--- /dev/null
+++ b/tests/includes/server.h
@@ -0,0 +1 @@
+/* Empty. */
diff --git a/tests/includes/types.h b/tests/includes/types.h
new file mode 100644
index 0000000..0bb914c
--- /dev/null
+++ b/tests/includes/types.h
@@ -0,0 +1,41 @@
+/*
+   Copyright (C) 2016 Free Software Foundation, Inc.
+
+   This file is part of GNU MIG.
+
+   GNU MIG is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   GNU MIG is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef TEST_TYPES_H
+#define TEST_TYPES_H
+
+typedef int another_int;
+
+typedef struct char_struct {
+  char c1;
+  char c2;
+  char c3;
+  char c4;
+} char_struct_t;
+
+typedef char* string_t;
+
+static inline int8_t int_to_int8(int n) {
+  return (int8_t) n;
+}
+
+static inline int int8_to_int(int8_t n) {
+  return (int) n;
+}
+
+#endif
diff --git a/tests/includes/user.h b/tests/includes/user.h
new file mode 100644
index 0000000..046b862
--- /dev/null
+++ b/tests/includes/user.h
@@ -0,0 +1 @@
+/* Empty. */
diff --git a/tests/test_lib.sh b/tests/test_lib.sh
new file mode 100644
index 0000000..60241d9
--- /dev/null
+++ b/tests/test_lib.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+#
+# Copyright (C) 2016 Free Software Foundation, Inc.
+#
+# This file is part of GNU MIG.
+#
+# GNU MIG is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2, or (at
+# your option) any later version.
+#
+# GNU MIG is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU MIG.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+MIGCOM="$BUILDDIR/migcom"
+TEST_DIR="$SRCDIR/tests"
+CFLAGS="-I$TEST_DIR/includes"
+
+failure () {
+  msg="$1"
+  echo "ERROR: $msg"
+  return 0
+}
+
+run_mig () {
+  file="$1"
+  module="$2"
+  echo "Generating stubs for $module..."
+  cpp $file -I$TEST_DIR | $MIGCOM -server $module-server.c -user 
$module-user.c -header $module-header.h
+}
+
+test_module () {
+  module="$1"
+  echo "Compiling stubs for $module..."
+  $CC $CFLAGS -c $module-server.c -o $module-server.o &&
+  $CC $CFLAGS -c $module-user.c -o $module-user.o
+}
diff --git a/type.c b/type.c
index 7565f34..6e2319e 100644
--- a/type.c
+++ b/type.c
@@ -113,6 +113,7 @@ itAlloc(void)
        FALSE,                  /* boolean_t itString */
        FALSE,                  /* boolean_t itVarArray */
        FALSE,                  /* boolean_t itIndefinite */
+       FALSE,                  /* boolean_t itKernelPort */
        itNULL,                 /* ipc_type_t *itElement */
        strNULL,                /* identifier_t itUserType */
        strNULL,                /* identifier_t itServerType */
@@ -154,7 +155,7 @@ itCalculateSizeInfo(ipc_type_t *it)
     if (it->itInLine)
     {
        u_int bytes = (it->itNumber * it->itSize + 7) / 8;
-       u_int padding = (4 - bytes%4)%4;
+       u_int padding = (word_size - bytes % word_size) % word_size;
 
        it->itTypeSize = bytes;
        it->itPadSize = padding;
@@ -219,16 +220,19 @@ itCalculateNameInfo(ipc_type_t *it)
        (((it->itInName == MACH_MSG_TYPE_POLYMORPHIC) &&
          (it->itOutName == MACH_MSG_TYPE_POLYMORPHIC)) ||
         MACH_MSG_TYPE_PORT_ANY(it->itInName) ||
-        MACH_MSG_TYPE_PORT_ANY(it->itOutName)))
+        MACH_MSG_TYPE_PORT_ANY(it->itOutName))) {
        it->itServerType = "ipc_port_t";
-
-    if (IsKernelUser &&
+        it->itKernelPort = TRUE;
+    } else if (IsKernelUser &&
        streql(it->itUserType, "mach_port_t") &&
        (((it->itInName == MACH_MSG_TYPE_POLYMORPHIC) &&
          (it->itOutName == MACH_MSG_TYPE_POLYMORPHIC)) ||
         MACH_MSG_TYPE_PORT_ANY(it->itInName) ||
-        MACH_MSG_TYPE_PORT_ANY(it->itOutName)))
+        MACH_MSG_TYPE_PORT_ANY(it->itOutName))) {
        it->itUserType = "ipc_port_t";
+        it->itKernelPort = TRUE;
+    } else
+        it->itKernelPort = FALSE;
 
     if (it->itTransType == strNULL)
        it->itTransType = it->itServerType;
diff --git a/type.h b/type.h
index 50de063..6cf5d63 100644
--- a/type.h
+++ b/type.h
@@ -129,6 +129,10 @@ typedef enum dealloc {
  *
  * itElement points to any substructure that the type may have.
  * It is only used with variable-sized array types.
+ *
+ * itKernelPort is used only on kernel interfaces and is set to TRUE when
+ * the initial type is mach_port_t, which in turn is actually translated to
+ * internal port pointers (ipc_port_t).
  */
 
 typedef struct ipc_type
@@ -158,6 +162,7 @@ typedef struct ipc_type
     boolean_t itString;
     boolean_t itVarArray;
     boolean_t itIndefinite;
+    boolean_t itKernelPort;
 
     struct ipc_type *itElement;        /* may be NULL */
 
diff --git a/user.c b/user.c
index 1f3ba3d..7f355ed 100644
--- a/user.c
+++ b/user.c
@@ -92,6 +92,7 @@ WriteIncludes(FILE *file)
     fprintf(file, "#include <mach/msg_type.h>\n");
     if (IsKernelUser)
        fprintf(file, "#include <kern/ipc_mig.h>\n");
+    fprintf(file, "#include <stdint.h>\n");
     fprintf(file, "\n");
 }
 
@@ -213,7 +214,7 @@ WriteVarDecls(FILE *file, const routine_t *rt)
        fprintf(file, "\tReply *OutP = &Mess.Out;\n");
     fprintf(file, "\n");
 
-    if (!rt->rtOneWay || rt->rtProcedure)
+    if (!rt->rtOneWay)
        fprintf(file, "\tmach_msg_return_t msg_result;\n");
 
     if (!rt->rtSimpleFixedRequest)
@@ -252,11 +253,9 @@ WriteVarDecls(FILE *file, const routine_t *rt)
 static void
 WriteMsgError(FILE *file, const routine_t *rt, const char *error_msg)
 {
-    if (rt->rtProcedure)
-       fprintf(file, "\t\t{ %s(%s); return; }\n", rt->rtErrorName, error_msg);
-    else if (rt->rtReturn != rt->rtRetCode)
+    if (rt->rtReturn != rt->rtRetCode)
     {
-       fprintf(file, "\t\t{ %s(%s); ", rt->rtErrorName, error_msg);
+       fprintf(file, "\t\t{ (%s); ", error_msg);
        if (rt->rtNumReplyVar > 0)
            fprintf(file, "OutP = &Mess.Out; ");
        fprintf(file, "return OutP->%s; }\n", rt->rtReturn->argMsgField);
@@ -267,16 +266,12 @@ WriteMsgError(FILE *file, const routine_t *rt, const char 
*error_msg)
 
 /*************************************************************
  *   Writes the send call when there is to be no subsequent
- *   receive. Called by WriteRoutine for SimpleProcedures
- *   or SimpleRoutines
+ *   receive. Called by WriteRoutine for SimpleRoutines.
  *************************************************************/
 static void
 WriteMsgSend(FILE *file, const routine_t *rt)
 {
-    const char *MsgResult = (rt->rtProcedure)
-                       ? "msg_result ="
-                       : "return";
-
+    const char *MsgResult = "return";
     char SendSize[24];
 
     if (rt->rtNumRequestVar == 0)
@@ -301,12 +296,6 @@ WriteMsgSend(FILE *file, const routine_t *rt)
                " MACH_PORT_NULL, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);\n"
                );
     }
-
-    if (rt->rtProcedure)
-    {
-       fprintf(file, "\tif (msg_result != MACH_MSG_SUCCESS)\n");
-       WriteMsgError(file, rt, "msg_result");
-    }
 }
 
 /*************************************************************
@@ -342,7 +331,7 @@ WriteMsgCheckReceive(FILE *file, const routine_t *rt, const 
char *success)
 /*************************************************************
  *  Writes the rpc call and the code to check for errors.
  *  This is the default code to be generated. Called by WriteRoutine
- *  for all routine types except SimpleProcedure and SimpleRoutine.
+ *  for all routine types except SimpleRoutine.
  *************************************************************/
 static void
 WriteMsgRPC(FILE *file, const routine_t *rt)
@@ -509,7 +498,7 @@ WriteArgSize(FILE *file, const argument_t *arg)
        fprintf(file, "(InP->%s%s.msgt_inline) ? ",
                arg->argTTName, arg->argLongForm ? ".msgtl_header" : "");
     }
-    if (bsize % 4 != 0)
+    if (bsize % word_size != 0)
        fprintf(file, "(");
 
     if (bsize > 1)
@@ -525,11 +514,11 @@ WriteArgSize(FILE *file, const argument_t *arg)
                count->argVarName);
 
     /*
-     * If the base type size is not a multiple of sizeof(int) [4],
+     * If the base type size is not a multiple of word_size,
      * we have to round up.
      */
-    if (bsize % 4 != 0)
-       fprintf(file, " + 3) & ~3");
+    if (bsize % word_size != 0)
+       fprintf(file, " + %d) & ~%d", word_size - 1, word_size - 1);
 
     if (ptype->itIndefinite) {
        fprintf(file, " : sizeof(%s *)",
@@ -833,7 +822,7 @@ WriteCheckArgSize(FILE *file, const argument_t *arg)
                arg->argTTName, arg->argLongForm ? ".msgtl_header" : "");
     }
 
-    if (btype->itTypeSize % 4 != 0)
+    if (btype->itTypeSize % word_size != 0)
        fprintf(file, "(");
 
     if (multiplier > 1)
@@ -841,10 +830,10 @@ WriteCheckArgSize(FILE *file, const argument_t *arg)
 
     fprintf(file, "OutP->%s", count->argMsgField);
 
-    /* If the base type size of the data field isn`t a multiple of 4,
+    /* If the base type size of the data field isn`t a multiple of word_size,
        we have to round up. */
-    if (btype->itTypeSize % 4 != 0)
-       fprintf(file, " + 3) & ~3");
+    if (btype->itTypeSize % word_size != 0)
+       fprintf(file, " + %d) & ~%d", word_size - 1, word_size - 1);
 
     if (ptype->itIndefinite)
        fprintf(file, " : sizeof(%s *)", FetchUserType(btype));
@@ -879,8 +868,8 @@ WriteCheckMsgSize(FILE *file, const argument_t *arg)
        boolean_t LastVarArg = arg->argReplyPos+1 == rt->rtNumReplyVar;
 
        /* calculate the actual size in bytes of the data field.  note
-          that this quantity must be a multiple of four.  hence, if
-          the base type size isn't a multiple of four, we have to
+          that this quantity must be a multiple of word_size.  hence, if
+          the base type size isn't a multiple of word_size, we have to
           round up.  note also that btype->itNumber must
           divide btype->itTypeSize (see itCalculateSizeInfo). */
 
@@ -1128,7 +1117,7 @@ WriteReturnValue(FILE *file, const routine_t *rt)
 /*************************************************************
  *  Writes the elements of the message type declaration: the
  *  msg_type structure, the argument itself and any padding
- *  that is required to make the argument a multiple of 4 bytes.
+ *  that is required to make the argument a multiple of word_size bytes.
  *  Called by WriteRoutine for all the arguments in the request
  *  message first and then the reply message.
  *************************************************************/
@@ -1213,12 +1202,8 @@ WriteRoutine(FILE *file, const routine_t *rt)
        else {
            WriteReplyArgs(file, rt);
 
-           /* return the return value, if any */
-
-           if (rt->rtProcedure)
-               fprintf(file, "\t/* Procedure - no return needed */\n");
-           else
-               WriteReturnValue(file, rt);
+           /* return the return value */
+            WriteReturnValue(file, rt);
        }
     }
 
diff --git a/utils.c b/utils.c
index 4c2a87b..ccde966 100644
--- a/utils.c
+++ b/utils.c
@@ -77,7 +77,7 @@ WriteBogusDefines(FILE *file)
 
     fprintf(file, "#define BAD_TYPECHECK(type, check) mig_unlikely (({\\\n");
     fprintf(file,
-           "  union { mach_msg_type_t t; unsigned32_t w; } _t, _c;\\\n");
+           "  union { mach_msg_type_t t; uint32_t w; } _t, _c;\\\n");
     fprintf(file,
            "  _t.t = *(type); _c.t = *(check);_t.w != _c.w; }))\n");
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-hurd/mig.git



reply via email to

[Prev in Thread] Current Thread [Next in Thread]