]> git.draconx.ca Git - cdecl99.git/commitdiff
Add a function to turn a typemap into a string.
authorNick Bowler <nbowler@draconx.ca>
Fri, 24 Jun 2011 00:24:32 +0000 (20:24 -0400)
committerNick Bowler <nbowler@draconx.ca>
Fri, 24 Jun 2011 00:24:32 +0000 (20:24 -0400)
Makefile.am
src/.gitignore
src/typemap.c
src/typemap.h
src/typenames.sed [new file with mode: 0644]
src/types.lst [moved from src/validtypes.in with 100% similarity]

index 7bc77dc40675d09579aef367336f7cf5772cf819..6b98b4ce099274fc70e2fd4518cfd28efece1191 100644 (file)
@@ -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
index 6cb92c656d9a810bf739d2f6cf32377963fafe41..794bd1668fd9fa609aa7b5a50151babe5d481806 100644 (file)
@@ -3,3 +3,4 @@ parse.[ch]
 scan.stamp
 scan.[ch]
 validtypes.h
+typenames.h
index 61456dd4a31a644393731af2afa3aed9273926bd..599d2cab2331bcb575c7fdf499a994dcd7c7b7ea 100644 (file)
@@ -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;
+       }
+}
index f69eac496243b059d27b8e78fe7dc2f023aa18b2..ddb5dc60cc334351aaee1ff9c3902effbee2affc 100644 (file)
@@ -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 (file)
index 0000000..f1166d1
--- /dev/null
@@ -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<<CDECL_TYPE_&)/g
+s/ /|/g
+s/.*/case &:/
+p
+x
+s/ident//
+s/.*/  return "&";/
similarity index 100%
rename from src/validtypes.in
rename to src/types.lst