summaryrefslogtreecommitdiff
path: root/libbindgen/src
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-11-18 12:36:13 -0600
committerGitHub <noreply@github.com>2016-11-18 12:36:13 -0600
commit1a8a2ac1c325487be455b434749c0b246f27e242 (patch)
treed81d41e63625c2e602fca4f97722fc5d9e8bfee2 /libbindgen/src
parentc48f835f9e03fdd30d35c7cae63f04cdaa2d9549 (diff)
parent3f0f86810b855d20dfc39655f336ba814d169281 (diff)
Auto merge of #207 - Natim:130-cursor-args-return-vector, r=emilio
clang::Cursor::args should return an Option<Vec<Cursor>> Attempt to fix #130
Diffstat (limited to 'libbindgen/src')
-rw-r--r--libbindgen/src/clang.rs26
-rw-r--r--libbindgen/src/ir/function.rs2
2 files changed, 19 insertions, 9 deletions
diff --git a/libbindgen/src/clang.rs b/libbindgen/src/clang.rs
index 637823ea..6c95b22f 100644
--- a/libbindgen/src/clang.rs
+++ b/libbindgen/src/clang.rs
@@ -420,16 +420,26 @@ impl Cursor {
/// Given that this cursor's referent is a function, return cursors to its
/// parameters.
- pub fn args(&self) -> Vec<Cursor> {
+ pub fn args(&self) -> Option<Vec<Cursor>> {
+ // XXX: We might want to use and keep num_args
+ // match self.kind() {
+ // CXCursor_FunctionDecl |
+ // CXCursor_CXXMethod => {
unsafe {
- let num = self.num_args().expect("expected value, got none") as u32;
- let mut args = vec![];
- for i in 0..num {
- args.push(Cursor {
- x: clang_Cursor_getArgument(self.x, i as c_uint),
- });
+ let w = clang_Cursor_getNumArguments(self.x);
+ if w == -1 {
+ None
+ } else {
+ let num = w as u32;
+
+ let mut args = vec![];
+ for i in 0..num {
+ args.push(Cursor {
+ x: clang_Cursor_getArgument(self.x, i as c_uint),
+ });
+ }
+ Some(args)
}
- args
}
}
diff --git a/libbindgen/src/ir/function.rs b/libbindgen/src/ir/function.rs
index eacb6c0e..60bd1e5b 100644
--- a/libbindgen/src/ir/function.rs
+++ b/libbindgen/src/ir/function.rs
@@ -150,7 +150,7 @@ impl FunctionSig {
CXCursor_CXXMethod => {
// For CXCursor_FunctionDecl, cursor.args() is the reliable way
// to get parameter names and types.
- cursor.args()
+ cursor.args().expect("It cannot be None because we are in a method/function")
.iter()
.map(|arg| {
let arg_ty = arg.cur_type();