Skip to content

Commit d5c0819

Browse files
committed
feat: add enum support
Signed-off-by: Gordon Smith <GordonJSmith@gmail.com>
1 parent 21b8397 commit d5c0819

5 files changed

Lines changed: 32 additions & 1 deletion

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ This repository contains a C++ ABI implementation of the WebAssembly Component M
4242
- [x] Record
4343
- [x] Tuple
4444
- [x] Variant
45-
- [ ] Enum
45+
- [x] Enum
4646
- [x] Option
4747
- [x] Result
4848
- [x] Flags

include/cmcpp/traits.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -714,6 +714,10 @@ namespace cmcpp
714714
template <Field Ok, Field Err>
715715
using result_t = variant_t<Ok, Err>;
716716

717+
// Enum --------------------------------------------------------------------
718+
template <typename T>
719+
using enum_t = uint32_t;
720+
717721
// Func --------------------------------------------------------------------
718722
constexpr uint MAX_FLAT_PARAMS = 16;
719723
constexpr uint MAX_FLAT_RESULTS = 1;

samples/wamr/main.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,18 @@ int main()
265265
auto call_list_filter_result = call_list_filter({{false}, {"Hello World!"}, {"Another String"}, {true}, {false}});
266266
std::cout << "call_list_filter result: " << call_list_filter_result.size() << std::endl;
267267

268+
enum e
269+
{
270+
a,
271+
b,
272+
c
273+
};
274+
275+
auto enum_func = attach<enum_t<e>(enum_t<e>)>(module_inst, exec_env, liftLowerContext, "example:sample/enums#enum-func");
276+
std::cout << "enum_func(e::a): " << enum_func(e::a) << std::endl;
277+
std::cout << "enum_func(e::b): " << enum_func(e::b) << std::endl;
278+
std::cout << "enum_func(e::c): " << enum_func(e::c) << std::endl;
279+
268280
wasm_runtime_destroy_exec_env(exec_env);
269281
wasm_runtime_deinstantiate(module_inst);
270282
wasm_runtime_unload(module);

samples/wasm/main.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,8 @@ void exports_example_sample_variants_variant_func(exports_example_sample_variant
9898
a->val.u = a->val.u * 2;
9999
}
100100
}
101+
102+
exports_example_sample_enums_e_t exports_example_sample_enums_enum_func(exports_example_sample_enums_e_t a)
103+
{
104+
return a;
105+
}

samples/wasm/sample.wit

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,23 @@ interface variants {
4040
variant-func: func(a: v) -> v;
4141
}
4242

43+
interface enums {
44+
enum e {
45+
a,
46+
b,
47+
c
48+
}
49+
enum-func: func(a: e) -> e;
50+
}
51+
4352
world sample {
4453
export booleans;
4554
export floats;
4655
export strings;
4756
export tuples;
4857
export lists;
4958
export variants;
59+
export enums;
5060

5161
export void-func: func();
5262
export ok-func: func(a:u32, b:u32) -> result<u32, string>;

0 commit comments

Comments
 (0)