]> git.draconx.ca Git - cdecl99.git/commitdiff
Use common strtab generator for error strings.
authorNick Bowler <nbowler@draconx.ca>
Tue, 2 Mar 2021 05:52:48 +0000 (00:52 -0500)
committerNick Bowler <nbowler@draconx.ca>
Wed, 3 Mar 2021 01:23:59 +0000 (20:23 -0500)
We have a (hopefully better) generic string table generator now.
Let's replace this crazy sed nonsense with it.

Makefile.am
src/error.c
src/errors.lst [deleted file]
src/errtab.str [new file with mode: 0644]
src/strtab.sed [deleted file]

index ffbc85f0947334ee519b75c1a8698e2723cc9e0e..6556f922276344142513d5d35f9000579ad83078 100644 (file)
@@ -23,14 +23,13 @@ MAINTAINERCLEANFILES = src/scan.c src/scan.h src/scan.stamp \
 
 DISTCLEANFILES =
 
-CLEANFILES = src/validtypes.h src/errtab.h src/namespecs.h src/ordspecs.h \
+CLEANFILES = src/validtypes.h src/namespecs.h src/ordspecs.h \
              test/typegen.h $(EXTRA_LTLIBRARIES)
 
 EXTRA_DIST = bootstrap $(DX_BASEDIR)/scripts/fix-gnulib.pl m4/gnulib-cache.m4 \
              src/types.lst src/validtypes.sed src/specs.lst src/namespecs.sed \
-             src/ordspecs.sed src/errors.lst src/strtab.sed test/typegen.sh \
-             src/parse.y src/parse.stamp src/scan.l src/scan.stamp \
-             COPYING.WTFPL2 README.md INSTALL
+             src/ordspecs.sed test/typegen.sh src/parse.y src/parse.stamp \
+             src/scan.l src/scan.stamp COPYING.WTFPL2 README.md INSTALL
 
 dist_man_MANS = doc/man/cdecl99.1 doc/man/libcdecl.3
 
@@ -45,7 +44,8 @@ libcdecl_la_LDFLAGS = -export-symbols-regex '^cdecl_[[:lower:]]' \
                       -no-undefined
 libcdecl_la_SOURCES = src/scan.c src/parse.c src/parse-decl.c src/typemap.c \
                       src/output.c src/explain.c src/declare.c src/i18n.c \
-                      src/error.c src/normalize.c src/cdecl-internal.h
+                      src/error.c src/normalize.c src/cdecl-internal.h \
+                      src/errtab.h
 libcdecl_la_LIBADD = libgnu.la $(LTLIBINTL) $(LTLIBTHREAD)
 $(libcdecl_la_OBJECTS): $(gnulib_headers)
 
@@ -106,11 +106,6 @@ src/ordspecs.h: $(srcdir)/src/specs.lst $(srcdir)/src/ordspecs.sed
                < $(srcdir)/src/specs.lst > $@.tmp
        $(AM_V_at) mv -f $@.tmp $@
 
-src/errtab.h: $(srcdir)/src/errors.lst $(srcdir)/src/strtab.sed
-       $(AM_V_GEN)sed -f $(srcdir)/src/strtab.sed \
-               < $(srcdir)/src/errors.lst > $@.tmp
-       $(AM_V_at)mv -f $@.tmp $@
-
 test/typegen.h: $(srcdir)/src/types.lst $(srcdir)/test/typegen.sh
        $(AM_V_GEN) $(SHELL) $(srcdir)/test/typegen.sh \
                < $(srcdir)/src/types.lst > $@.tmp
@@ -128,11 +123,9 @@ XGETTEXT_OPTS = -D $(builddir) -D $(srcdir) --from-code=utf-8 \
        --msgid-bugs-address=$(PACKAGE_BUGREPORT) \
        --keyword=_ --keyword=N_ --keyword=PN_:1c,2
 
