Commit Graph

45764 Commits

Author SHA1 Message Date
Ivan Kylchik 350ee4be1d [Native] Replace consequence line and column calls with a single one 2023-10-13 08:50:47 +00:00
Ivan Kylchik 1be98b8f08 [IR] Extract some common code into AbstractIrFileEntry 2023-10-13 08:50:47 +00:00
Ivan Kylchik 6039d39546 [IR] Add new method IrFileEntry.getLineAndColumnNumbers
Calling this method instead of sequence of `getLineNumber` and
`getLineNumber` is faster because we eliminate one exess
`getLineNumber` call.
2023-10-13 08:50:47 +00:00
Ivan Kylchik a30d0aeeb0 [JVM] Replace AbstractInsnNode.getType with new util function
This change speeds up backend by approximately 0.96%.
2023-10-13 08:50:47 +00:00
Ivan Kylchik 67460962c3 [JVM] Use HashSet instead of SmartSet in MaxStackFrameSizeAndLocalsCalculator
This change speeds up backend by approximately 0.25%.
2023-10-13 08:50:47 +00:00
Ivan Kylchik 05b364a5f1 [JVM] Simplify equals method in StrictBasicValue 2023-10-13 08:50:47 +00:00
Ivan Kylchik 84a47a2298 [IR] Drop SLRUCache usages from NaiveSourceBasedFileEntryImpl
Access to `SLRUCache` is a bottleneck when we call `getLineNumber`.
We are very rarely going to access the same offset. This change
speeds up backend by approximately 0.43%.
2023-10-13 08:50:47 +00:00
Ivan Kylchik 4a07454d8d [IR] Drop excess resolveFakeOverride from EVALUATION_MODE
This change doesn't affect semantic and speeds up
backend by approximately 0.06%.
2023-10-13 08:50:47 +00:00
Ivan Kylchik 3335db0aa8 [IR] Simplify unsigned check in EVALUATION_MODE
This way we are not creating useless intermediate lists. This change
speeds up backend by approximately 0.38%.
2023-10-13 08:50:47 +00:00
Ivan Kylchik f36f37bf47 [IR] Drop isNan fun from IrInterpreterCommonChecker
It is not used anymore after 858f432807
2023-10-13 08:50:47 +00:00
Ivan Kylchik 9135e9d13d [JVM_IR] Drop reversed call from writeLocalVariablesInTable
It is better to use simple for loop. This change speeds up
backend by approximately 0.07%.
2023-10-13 08:50:47 +00:00
Pavel Kunyavskiy 156c341eeb [K/N] Implement objc overridablity condition for IR
^KT-61511
2023-10-13 08:15:01 +00:00
Pavel Kunyavskiy 202f30f910 [K/N] Extract ObjcOverridabilityCondition to separate file
^Kt-61511
2023-10-13 08:15:00 +00:00
Ilya Goncharov 1fd9706f47 [K2] KT-60080 Fix packageFqn for property accessor symbol
^KT-60080 fixed
2023-10-12 17:44:47 +00:00
Ilya Kirillov 4d38cc4548 [Analysis API Standalone] fix exception on invalid KLib from symbol provider
^KT-62244 fixed
2023-10-12 15:15:05 +00:00
Mikhail Glukhikh d005d1cd68 Add accidentally forgotten IrSourceRangesDumpHandler to IR text tests 2023-10-12 15:06:47 +00:00
Igor Chevdar a8c6074c45 [IR] Use InlineFunctionResolver for inlinable function references
#KT-62313 Fixed
2023-10-12 13:34:13 +00:00
Igor Chevdar c6470a684d [box-tests] Added a reproducer for #KT-62313 2023-10-12 13:34:13 +00:00
Svyatoslav Kuzmich d9cb41d242 Refactor: remove empty overrides in K2 checkers 2023-10-12 13:26:58 +00:00
Svyatoslav Kuzmich c73e1f678e Fix copyright year in Wasm K2 checkers 2023-10-12 13:26:58 +00:00
Svyatoslav Kuzmich 881997585a [Wasm] Add K2 checkers.web.common module (KT-56849)
This module is created to share JS and Wasm checker logic

Extract isEffectivelyExternal util fun from K/JS in order to
 reuse it in Wasm checkers
