diff options
author | Edward Barnard <eabarnard@gmail.com> | 2014-12-29 22:07:29 +0100 |
---|---|---|
committer | Edward Barnard <eabarnard@gmail.com> | 2014-12-29 22:07:29 +0100 |
commit | 59d21bed70cd279cb35e86a0082147e7f591086f (patch) | |
tree | 8d427da5504d13703bd4fa9e9600bdffba7a6e29 | |
parent | 6935ccb534c288a305f873d6b38bda646876b63d (diff) |
Correctly output builtins. Closes #29.
-rw-r--r-- | src/lib.rs | 1 | ||||
-rw-r--r-- | src/parser.rs | 13 | ||||
-rw-r--r-- | tests/builtins.rs | 13 | ||||
-rw-r--r-- | tests/headers/builtin_va_list.h | 6 |
4 files changed, 23 insertions, 10 deletions
@@ -173,6 +173,7 @@ fn builtin_names() -> HashSet<String> { let keys = [ "__va_list_tag", "__va_list", + "__builtin_va_list", ]; keys.iter().all(|s| { diff --git a/src/parser.rs b/src/parser.rs index 602641e7..c4291d5e 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -394,15 +394,8 @@ fn visit_enum(cursor: &Cursor, return CXChildVisit_Continue; } -fn visit_top<'r>(cur: &'r Cursor, - parent: &'r Cursor, +fn visit_top<'r>(cursor: &Cursor, ctx: &mut ClangParserCtx) -> Enum_CXVisitorResult { - let cursor = if ctx.options.builtin_names.contains(&parent.spelling()) { - parent - } else { - cur - }; - if !match_pattern(ctx, cursor) { return CXChildVisit_Continue; } @@ -544,11 +537,11 @@ pub fn parse(options: ClangParserOptions, logger: &Logger) -> Result<Vec<Global> cursor.visit(|cur, _| ast_dump(cur, 0)); } - cursor.visit(|cur, parent| visit_top(cur, parent, &mut ctx)); + cursor.visit(|cur, _| visit_top(cur, &mut ctx)); while !ctx.builtin_defs.is_empty() { let c = ctx.builtin_defs.remove(0).unwrap(); - c.visit(|cur, parent| visit_top(cur, parent, &mut ctx)); + visit_top(&c.definition(), &mut ctx); } unit.dispose(); diff --git a/tests/builtins.rs b/tests/builtins.rs new file mode 100644 index 00000000..35cd573c --- /dev/null +++ b/tests/builtins.rs @@ -0,0 +1,13 @@ +#![feature(phase)] + +#[phase(plugin)] +extern crate bindgen; + +extern crate libc; + +#[test] +fn test_builtin_va_list() { + mod ffi { bindgen!("headers/builtin_va_list.h", emit_builtins = true); } + // Should test for more than compilation. +} + diff --git a/tests/headers/builtin_va_list.h b/tests/headers/builtin_va_list.h new file mode 100644 index 00000000..b3951bb7 --- /dev/null +++ b/tests/headers/builtin_va_list.h @@ -0,0 +1,6 @@ +#include "stdarg.h" + +struct a +{ + va_list b; +};
\ No newline at end of file |