Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Wasm support #95

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft

[WIP] Wasm support #95

wants to merge 1 commit into from

Conversation

val buffer = fs.readFileSync(path).unsafeCast<Uint8Array>()
Int8Array(buffer.buffer, buffer.byteOffset, buffer.length).unsafeCast<ByteArray>()
val buffer = readFileSync(path)
Int8Array(buffer.buffer, buffer.byteOffset, buffer.length) as ByteArray
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There must be a better way to do this.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@goncalossilva is this because unsafeCast is available only under the js* source sets?

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unsafeCast is available on Wasm too, but its type must inherit from JsAny which ByteArray doesn't.

Copy link

@lppedd lppedd Dec 19, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@goncalossilva maybe you can introduce your own unsafeCast temporarily? It's just a call to asDynamic, although not sure how it works in WASM.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah just seen, it's implementedAsIntrinsic, so no luck on that.

Copy link

@lppedd lppedd Dec 22, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've just added support for wasmJs to antlr-kotlin and I've experimented a bit with it.

Working with primitive types in a shared way, with JS interop like this case, doesn't seem to be possible.
I ended up duplicating some of the code and using WASM types like JsBoolean and JsNumber, that you can get with, e.g.:

yourBool.toJsBoolean()

The js functions also have different signatures and compile time requirements, so they don't play well together.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you need WASI file system APIs, I've been pointed to https://github.com/kowasm/kowasm
You'll need to copy-paste the WASM imports and Kotlin functions, but they should work.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@lppedd nice share, thanks! I have some downtime during the holiday season, but I'll definitely be looking into these when I pick this back up.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants