Skip to content

Commit 9562cb2

Browse files
committed
WIP: refactor: link type information at runtime
1 parent 34c3508 commit 9562cb2

39 files changed

+1414
-1230
lines changed

crates/mun/src/ops/start.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,19 @@ pub fn start(matches: &ArgMatches) -> Result<ExitStatus, anyhow::Error> {
2323

2424
if let Some(ret_type) = fn_definition.prototype.signature.return_type() {
2525
let type_guid = &ret_type.guid;
26-
if *type_guid == bool::type_guid() {
26+
if *type_guid == bool::type_id() {
2727
let result: bool = borrowed
2828
.invoke(entry_point, ())
2929
.map_err(|e| anyhow!("{}", e))?;
3030

3131
println!("{}", result)
32-
} else if *type_guid == f64::type_guid() {
32+
} else if *type_guid == f64::type_id() {
3333
let result: f64 = borrowed
3434
.invoke(entry_point, ())
3535
.map_err(|e| anyhow!("{}", e))?;
3636

3737
println!("{}", result)
38-
} else if *type_guid == i64::type_guid() {
38+
} else if *type_guid == i64::type_id() {
3939
let result: i64 = borrowed
4040
.invoke(entry_point, ())
4141
.map_err(|e| anyhow!("{}", e))?;

crates/mun_abi/src/assembly_info.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1-
use crate::{DispatchTable, ModuleInfo};
1+
use crate::{DispatchTable, ModuleInfo, TypeLut};
22
use std::{ffi::CStr, os::raw::c_char, slice, str};
33

44
/// Represents an assembly declaration.
55
#[repr(C)]
66
pub struct AssemblyInfo {
77
/// Symbols of the top-level module
88
pub symbols: ModuleInfo,
9-
/// Dispatch table
9+
/// Function dispatch table
1010
pub dispatch_table: DispatchTable,
11+
/// Type lookup table
12+
pub type_lut: TypeLut,
1113
/// Paths to assembly dependencies
1214
pub(crate) dependencies: *const *const c_char,
1315
/// Number of dependencies
@@ -35,7 +37,7 @@ unsafe impl Sync for AssemblyInfo {}
3537
#[cfg(test)]
3638
mod tests {
3739
use crate::test_utils::{
38-
fake_assembly_info, fake_dispatch_table, fake_module_info, FAKE_DEPENDENCY,
40+
fake_assembly_info, fake_dispatch_table, fake_module_info, fake_type_lut, FAKE_DEPENDENCY,
3941
FAKE_MODULE_PATH,
4042
};
4143
use std::ffi::CString;
@@ -46,10 +48,11 @@ mod tests {
4648
let module = fake_module_info(&module_path, &[], &[]);
4749

4850
let dispatch_table = fake_dispatch_table(&[], &mut []);
51+
let type_lut = fake_type_lut(&[], &mut []);
4952

5053
let dependency = CString::new(FAKE_DEPENDENCY).expect("Invalid fake dependency.");
5154
let dependencies = &[dependency.as_ptr()];
52-
let assembly = fake_assembly_info(module, dispatch_table, dependencies);
55+
let assembly = fake_assembly_info(module, dispatch_table, type_lut, dependencies);
5356

5457
assert_eq!(assembly.dependencies().count(), dependencies.len());
5558
for (lhs, rhs) in assembly.dependencies().zip([FAKE_DEPENDENCY].iter()) {

crates/mun_abi/src/dispatch_table.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ mod tests {
132132
let type_name = CString::new(FAKE_TYPE_NAME).expect("Invalid fake type name.");
133133
let type_info = fake_type_info(&type_name, 1, 1, TypeInfoData::Primitive);
134134

135-
let return_type = Some(&type_info);
135+
let return_type = Some(type_info.id);
136136
let fn_name = CString::new(FAKE_FN_NAME).expect("Invalid fake fn name.");
137137
let fn_prototype = fake_fn_prototype(&fn_name, &[], return_type);
138138

@@ -147,7 +147,7 @@ mod tests {
147147
assert_eq!(lhs.0, rhs.0);
148148
assert_eq!(lhs.1.name(), rhs.1.name());
149149
assert_eq!(lhs.1.signature.arg_types(), rhs.1.signature.arg_types());
150-
assert_eq!(lhs.1.signature.return_type(), rhs.1.signature.return_type());
150+
assert_eq!(lhs.1.signature.return_type, rhs.1.signature.return_type);
151151
}
152152
}
153153

@@ -165,7 +165,7 @@ mod tests {
165165
let type_name = CString::new(FAKE_TYPE_NAME).expect("Invalid fake type name.");
166166
let type_info = fake_type_info(&type_name, 1, 1, TypeInfoData::Primitive);
167167

168-
let return_type = Some(&type_info);
168+
let return_type = Some(type_info.id);
169169
let fn_name = CString::new(FAKE_FN_NAME).expect("Invalid fake fn name.");
170170
let fn_prototype = fake_fn_prototype(&fn_name, &[], return_type);
171171

@@ -194,7 +194,7 @@ mod tests {
194194
let type_name = CString::new(FAKE_TYPE_NAME).expect("Invalid fake type name.");
195195
let type_info = fake_type_info(&type_name, 1, 1, TypeInfoData::Primitive);
196196

197-
let return_type = Some(&type_info);
197+
let return_type = Some(type_info.id);
198198
let fn_name = CString::new(FAKE_FN_NAME).expect("Invalid fake fn name.");
199199
let fn_prototype = fake_fn_prototype(&fn_name, &[], return_type);
200200

@@ -207,7 +207,7 @@ mod tests {
207207
for (lhs, rhs) in result.iter().zip(prototypes.iter()) {
208208
assert_eq!(lhs.name(), rhs.name());
209209
assert_eq!(lhs.signature.arg_types(), rhs.signature.arg_types());
210-
assert_eq!(lhs.signature.return_type(), rhs.signature.return_type());
210+
assert_eq!(lhs.signature.return_type, rhs.signature.return_type);
211211
}
212212
}
213213

@@ -216,7 +216,7 @@ mod tests {
216216
let type_name = CString::new(FAKE_TYPE_NAME).expect("Invalid fake type name.");
217217
let type_info = fake_type_info(&type_name, 1, 1, TypeInfoData::Primitive);
218218

219-
let return_type = Some(&type_info);
219+
let return_type = Some(type_info.id);
220220
let fn_name = CString::new(FAKE_FN_NAME).expect("Invalid fake fn name.");
221221
let fn_prototype = fake_fn_prototype(&fn_name, &[], return_type);
222222

@@ -232,7 +232,7 @@ mod tests {
232232
let type_name = CString::new(FAKE_TYPE_NAME).expect("Invalid fake type name.");
233233
let type_info = fake_type_info(&type_name, 1, 1, TypeInfoData::Primitive);
234234

235-
let return_type = Some(&type_info);
235+
let return_type = Some(type_info.id);
236236
let fn_name = CString::new(FAKE_FN_NAME).expect("Invalid fake fn name.");
237237
let fn_prototype = fake_fn_prototype(&fn_name, &[], return_type);
238238

@@ -248,7 +248,7 @@ mod tests {
248248
let type_name = CString::new(FAKE_TYPE_NAME).expect("Invalid fake type name.");
249249
let type_info = fake_type_info(&type_name, 1, 1, TypeInfoData::Primitive);
250250

251-
let return_type = Some(&type_info);
251+
let return_type = Some(type_info.id);
252252
let fn_name = CString::new(FAKE_FN_NAME).expect("Invalid fake fn name.");
253253
let fn_prototype = fake_fn_prototype(&fn_name, &[], return_type);
254254

@@ -264,7 +264,7 @@ mod tests {
264264
let type_name = CString::new(FAKE_TYPE_NAME).expect("Invalid fake type name.");
265265
let type_info = fake_type_info(&type_name, 1, 1, TypeInfoData::Primitive);
266266

267-
let return_type = Some(&type_info);
267+
let return_type = Some(type_info.id);
268268
let fn_name = CString::new(FAKE_FN_NAME).expect("Invalid fake fn name.");
269269
let fn_prototype = fake_fn_prototype(&fn_name, &[], return_type);
270270

@@ -283,7 +283,7 @@ mod tests {
283283
let type_name = CString::new(FAKE_TYPE_NAME).expect("Invalid fake type name.");
284284
let type_info = fake_type_info(&type_name, 1, 1, TypeInfoData::Primitive);
285285

286-
let return_type = Some(&type_info);
286+
let return_type = Some(type_info.id);
287287
let fn_name = CString::new(FAKE_FN_NAME).expect("Invalid fake fn name.");
288288
let fn_prototype = fake_fn_prototype(&fn_name, &[], return_type);
289289

@@ -299,7 +299,7 @@ mod tests {
299299
let type_name = CString::new(FAKE_TYPE_NAME).expect("Invalid fake type name.");
300300
let type_info = fake_type_info(&type_name, 1, 1, TypeInfoData::Primitive);
301301

302-
let return_type = Some(&type_info);
302+
let return_type = Some(type_info.id);
303303
let fn_name = CString::new(FAKE_FN_NAME).expect("Invalid fake fn name.");
304304
let fn_prototype = fake_fn_prototype(&fn_name, &[], return_type);
305305

0 commit comments

Comments
 (0)