From a197b2248cec667627f35db93acc689c2ddb821d Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Thu, 23 Jun 2011 20:24:32 -0400 Subject: [PATCH] Add a function to turn a typemap into a string. --- Makefile.am | 13 +++++++++---- src/.gitignore | 1 + src/typemap.c | 10 ++++++++++ src/typemap.h | 1 + src/typenames.sed | 15 +++++++++++++++ src/{validtypes.in => types.lst} | 0 6 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 src/typenames.sed rename src/{validtypes.in => types.lst} (100%) diff --git a/Makefile.am b/Makefile.am index 7bc77dc..6b98b4c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -6,6 +6,8 @@ CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib MAINTAINERCLEANFILES = src/scan.c src/scan.h src/scan.stamp \ src/parse.c src/parse.h src/parse.stamp +CLEANFILES = src/typenames.h src/validtypes.h + EXTRA_DIST = m4/gnulib-cache.m4 src/parse.stamp src/scan.stamp include_HEADERS = src/cdecl.h @@ -22,11 +24,14 @@ cdecl99_LDADD = libcdecl.la lib/libgnu.la src/parse.lo: src/scan.h src/scan.lo: src/parse.h src/parse-decl.lo: src/scan.h src/parse.h -src/typemap.lo: src/validtypes.h +src/typemap.lo: src/validtypes.h src/typenames.h + +src/validtypes.h: src/types.lst $(srcdir)/src/validtypes.sed + $(AM_V_GEN)sed -f $(srcdir)/src/validtypes.sed < src/types.lst > $@.tmp + $(AM_V_at)mv -f $@.tmp $@ -src/validtypes.h: src/validtypes.in $(srcdir)/src/validtypes.sed - $(AM_V_GEN)sed -f $(srcdir)/src/validtypes.sed \ - < src/validtypes.in > $@.tmp +src/typenames.h: src/types.lst $(srcdir)/src/typenames.sed + $(AM_V_GEN)sed -f $(srcdir)/src/typenames.sed < src/types.lst > $@.tmp $(AM_V_at)mv -f $@.tmp $@ # These are required to prevent the builtin lex/yacc rules from diff --git a/src/.gitignore b/src/.gitignore index 6cb92c6..794bd16 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -3,3 +3,4 @@ parse.[ch] scan.stamp scan.[ch] validtypes.h +typenames.h diff --git a/src/typemap.c b/src/typemap.c index 61456dd..599d2ca 100644 --- a/src/typemap.c +++ b/src/typemap.c @@ -60,3 +60,13 @@ unsigned long cdecl__build_typemap(struct cdecl_declspec *s) return -1; } } + +const char *cdecl__explain_typemap(unsigned long map) +{ + switch (map) { +# include "typenames.h" + default: + fprintf(stderr, "invalid type specifiers\n"); + return NULL; + } +} diff --git a/src/typemap.h b/src/typemap.h index f69eac4..ddb5dc6 100644 --- a/src/typemap.h +++ b/src/typemap.h @@ -2,5 +2,6 @@ #define CDECL_TYPEMAP_H_ unsigned long cdecl__build_typemap(struct cdecl_declspec *s); +const char *cdecl__explain_typemap(unsigned long map); #endif diff --git a/src/typenames.sed b/src/typenames.sed new file mode 100644 index 0000000..f1166d1 --- /dev/null +++ b/src/typenames.sed @@ -0,0 +1,15 @@ +1i\ +/* This file is automatically generated by validtypes.sed */ +/[^_[:alpha:][:space:]]/b +s/[[:space:]][[:space:]]*/ /g +h +s/_//g +y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/ +s/LONG LONG/LLONG LONG/ +s/[[:upper:]][[:upper:]]*/(1ul<