#!/bin/awk -f
#
-# Copyright © 2021-2022 Nick Bowler
+# Copyright © 2021-2022, 2024 Nick Bowler
#
# Generate a mapping from a (random) integer to a list of type specifiers
# represented by struct cdecl_declspec. Used internally by declgen to
}
END {
- print "static inline struct cdecl_declspec *"
- print "gen_raw_typespec_(unsigned type, struct cdecl_declspec *next)\n{"
- print "\tstruct cdecl_declspec *s = malloc_nofail(sizeof *s);"
- print "\t*s = (struct cdecl_declspec) { .next = next, .type = type };"
+ print "static inline struct cdecl_declspec *";
+ print "gen_raw_typespec_(unsigned type, struct cdecl_declspec *next)\n{";
+ print "\tstruct cdecl_declspec *s = malloc_nofail(sizeof *s);";
+ print "\ts->type = type;";
+ print "\ts->next = next;";
+ print "\ts->ident = 0;";
print "\treturn s;\n}\n"
print "static inline struct cdecl_declspec *"
print "\tswitch (rngval) {"
for (i = 0; i < count; i++) {
- print "\tcase " i ":"
- $0 = specs[i]
+ print "\tcase " i ":";
- for (j = 1; j <= NF; j++) {
+ n = split(specs[i], parts);
+ for (j = 1; j <= n; j++) {
prefix = j == 1 ? "return" : "";
- printf "\t\t%6s gen_raw_typespec_(%s,\n", prefix, $j
+ printf "\t\t%6s gen_raw_typespec_(%s,\n", prefix, parts[j];
}
- printf "\t\t%25sNULL%s;\n", "", substr("))))))))", 1, NF);
+ printf "\t\t%25sNULL%s;\n", "", substr("))))))))", 1, n);
}
print "\tdefault:\n\t\tassert(0);\n\t}"
print "}\n"