From 8364c39b4c983bc75b45e427da939870c49d82cb Mon Sep 17 00:00:00 2001 From: Brandon Fish Date: Sat, 9 Feb 2019 13:58:50 -0600 Subject: [PATCH] Add Table grow function --- lib/runtime-c-api/src/lib.rs | 16 ++++++++++++++++ lib/runtime-c-api/tests/test-tables.c | 17 +++++++++++++++-- lib/runtime-c-api/wasmer.h | 2 ++ lib/runtime-c-api/wasmer.hh | 2 ++ 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/lib/runtime-c-api/src/lib.rs b/lib/runtime-c-api/src/lib.rs index 84ee8cf38..9f2ffb12c 100644 --- a/lib/runtime-c-api/src/lib.rs +++ b/lib/runtime-c-api/src/lib.rs @@ -163,6 +163,22 @@ pub unsafe extern "C" fn wasmer_table_new( wasmer_table_result_t::WASMER_TABLE_OK } +#[allow(clippy::cast_ptr_alignment)] +#[no_mangle] +pub extern "C" fn wasmer_table_grow( + table: *mut wasmer_table_t, + delta: uint32_t, +) -> wasmer_table_result_t { + let table = unsafe { Box::from_raw(table as *mut Table) }; + let maybe_delta = table.grow(delta); + Box::into_raw(table); + if let Some(_delta) = maybe_delta { + wasmer_table_result_t::WASMER_TABLE_OK + } else { + wasmer_table_result_t::WASMER_TABLE_ERROR + } +} + #[allow(clippy::cast_ptr_alignment)] #[no_mangle] pub extern "C" fn wasmer_table_length(table: *mut wasmer_table_t) -> uint32_t { diff --git a/lib/runtime-c-api/tests/test-tables.c b/lib/runtime-c-api/tests/test-tables.c index 88d86d842..7e3f51a2f 100644 --- a/lib/runtime-c-api/tests/test-tables.c +++ b/lib/runtime-c-api/tests/test-tables.c @@ -8,14 +8,27 @@ int main() wasmer_table_t *table = NULL; wasmer_limits_t descriptor; descriptor.min = 10; - descriptor.max = 10; + descriptor.max = 15; wasmer_table_result_t table_result = wasmer_table_new(&table, descriptor); printf("Table result: %d\n", table_result); assert(table_result == WASMER_TABLE_OK); uint32_t len = wasmer_table_length(table); printf("Table length: %d\n", len); - assert(len == 10); + assert(len == 15); + + // wasmer_table_result_t grow_result1 = wasmer_table_grow(&table, 5); + // assert(grow_result1 == WASMER_TABLE_OK); + // uint32_t len_grow1 = wasmer_table_length(table); + // printf("Table length: %d\n", len_grow1); + // assert(len_grow1 == 15); + + // // Try to grow beyond max + // wasmer_table_result_t grow_result2 = wasmer_table_grow(&table, 1); + // assert(grow_result2 == WASMER_TABLE_ERROR); + // uint32_t len_grow2 = wasmer_table_length(table); + // printf("Table length: %d\n", len_grow2); + // assert(len_grow2 == 15); printf("Destroy table\n"); wasmer_table_destroy(table); diff --git a/lib/runtime-c-api/wasmer.h b/lib/runtime-c-api/wasmer.h index 0d72375c9..08f891fa8 100644 --- a/lib/runtime-c-api/wasmer.h +++ b/lib/runtime-c-api/wasmer.h @@ -99,6 +99,8 @@ wasmer_memory_result_t wasmer_memory_new(wasmer_memory_t **memory, wasmer_limits void wasmer_table_destroy(wasmer_table_t *table); +wasmer_table_result_t wasmer_table_grow(wasmer_table_t *table, uint32_t delta); + uint32_t wasmer_table_length(wasmer_table_t *table); wasmer_table_result_t wasmer_table_new(wasmer_table_t **table, wasmer_limits_t limits); diff --git a/lib/runtime-c-api/wasmer.hh b/lib/runtime-c-api/wasmer.hh index cb271c9d5..c0d266489 100644 --- a/lib/runtime-c-api/wasmer.hh +++ b/lib/runtime-c-api/wasmer.hh @@ -99,6 +99,8 @@ wasmer_memory_result_t wasmer_memory_new(wasmer_memory_t **memory, wasmer_limits void wasmer_table_destroy(wasmer_table_t *table); +wasmer_table_result_t wasmer_table_grow(wasmer_table_t *table, uint32_t delta); + uint32_t wasmer_table_length(wasmer_table_t *table); wasmer_table_result_t wasmer_table_new(wasmer_table_t **table, wasmer_limits_t limits);