Skip to content

Commit bf5cc6b

Browse files
committed
wip
1 parent 504469c commit bf5cc6b

File tree

121 files changed

+2472
-2181
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

121 files changed

+2472
-2181
lines changed

TODO.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
* test `import foo: bar`
2+
* add support for `import foo: func()` and export

crates/wit-component/src/builder.rs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -169,15 +169,6 @@ impl ComponentBuilder {
169169
});
170170
inc(&mut self.types)
171171
}
172-
173-
pub fn alias_outer_type(&mut self, count: u32, index: u32) -> u32 {
174-
self.aliases().alias(Alias::Outer {
175-
count,
176-
kind: ComponentOuterAliasKind::Type,
177-
index,
178-
});
179-
inc(&mut self.types)
180-
}
181172
}
182173

183174
// Helper macro to generate methods on `ComponentBuilder` to get specific

crates/wit-component/src/decoding.rs

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ impl WitPackageDecoder<'_> {
216216
let doc = self.resolve.documents.alloc(Document {
217217
name: name.to_string(),
218218
interfaces: IndexMap::new(),
219-
worlds: Vec::new(),
219+
worlds: IndexMap::new(),
220220
default_interface: None,
221221
default_world: None,
222222
package: Some(self.package),
@@ -253,7 +253,10 @@ impl WitPackageDecoder<'_> {
253253
let id = self
254254
.register_world(doc, name, ty)
255255
.with_context(|| format!("failed to process export `{name}`"))?;
256-
self.resolve.documents[doc].worlds.push(id);
256+
let prev = self.resolve.documents[doc]
257+
.worlds
258+
.insert(name.to_string(), id);
259+
assert!(prev.is_none());
257260
}
258261
_ => bail!("component export `{name}` is not an instance or component"),
259262
}
@@ -423,7 +426,7 @@ impl WitPackageDecoder<'_> {
423426
self.resolve.documents.alloc(Document {
424427
name: document.to_string(),
425428
interfaces: IndexMap::new(),
426-
worlds: Vec::new(),
429+
worlds: IndexMap::new(),
427430
default_interface: None,
428431
default_world: None,
429432
package: Some(package),
@@ -556,6 +559,16 @@ impl WitPackageDecoder<'_> {
556559
};
557560
WorldItem::Interface(id)
558561
}
562+
563+
types::ComponentEntityType::Func(idx) => {
564+
let ty = match self.info.types.type_from_id(*idx) {
565+
Some(types::Type::ComponentFunc(ty)) => ty,
566+
_ => unreachable!(),
567+
};
568+
let func = self.convert_function(name, ty)?;
569+
WorldItem::Function(func)
570+
}
571+
559572
_ => bail!("component import `{name}` is not an instance"),
560573
};
561574
world.imports.insert(name.to_string(), item);
@@ -574,6 +587,16 @@ impl WitPackageDecoder<'_> {
574587
};
575588
WorldItem::Interface(id)
576589
}
590+
591+
types::ComponentEntityType::Func(idx) => {
592+
let ty = match self.info.types.type_from_id(*idx) {
593+
Some(types::Type::ComponentFunc(ty)) => ty,
594+
_ => unreachable!(),
595+
};
596+
let func = self.convert_function(name, ty)?;
597+
WorldItem::Function(func)
598+
}
599+
577600
_ => bail!("component export `{name}` is not an instance"),
578601
};
579602
world.exports.insert(name.to_string(), item);

0 commit comments

Comments
 (0)