Commit Graph

5247 Commits

Author SHA1 Message Date
Kristoffer Andersen 39fee12f32 [IR/FE] BindingContext: Change USED_AS_EXPRESSION to Basic Slice
This commit changes the slice implementation used for
`USED_AS_EXPRESSION`.

Here is the problem as identified and mitigated by this commit:

Slices are key-value maps. They are not total over the domain of keys,
so "looking up" a key not in the slice is a valid operation, yielding
`null`.

A binding context is a collection of slices.

Binding contexts can be stacked as composite binding contexts to
e.g. facilitate scoped analyses. Looking up a key proceeds down the
stack, yielding the first non-null value, or `null` if no slice in the
stack of binding contexts contain that key.

A slice made by `createSimpleSetSlice` models a "set" of keys that can
be enlarged by inclusion: adding `(k, true)` to the slice indicates
`k` belongs to the set. `(k, false)` indicates non-membership.

However, looking up a key _not in_ the slice yields _false_, rather
than null.

Hence, simple set slices do not compose in composite binding traces.

This was encountered porting the expression evaluator to the IR
backend. PSI2IR uses `USED_AS_EXPRESSION` to generate expression body
functions properly. The frontend analysis of the fragment is layered
ontop of the binding context from the editor's analysis of the
underlying project being debugged, which contains speficially the
analysis results of inline functions called from the fragment.
2021-12-01 00:52:46 +01:00
Ilmir Usmanov 8e8a6e6108 Do not count receivers in default parameters mask
If we implement default function with default parameters in inline
class, the receivers will be added to parameter list
(see ac7538a269). But since they
are not present in source parameters, we should not count them when we
compute mask for default parameters.

 #KT-49977 Fixed
2021-11-30 15:09:16 +00:00
Ilya Muradyan 6917ff7d2a [scripting] Move earlierScripts to the frontend descriptor
^KT-20488 fixed
2021-11-30 09:11:59 +03:00
Mads Ager 09da67767e [JVM_IR] Fix mangling of inline class inherited interface methods.
^KT-49864 Fixed
2021-11-30 03:33:56 +03:00
Anton Bannykh 5b66c4cdc3 [JS IR] speed up temporary name resolving 2021-11-29 21:09:35 +03:00
Anton Bannykh 2259c6f75d [JS IR IC] assert cross-file tag are not null and fix tests 2021-11-29 21:09:35 +03:00
Anton Bannykh 33cd7e982c [IR] support storing signatures for non-public symbols 2021-11-29 21:09:34 +03:00
Anton Bannykh 3be44a3540 [JS IR] fix missing signature 2021-11-29 21:09:33 +03:00
Anton Bannykh ef4ef8c930 [JS IR] switch to the IC Ir2Js and fix tests 2021-11-29 21:09:31 +03:00
Alexander Udalov 4df937ff7f JVM IR: keep property for $receiver field of optimized delegated properties
For properties which delegate to other property via the getValue
operator from stdlib (see KT-39054), we generate `$receiver` field which
stores the receiver of the property reference used in the delegate. The
problem was that this backing field was missing `correspondingProperty`.
It's needed because it is used as a map key to store static fields in
`JvmCachedDeclarations.getStaticBackingField`. If it's null, accesses to
the static $receiver fields are not remapped correctly in
`RemapObjectFieldAccesses` and
`MoveOrCopyCompanionObjectFieldsLowering`, which led to ICCE or NSFE.

 #KT-49793 Fixed
2021-11-26 19:21:16 +01:00
Ilya Goncharov cac286c915 [JS IR] Access with exported properties by its name, not accessor
[JS IR] Export properties to ts as getter/setter, not fields

[JS IR] Fix typescript tests



Merge-request: KT-MR-5074
2021-11-26 09:18:12 +00:00
Artem Kobzar 08b0e17d47 feat(polyfills): use stdlib for js polyfills. 2021-11-26 08:14:34 +00:00
Mikhail Glukhikh 4a8f00bc7c FIR2IR: support reading of isNewPlaceForBodyGeneration in lazy class 2021-11-26 09:18:11 +03:00
Ilya Goncharov 98bedf7eed [IR] More user-friendly compilation exceptions from lowerings and JS codegen
Merge-request: KT-MR-5004
2021-11-25 13:21:34 +00:00
Roman Artemev a01d9b77c3 [JS IR] Delegate invalidated files processing to the caller
This change is needed to test invalidation somehow
2021-11-25 11:22:45 +03:00
Ilya Goncharov 1481ad21f5 Enum implementing exported interface
[JS IR] Not export get instance enum function

[JS IR] Enum corresponding class is not considered in export

[JS IR] All enums are abstract and with private constructor

[JS IR] Any methods is left in d.ts

[JS IR] Make enum with declarations inside corresponding class

[JS IR] Export of interface through fake override

[JS IR] Include enum entry corresponding class members into export model

Merge-request: KT-MR-5031

^KT-49779 fixed
^KT-49773 fixed
2021-11-24 12:25:50 +00:00
Pavel Kunyavskiy 98fa69c3d5 [K/N] Remove hack from suspend function inheritance to allow export
Before that commit, function in coroutine implementation class was
override for both SuspendFunctionN's and FunctionN+1's invoke,
which somehow works, but breaks exporting classes with such functions.

Now it's two separate functions, as it should be normally.

