Commit Graph

275 Commits

Author SHA1 Message Date
jubianchi
ae9ee50baf test(c-api) Enable the memory test example. 2020-10-30 14:07:41 +01:00
Ivan Enderlin
17683cdf7b Merge branch 'master' into feat-c-api-func-call-with-initialized-results 2020-10-30 13:43:41 +01:00
Ivan Enderlin
b1e875903a test(c-api) Enable the global test example. 2020-10-30 13:41:02 +01:00
Ivan Enderlin
758bc9bb78 feat(c-api) Handle initialized but empty results in wasm_func_call.
Our implementation of `wasm_func_call` was correct for C code as
follows:

```c
wasm_val_vec_t arguments = WASM_EMPTY_VEC;
wasm_val_vec_t results = WASM_EMPTY_VEC;
wasm_func_call(func, &arguments, &results);
```

However, for a C code such as:

```c
wasm_val_t vals[1];
wasm_val_vec_t arguments = WASM_EMPTY_VEC;
wasm_val_vec_t results = WASM_ARRAY_VEC(vals);
wasm_func_call(func, &arguments, &results);
```

the `vals` array were kept empty/unchanged. Why?

Because `wasm_func_call` was replacing the value of `results` by a new
`wasm_val_vec_t`. It is correct when `results` is an empty vector, but
it is incorrect when `results` is initialized with empty values.

This patch tries to detect this pattern: If `results.data` is `null`,
it means the vector is empty/uninitialized, and we can set a new
`wasm_val_vec_t`, otherwise it means the vector is initialized with
empty values, and we need to update each item individually.
2020-10-30 13:41:02 +01:00
Ivan Enderlin
92e4cf64c1 feat(c-api) Implement wasm_$name_vec_t::into_slice_mut. 2020-10-30 13:29:28 +01:00
bors[bot]
591691bc17 Merge #1765
1765: doc(c-api) Update documentation. r=Hywan a=Hywan

# Description

This patch adds documentation to the  `engine.rs` module.

# Review

- [ ] ~Add a short description of the the change to the CHANGELOG.md file~ not necessary


Co-authored-by: Ivan Enderlin <ivan@mnt.io>
2020-10-30 10:05:52 +00:00
Ivan Enderlin
bdb0dc772d Merge branch 'master' into feat-c-api-instance-new-traps 2020-10-30 09:38:06 +01:00
Ivan Enderlin
9583a91678 fix(c-api) wasm_trap_t** in wasm_instance_new does not represent an array.
The `wasm_trap_t**` argument of `wasm_instance_new` represents an
output pointer to a `wasm_trap_t*`, not an array of
`wasm_trap_t*`. This patch updates the code accordingly.
2020-10-30 09:37:05 +01:00
Syrus
2387ec07b6 Upgrade dependencies 2020-10-29 22:59:48 -07:00
Mark McCaskey
adc40aeae3 Merge branch 'master' into feature/add-table-example 2020-10-27 11:57:08 -07:00
Ivan Enderlin
766ab8c0c1 Merge branch 'master' into pr/1604 2020-10-27 14:55:02 +01:00
Ivan Enderlin
ce525e7e90 doc(c-api) Update documentation. 2020-10-27 13:53:47 +01:00
Ivan Enderlin
4102dcb9ac feat(c-api) Shrink vector of traps.
Ensure that the size of the vector of the instance's traps equals its
capacity by shrinking it.
2020-10-27 11:49:01 +01:00
Ivan Enderlin
452181326a fix(c-api) Remove a debug_assert macro. 2020-10-27 11:44:38 +01:00
jubianchi
2452b9a604 chore(doc): Add the Wasmer logo to the generated API documentation 2020-10-26 22:37:30 +01:00
Nick Lewycky
126819eda6 Don't assume the serialized data came from engine-jit. 2020-10-26 12:32:08 -07:00
Ivan Enderlin
38c57e138f test(c-api) Enable the wasm-c-api-start test. 2020-10-26 15:27:20 +01:00
Ivan Enderlin
a2d96d9ba7 feat(c-api) Implement the traps argument of wasm_instance_new.
When running `Instance::new`, it can error with an
`InstantiationError`. There is 2 scenarii:

