Unindent a large non-header codepath
diff --git a/gen/write.rs b/gen/write.rs
index 631be52..8f3ecc0 100644
--- a/gen/write.rs
+++ b/gen/write.rs
@@ -629,94 +629,94 @@
write_rust_function_shim_decl(out, local_name, sig, sig.receiver.as_ref(), indirect_call);
if out.header {
writeln!(out, ";");
- } else {
- writeln!(out, " {{");
- for arg in &sig.args {
- if arg.ty != RustString && types.needs_indirect_abi(&arg.ty) {
- out.include.utility = true;
- write!(out, " ::rust::ManuallyDrop<");
- write_type(out, &arg.ty);
- writeln!(out, "> {}$(::std::move({0}));", arg.ident);
- }
- }
- write!(out, " ");
- let indirect_return = indirect_return(sig, types);
- if indirect_return {
- write!(out, "::rust::MaybeUninit<");
- write_type(out, sig.ret.as_ref().unwrap());
- writeln!(out, "> return$;");
- write!(out, " ");
- } else if let Some(ret) = &sig.ret {
- write!(out, "return ");
- match ret {
- Type::RustBox(_) => {
- write_type(out, ret);
- write!(out, "::from_raw(");
- }
- Type::UniquePtr(_) => {
- write_type(out, ret);
- write!(out, "(");
- }
- Type::Ref(_) => write!(out, "*"),
- _ => {}
- }
- }
- if sig.throws {
- write!(out, "::rust::Str::Repr error$ = ");
- }
- write!(out, "{}(", invoke);
- if sig.receiver.is_some() {
- write!(out, "*this");
- }
- for (i, arg) in sig.args.iter().enumerate() {
- if i > 0 || sig.receiver.is_some() {
- write!(out, ", ");
- }
- match &arg.ty {
- Type::Str(_) => write!(out, "::rust::Str::Repr("),
- Type::SliceRefU8(_) => write!(out, "::rust::Slice<uint8_t>::Repr("),
- ty if types.needs_indirect_abi(ty) => write!(out, "&"),
- _ => {}
- }
- write!(out, "{}", arg.ident);
- match &arg.ty {
- Type::RustBox(_) => write!(out, ".into_raw()"),
- Type::UniquePtr(_) => write!(out, ".release()"),
- Type::Str(_) | Type::SliceRefU8(_) => write!(out, ")"),
- ty if ty != RustString && types.needs_indirect_abi(ty) => write!(out, "$.value"),
- _ => {}
- }
- }
- if indirect_return {
- if !sig.args.is_empty() {
- write!(out, ", ");
- }
- write!(out, "&return$.value");
- }
- if indirect_call {
- if !sig.args.is_empty() || indirect_return {
- write!(out, ", ");
- }
- write!(out, "extern$");
- }
- write!(out, ")");
- if let Some(ret) = &sig.ret {
- if let Type::RustBox(_) | Type::UniquePtr(_) = ret {
- write!(out, ")");
- }
- }
- writeln!(out, ";");
- if sig.throws {
- writeln!(out, " if (error$.ptr) {{");
- writeln!(out, " throw ::rust::Error(error$);");
- writeln!(out, " }}");
- }
- if indirect_return {
- out.include.utility = true;
- writeln!(out, " return ::std::move(return$.value);");
- }
- writeln!(out, "}}");
+ return;
}
+ writeln!(out, " {{");
+ for arg in &sig.args {
+ if arg.ty != RustString && types.needs_indirect_abi(&arg.ty) {
+ out.include.utility = true;
+ write!(out, " ::rust::ManuallyDrop<");
+ write_type(out, &arg.ty);
+ writeln!(out, "> {}$(::std::move({0}));", arg.ident);
+ }
+ }
+ write!(out, " ");
+ let indirect_return = indirect_return(sig, types);
+ if indirect_return {
+ write!(out, "::rust::MaybeUninit<");
+ write_type(out, sig.ret.as_ref().unwrap());
+ writeln!(out, "> return$;");
+ write!(out, " ");
+ } else if let Some(ret) = &sig.ret {
+ write!(out, "return ");
+ match ret {
+ Type::RustBox(_) => {
+ write_type(out, ret);
+ write!(out, "::from_raw(");
+ }
+ Type::UniquePtr(_) => {
+ write_type(out, ret);
+ write!(out, "(");
+ }
+ Type::Ref(_) => write!(out, "*"),
+ _ => {}
+ }
+ }
+ if sig.throws {
+ write!(out, "::rust::Str::Repr error$ = ");
+ }
+ write!(out, "{}(", invoke);
+ if sig.receiver.is_some() {
+ write!(out, "*this");
+ }
+ for (i, arg) in sig.args.iter().enumerate() {
+ if i > 0 || sig.receiver.is_some() {
+ write!(out, ", ");
+ }
+ match &arg.ty {
+ Type::Str(_) => write!(out, "::rust::Str::Repr("),
+ Type::SliceRefU8(_) => write!(out, "::rust::Slice<uint8_t>::Repr("),
+ ty if types.needs_indirect_abi(ty) => write!(out, "&"),
+ _ => {}
+ }
+ write!(out, "{}", arg.ident);
+ match &arg.ty {
+ Type::RustBox(_) => write!(out, ".into_raw()"),
+ Type::UniquePtr(_) => write!(out, ".release()"),
+ Type::Str(_) | Type::SliceRefU8(_) => write!(out, ")"),
+ ty if ty != RustString && types.needs_indirect_abi(ty) => write!(out, "$.value"),
+ _ => {}
+ }
+ }
+ if indirect_return {
+ if !sig.args.is_empty() {
+ write!(out, ", ");
+ }
+ write!(out, "&return$.value");
+ }
+ if indirect_call {
+ if !sig.args.is_empty() || indirect_return {
+ write!(out, ", ");
+ }
+ write!(out, "extern$");
+ }
+ write!(out, ")");
+ if let Some(ret) = &sig.ret {
+ if let Type::RustBox(_) | Type::UniquePtr(_) = ret {
+ write!(out, ")");
+ }
+ }
+ writeln!(out, ";");
+ if sig.throws {
+ writeln!(out, " if (error$.ptr) {{");
+ writeln!(out, " throw ::rust::Error(error$);");
+ writeln!(out, " }}");
+ }
+ if indirect_return {
+ out.include.utility = true;
+ writeln!(out, " return ::std::move(return$.value);");
+ }
+ writeln!(out, "}}");
}
fn write_return_type(out: &mut OutFile, ty: &Option<Type>) {