#!/bin/awk -f # # Copyright © 2021 Nick Bowler # # Generate a function to return the C keyword corresponding to a specifier # type as a string, for internal use by the output routines. # # 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. END { print "/*" if (FILENAME) { print " * Automatically generated by gen-specstr.awk from " FILENAME } else { print " * Automatically generated by gen-specstr.awk" } print " * Do not edit." print " */" } BEGIN { kinds["TYPE"] = kinds["STOR"] = kinds["QUAL"] = kinds["FUNC"] = 1 underscore["BOOL"] = underscore["COMPLEX"] = underscore["IMAGINARY"] = 1 } $1 ~ /^CDECL_/ { sub(/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ_].*/, "", $1) split($1, parts, "_") if (parts[2] in kinds) { if (parts[3] == "IDENT") { s = "" } else if (parts[3] in underscore) { s = "_" substr(parts[3], 1, 1) tolower(substr(parts[3], 2)) } else { s = tolower(parts[3]) } specs[$1] = s } } END { print "static inline const char *spec_string(unsigned type)\n{" print "\tswitch (type) {" for (s in specs) { print "\tcase " s ": return \"" specs[s] "\";" } print "\t}" print "\n\tassert(0);" print "}" }