diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2017-05-10 11:00:23 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-10 11:00:23 -0500 |
commit | 107b7b9d0d186b552a78d466c823d9a012d75a2f (patch) | |
tree | 59c1a8215e194f114c3847247d41141dee350de2 | |
parent | 18b7e62c9f424cc2a0b633396fd0dfcd36c3e80f (diff) | |
parent | 17d00ded517f06904dfd1eed2ff51f8b4b90f895 (diff) |
Auto merge of #694 - emilio:finally, r=fitzgen
ir: Handle default template parameters in libclang >3.9.
Fixes #585
-rw-r--r-- | src/ir/template.rs | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/ir/template.rs b/src/ir/template.rs index 5861929f..5c570996 100644 --- a/src/ir/template.rs +++ b/src/ir/template.rs @@ -233,11 +233,22 @@ impl TemplateInstantiation { let template_args = ty.template_args() .map_or(vec![], |args| { - args.filter(|t| t.kind() != CXType_Invalid) - .map(|t| { - Item::from_ty_or_ref(t, t.declaration(), None, ctx) - }) - .collect() + match ty.canonical_type().template_args() { + Some(canonical_args) => { + let arg_count = args.len(); + args.chain(canonical_args.skip(arg_count)) + .filter(|t| t.kind() != CXType_Invalid) + .map(|t| { + Item::from_ty_or_ref(t, t.declaration(), None, ctx) + }).collect() + } + None => { + args.filter(|t| t.kind() != CXType_Invalid) + .map(|t| { + Item::from_ty_or_ref(t, t.declaration(), None, ctx) + }).collect() + } + } }); let definition = ty.declaration() |