How can I use WebAssembly Reference Types with LDC?
solidstate1991
laszloszeremi at outlook.com
Thu Jan 30 12:27:23 UTC 2025
On Saturday, 14 September 2024 at 12:08:13 UTC, kinke wrote:
>
> Nope, there's currently no way to customize the address-space
> of pointers. dcompute has 2-3 magic structs for expressing such
> pointers.
>
> Maybe this could by solved via some magic
> ```D
> // magic struct requiring compiler support
> struct __as_pointer(T, uint addressSpace) { T* ptr; alias this
> = ptr; }
>
> alias ExternRef(T) = __as_pointer!(T, 10);
> alias FuncRef(T) = __as_pointer!(T, 20);
> ```
I'm currently in the process of implementing such feature, here
are my ideas:
- Amend the magic pragma system, so one could get
`pragma(LDCspectypes, "wasm.externref") struct ExternRef {}`, but
that currently does not really work with the current system.
- Amend the magic attribute system, so one could get
`@WASM_externref struct ExternRef {}`, but also the attribute
system is not equiped with it, even if a `@WASM_funcref` would be
the most ideal for implementing funcref.
- Amend the type resolving system, so if it detects a `struct
__wasm_externref_t{}`, it overrides the output, but currently I
don't know how that works (maybe it should be the easiest?).
- Amend DMD to have `__wasm_externref_t` as an "exotic type" that
is only valid on WASM targets, but even vectors don't have their
own dedicated types.
More information about the digitalmars-d-ldc
mailing list