diff --git a/crates/csharp/src/lib.rs b/crates/csharp/src/lib.rs index e5df96de7..184c4e8bf 100644 --- a/crates/csharp/src/lib.rs +++ b/crates/csharp/src/lib.rs @@ -567,13 +567,13 @@ impl InterfaceGenerator<'_> { if let TypeOwner::Interface(id) = &ty.owner { if let Some(name) = self.gen.interface_names.get(id) { if name != self.name { - return format!("{}.", name.to_upper_camel_case()); + return format!("{}.", name); } } } if when { - let name = self.name.to_upper_camel_case(); + let name = self.name; format!("{name}.") } else { String::new() @@ -583,7 +583,7 @@ impl InterfaceGenerator<'_> { fn add_interface_fragment(self, is_export: bool) { self.gen .interface_fragments - .entry(self.name.to_upper_camel_case()) + .entry(self.name.to_string()) .or_insert_with(|| InterfaceTypeAndFragments::new(is_export)) .interface_fragments .push(InterfaceFragment { @@ -764,7 +764,7 @@ impl InterfaceGenerator<'_> { uwrite!( self.csharp_interop_src, r#" - internal static class {camel_name}Interop + internal static class {camel_name}WasmInterop {{ [DllImport("*", EntryPoint = "{import_name}")] internal static extern {wasm_result_type} wasmImport{camel_name}({wasm_params}); @@ -1580,14 +1580,15 @@ impl Bindgen for FunctionBindgen<'_, '_> { uwriteln!( self.src, - "{assignment} {name}Interop.wasmImport{func_name}({operands});" + "{assignment} {name}WasmInterop.wasmImport{func_name}({operands});" ); } Instruction::CallInterface { func } => { - let module = self.gen.name.to_upper_camel_case(); + let module = self.gen.name.to_string(); let func_name = self.func_name.to_upper_camel_case(); - let class_name = CSharp::get_class_name_from_qualified_name(module); + let class_name = + CSharp::get_class_name_from_qualified_name(module).to_upper_camel_case(); let mut oper = String::new(); for (i, param) in operands.iter().enumerate() { @@ -1812,21 +1813,34 @@ fn interface_name(resolve: &Resolve, name: &WorldKey, direction: Direction) -> S } .to_upper_camel_case(); + let namespace = match &pkg { + Some(name) => { + let mut ns = format!( + "{}.{}.", + name.namespace.to_csharp_ident(), + name.name.to_csharp_ident() + ); + + if let Some(version) = &name.version { + let v = version + .to_string() + .replace('.', "_") + .replace('-', "_") + .replace('+', "_"); + ns = format!("{}v{}.", ns, &v); + } + ns + } + None => String::new(), + }; + format!( "wit.{}.{}{name}", match direction { Direction::Import => "imports", Direction::Export => "exports", }, - if let Some(name) = &pkg { - format!( - "{}.{}.", - name.namespace.to_csharp_ident(), - name.name.to_csharp_ident() - ) - } else { - String::new() - } + namespace ) } diff --git a/crates/csharp/tests/codegen.rs b/crates/csharp/tests/codegen.rs index 9c15d73b6..0820379b7 100644 --- a/crates/csharp/tests/codegen.rs +++ b/crates/csharp/tests/codegen.rs @@ -35,7 +35,6 @@ macro_rules! codegen_test { "lists", "many-arguments", "multi-return", - "multiversion", "option-result", "records", "rename-interface", diff --git a/tests/runtime/numbers/wasm.cs b/tests/runtime/numbers/wasm.cs index e5bc9a6db..e0023267f 100644 --- a/tests/runtime/numbers/wasm.cs +++ b/tests/runtime/numbers/wasm.cs @@ -1,7 +1,7 @@ using System; using System.Runtime.InteropServices; using System.Diagnostics; -using wit_numbers.Wit.imports.test.numbers.Test; +using wit_numbers.wit.imports.test.numbers.Test; namespace wit_numbers; @@ -62,7 +62,7 @@ public static void TestImports() } } -public class TestImpl : wit_numbers.Wit.exports.test.numbers.Test.ITest +public class TestImpl : wit_numbers.wit.exports.test.numbers.Test.ITest { static uint SCALAR = 0; diff --git a/tests/runtime/strings/wasm.cs b/tests/runtime/strings/wasm.cs index e448f2db6..2b8606f3d 100644 --- a/tests/runtime/strings/wasm.cs +++ b/tests/runtime/strings/wasm.cs @@ -1,6 +1,6 @@ using System; using System.Diagnostics; -using wit_strings.Wit.imports.test.strings.Imports; +using wit_strings.wit.imports.test.strings.Imports; namespace wit_strings;