[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='[0;31m' # Red.
+ grn='[0;32m' # Green.
+ lgn='[1;32m' # Light green.
+ blu='[1;34m' # Blue.
+ mgn='[0;35m' # Magenta.
+ std='[m' # 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='[0;31m'; \
+ grn='[0;32m'; \
+ lgn='[1;32m'; \
+ blu='[1;34m'; \
+ mgn='[0;35m'; \
+ brg='[1m'; \
+ std='[m'; \
+ 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='[0;31m'; \
+ grn='[0;32m'; \
+ lgn='[1;32m'; \
+ blu='[1;34m'; \
+ mgn='[0;35m'; \
+ brg='[1m'; \
+ std='[m'; \
+ 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='[0;31m'; \
+ grn='[0;32m'; \
+ lgn='[1;32m'; \
+ blu='[1;34m'; \
+ mgn='[0;35m'; \
+ brg='[1m'; \
+ std='[m'; \
+ 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