-po/$(PACKAGE).pot: $(SOURCES) src/errors.lst
+po/$(PACKAGE).pot: $(SOURCES)
        $(AM_V_at)  $(MKDIR_P) $(@D)
        $(AM_V_GEN) $(XGETTEXT) $(XGETTEXT_OPTS) -o $@.tmp $(SOURCES)
-       $(AM_V_at)  $(XGETTEXT) $(XGETTEXT_OPTS) --omit-header -Lc \
-               -ajo $@.tmp src/errors.lst
        $(AM_V_at)  mv -f $@.tmp $@
 
 # These are required to prevent the builtin lex/yacc rules from
@@ -201,7 +194,7 @@ $(OPTFILES:.opt=.h): $(DX_BASEDIR)/scripts/gen-options.awk
 MAINTAINERCLEANFILES += $(OPTFILES:.opt=.h)
 EXTRA_DIST += $(DX_BASEDIR)/scripts/gen-options.awk $(OPTFILES)
 
-STRFILES = src/commands.str
+STRFILES = src/commands.str src/errtab.str
 .str.h:
        $(AM_V_GEN) $(AWK) -f $(DX_BASEDIR)/scripts/gen-strtab.awk $< >$@.tmp
        $(AM_V_at) mv -f $@.tmp $@
index 9b89bac15239c04b0cec366e05af44b103ec8e0d..3d0a38e3f83218f739c45f4905ff58c68fa3207f 100644 (file)
@@ -45,12 +45,14 @@ static struct err_state err_no_mem = {
 
 const char *cdecl__strerror(unsigned code)
 {
-#      include "errtab.h"
+#include "errtab.h"
 
-       assert(code < sizeof offtab / sizeof offtab[0]);
-       assert(offtab[code] != 0);
+       switch (code) {
+       case CDECL_ENOMEM: return gettext(strtab+err_enomem);
+       case CDECL_ENOPARSE: return gettext(strtab+err_enoparse);
+       }
 
-       return gettext((char *)&strtab + offtab[code]);
+       assert(0);
 }
 
 static void free_err(void *err)
diff --git a/src/errors.lst b/src/errors.lst
deleted file mode 100644 (file)
index f88e92e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-CDECL_ENOMEM   "failed to allocate memory"
-CDECL_ENOPARSE "syntax error"
diff --git a/src/errtab.str b/src/errtab.str
new file mode 100644 (file)
index 0000000..284f71a
--- /dev/null
@@ -0,0 +1,2 @@
+&err_enomem failed to allocate memory
+&err_enoparse syntax error
diff --git a/src/strtab.sed b/src/strtab.sed
deleted file mode 100644 (file)
index a5ad957..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#n
-1i\
-/*\
- * Copyright © 2011 Nick Bowler.\
- *\
- * License WTFPL2: Do What The Fuck You Want To Public License, version 2.\
- * This is free software: you are free to do what the fuck you want to.\
- * There is NO WARRANTY, to the extent permitted by law.\
- */
-1i\
-/*\
- * This file is automatically generated by strtab.sed.\
- */
-:clear
-t clear
-s/\([[:upper:]_][[:upper:]_]*\)[[:space:]]*\(".*"\)/\1@#@#@\2/
-t string
-p
-b
-:string
-H
-${
-       g
-       i\
-static const struct strtab {\
-       char _[1];
-       s/\n\([^\n]*\)@#@#@\([^\n]*\)/  char \1[sizeof \2];\
-/g
-       s/\n$//
-       p
-       g
-       i\
-} strtab = {
-       s/\n\([^\n]*\)@#@#@\([^\n]*\)/  .\1 = N_(\2),\
-/g
-       s/$/};/
-       p
-       g
-       i\
-static const size_t offtab[] = {
-       s/\n\([^\n]*\)@#@#@\([^\n]*\)/  [\1] = offsetof(struct strtab, \1),\
-/g
-       s/$/};/
-       p
-}