summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2017-05-10 11:00:23 -0500
committerGitHub <noreply@github.com>2017-05-10 11:00:23 -0500
commit107b7b9d0d186b552a78d466c823d9a012d75a2f (patch)
tree59c1a8215e194f114c3847247d41141dee350de2
parent18b7e62c9f424cc2a0b633396fd0dfcd36c3e80f (diff)
parent17d00ded517f06904dfd1eed2ff51f8b4b90f895 (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.rs21
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()