Implement a first-class error for reexported component functions (#4348)
Currently I don't know how we can reasonably implement this. Given all the signatures of how we call functions and how functions are called on the host there's no real feasible way that I know of to hook these two up "seamlessly". This means that a component which reexports an imported function can't be run in Wasmtime. One of the main reasons for this is that when calling a component function Wasmtime wants to lower arguments first and then have them lifted when the host is called. With a reexport though there's not actually anything to lower into so we'd sort of need something similar to a table on the side or maybe a linear memory and that seems like it'd get quite complicated quite quickly for not really all that much benefit. As-such for now this simply returns a first-class error (rather than the current panic) in situations like this.
This commit is contained in:
@@ -141,7 +141,9 @@ pub(super) fn run(
|
||||
ComponentFuncDef::Lifted { ty, func, options } => {
|
||||
Export::LiftedFunction { ty, func, options }
|
||||
}
|
||||
ComponentFuncDef::Import(_) => unimplemented!("reexporting a function import"),
|
||||
ComponentFuncDef::Import(_) => {
|
||||
bail!("component export `{name}` is a reexport of an imported function which is not implemented")
|
||||
}
|
||||
},
|
||||
|
||||
ComponentItemDef::Instance(_) => unimplemented!("exporting an instance to the host"),
|
||||
|
||||
5
tests/misc_testsuite/component-model/import.wast
Normal file
5
tests/misc_testsuite/component-model/import.wast
Normal file
@@ -0,0 +1,5 @@
|
||||
(assert_invalid
|
||||
(component
|
||||
(import "host-return-two" (func $f (result u32)))
|
||||
(export "x" (func $f)))
|
||||
"component export `x` is a reexport of an imported function which is not implemented")
|
||||
Reference in New Issue
Block a user