Fold qualified path into local_name
diff --git a/gen/write.rs b/gen/write.rs
index f7c4a19..2cb8b51 100644
--- a/gen/write.rs
+++ b/gen/write.rs
@@ -3,9 +3,7 @@
 use crate::syntax::atom::Atom::{self, *};
 use crate::syntax::namespace::Namespace;
 use crate::syntax::symbol::Symbol;
-use crate::syntax::{
-    mangle, Api, ExternFn, ExternType, Receiver, Signature, Struct, Type, Types, Var,
-};
+use crate::syntax::{mangle, Api, ExternFn, ExternType, Signature, Struct, Type, Types, Var};
 use proc_macro2::Ident;
 use std::collections::HashMap;
 
@@ -335,8 +333,8 @@
     for method in methods {
         write!(out, "  ");
         let sig = &method.sig;
-        let local_name = Symbol::from(&method.ident);
-        write_rust_function_shim_decl(out, &local_name, sig, None, false);
+        let local_name = method.ident.to_string();
+        write_rust_function_shim_decl(out, &local_name, sig, false);
         writeln!(out, ";");
     }
     writeln!(out, "}};");
@@ -513,7 +511,7 @@
     write_rust_function_decl_impl(out, &r_trampoline, f, types, indirect_call);
 
     out.next_section();
-    let c_trampoline = mangle::c_trampoline(&out.namespace, efn, var);
+    let c_trampoline = mangle::c_trampoline(&out.namespace, efn, var).to_string();
     write_rust_function_shim_impl(out, &c_trampoline, f, types, &r_trampoline, indirect_call);
 }
 
@@ -572,7 +570,10 @@
     for line in efn.doc.to_string().lines() {
         writeln!(out, "//{}", line);
     }
-    let local_name = Symbol::from(&efn.ident);
+    let local_name = match &efn.sig.receiver {
+        None => efn.ident.to_string(),
+        Some(receiver) => format!("{}::{}", receiver.ident, efn.ident),
+    };
     let invoke = mangle::extern_fn(&out.namespace, efn);
     let indirect_call = false;
     write_rust_function_shim_impl(out, &local_name, efn, types, &invoke, indirect_call);
@@ -580,15 +581,11 @@
 
 fn write_rust_function_shim_decl(
     out: &mut OutFile,
-    local_name: &Symbol,
+    local_name: &str,
     sig: &Signature,
-    receiver: Option<&Receiver>,
     indirect_call: bool,
 ) {
     write_return_type(out, &sig.ret);
-    if let Some(receiver) = receiver {
-        write!(out, "{}::", receiver.ident);
-    }
     write!(out, "{}(", local_name);
     for (i, arg) in sig.args.iter().enumerate() {
         if i > 0 {
@@ -616,7 +613,7 @@
 
 fn write_rust_function_shim_impl(
     out: &mut OutFile,
-    local_name: &Symbol,
+    local_name: &str,
     sig: &Signature,
     types: &Types,
     invoke: &Symbol,
@@ -626,7 +623,7 @@
         // We've already defined this inside the struct.
         return;
     }
-    write_rust_function_shim_decl(out, local_name, sig, sig.receiver.as_ref(), indirect_call);
+    write_rust_function_shim_decl(out, local_name, sig, indirect_call);
     if out.header {
         writeln!(out, ";");
         return;