Alexey Andreev
3b2d634cea
JS: optimize variable representation in coroutines
...
Don't convert local variables to fields of coroutine object
when variable is both used and defined in a single block.
2017-09-26 13:56:20 +03:00
Alexey Andreev
b852f73dd2
JS: make string template optimization more conservative
...
See KT-18548
2017-09-26 13:56:20 +03:00
Alexey Andreev
95566b1374
JS: fix serialization of fileId in case of incremental compilation
2017-09-26 13:56:19 +03:00
Alexey Andreev
ee4d790f43
JS: optimize default arguments in cross-module inliner
...
This reduces size of circlet UI (of approx 2.5 mb) by about 90 kb
2017-09-25 11:29:05 +03:00
Alexey Andreev
e6ab3dc936
JS: generate aliases for intrinsics.
...
This makes generated code more friendly to UglifyJS.
For example, uglified circlet loses 15 kb.
2017-09-25 11:29:04 +03:00
Alexey Andreev
c5e5a43f68
JS: fix unit materialization in case of null check and elvis operator
...
See KT-20287
2017-09-19 15:30:55 +03:00
Alexey Andreev
b4c622d433
JS: optimize destructuring declaration when possible
...
See KT-8285
2017-09-19 15:30:26 +03:00
Alexey Andreev
9771a3c66e
JS: prove that KT-8282 is no more reproducible
2017-09-18 13:13:00 +03:00
Alexey Andreev
aa35d4ed36
JS: prove that KT-8315 is no more reproducible
2017-09-18 13:13:00 +03:00
Anton Bannykh
2249675e59
JS: throw exception when accessing uninitialized lateinit property (KT-14964)
2017-09-13 20:16:01 +03:00
Alexey Andreev
37fa45dc34
Add mechanism for type coercion in JS
...
Use it for char boxing/unboxing and unit materialization.
Possible to use for other purposes, for example, to add type checks
to dynamics.
See KT-18793, KT-17915, KT-19081, KT-18216, KT-12970, KT-17014,
KT-13932, KT-13930
2017-09-11 14:34:34 +03:00
Alexey Andreev
24c6f5f0f0
JS: add test to prove that KT-19483 is no more reproducible
2017-09-08 18:27:43 +03:00
Alexey Andreev
1350e3c4ac
JS: improve optimization of for loop over range literals
...
See KT-18329, partial fix for KT-8372
2017-09-08 18:27:40 +03:00
Alexey Andreev
502c51ccff
Sanitize names for backing fields and private declarations in JS BE
...
See KT-1816
2017-09-08 18:27:40 +03:00
Alexey Andreev
206369c088
JS: fix capturing of reified type parameters when used as class literals
...
See KT-19891
2017-09-08 18:27:39 +03:00
Alexey Andreev
d2ff821a3b
JS: prove that lambdas in inline function compiled correctly
...
Obsoletes KT-19712
2017-09-08 10:57:42 +03:00
Alexey Andreev
ff0efe59f6
JS: fix error in generation of if/else statements in some cases
...
See KT-19495
2017-09-08 10:56:49 +03:00
Alexey Andreev
4779f4fefb
JS: don't mark access to captured var as pure
...
See KT-19108
2017-09-08 10:56:06 +03:00
Alexey Andreev
5bf4540458
JS: fix inlining of functions derived from other modules
...
See KT-16408
2017-09-06 17:55:31 +03:00
Alexey Andreev
b8aa2f81a2
Fix delegate property name clash in JS BE
...
See KT-19542
2017-09-04 15:35:35 +03:00
Alexey Andreev
5a984a40e6
Fix JS compiler crash when translating external object fun with vararg
...
See KT-19793
2017-09-04 15:34:10 +03:00
Alexey Andreev
989cebe79e
JS: fix bug in temporary variable eliminator
...
The problem was in considering `a` as trivial in following case:
```
var a = b;
```
However, that's wrong assumption, since `b` can be temporary variable
itself which is further substituted by a non-trivial expression.
2017-09-04 15:33:16 +03:00
Alexey Andreev
abb254297a
Properly rename local name aliases when merging JS fragments together
2017-09-04 15:33:16 +03:00
Alexey Andreev
593aa72439
Fix bug in new JS inliner when inlining nested calls
2017-09-04 15:33:15 +03:00
Alexey Andreev
918ce78c5a
Support inlining internal functions to friend modules in JS BE
...
There's one exception: if an inline internal function calls
private function, this will fail at run time.
2017-09-04 15:33:13 +03:00
Alexey Andreev
7646c2fc72
Use local aliases for Kotlin runtime functions in JS BE
2017-09-04 15:33:11 +03:00
Alexey Andreev
8c256b24dc
Avoid duplication of imports introduced during JS inlining
2017-09-04 15:33:10 +03:00
Alexey Andreev
b90885d1cb
Support new inline function format in JS DCE tool
2017-09-04 15:33:09 +03:00
Alexey Andreev
901346243d
JS: fix inlining of function that calls functions from other modules
2017-09-04 15:33:08 +03:00
Alexey Andreev
834cd1d93d
Fix testdata for new JS inliner
2017-09-04 15:33:07 +03:00
Alexey Andreev
61ba6e528a
Fix JS line number tests
2017-09-04 15:33:06 +03:00
Alexey Andreev
eb6186b74d
Fix translation of classes to work with new JS inliner
2017-09-04 15:33:05 +03:00
Alexey Andreev
7c421b0b83
Refactor JS translator to generate code for new inliner
2017-09-04 15:33:03 +03:00
Alexey Tsvetkov
1c4ada2008
Fix searching serialized classes package contains multiple fragments
2017-08-29 04:28:03 +03:00
Ilya Gorbunov
baa6b44567
Deprecate CharSequence.size in JS
...
#KT-18267 Fixed
2017-07-24 21:14:45 +03:00
Anton Bannykh
e43a145614
fixup: updated EXPECTED_REACHABLE_NODES
2017-07-19 12:24:09 +03:00
Alexey Andreev
7634673213
Fix module re-importing when inlining functions in JS BE
...
When inliner reads function's body from other module, it performs
substitution _ -> moduleAlias. However, local alias can't be used
for this purpose, since call site can be in public inline function
itself, so the correct substitution would be -> _.$$imports$$.alias
2017-07-11 19:27:08 +03:00
Alexey Andreev
ca63717124
Multiple fixes of JS source maps
...
- elvis expression with complex RHS
- destructuring declarations
- decomposition of `var` statement (for example, in case of
inline destructuring functions)
- `is` LHS &&/|| inline fun RHS
- argument assignment to temporary var on inline call site
- assignment of `next()` result to temporary var in `for` expression
- rethrow statement in exception handler
2017-07-06 10:20:49 +03:00
Alexey Andreev
f873834529
Fix JS source maps for objects and enums
2017-07-06 10:20:49 +03:00
Alexey Andreev
d8fe7e55db
Fix JS source maps for lambdas with captured variables
2017-07-06 10:20:48 +03:00
Alexey Andreev
ec2a5bf0ee
Fix JS source map for char boxing and unboxing
2017-07-06 10:20:47 +03:00
Alexey Andreev
be7f3a787c
Fix JS source maps for when expression
2017-07-06 10:20:46 +03:00
Alexey Andreev
d613124cb1
Generate JS source maps for temporary vars declarations and definitions
2017-07-06 10:20:46 +03:00
Alexey Andreev
64f335380f
Provide more source map info about statements in JS tests
2017-07-06 10:20:45 +03:00
Alexey Andreev
fa95f78e78
Generate JS source map for if statement got from optional argument
2017-07-06 10:20:44 +03:00
Alexey Andreev
1e74325c52
Generated source map for JS function's closing curly bracket
2017-07-06 10:20:44 +03:00
Alexey Andreev
4e18ea2d04
Fix JS source map of decomposed conditional expression
2017-07-06 10:20:43 +03:00
Alexey Andreev
2122f57f51
Don't merge locations in JS source map test cases
...
Don't merge locations of containing if/while/do..while/for
statements with locations of conditions
2017-07-06 10:20:42 +03:00
Alexey Andreev
dea73ebecf
Refactor generator of JS source map
...
- refactor pipeline for generation of source map
- generate "empty" mappings for nodes that impossible
to map to something reasonable
- generate more accurate locations in source maps for specific
JS AST nodes
- for binary operation nodes parser now returns location
of binary operator tokens instead of location of first operand
- change completely how source map remapper works
2017-07-06 10:20:41 +03:00
Alexey Andreev
20842dcc44
Add module name as a prefix to declaration keys in JS translator
...
This is necessary due to different modules can have same
package declarations. When importing declarations from these
packages, we should distinguish from which module we are importing it.
See KT-18652
2017-06-26 18:16:00 +03:00