Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 30 additions & 16 deletions crates/csharp/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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 {
Expand Down Expand Up @@ -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});
Expand Down Expand Up @@ -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() {
Expand Down Expand Up @@ -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
)
}

Expand Down
1 change: 0 additions & 1 deletion crates/csharp/tests/codegen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ macro_rules! codegen_test {
"lists",
"many-arguments",
"multi-return",
"multiversion",
"option-result",
"records",
"rename-interface",
Expand Down
4 changes: 2 additions & 2 deletions tests/runtime/numbers/wasm.cs
Original file line number Diff line number Diff line change
@@ -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;

Expand Down Expand Up @@ -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;

Expand Down
2 changes: 1 addition & 1 deletion tests/runtime/strings/wasm.cs
Original file line number Diff line number Diff line change
@@ -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;

Expand Down