1. Either it's a `InstantiationError::Link`. In this case, the
   `wasm_instance_new` function must return `NULL` and register the
   error in the Wasmer error registry.

2. Either it's a `InstantiationError::Start`. In this case, the
   `wasm_instance_new` function must return `NULL` and the error must be
   converted into a `wasm_trap_t`, which is stored in the `wasm_trap_t**`
   array. This array is initialized by `wasm_instance_new` itself.
2020-10-26 15:27:20 +01:00
bors[bot]
c6978ea967 Merge #1751
1751: feat(c-api) Correctly implement “trap” in `wasm_func_new*` r=Hywan a=Hywan

The implementation of “trap” in `wasm_func_new` was “incorrect”. It's
more idiomatic to return a `RuntimeError` than raising it in this
case, so that we don't duplicate locations where runtime errors are
raised.

The implementation of “trap” in `wasm_func_new_with_env` was
missing. This patch implements a similar strategy than the sibling
function.

Fixes https://github.com/wasmerio/wasmer/issues/1744.

Co-authored-by: Ivan Enderlin <ivan@mnt.io>
2020-10-26 13:52:18 +00:00
Nick Lewycky
1b3254cf6a Move the generated-by comment up to the first comment. 2020-10-23 11:16:30 -07:00
Nick Lewycky
8ab49df7ab Ahem. 2020-10-23 11:15:31 -07:00
Nick Lewycky
9085480ad0 Update the generated file too, of course. 2020-10-23 11:14:06 -07:00
Nick Lewycky
e28fd7e755 Add a comment indicating what generates this file. 2020-10-23 11:10:21 -07:00
Ivan Enderlin
8d80befccd feat(c-api) Correctly implement “trap” in wasm_func_new*.
The implementation of “trap” in `wasm_func_new` was “incorrect”. It's
more idiomatic to return a `RuntimeError` than raising it in this
case, so that we don't duplicate locations where runtime errors are
raised.

The implementation of “trap” in `wasm_func_new_with_env` was
missing. This patch implements a similar strategy than the sibling
function.
2020-10-22 15:31:27 +02:00
Mark McCaskey
729a044c75 Add misc updates from feedback 2020-10-21 16:34:27 -07:00
Ivan Enderlin
7214b98165 feat(c-api) Implement wasm_memory_type. 2020-10-20 15:49:34 +02:00
Mark McCaskey
6d326233f7 Merge branch 'master' into fix/create-exe-genearted-code-bugs 2020-10-19 10:03:05 -07:00
jubianchi
5c26a81598 feat(c-api): Implement wasm_global_type
This patch adds a `wasm_globaltype_t::new` constructor for use by the
new `wasm_global_type` function and the existing
`wasm_globaltype_new_inner` function.

Note: `wasm_global_type` is defined here:
193d7c8ce1/lib/c-api/tests/wasm_c_api/wasm-c-api/include/wasm.h (L436)
2020-10-19 16:02:21 +02:00
Ivan Enderlin
460d034379 chore(c-api) Remove outdated comment. 2020-10-19 09:23:08 +02:00
Ivan Enderlin
afa5ab5e52 Merge branch 'master' into fix-c-api-trampoline 2020-10-19 09:22:13 +02:00
Ivan Enderlin
a73e457976 Merge branch 'master' into feat-c-api-update-wasm-h 2020-10-19 08:01:00 +02:00
Syrus
bb1b89f4f7 Removed all usages of wasm_instance_get_vmctx_ptr 2020-10-16 21:39:23 -07:00
Mark McCaskey
1ee99d394c Address feedback and fix small issue with cfg logic 2020-10-16 17:38:59 -07:00
bors[bot]
1d4bf9b7fa Merge #1725
1725: feat(c-api) Implement `wasm_func_type` r=MarkMcCaskey a=Hywan

This patch creates a `wasm_functype_t::new` constructor, that is used
by the new `wasm_func_type` function, and the existing
`wasm_functype_new_inner` function.

Note: `wasm_func_type` is defined in 193d7c8ce1/lib/c-api/tests/wasm_c_api/wasm-c-api/include/wasm.h (L421).

