From 644589c7fe75c2f1aa1568d80d60c30687b698be Mon Sep 17 00:00:00 2001 From: Vladimir Vukicevic Date: Fri, 27 May 2016 19:27:49 -0400 Subject: Support MSVC mangled names (which have @ symbols in them) when generating bindings --- .gitignore | 5 ++++- src/gen.rs | 13 +++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index bcc3a4e0..f54aca98 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,7 @@ libbindgen* # Cargo target/ -Cargo.lock \ No newline at end of file +Cargo.lock +*~ +#*# + diff --git a/src/gen.rs b/src/gen.rs index 4d296386..e046ea12 100644 --- a/src/gen.rs +++ b/src/gen.rs @@ -70,8 +70,16 @@ fn ref_eq(thing: &T, other: &T) -> bool { fn rust_id(ctx: &mut GenCtx, name: &str) -> (String, bool) { let token = parse::token::Ident(ctx.ext_cx.ident_of(name)); - if token.is_any_keyword() || "bool" == name { + if token.is_any_keyword() || + name.contains("@") || + name.contains("?") || + name.contains("$") || + "bool" == name + { let mut s = name.to_owned(); + s = s.replace("@", "_"); + s = s.replace("?", "_"); + s = s.replace("$", "_"); s.push_str("_"); (s, true) } else { @@ -214,6 +222,7 @@ fn gen_unmangle_method(ctx: &mut GenCtx, constness: ast::Constness::NotConst, }; + let mangled_rs = first(rust_id(ctx, &v.mangled)); let call = P(ast::Expr { id: ast::DUMMY_NODE_ID, node: ast::ExprKind::Call( @@ -223,7 +232,7 @@ fn gen_unmangle_method(ctx: &mut GenCtx, span: ctx.span, global: false, segments: vec![ast::PathSegment { - identifier: ctx.ext_cx.ident_of(&v.mangled), + identifier: ctx.ext_cx.ident_of(&mangled_rs), parameters: ast::PathParameters::none() }] }), -- cgit v1.2.3