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
base: main
Are you sure you want to change the base?
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 |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
Blocked on https://youtrack.jetbrains.com/issue/KT-63014/Running-tests-with-wasmJs-in-1.9.20-requires-Chrome-Canary.