Skip to content

Commit 32b3d80

Browse files
authored
[C#] Add resolving of equivalent types. (#1563)
* add resolving of equivalent types to pass future-same-type-different-names.wit * revert Remove/TryRemove change * Address feedback: remove the && parameter
1 parent 9b0965c commit 32b3d80

File tree

4 files changed

+179
-128
lines changed

4 files changed

+179
-128
lines changed

crates/csharp/src/function.rs

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1385,8 +1385,8 @@ impl Bindgen for FunctionBindgen<'_, '_> {
13851385
results.extend(operands.iter().take(*amt).cloned());
13861386
}
13871387

1388-
Instruction::FutureLower { payload, ty }
1389-
| Instruction::StreamLower { payload, ty }=> {
1388+
Instruction::FutureLower { payload, ty: _ }
1389+
| Instruction::StreamLower { payload, ty: _ }=> {
13901390
let op = &operands[0];
13911391
let generic_type_name = match payload {
13921392
Some(generic_type) => {
@@ -1397,10 +1397,10 @@ impl Bindgen for FunctionBindgen<'_, '_> {
13971397

13981398
match inst {
13991399
Instruction::FutureLower { .. } => {
1400-
self.interface_gen.add_future(self.func_name, &generic_type_name, ty);
1400+
self.interface_gen.add_future(self.func_name, &generic_type_name, **payload);
14011401
}
14021402
_ => {
1403-
self.interface_gen.add_stream(self.func_name, &generic_type_name, ty);
1403+
self.interface_gen.add_stream(self.func_name, &generic_type_name, **payload);
14041404
}
14051405
}
14061406

@@ -1411,8 +1411,8 @@ impl Bindgen for FunctionBindgen<'_, '_> {
14111411
uwriteln!(self.src, "// TODO: task_cancel.forget();");
14121412
}
14131413

1414-
Instruction::FutureLift { payload, ty }
1415-
| Instruction:: StreamLift { payload, ty } => {
1414+
Instruction::FutureLift { payload, ty: _ }
1415+
| Instruction:: StreamLift { payload, ty: _ } => {
14161416
let generic_type_name_with_qualifier = match payload {
14171417
Some(generic_type) => {
14181418
&self.interface_gen.type_name_with_qualifier(generic_type, true)
@@ -1436,11 +1436,8 @@ impl Bindgen for FunctionBindgen<'_, '_> {
14361436
let reader_var = self.locals.tmp("reader");
14371437
let module = self.interface_gen.name;
14381438
let (import_name, interface_name) = CSharp::get_class_name_from_qualified_name(module);
1439-
let export_name = import_name
1440-
.replace(".Imports.", ".Exports.");
14411439
let base_interface_name = interface_name
1442-
.strip_prefix("I").unwrap()
1443-
.replace("Imports", "Exports"); // TODO: This is fragile and depends on the interface name.
1440+
.strip_prefix("I").unwrap();
14441441

14451442
let future_stream_name = match inst {
14461443
Instruction::FutureLift{payload: _, ty: _} => "Future",
@@ -1449,15 +1446,15 @@ impl Bindgen for FunctionBindgen<'_, '_> {
14491446
panic!("Unexpected instruction for lift");
14501447
}
14511448
};
1452-
uwriteln!(self.src, "var {reader_var} = new {future_stream_name}Reader{bracketed_generic}({}, {export_name}.{base_interface_name}Interop.{future_stream_name}VTable{});", operands[0], upper_camel);
1449+
uwriteln!(self.src, "var {reader_var} = new {future_stream_name}Reader{bracketed_generic}({}, {import_name}.{base_interface_name}Interop.{future_stream_name}VTable{});", operands[0], upper_camel);
14531450
results.push(reader_var);
14541451

14551452
match inst {
14561453
Instruction::FutureLift { .. } => {
1457-
self.interface_gen.add_future(self.func_name, &generic_type_name, ty);
1454+
self.interface_gen.add_future(self.func_name, &generic_type_name, **payload);
14581455
}
14591456
_ => {
1460-
self.interface_gen.add_stream(self.func_name, &generic_type_name, ty);
1457+
self.interface_gen.add_stream(self.func_name, &generic_type_name, **payload);
14611458
}
14621459
}
14631460

0 commit comments

Comments
 (0)