# Review

- [x] Add a short description of the the change to the CHANGELOG.md file


Co-authored-by: Ivan Enderlin <ivan@mnt.io>
2020-10-16 23:59:42 +00:00
Ivan Enderlin
d7d40e542f Merge branch 'master' into feat-c-api-update-wasm-h 2020-10-16 10:18:46 +02:00
Ivan Enderlin
e29ea25dcd feat(c-api) Simplify code with unwrap_or_default. 2020-10-16 10:17:23 +02:00
Ivan Enderlin
2f692a1e2c fix(c-api) Fix merge issue. 2020-10-16 09:42:12 +02:00
Mark McCaskey
f3bcc36b59 Merge branch 'master' into fix/panic-in-memory-api 2020-10-15 10:11:43 -07:00
Ivan Enderlin
ffff0441bc feat(c-api) Implement wasm_func_type.
This patch creates a `wasm_functype_t::new` constructor, that is used
by the new `wasm_func_type` function, and the existing
`wasm_functype_new_inner` function.
2020-10-15 15:05:26 +02:00
bors[bot]
193d7c8ce1 Merge #1715
1715: fix(c-api) Register errors from `wasm_module_serialize` r=Hywan a=Hywan

This patch updates `wasm_module_serialize` to register errors with`update_last_error` if any.

Co-authored-by: Ivan Enderlin <ivan@mnt.io>
2020-10-15 06:31:12 +00:00
bors[bot]
c5d5ac7bfe Merge #1693
1693: Add `wasmer create-exe` r=MarkMcCaskey a=MarkMcCaskey

This adds the `wasmer create-exe` subcommand.  This subcommand is a combination of `wasmer compile --object-file` and linking that compiled Wasm with a main function and libwasmer.  Put more plainly: it lets us transform Wasm modules into native executables in one step.

In order for this to work we need:
- [x] Ship wasm.h with Wasmer or use different mechanism to find it
- [x] Ship wasmer_wasm.h with Wasmer
- [x] Requires up to date libwasmer... had to build one and copy it over, may fail in CI because of this... will be fixed with next release though
- [x] More gracefully handle wasmer installed without WASMER_DIR, etc (even if just error messages, should be tested)
- [x] Add tests

# Review

- [ ] Add a short description of the the change to the CHANGELOG.md file


Co-authored-by: Mark McCaskey <mark@wasmer.io>
Co-authored-by: Mark McCaskey <5770194+MarkMcCaskey@users.noreply.github.com>
2020-10-13 21:46:16 +00:00
Mark McCaskey
e3ec9f34c1 Prevent panic when min > static bound and max is less than it 2020-10-13 14:39:25 -07:00
Ivan Enderlin
599c473d34 Merge branch 'master' into fix-c-api-module-serialize 2020-10-13 11:24:35 +02:00
bors[bot]
9c309ea3f3 Merge #1689
1689: feat(c-api) Use `Option<NonNull<wasm_valtype_t>>` in `wasm_valtype_kind` r=syrusakbary a=Hywan

A more Rust-FFI idiomatic way to handle null pointer.

Note: In `wasm_valtype_kind`, it's tricky to handle the error because
we _must_ return a `wasm_valtype_kind` value. For the moment, it
continues to panic, which is probably the best tradeoff.

Co-authored-by: Ivan Enderlin <ivan@mnt.io>
2020-10-13 09:06:29 +00:00
Ivan Enderlin
7cc4d5adbe fix(c-api) Simplify NonNull<T> by &T. 2020-10-13 10:51:58 +02:00
Ivan Enderlin
954e5e8495 fix(c-api) Register errors from wasm_module_serialize. 2020-10-13 10:26:32 +02:00
Mark McCaskey
fd63ddb101 Merge branch 'master' into feature/wasmer-create-exe 2020-10-12 15:54:54 -07:00
Ivan Enderlin
f866ea39fd fixup 2020-10-12 18:02:45 +02:00
Ivan Enderlin
fe70330772 fixup 2020-10-12 18:02:32 +02:00
Ivan Enderlin
b9f98ce1f6 feat(c-api) Update .h files. 2020-10-12 17:54:21 +02:00