^KT-49395
2021-11-24 07:54:51 +00:00
Dmitry Petrov 55d1fdfbc2 JVM_IR prevent clash of unsubstituted special bridges 2021-11-23 12:05:13 +00:00
Dmitry Petrov 2a263eca65 FIR2IR strip annotations from IrConst type 2021-11-23 06:34:03 +00:00
Ilya Goncharov f48436b35e rra/ilgonmic/eager-like-native
[JS IR] Leave JsEagerInitialization until bootstrap update

[JS IR] Fix js stdlib api

[JS IR] Change annotation on eager initialization in sources

[JS IR] Make eager initialization consistent with native

Merge-request: KT-MR-5030
2021-11-22 12:45:37 +00:00
Sergej Jaskiewicz 756b58d5ce [JS IR] Don't assume a single constructor in the Char class 2021-11-22 11:22:45 +00:00
Kristoffer Andersen be1c0bb9c1 [EE-IR] Support mutations by evaluator fragments
- box captured variables using `Ref`s, the same mechanism that's used
  for shared variables in closures.
2021-11-21 01:34:42 +01:00
Kristoffer Andersen 7e633cf217 [IR] Refactor JvmSymbols to allow on-demand loading of (subsets of) symbols 2021-11-20 12:40:46 +01:00
Dmitry Petrov aa0c2ddea5 JVM_IR fix nullability of special bridge return type 2021-11-20 07:27:22 +00:00
Sergej Jaskiewicz 060074a9d6 [JS IR] Don't concatenate string template segments with '' when possible
If concatenating with an empty string is a sure no-op, just don't do it.
2021-11-19 11:16:33 +00:00
Roman Artemev a0d67cb2e3 [JS IR] Support throwing linkage error in JS IR BE
- lower it into runtime API call
2021-11-19 01:16:37 +03:00
Roman Artemev 53a65f818f [KLIB] Support partially linked klibs in Ir linker
Now it's possible to compile against klib even if in there are
references to declarations from other klibs which are no longer existed

 - add switch flag to turn on/off that mode
 - pass switch flag from JS CLI to JS Linker
2021-11-19 01:16:35 +03:00
Roman Artemev 650b04b4dd [JS IR] Make assert checks no unbound symbols left conditional 2021-11-19 01:16:34 +03:00
Roman Artemev e4585730d6 [IR] Add platform-agnostic builtin to throw linkage error 2021-11-19 01:16:33 +03:00
Roman Artemev 8381badcc4 [KLIB] Make IrModuleDeserializer constructor nullable 2021-11-19 01:16:30 +03:00
Roman Artemev 918ed1f077 [KLIB] Refactored IrSymbolDeserializer.kt
- extract function which creates a new symbols in linker
2021-11-19 01:16:29 +03:00
Roman Artemev df9d039c03 [KLIB] Don't use module descriptor to compute library in error reporter 2021-11-19 01:16:28 +03:00
Anton Bannykh 75368a2c06 [JS IR] tie together IC code in tests and K2JsIrCompiler 2021-11-19 00:39:37 +03:00
Anton Bannykh ff02ea5840 [JS IR] advance stage in regular mode when needed 2021-11-19 00:39:32 +03:00
Anton Bannykh 7d7dd3fe97 [JS IR] better tags + bare parameter names 2021-11-19 00:39:29 +03:00
Anton Bannykh f9e62f8ffa [JS IR] expose currentStage via the stageController
Otherwise the signatures for the declarations, created in lowerings,
will be miscalculated.
2021-11-19 00:39:24 +03:00
Anton Bannykh f413d7fd75 [JS IR] make using the original parameter names possible 2021-11-19 00:39:18 +03:00
Anton Bannykh e342ade00a [JS IR] fix inline graph tracker for file-local signatures 2021-11-19 00:39:15 +03:00
Anton Bannykh 56e1c4e38f [JS IR] IrFactory which saves signatures for declarations created in BE 2021-11-19 00:39:12 +03:00
Anton Bannykh e972ad9855 [JS IR] improved missing body reporting for inliner 2021-11-19 00:39:03 +03:00
Anton Bannykh 953089a4b9 [JS IR] suport SuspendN.invoke functions 2021-11-19 00:38:51 +03:00
Anton Bannykh 1ae042edc3 [JS IR] make old Ir2Js pass all tests 2021-11-19 00:38:46 +03:00
Anton Bannykh 3c859138d1 [JS IR] support source maps in new Ir2Js 2021-11-19 00:38:33 +03:00
Anton Bannykh a7d8c34927 [JS IR] support generateScriptModule 2021-11-19 00:38:30 +03:00
Anton Bannykh 0506d422a3 [JS IR] support per-module in the new Ir2JS 2021-11-19 00:38:27 +03:00
Anton Bannykh 1f55dc73d2 [JS IR] don't inline property accessors across files 2021-11-19 00:38:24 +03:00
Anton Bannykh 03b9caa439 [JS IR] export external declarations 2021-11-19 00:38:15 +03:00
Anton Bannykh ee8351b9c9 [JS IR] remove unused property 2021-11-19 00:38:11 +03:00
Anton Bannykh 0b0ed5241c [JS IR] remove unused method 2021-11-19 00:38:09 +03:00
Anton Bannykh 3617c1388c [JS IR] improve the hacky fix 2021-11-19 00:38:06 +03:00