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