summaryrefslogtreecommitdiff
path: root/libbindgen/src
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-11-15 15:07:36 -0600
committerGitHub <noreply@github.com>2016-11-15 15:07:36 -0600
commit8f4912852f48fbfbd557eff3834bdd365cf3159c (patch)
treeaa95bcd9ea49f726be47fd9e518abba07cf1f3ab /libbindgen/src
parent09dc05c8188bc63f4a30456901d0ff1eeeac5fc5 (diff)
parent1256345ab0939622a19200834587ac8b64dc355d (diff)
Auto merge of #264 - fitzgen:emit-ir, r=emilio
Add an option to emit our ir for debugging Similar to our ability to emit the clang AST, this adds an option to emit our IR for debugging purposes. This can wait to land until after #204 is merged. r? @emilio
Diffstat (limited to 'libbindgen/src')
-rw-r--r--libbindgen/src/codegen/mod.rs7
-rw-r--r--libbindgen/src/lib.rs10
2 files changed, 17 insertions, 0 deletions
diff --git a/libbindgen/src/codegen/mod.rs b/libbindgen/src/codegen/mod.rs
index 8e04fd7c..009d8819 100644
--- a/libbindgen/src/codegen/mod.rs
+++ b/libbindgen/src/codegen/mod.rs
@@ -1892,6 +1892,13 @@ pub fn codegen(context: &mut BindgenContext) -> Vec<P<ast::Item>> {
let whitelisted_items: ItemSet = context.whitelisted_items().collect();
+ if context.options().emit_ir {
+ for &id in whitelisted_items.iter() {
+ let item = context.resolve_item(id);
+ println!("ir: {:?} = {:#?}", id, item);
+ }
+ }
+
for &id in whitelisted_items.iter() {
let item = context.resolve_item(id);
diff --git a/libbindgen/src/lib.rs b/libbindgen/src/lib.rs
index d0ca7b03..e4923b77 100644
--- a/libbindgen/src/lib.rs
+++ b/libbindgen/src/lib.rs
@@ -225,6 +225,12 @@ impl Builder {
self
}
+ /// Emit IR.
+ pub fn emit_ir(mut self) -> Builder {
+ self.options.emit_ir = true;
+ self
+ }
+
/// Enable C++ namespaces.
pub fn enable_cxx_namespaces(mut self) -> Builder {
self.options.enable_cxx_namespaces = true;
@@ -314,6 +320,9 @@ pub struct BindgenOptions {
/// True if we should dump the Clang AST for debugging purposes.
pub emit_ast: bool,
+ /// True if we should dump our internal IR for debugging purposes.
+ pub emit_ir: bool,
+
/// True if we should ignore functions and only generate bindings for
/// structures, types, and methods.
pub ignore_functions: bool,
@@ -380,6 +389,7 @@ impl Default for BindgenOptions {
builtins: false,
links: vec![],
emit_ast: false,
+ emit_ir: false,
ignore_functions: false,
ignore_methods: false,
derive_debug: true,