summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gen.rs2
-rw-r--r--src/parser.rs169
2 files changed, 84 insertions, 87 deletions
diff --git a/src/gen.rs b/src/gen.rs
index 68629250..84006b3c 100644
--- a/src/gen.rs
+++ b/src/gen.rs
@@ -465,8 +465,6 @@ fn comp_to_rs(ctx: &mut GenCtx, kind: CompKind, name: String,
}
fn cstruct_to_rs(ctx: &mut GenCtx, name: String, members: Vec<CompMember>) -> Vec<P<ast::Item>> {
- let mut unnamed: uint = 0;
-
let mut fields = vec!();
let mut methods = vec!();
// Nested composites may need to emit declarations and implementations as
diff --git a/src/parser.rs b/src/parser.rs
index e341617f..607d0bc3 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -337,7 +337,7 @@ fn visit_composite(cursor: &Cursor, parent: &Cursor,
}
}
CXCursor_StructDecl | CXCursor_UnionDecl => {
- let decl = fwd_decl(ctx, cursor, |ctx_| {
+ fwd_decl(ctx, cursor, |ctx_| {
// If the struct is anonymous (i.e. declared here) then it
// cannot be used elsewhere and so does not need to be added
// to globals otherwise it will be declared later and a global.
@@ -390,90 +390,89 @@ fn visit_top<'r>(cur: &'r Cursor,
match cursor.kind() {
CXCursor_StructDecl | CXCursor_UnionDecl => {
- fwd_decl(ctx, cursor, |ctx_| {
- let decl = decl_name(ctx_, cursor);
- let ci = decl.compinfo();
- cursor.visit(|c, p| {
- let mut ci_ = ci.borrow_mut();
- visit_composite(c, p, ctx_, &mut ci_.members)
- });
- ctx_.globals.push(GComp(ci));
- });
-
- CXChildVisit_Continue
- }
- CXCursor_EnumDecl => {
- fwd_decl(ctx, cursor, |ctx_| {
- let decl = decl_name(ctx_, cursor);
- let ei = decl.enuminfo();
- cursor.visit(|c, _| {
- let mut ei_ = ei.borrow_mut();
- visit_enum(c, &mut ei_.items)
- });
- ctx_.globals.push(GEnum(ei));
- });
- return CXChildVisit_Continue;
- }
- CXCursor_FunctionDecl => {
- let linkage = cursor.linkage();
- if linkage != CXLinkage_External && linkage != CXLinkage_UniqueExternal {
- return CXChildVisit_Continue;
- }
-
- let args_lst: Vec<(String, il::Type)> = cursor.args().iter().map(|arg| {
- let arg_name = arg.spelling();
- (arg_name, conv_ty(ctx, &arg.cur_type(), cursor))
- }).collect();
-
- let ty = cursor.cur_type();
- let ret_ty = box conv_ty(ctx, &cursor.ret_type(), cursor);
- let abi = get_abi(ty.call_conv());
-
- let func = decl_name(ctx, cursor);
- let vi = func.varinfo();
- let mut vi = vi.borrow_mut();
- vi.ty = TFunc(ret_ty.clone(), args_lst.clone(), ty.is_variadic(), abi);
- ctx.globals.push(func);
-
- return CXChildVisit_Continue;
- }
- CXCursor_VarDecl => {
- let linkage = cursor.linkage();
- if linkage != CXLinkage_External && linkage != CXLinkage_UniqueExternal {
- return CXChildVisit_Continue;
- }
-
- let ty = conv_ty(ctx, &cursor.cur_type(), cursor);
- let var = decl_name(ctx, cursor);
- let vi = var.varinfo();
- let mut vi = vi.borrow_mut();
- vi.ty = ty.clone();
- vi.is_const = cursor.cur_type().is_const();
- ctx.globals.push(var);
-
- return CXChildVisit_Continue;
- }
- CXCursor_TypedefDecl => {
- let mut under_ty = cursor.typedef_type();
- if under_ty.kind() == CXType_Unexposed {
- under_ty = under_ty.canonical_type();
- }
-
- let ty = conv_ty(ctx, &under_ty, cursor);
- let typedef = decl_name(ctx, cursor);
- let ti = typedef.typeinfo();
- let mut ti = ti.borrow_mut();
- ti.ty = ty.clone();
- ctx.globals.push(typedef);
-
- opaque_ty(ctx, &under_ty);
-
- return CXChildVisit_Continue;
- }
- CXCursor_FieldDecl => {
- return CXChildVisit_Continue;
- }
- _ => return CXChildVisit_Continue,
+ fwd_decl(ctx, cursor, |ctx_| {
+ let decl = decl_name(ctx_, cursor);
+ let ci = decl.compinfo();
+ cursor.visit(|c, p| {
+ let mut ci_ = ci.borrow_mut();
+ visit_composite(c, p, ctx_, &mut ci_.members)
+ });
+ ctx_.globals.push(GComp(ci));
+ });
+ return CXChildVisit_Continue;
+ }
+ CXCursor_EnumDecl => {
+ fwd_decl(ctx, cursor, |ctx_| {
+ let decl = decl_name(ctx_, cursor);
+ let ei = decl.enuminfo();
+ cursor.visit(|c, _| {
+ let mut ei_ = ei.borrow_mut();
+ visit_enum(c, &mut ei_.items)
+ });
+ ctx_.globals.push(GEnum(ei));
+ });
+ return CXChildVisit_Continue;
+ }
+ CXCursor_FunctionDecl => {
+ let linkage = cursor.linkage();
+ if linkage != CXLinkage_External && linkage != CXLinkage_UniqueExternal {
+ return CXChildVisit_Continue;
+ }
+
+ let args_lst: Vec<(String, il::Type)> = cursor.args().iter().map(|arg| {
+ let arg_name = arg.spelling();
+ (arg_name, conv_ty(ctx, &arg.cur_type(), cursor))
+ }).collect();
+
+ let ty = cursor.cur_type();
+ let ret_ty = box conv_ty(ctx, &cursor.ret_type(), cursor);
+ let abi = get_abi(ty.call_conv());
+
+ let func = decl_name(ctx, cursor);
+ let vi = func.varinfo();
+ let mut vi = vi.borrow_mut();
+ vi.ty = TFunc(ret_ty.clone(), args_lst.clone(), ty.is_variadic(), abi);
+ ctx.globals.push(func);
+
+ return CXChildVisit_Continue;
+ }
+ CXCursor_VarDecl => {
+ let linkage = cursor.linkage();
+ if linkage != CXLinkage_External && linkage != CXLinkage_UniqueExternal {
+ return CXChildVisit_Continue;
+ }
+
+ let ty = conv_ty(ctx, &cursor.cur_type(), cursor);
+ let var = decl_name(ctx, cursor);
+ let vi = var.varinfo();
+ let mut vi = vi.borrow_mut();
+ vi.ty = ty.clone();
+ vi.is_const = cursor.cur_type().is_const();
+ ctx.globals.push(var);
+
+ return CXChildVisit_Continue;
+ }
+ CXCursor_TypedefDecl => {
+ let mut under_ty = cursor.typedef_type();
+ if under_ty.kind() == CXType_Unexposed {
+ under_ty = under_ty.canonical_type();
+ }
+
+ let ty = conv_ty(ctx, &under_ty, cursor);
+ let typedef = decl_name(ctx, cursor);
+ let ti = typedef.typeinfo();
+ let mut ti = ti.borrow_mut();
+ ti.ty = ty.clone();
+ ctx.globals.push(typedef);
+
+ opaque_ty(ctx, &under_ty);
+
+ return CXChildVisit_Continue;
+ }
+ CXCursor_FieldDecl => {
+ return CXChildVisit_Continue;
+ }
+ _ => return CXChildVisit_Continue,
}
}