Gen bindings with rustc --pretty=expanded instead of reading files
authorMatt Corallo <git@bluematt.me>
Sun, 7 Feb 2021 05:58:36 +0000 (00:58 -0500)
committerMatt Corallo <git@bluematt.me>
Thu, 18 Feb 2021 17:28:25 +0000 (12:28 -0500)
commitbe74b366d2af242d688f8ce567d49b7c19813c26
tree402ca14f022292fec88ef1e8306b7646ebd4200d
parent9e596e24600b4ea660ca4d9a92e7923d48738b0b
Gen bindings with rustc --pretty=expanded instead of reading files

Instead of walking individual rust files and reading the AST from
those, we instead call
`RUSTC_BOOTSTRAP=1 cargo rustc --profile=check -- -Zunstable-options --pretty=expanded`
and let it create one giant lib.rs which we can parse as a whole.
This allows us to parse a post-macro crate, working with structs
and functions created inside macros just fine. It does require
handling a few things that we didn't previously, most notably Clone
via `impl ::core::clone::Clone` blocks instead of just looking for
`#![derive(Clone)]`.

This ends up resolving a few types slightly differently, resulting
in different bindings, but only in ways which don't impact the
runtime.
c-bindings-gen/Cargo.toml
c-bindings-gen/src/main.rs
c-bindings-gen/src/types.rs
genbindings.sh