Skip to content

Commit 1efc4d2

Browse files
committed
Run on-task-done: golden fixtures, formatting, clippy fixes
- Generated golden WIR fixtures for 9 newly-passing filesystem tests - Formatting fixes from clippy (let-chain style, unnecessary clone) - Updated format golden fixtures https://claude.ai/code/session_01RjwgRcDS5sFH8vtZDEF8R7
1 parent 41a10e7 commit 1efc4d2

23 files changed

+10448
-76
lines changed

wado-compiler/src/codegen/component.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,10 @@ pub fn build_component(project: &Project, core_module: &[u8], wir_module: &WirMo
8585
let stream_types: IndexMap<CmStreamPayload, u32> = {
8686
let mut payloads: Vec<CmStreamPayload> = Vec::new();
8787
for intrinsic in &all_canonical_intrinsics {
88-
if let Some(p) = intrinsic.stream_payload() {
89-
if !payloads.contains(&p) {
90-
payloads.push(p);
91-
}
88+
if let Some(p) = intrinsic.stream_payload()
89+
&& !payloads.contains(&p)
90+
{
91+
payloads.push(p);
9292
}
9393
}
9494
let mut map = IndexMap::default();
@@ -102,8 +102,9 @@ pub fn build_component(project: &Project, core_module: &[u8], wir_module: &WirMo
102102
// Alias the record type from the WASI interface that defines it.
103103
// WASI imports are already generated (generate_wasi_imports runs first),
104104
// so we can alias the exported type from the interface instance.
105-
let val = if let Some(interface_name) =
106-
project.wasi_registry.find_interface_for_struct_cm_name(name)
105+
let val = if let Some(interface_name) = project
106+
.wasi_registry
107+
.find_interface_for_struct_cm_name(name)
107108
{
108109
let inst_idx = ctx.instance_idx(&interface_name);
109110
builder.alias_export(inst_idx, name, ComponentExportKind::Type);

wado-compiler/src/codegen/component_context.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ impl ComponentModelContext {
7373
.unwrap_or_else(|| panic!("unknown component type: {name}"))
7474
}
7575

76-
7776
/// Check if a component type exists
7877
pub fn has_type(&self, name: &str) -> bool {
7978
self.type_names.contains_key(name)

wado-compiler/src/component_model.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -795,7 +795,7 @@ impl WasiRegistry {
795795
for (wado_name, (struct_cm_name, source_path, _, _)) in &self.structs {
796796
if struct_cm_name == cm_name || wado_name == cm_name {
797797
let wasi = WasiImport::parse(source_path)?;
798-
return Some(wasi.interface.clone());
798+
return Some(wasi.interface);
799799
}
800800
}
801801
None

wado-compiler/src/synthesis/cm_binding.rs

Lines changed: 56 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ use crate::hashmap::{IndexMap, IndexSet};
1818
use crate::ast::Type;
1919
use crate::cm_abi;
2020
use crate::component_model::{CmVariantCase, WasiFunctionInfo, WasiRegistry};
21+
use crate::name::LocalMethodName;
2122
use crate::name::ModuleSource;
2223
use crate::project::Project;
23-
use crate::name::LocalMethodName;
2424
use crate::tir::{
2525
CallArg, FunctionRef, InlineHint, MonomorphInfo, TirBinaryOp, TirBlock, TirExpr, TirExprKind,
2626
TirFunction, TirParam, TirStmt, TirStmtKind, TypeId, TypeTable,
@@ -5421,7 +5421,7 @@ pub fn generate_adapters(mut project: Project) -> Result<Project, String> {
54215421
Ok(project)
54225422
}
54235423

5424-
/// Generate binding functions for Stream<T>.read() where T is a non-u8 WASI record type.
5424+
/// Generate binding functions for Stream<T>.`read()` where T is a non-u8 WASI record type.
54255425
///
54265426
/// For each unique stream element type T found in stream-read calls, generates a
54275427
/// TIR function `__cm_stream_read_<T>` that:
@@ -5574,22 +5574,22 @@ fn find_record_stream_reads_in_expr(
55745574
};
55755575
if cm_name.as_deref() == Some("stream-read") && !is_u8_array_type(expr.type_id, tt) {
55765576
// Extract element type from Array<T>
5577-
if let Some(type_args) = tt.generic_type_args(expr.type_id) {
5578-
if let Some(&elem_type_id) = type_args.first() {
5579-
let elem_name = tt.base_type_name(elem_type_id);
5580-
results
5581-
.entry(elem_name)
5582-
.or_insert((elem_type_id, expr.type_id));
5583-
}
5577+
if let Some(type_args) = tt.generic_type_args(expr.type_id)
5578+
&& let Some(&elem_type_id) = type_args.first()
5579+
{
5580+
let elem_name = tt.base_type_name(elem_type_id);
5581+
results
5582+
.entry(elem_name)
5583+
.or_insert((elem_type_id, expr.type_id));
55845584
}
55855585
}
55865586
}
55875587

55885588
/// Generate a TIR function for reading records from a stream.
55895589
///
55905590
/// Generates `__cm_stream_read_<T>(handle: i32, max: i32) -> Array<T>`:
5591-
/// 1. Call cm_stream_read_raw to get raw buffer [ptr, count]
5592-
/// 2. Loop: lift each record from buffer at ptr + i * elem_size
5591+
/// 1. Call `cm_stream_read_raw` to get raw buffer [ptr, count]
5592+
/// 2. Loop: lift each record from buffer at ptr + i * `elem_size`
55935593
/// 3. Append to result array
55945594
/// 4. Free buffer
55955595
/// 5. Return array
@@ -5603,7 +5603,10 @@ fn synthesize_stream_read_func(
56035603
wasi_registry: &crate::component_model::WasiRegistry,
56045604
type_table: &RefCell<TypeTable>,
56055605
) -> TirFunction {
5606-
use crate::synthesis::common::*;
5606+
use crate::synthesis::common::{
5607+
assign, binary, break_stmt, builtin_call, cm_raw_call, expr_stmt, i32_const, if_stmt,
5608+
internal_call, let_mut_stmt, let_stmt, local_ref, loop_stmt, return_stmt, synth_span,
5609+
};
56075610

56085611
let func_name = format!("__cm_stream_read_{elem_name}");
56095612
let _tuple_type_id = type_table
@@ -5639,7 +5642,12 @@ fn synthesize_stream_read_func(
56395642
i32_const(elem_size),
56405643
TypeTable::I32,
56415644
);
5642-
stmts.push(let_stmt("byte_count", byte_count_idx, TypeTable::I32, byte_count));
5645+
stmts.push(let_stmt(
5646+
"byte_count",
5647+
byte_count_idx,
5648+
TypeTable::I32,
5649+
byte_count,
5650+
));
56435651

56445652
// let ptr = realloc(0, 0, elem_align, byte_count)
56455653
let ptr_idx = next_local;
@@ -5670,7 +5678,12 @@ fn synthesize_stream_read_func(
56705678
],
56715679
TypeTable::I32,
56725680
);
5673-
stmts.push(let_mut_stmt("result", result_idx, TypeTable::I32, stream_read_call));
5681+
stmts.push(let_mut_stmt(
5682+
"result",
5683+
result_idx,
5684+
TypeTable::I32,
5685+
stream_read_call,
5686+
));
56745687

56755688
// if result == -1 { result = wait_for_blocked(handle); }
56765689
let blocked_check = binary(
@@ -5785,10 +5798,7 @@ fn synthesize_stream_read_func(
57855798
i32_const(elem_size),
57865799
TypeTable::I32,
57875800
);
5788-
let addr = binary_add(
5789-
local_ref(ptr_idx, "ptr", TypeTable::I32),
5790-
offset,
5791-
);
5801+
let addr = binary_add(local_ref(ptr_idx, "ptr", TypeTable::I32), offset);
57925802
loop_body_stmts.push(let_stmt("addr", addr_idx, TypeTable::I32, addr));
57935803

57945804
// Lift each field from linear memory at addr + field_offset
@@ -5855,10 +5865,7 @@ fn synthesize_stream_read_func(
58555865
// i += 1
58565866
let increment = assign(
58575867
local_ref(i_idx, "i", TypeTable::I32),
5858-
binary_add(
5859-
local_ref(i_idx, "i", TypeTable::I32),
5860-
i32_const(1),
5861-
),
5868+
binary_add(local_ref(i_idx, "i", TypeTable::I32), i32_const(1)),
58625869
);
58635870
loop_body_stmts.push(expr_stmt(increment));
58645871

@@ -5883,11 +5890,7 @@ fn synthesize_stream_read_func(
58835890
local_types.push(TypeTable::I32);
58845891

58855892
// return arr
5886-
stmts.push(return_stmt(Some(local_ref(
5887-
arr_idx,
5888-
"arr",
5889-
array_type_id,
5890-
))));
5893+
stmts.push(return_stmt(Some(local_ref(arr_idx, "arr", array_type_id))));
58915894

58925895
TirFunction {
58935896
name: func_name,
@@ -5917,7 +5920,10 @@ fn synthesize_stream_read_func(
59175920
return_type: array_type_id,
59185921
effects: vec![],
59195922
stores: vec![],
5920-
body: Some(TirBlock { stmts, span: synth_span() }),
5923+
body: Some(TirBlock {
5924+
stmts,
5925+
span: synth_span(),
5926+
}),
59215927
span: synth_span(),
59225928
local_count: next_local,
59235929
local_types,
@@ -6147,13 +6153,13 @@ fn rewrite_cm_methods_in_expr(expr: &mut TirExpr, tt: &TypeTable) {
61476153
}
61486154
if cm_name == "stream-read" && !is_u8_array_type(expr.type_id, tt) {
61496155
// Non-u8 stream reads use a generated binding function
6150-
if let Some(type_args) = tt.generic_type_args(expr.type_id) {
6151-
if let Some(&elem_type_id) = type_args.first() {
6152-
let elem_name = tt.base_type_name(elem_type_id);
6153-
let func_name = format!("__cm_stream_read_{elem_name}");
6154-
rewrite_cm_instance_method(expr, "entry", &func_name);
6155-
return;
6156-
}
6156+
if let Some(type_args) = tt.generic_type_args(expr.type_id)
6157+
&& let Some(&elem_type_id) = type_args.first()
6158+
{
6159+
let elem_name = tt.base_type_name(elem_type_id);
6160+
let func_name = format!("__cm_stream_read_{elem_name}");
6161+
rewrite_cm_instance_method(expr, "entry", &func_name);
6162+
return;
61576163
}
61586164
return;
61596165
}
@@ -6267,28 +6273,26 @@ fn parameterize_stream_cm_name(cm_name: &str, expr: &TirExpr, tt: &TypeTable) ->
62676273
}
62686274
}
62696275
// Extract element type from Stream<T>
6270-
if let Some(type_args) = tt.generic_type_args(type_id) {
6271-
if let Some(&elem) = type_args.first() {
6272-
let elem_name = tt.base_type_name(elem);
6273-
if elem_name != "u8" {
6274-
// Convert PascalCase to kebab-case for the CM name
6275-
let cm_elem = elem_name
6276-
.chars()
6277-
.fold(String::new(), |mut s, c| {
6278-
if c.is_uppercase() && !s.is_empty() {
6279-
s.push('-');
6280-
}
6281-
s.push(c.to_ascii_lowercase());
6282-
s
6283-
});
6284-
return format!("{cm_name}:{cm_elem}");
6285-
}
6276+
if let Some(type_args) = tt.generic_type_args(type_id)
6277+
&& let Some(&elem) = type_args.first()
6278+
{
6279+
let elem_name = tt.base_type_name(elem);
6280+
if elem_name != "u8" {
6281+
// Convert PascalCase to kebab-case for the CM name
6282+
let cm_elem = elem_name.chars().fold(String::new(), |mut s, c| {
6283+
if c.is_uppercase() && !s.is_empty() {
6284+
s.push('-');
6285+
}
6286+
s.push(c.to_ascii_lowercase());
6287+
s
6288+
});
6289+
return format!("{cm_name}:{cm_elem}");
62866290
}
62876291
}
62886292
cm_name.to_string()
62896293
}
62906294

6291-
/// Check if a TypeId represents `Array<u8>`.
6295+
/// Check if a `TypeId` represents `Array<u8>`.
62926296
fn is_u8_array_type(type_id: TypeId, tt: &TypeTable) -> bool {
62936297
let name = tt.type_name(type_id);
62946298
name == "Array<u8>"

wado-compiler/tests/fixtures.golden/for_of_2.wir.wado

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

wado-compiler/tests/fixtures.golden/tuple_2.wir.wado

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)