WIT values are native Rust values. But records are represented as a
vector of WIT values. In order to provide a super neat API to the
user, Serde is used to deserialize this vector of WIT values to a
large variety of Rust values.
The `Type::Record` variant now is defined by `RecordType`. In
addition, `InterfaceType` has a new variant: `Record`, that is also
defined by `RecordType`. Encoders and decoders are updated to consider
`RecordType`, which removes code duplication and simplify code.
This patch updates the `Type` type to be an enum with 2 variants:
`Function` and `Record`, resp. to represent:
1. `(@interface type (func (param i32 i32) (result string)))`
2. `(@interface type (record string i32))`
This patch updates the binary encoder and decoder, along with the WAT
encoder and decoder.
Basically the `x-to-y` instructions have been renamed `y.from_x`. This
patch updates the instruction. The binary representation isn't
specified yet, so it's just arbitrary values.
1327: fix(interface-types) Stack pops items in the same order than Wasm invocation rule r=Hywan a=Hywan
This PR fixes the items order when popped from the stack. It matches [the Wasm invocation rule](https://webassembly.github.io/spec/core/exec/instructions.html#invocation-of-function-address).
Not that it is more performant in our case, since we use the `drain` API rather than `drain` + `rev`.
Co-authored-by: Ivan Enderlin <ivan.enderlin@hoa-project.net>
1288: Update some dependencies manually, removing duplicate deps r=MarkMcCaskey a=MarkMcCaskey
Removes all duplicate deps (as seen by `cargo +stable tree -d`). Primarily by updating `wasm-debug` but also by through updating some other dependencies.
Co-authored-by: Mark McCaskey <mark@wasmer.io>
1320: Support multiple custom sections with the same name r=MarkMcCaskey a=MarkMcCaskey
The spec doesn't disallow duplicates and the [JS API spec](https://webassembly.github.io/spec/js-api/index.html#dom-module-customsections) supports them.
# Review
- [ ] Add a short description of the the change to the CHANGELOG.md file
Co-authored-by: Mark McCaskey <mark@wasmer.io>
This also removes it from the API to generate trampolines, which makes sense because those produce new functions, so it can produce a new builder for the new function.
cfg!()/env!() are applied on the host platform during the build script's
build, the environment of the build script's execution is the proper way
to determine eg target_os