2023-10-12 13:26:58 +00:00
Svyatoslav Kuzmich a10042f909 [Wasm] Add K2 checkers.wasm module (KT-56849)
Add first K2 checker ExternalInheritanceChecker to test the infra
2023-10-12 13:26:58 +00:00
Svyatoslav Kuzmich 0da9cf8159 [Wasm] Add K2 diagnostic tests (KT-56849) 2023-10-12 13:26:58 +00:00
Ivan Kylchik 96a2da4906 [JVM] Split mergeControlFlowEdge into full and fast versions
This is needed because for `FastStackAnalyzer` we actually
will use only `fast` version, that can potentially improve overall
performance.
2023-10-12 13:04:43 +00:00
Ivan Kylchik 07c7792693 [JVM] Drop toArray call where iterator can be used 2023-10-12 13:04:43 +00:00
Ivan Kylchik 2387fe302c [JVM] Use reference comparison for objects defined in StrictBasicValue 2023-10-12 13:04:43 +00:00
Ivan Kylchik c1c04376cf [JVM] Replace open functions in FastAnalyzer with constructor args 2023-10-12 13:04:43 +00:00
Ivan Kylchik 99655cfa15 [JVM] Make newFrame constructor's parameter for FastAnalyzer 2023-10-12 13:04:43 +00:00
Ivan Kylchik cfe38470af [JVM] Use composition instead of inheritance in FixStackAnalyzer
This way we will be able to pass `createFrame` argument
directly to `FastAnalyzer`.
2023-10-12 13:04:43 +00:00
Ivan Kylchik 2327800a95 [JVM] Make BoxingInterpreter an abstract class instead of open
This way, it is a little bit easier to fit the semantics of this
class in the head.
2023-10-12 13:04:43 +00:00
Ivan Kylchik 38dd75c6c8 [JVM] Drop boxingInterpreter constructor parameter from BoxingFrame 2023-10-12 13:04:43 +00:00
Ivan Kylchik 6d57cbe23c [JVM] Reorganize positions of methods in FastAnalyzer 2023-10-12 13:04:43 +00:00
Ivan Kylchik 895afc736d [JVM] Drop I : Interpreter<V> type parameter from FastAnalyzer 2023-10-12 13:04:43 +00:00
Ivan Kylchik 87c46db3d5 [JVM] Drop getFrame and setFrame methods from FastAnalyzer 2023-10-12 13:04:43 +00:00
Ivan Kylchik f7f253d2bf [JVM] Move isTcbStart computation in FastAnalyzer 2023-10-12 13:04:43 +00:00
Ivan Kylchik 53d9b3c54f [JVM] Combine all mergeControlFlowEdge methods
This is just a refactoring commit. All fast analyzers are doing the
same thing in `mergeControlFlowEdge`, so we extract it in common
`FastAnalyzer`. The only exception is `FastStackAnalyzer`.
There was no `isMergeNode` check, but this is an optimization
that allows us to reuse a frame and not copy it.
2023-10-12 13:04:42 +00:00
Ivan Kylchik 68e4a7a318 [JVM] Combine all analyzeInstruction methods 2023-10-12 13:04:42 +00:00
Ivan Kylchik 58473b94a7 [JVM] Reuse visitNopInsn method in all Fast...Analyzer classes 2023-10-12 13:04:42 +00:00
Ivan Kylchik ed95ebc585 [JVM] Move visit...Insn methods in FastAnalyzer
They are actually the same.
2023-10-12 13:04:42 +00:00
Ivan Kylchik 7845e6bb0a [JVM] Drop visitControlFlowExceptionEdge method from FastStackAnalyzer
There is no class that overrides this method.

Also replaced `newValue` call with `newExceptionValue`. Under the hood,
`newExceptionValue` still calls `newValue` if the interpreter doesn't
redefine it. And it kind of makes sense to call `newExceptionValue`
here because we are handling try-catch block.
2023-10-12 13:04:42 +00:00
Ivan Kylchik e9019e9fb3 [JVM] Drop StoreLoadInterpreter class 2023-10-12 13:04:42 +00:00
Ivan Kylchik 364faa9506 [JVM] Drop StoreLoadValue interface 2023-10-12 13:04:42 +00:00
Roman Efremov a05b37c652 [K2] Support reporting of SUPERTYPE_INITIALIZED_IN_EXPECTED_CLASS
...on regular classes and enum entries.

^KT-59979 Fixed
2023-10-12 13:01:40 +00:00
Roman Efremov 32a87836c2 [Test] Improve test of SUPERTYPE_INITIALIZED_IN_EXPECTED_CLASS diagnostic
Add case where explicit primary constructor is present in expect,
so that SUPERTYPE_INITIALIZED_WITHOUT_PRIMARY_CONSTRUCTOR is not
reported.

^KT-59979
2023-10-12 13:01:40 +00:00
Simon Ogorodnik 13b6653899 [FIR] Add todo to remove violation of lookup tag contract 2023-10-12 12:27:54 +00:00
Simon Ogorodnik 024e94a479 [K2] Document KMP implementation in the K2 Compiler
Add comprehensive documentation explaining the implementation and
functions of the Kotlin multiplatform (KMP) support in the K2 Compiler.
2023-10-12 12:27:54 +00:00
Sergej Jaskiewicz 04c0cc5a5c [FIR generator] In properties always print get() ... on new line
This is to unify the code formatting with IR classes.
2023-10-12 11:45:55 +00:00
Sergej Jaskiewicz 4507615c69 [FIR generator] Print accept method's body on new line
This is to unify the code formatting with IR classes
2023-10-12 11:45:55 +00:00
Sergej Jaskiewicz 04ac4b71a3 [FIR generator] Replace AbstractElement with ElemenOrRef
In the FIR generator, the `AbstractElement` class was used to
represent either an element type without type arguments applied
(using the `Element` subclass), or an element type with applied type
arguments (using the `ElementWithArguments` subclass).

Instead, it is more logical to use the `Element` class to always
represent a non-parameterized element type, and for a parameterized
element type use the `ElementRef` class, just like we do
in the IR generator.
2023-10-12 11:36:20 +00:00
Ilya Kirillov 86c8f3cc35 Remove obsolete @OptIn(ExperimentalUnsignedTypes::class) annotations
^KT-62510
2023-10-12 10:41:00 +00:00