X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=type.sh;h=c59f9d5492301d7787f6fd0074c778818c3a1056;hb=a28f3abb26a5c077840beb9f2735fceb80e57f39;hp=2050e4bdfae3581ec5a3abd432163998e8654b03;hpb=ad7a5bacd4a21a26a14d7835422aa4f31a0330d4;p=musl-tables diff --git a/type.sh b/type.sh index 2050e4b..c59f9d5 100755 --- a/type.sh +++ b/type.sh @@ -5,25 +5,23 @@ export LC_ALL=C # drop names from a declaration (hack to make prototypes comparable) awk ' BEGIN { - # type is not typedefed so next unknown id is probably a variable name - split("void char short int long float double signed unsigned _Bool _Complex", a) + # builtin type specifiers/qualifiers.. + s = "void char short int long float double signed unsigned _Bool _Complex bool complex" + s = s " static extern auto register inline const volatile restrict" + # typedef names in posix without _t + s = s " FILE DIR VISIT ENTRY ACTION DBM datum fd_set jmp_buf sigjmp_buf va_list nl_item nl_catd" + s = s " scalar real-floating" # used in macros + split(s, a) for (i in a) - tok[a[i]] = "type" + tok[a[i]] = "builtin" - # next token is an id, type is not typedefed + # next token is an id split("struct union enum", a) for (i in a) tok[a[i]] = "struct" - # decoratoin that can be skipped - split("static extern auto register inline const volatile restrict", a) - for (i in a) - tok[a[i]] = "decor" - - # punctuators - split("( ) [ ] , ... *", a) - for (i in a) - tok[a[i]] = "punct" + # todo: drop restrict for now + tok["restrict"] = "" } function put(tok) { @@ -41,44 +39,24 @@ function put(tok) { gsub(/\/\*[^/]*\*\//, "") gsub(/\/\/.*/, "") - gsub(/[^a-zA-Z0-9_.]/," & ") + gsub(/[^a-zA-Z0-9_.-]/," & ") gsub(/\.\.\./, " & ") - state = "type" sep = "" s = "" for (i = 1; i <= NF; i++) { if ($i == ";") break - if (state == "type") { - put($i) - if (!tok[$i] || tok[$i] == "type") - state = "id" - if (tok[$i] == "struct") { - i++ - put($i) - state = "id" - } - } else if (state == "id") { - if (!tok[$i]) { - state = "idfound" - continue - } - put($i) - if ($i == ")") - state = "idfound" - if ($i == ",") - state = "type" - } else if (state == "idfound") { + if ($i ~ /[a-zA-Z_][a-zA-Z0-9_]*/ && !tok[$i] && $i !~ /_t$/) + continue + put($i) + if (tok[$i] == "struct") { + i++ put($i) - if ($i == "(" || $i == ",") - state = "type" } } # fixes - gsub(/restrict const/, "const", s) - gsub(/restrict/, "", s) gsub(/\[[0-9]+\]/, "[]", s) gsub(/unsigned int/, "unsigned", s) gsub(/long int/, "long", s)