Zalim Bashorov
8a645e9c0a
[Wasm] Don't print recursion group in wat when it's empty
2023-07-20 11:49:28 +00:00
Zalim Bashorov
590400071b
[Wasm] Define canonical representation for NaNs explicitly instead of depending on Kotlin's one
...
Surprisingly with `Float.NaN.toRawBits()` you can observe different values,
which can lead to different wat files for the same input.
2023-07-20 11:49:28 +00:00
Zalim Bashorov
151f5b90c7
[Wasm] Wrap a recursion group by a "rec" block in wat
2023-07-20 11:49:28 +00:00
Zalim Bashorov
8a9531ce3c
[Wasm] Don't print "field" for array types in wat
2023-07-20 11:49:28 +00:00
Zalim Bashorov
8d440a61e2
[Wasm] Make types for none and noextern consistent with the spec
2023-07-20 11:49:28 +00:00
Zalim Bashorov
2d13cbae80
[Wasm] make adding sections a bit more typesafe and extract possible values to WasmBinary
2023-07-20 11:49:28 +00:00
Zalim Bashorov
a819a734b8
[Wasm] extract some "mages numbers" to simplify their update and improve readability
...
In preparation for KT-59720
2023-07-20 11:49:28 +00:00
Zalim Bashorov
0945968751
[Wasm] Update expected size in test data
2023-07-17 23:57:35 +02:00
Zalim Bashorov
b34d291f85
[Wasm] Turn on final types in V8 for the box tests
2023-07-17 23:57:35 +02:00
Zalim Bashorov
1cf3841588
[Wasm] Always use -0x30/sub when defining a struct type
...
Otherwise, according to the spec, a type will be treated as a final,
which is not correct in many cases.
Later, we can generate final struct types when it's applicable.
#KT-60200 Fixed
2023-07-17 23:57:34 +02:00
Zalim Bashorov
5db493a475
[Wasm, JS] Update v8 to 11.7.186
2023-07-17 23:57:34 +02:00
Zalim Bashorov
b744f2ef82
[Wasm] Stop using "--type-ssa" since without "--type-merging" it increases output size
...
"--type-merging" was disabled before because it requires "--close-world"
which we can't use in general (specifically in Compose applications).
2023-07-17 23:57:34 +02:00
Zalim Bashorov
4e36f5b391
[Wasm, JS] Add a warning that dumping reachability and size infos to file is supported only for Kotlin/Wasm
2023-04-25 19:44:03 +02:00
Zalim Bashorov
0a1116376c
[CLI, JS, Wasm] Regenerate K2JSCompilerArgumentsCopyGenerated.kt
2023-04-25 19:44:03 +02:00
Zalim Bashorov
ef28bf27ae
[CLI tests] Update testdata
2023-04-25 19:44:03 +02:00
Zalim Bashorov
bd852e87ab
[Wasm] Add an option to dump declaration IR sizes to file
2023-04-25 19:44:03 +02:00
Zalim Bashorov
3c343e3074
[Wasm, JS] Minor: make description non-nullable
2023-04-25 19:44:02 +02:00
Zalim Bashorov
62b21ac078
[Wasm] Add an option to dump reachability info to file
2023-04-25 19:44:02 +02:00
Zalim Bashorov
a9683bd4a8
Wasm: temporary force keeping Unit_getInstance in DCE
2023-04-22 17:41:23 +00:00
Zalim Bashorov
77491ded1b
Use Array constructor with size to create Array of nulls
...
Change the constructor visibility from public to private as it should be.
2023-04-22 17:41:23 +00:00
Zalim Bashorov
4f76827ea9
[Wasm] Tune Binaryen options and add some notes about 112
2023-04-18 20:40:17 +02:00
Zalim Bashorov
34f8851ac1
[psi2ir] Ignore private members when creating fake overrides from descriptors
...
The behavior is unified with the IR deserializer.
See `isOverridableMemberOrAccessor` in IrOverridingUtil.kt
Without this change, if we add a private member to the Any in wasm stdlib,
the compiler starts crashing with a linker error.
It's hard to write a relevant, self-contained box test for that since it requires
adding a private member to Any and affects **only** "virtual" FunctionN interfaces.
2023-04-18 18:44:47 +02:00
Zalim Bashorov
521a272acb
[Wasm] Pass js stack value directly when replacing a wasm exception with JS one
...
In this case, we don't need to convert a value to and from wasm String.
2023-04-17 16:15:22 +00:00
Zalim Bashorov
6bfd1e7e9f
[Wasm] Stop using unsigned numbers in ScopedMemoryAllocator
...
It turned out that using unsigned numbers is heavy both in terms of size and performance.
We can consider switching back (KT-58041) as soon as we implement unsigned numbers and operations using wasm built-in capabilities (KT-58039).
2023-04-17 16:15:22 +00:00
Zalim Bashorov
c114afb55d
[Wasm] export __callFunction_* only when a respective closure/lambda converter is used
2023-04-17 16:15:21 +00:00
Zalim Bashorov
1e6626338d
[CODEOWNERS] Changes in wasm output size tests must be shown to Zalim.Bashorov
2023-04-06 10:14:06 +00:00
Zalim Bashorov
155eb9b77a
[Wasm, stdlib] extract Any::identityHashCode to workaround the bug in FunctionDescriptorFactory
...
A fix is on its way -- KT-MR-9426.
2023-04-05 20:50:53 +02:00
Zalim Bashorov
46459dfa60
[Wasm] Minor: update expected size after rebase
2023-04-05 20:50:52 +02:00
Zalim Bashorov
2e4a09f841
[Wasm] Replace takeIf with ifEmpty in TeamcityAdapter
2023-04-05 20:50:52 +02:00
Zalim Bashorov
9760e3ee1e
[Wasm] Introduce check and error specialized for String to reduce output size
2023-04-05 20:50:52 +02:00
Zalim Bashorov
295acdf2af
[Wasm] Rewrite lazy initialization without by lazy and lateinit to reduce overhead
2023-04-05 20:50:52 +02:00
Zalim Bashorov
1a8a4fa65d
[Wasm] Don't use by lazy inside Throwable
2023-04-05 20:50:52 +02:00
Zalim Bashorov
67357fa5d4
[Wasm] Replace heavyweight stackTraceToString with "pure" JS stack
2023-04-05 20:50:52 +02:00
Zalim Bashorov
14af47bbd9
[Wasm] Introduce utilities to get package and name of class directly from metadata and use it in some places
2023-04-05 20:50:52 +02:00
Zalim Bashorov
f206b0b72d
[Wasm] TeamcityAdapter: rewrite lazy property initialization using lateinit
2023-04-05 20:50:52 +02:00
Zalim Bashorov
a9b553f16e
[Wasm] Don't use by lazy to keep some JS values used by adapters
2023-04-05 20:50:52 +02:00
Zalim Bashorov
494403c4bb
[Wasm] Don't use by lazy inside TeamcityAdapter
2023-04-05 20:50:52 +02:00
Zalim Bashorov
2ef47901d0
[Wasm] Introducing private identityHashCode shared between Any's hashCode and toString
...
It splits the dependency of toString from hashCode that prevents keeping hashCode when toString is used.
2023-04-05 20:50:51 +02:00
Zalim Bashorov
6e3eef7a88
[Wasm] add simple tests to track the size of wasm and mjs files
2023-04-05 20:50:51 +02:00
Zalim Bashorov
1697a28bf0
[Wasm] introduce a directive to check output size in some wasm tests
...
Syntax:
// WASM_DCE_EXPECTED_OUTPUT_SIZE: <file extension> <expected size in bytes>
Example:
// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 10_000
2023-04-05 20:46:13 +02:00
Zalim Bashorov
4d7cf81ed0
[Wasm] Stop supporting "_export.js" in test infra, use import/export capability in relevant tests
...
* It works slightly differently in SpiderMonkey.
* It was a hack.
2023-03-06 23:19:02 +01:00
Zalim Bashorov
bec827b654
[Wasm] Update SpiderMonkey to 112.0a1 (2023-03-04-09-52-24)
2023-03-06 23:19:02 +01:00
Zalim Bashorov
f3e022e4ca
[Wasm] Print an instruction if CompileError was thrown while instantiating a module
...
#KT-56160 Fixed
2023-02-03 14:06:32 +01:00
Zalim Bashorov
95a1218996
[CODEOWNERS] Change owner of wasm intrinsics to "Kotlin Wasm"
...
And make "Kotlin Wasm" co-owner of /js/js.translator/testData/
2023-02-01 00:36:11 +01:00
Zalim Bashorov
58e523b890
[Wasm] Change target directory for wasm intrinsics for finer tuning code owners
...
Also, minor cleanup in the generator.
2023-02-01 00:35:49 +01:00
Zalim Bashorov
6a73650b35
[Wasm] SpiderMonkey.kt -> WasmVM.kt
2023-01-27 17:57:50 +01:00
Zalim Bashorov
b02279de14
[Wasm] Run wasm test using all available VMs: V8 & SpiderMonkey for now
...
Also, add a new directive, `WASM_FAILS_IN`, to specify VMs where a test is expected to fail for now.
#KT-56166 Fixed
2023-01-27 17:57:50 +01:00
Zalim Bashorov
885381dd63
[Wasm] Change externRefToAny to make it compatible with SpiderMonkey and V8
...
It's hard to achieve that without implementing part of `externRefToAny` using an intrinsic. It should be rewritten when all VMs and tools update to the latest spec.
Also, stop using (deprecated) instructions unsupported by SpiderMonkey.
#KT-56166 In-Progress
2023-01-27 17:57:50 +01:00
Zalim Bashorov
d1855371a0
[Wasm] Don't wrap single null expression into composite in WasmNullCoercingLowering
...
Otherwise, it breaks check/assert inside DeclarationGenerator::visitField (DeclarationGenerator.kt:458)
#KT-56166 In-Progress
2023-01-27 17:57:50 +01:00
Zalim Bashorov
ca79711610
[Wasm] Generate .mjs compatible with other standalone js & wasm VMs: SpiderMonkey and JavaScriptCore in addition to V8
...
#KT-56166 In-Progress
2023-01-27 17:57:50 +01:00
Zalim Bashorov
802a8ec326
[Wasm] Update SpiderMonkey version
...
#KT-56166 In-Progress
2023-01-27 17:57:50 +01:00
Zalim Bashorov
1d793f7bec
[Wasm] Revert a7ed496a and few fixes to make Kotlin/Wasm compatible with Firefox
...
Revert changes as soon as the bug is fixed https://bugzilla.mozilla.org/show_bug.cgi?id=1811932
a7ed496a "[WASM] Use wasm bottom types for Nothing?"
#KT-56166 In-Progress
2023-01-27 17:57:49 +01:00
Zalim Bashorov
2573201a87
[Wasm] provide "location" for pseudo-instructions using to add comments
2023-01-17 19:37:06 +01:00
Zalim Bashorov
ab1cbc49dd
[Wasm] Minor: move buildUnreachable* helpers to more specific module
2023-01-17 19:37:05 +01:00
Zalim Bashorov
9e4b2b78e6
[Wasm] Remove unnecessary location from WasmDataMode constructor
2023-01-17 19:37:05 +01:00
Zalim Bashorov
2fa2725012
[Wasm] Add a comment about location into WasmExpressionBuilder
2023-01-17 19:37:05 +01:00
Zalim Bashorov
37879e18d9
[Wasm] Pass location instead of fileEntry to generateConstExpression
2023-01-17 19:37:05 +01:00
Zalim Bashorov
aa8a0fd7d7
[Wasm] Remove LocationHolder and helper functions
...
It turned out that dedicated scoping function for locations are not so useful.
Now, if you want to scope a location use functions from stdlib, like `let`.
2023-01-17 19:37:05 +01:00
Zalim Bashorov
e62add937b
[Wasm] Remove SourceLocation.TBDLocation and related things
2023-01-17 19:37:05 +01:00
Zalim Bashorov
0d203d190e
[Wasm] Remove buildInstr without location and fix usages
2023-01-17 19:37:05 +01:00
Zalim Bashorov
42f2edd282
[Wasm] Require location for buildThrow and fix all usages
2023-01-17 19:37:05 +01:00
Zalim Bashorov
1244cd1259
[Wasm] Require location for buildBr* and fix all usages
2023-01-17 19:37:05 +01:00
Zalim Bashorov
95c84d5d3f
[Wasm] Require location for buildDrop and fix all usages
2023-01-17 19:37:05 +01:00
Zalim Bashorov
6eba0392db
[Wasm] Require location for buildRefNull and fix all usages
2023-01-17 19:37:05 +01:00
Zalim Bashorov
12854af0a2
[Wasm] Require location for buildRefTestStatic and fix all usages
2023-01-17 19:37:05 +01:00
Zalim Bashorov
7bd92bc412
[Wasm] Require location for buildRefCastNullStatic and fix all usages
2023-01-17 19:37:05 +01:00
Zalim Bashorov
158a307334
[Wasm] Require location for buildStructSet and fix all usages
2023-01-17 19:37:05 +01:00
Zalim Bashorov
e7dc443c18
[Wasm] Require location for buildStructGet and fix all usages
2023-01-17 19:37:04 +01:00
Zalim Bashorov
530438dfcb
[Wasm] Require location for buildStructNew and fix all usages
2023-01-17 19:37:04 +01:00
Zalim Bashorov
3967bd2755
[Wasm] Require location for buildSetGlobal and fix all usages
2023-01-17 19:37:04 +01:00
Zalim Bashorov
65e1b53027
[Wasm] Require location for buildGetGlobal and fix all usages
2023-01-17 19:37:04 +01:00
Zalim Bashorov
00d0c38fc3
[Wasm] Require location for buildSetLocal and fix all usages
2023-01-17 19:37:04 +01:00
Zalim Bashorov
0b59ef58dc
[Wasm] Require location for buildGetLocal and fix all usages
2023-01-17 19:37:04 +01:00
Zalim Bashorov
9e86ac071d
[Wasm] Require location for buildCallIndirect
2023-01-17 19:37:04 +01:00
Zalim Bashorov
e5e786c265
[Wasm] Use more specific types in generateExpression and generateStatement
...
Also, rename: `generateStatement` -> `generateAsStatement`
2023-01-17 19:37:04 +01:00
Zalim Bashorov
ce265c049a
[Wasm] Require location for buildUnreachable and fix all usages
2023-01-17 19:37:04 +01:00
Zalim Bashorov
36d4e29253
[Wasm] Require location for buildConstI32Symbol and fix all usages
2023-01-17 19:37:04 +01:00
Zalim Bashorov
e69bbdd5b4
[Wasm] Require location for buildConstF32 & buildConstF64 and fix all usages
2023-01-17 19:37:04 +01:00
Zalim Bashorov
332aca10b0
[Wasm] Require location for buildConstI64 and fix all usages
2023-01-17 19:37:04 +01:00
Zalim Bashorov
f2f4c63720
[Wasm] Require location for buildConstI32 and fix all usages
2023-01-17 19:37:04 +01:00
Zalim Bashorov
cdc1d66b1f
[Wasm] Require a description on each usage of SourceLocation.NoLocation
2023-01-17 19:37:04 +01:00
Zalim Bashorov
61440c74d5
[Wasm] Require location for buildCall and fix all usages
2023-01-17 19:37:03 +01:00
Zalim Bashorov
49c3ba33f1
[Wasm] Add a basic end-to-end sourcemap generation in wasm backend
...
More constructions/instructions will be supported separately.
2022-12-08 12:44:26 +00:00
Zalim Bashorov
54c00cc588
[Sourcemap] Add an ability to provide outputColumn to SourceMap3Builder#addMapping instead of using getCurrentOutputColumn
...
The ability will be used later by wasm backend while generating sourcemap.
2022-12-07 12:03:54 +00:00
Zalim Bashorov
fb4dcc6a6a
[Sourcemap] Introduce getCurrentColumn and stop using TextOutput directly
...
The general goal is remove dependency on TextOutput and
make it simpler to use for wasm backend.
2022-12-07 12:03:54 +00:00
Zalim Bashorov
e34d3d09bc
[Sourcemap] Extract addLink from SourceMap3Builder as a addSourceMappingURL
...
The general goal is remove dependency on TextOutput and
make it simpler to use for wasm backend.
2022-12-07 12:03:54 +00:00
Zalim Bashorov
70a3d43adf
[Wasm] Update Binaryen version in gradle plugin: 110 -> 111
2022-11-25 15:32:32 +01:00
Zalim Bashorov
fe1157c873
[Wasm] Add to TODO the hash of the commit to revert
2022-11-25 15:32:32 +01:00
Zalim Bashorov
7f8f7aa050
[Wasm] Revert ref cast and test instructions to be compatible with Binaryen
2022-11-25 15:31:48 +01:00
Zalim Bashorov
5f140dac21
[Wasm] Remove wasm_ref_cast and use wasm_ref_cast_null inside the compiler
2022-11-25 15:31:47 +01:00
Zalim Bashorov
e7d0e451e7
[Wasm] Fix immediate type for recently (in M6) introduced instructions
...
STRUCT_TYPE_IDX -> HEAP_TYPE
WasmImmediate.TypeIdx -> WasmImmediate.HeapType
2022-11-25 15:31:47 +01:00
Zalim Bashorov
3ac90cf0e4
[CODEOWNERS] Add missed leading slash in the paths
2022-11-25 14:54:08 +01:00
Zalim Bashorov
d2b63c8c31
[Wasm] Use common logic for eqeq and eqeqeq
...
So, now it generates better code when null literals are passed to `eqeqeq`,
same as for `eqeq`.
2022-11-18 17:30:11 +01:00
Zalim Bashorov
96b02c9b66
[Wasm] Minor: move part of code of eqeqSymbol processing in BuiltInsLowering
2022-11-18 17:30:11 +01:00
Zalim Bashorov
0529ba9a87
[Wasm] Extract common some logic of eqeqSymbol processing in BuiltInsLowering
2022-11-18 17:30:10 +01:00
Zalim Bashorov
919029f34f
[Wasm] Add fast path for null in externRefToAny
...
- Introduce new intrinsics `wasm_ref_cast_null` & `wasm_ref_test_null`.
- Support getting type for immediate from generic argument.
- Remove redundant null check in `tryGetOrSetExternrefBox`.
2022-11-18 17:30:10 +01:00
Zalim Bashorov
ab590e1279
[Wasm, stdlib] Change visibility for wasm_* helper functions to internal
2022-11-15 12:55:10 +01:00
Zalim Bashorov
2fc6cea681
[Wasm] Migrate to the new GC M6 instructions
2022-11-15 12:55:10 +01:00
Zalim Bashorov
0c16415d26
[Wasm, stdlib] Change owner of runtime part of wasm-stdlib to "Kotlin Wasm"
2022-11-15 12:33:31 +01:00
Zalim Bashorov
89ba1b515e
[Wasm, test] Use "dynamic import" to catch exception thrown during JS & Wasm modules initialization
2022-11-11 16:22:10 +01:00