Compare commits

...

171 Commits

Author SHA1 Message Date
Roman Artemev
2c3d8feb26 [KLIB IC] Fix dirty declaration detector
- make kjs-stdlib be compiled correctly in IC mode
2020-06-22 11:30:40 +03:00
Roman Artemev
cc818025df [KLIB IC] Add test about incremental kotlin-js-stdlib-klib recompliation 2020-06-22 11:30:40 +03:00
Dmitry Petrov
a493b21c7c JVM_IR: Deprecation cycle for companion object instance visibility 2020-06-19 20:41:54 +03:00
Vladimir Ilmov
230f2f5ce0 (CoroutineDebugger) fix for debugger agent for 1.3.6 version and up 2020-06-19 18:58:46 +02:00
Yaroslav Chernyshev
c638043aee [Gradle, CocoaPods] Improved CocoaPods Integration features with tests 2020-06-19 18:36:46 +03:00
Ilya Gorbunov
130987fa1e Provide flatMapIndexed operation
- similar to flatMap, but transform function takes index and element

#KT-36894
2020-06-19 17:55:15 +03:00
Abduqodiri Qurbonzoda
db93462bcf Initial template for flatMapIndexed operation
#KT-36894
2020-06-19 17:54:47 +03:00
Sergey Igushkin
d9fea52344 Fix compilation of DukatCompilationResolverPlugin after rebase 2020-06-19 17:48:22 +03:00
Sergey Igushkin
f7b660b573 (minor) Fixes for review KT-MR-1290 2020-06-19 17:31:51 +03:00
Sergey Igushkin
10cae9bc5d Fixes for task configuration avoidance in Gradle Kotlin/JS support 2020-06-19 17:31:45 +03:00
Sergey Igushkin
0b7d8c51cb Move kotlinOptions out of the tasks 2020-06-19 17:30:12 +03:00
Sergey Igushkin
19ac036ec5 Rework ScriptingGradleSubplugin for the new subplugins API 2020-06-19 17:30:11 +03:00
Sergey Igushkin
cb5aa64a95 Rework AndroidSubplugin for the new subplugins API 2020-06-19 17:30:10 +03:00
Sergey Igushkin
48153c53ca Rework SamWithReceiverSubplugin for the new subplugins API 2020-06-19 17:30:10 +03:00
Sergey Igushkin
120f77416b (minor) Suppress a warning about property initialized with ctor param 2020-06-19 17:30:09 +03:00
Sergey Igushkin
66a59df7de Rework ExampleSubplugin for the new subplugins API 2020-06-19 17:30:09 +03:00
Sergey Igushkin
a2e4b52747 Rework SerializationSubplugin for the new subplugins API 2020-06-19 17:30:08 +03:00
Sergey Igushkin
98fc4ab2e1 Rework NoArgSubplugin for the new subplugins API 2020-06-19 17:30:07 +03:00
Sergey Igushkin
f2bc391bdd Rework AllOpenSubplugin for the new subplugins API 2020-06-19 17:30:07 +03:00
Sergey Igushkin
e8a303650c Rework Gradle subplugins application in Kotlin/Native 2020-06-19 17:30:06 +03:00
Sergey Igushkin
06a3376368 Refactor the Kotlin Android plugin to make it compliant with TCA
Also simplify some of the APIs and move some others which are only used
by kapt to the kapt's codebase.
2020-06-19 17:30:06 +03:00
Sergey Igushkin
4dbc6803ba Refactor the kapt Gradle plugin to use the new plugins API and TCA 2020-06-19 17:30:05 +03:00
Sergey Igushkin
96ed30a449 Introduce new API for Kotlin compiler support Gradle plugins
The old API was too specific for the Kotlin internal use cases and
leaked some abstractions due to the missing target-compilation project
model. One of such leaking abstractions was the Gradle tasks being
exposed to the subplugin, which required the tasks to instantiate
in order for the subplugin to apply. This violated task configuration
avoidance, so the old API could never work in compliance with TCA.

Introduce the new KotlinCompilerPluginSupportPlugin API that uses the
compilations instead of the tasks and is TCA-compliant.
2020-06-19 17:30:05 +03:00
Sergey Igushkin
0b2d96c1ef Refactor Kotlin classes registration for java-library plugin 2020-06-19 17:30:04 +03:00
Sergey Igushkin
58dd0fa3d2 Use TCA-compliant Gradle APIs in the JS part of the Kotlin Gradle plugin 2020-06-19 17:29:59 +03:00
Sergey Igushkin
58e9b3ae0e Use TCA-compliant Gradle APIs in the Kotlin Gradle plugin 2020-06-19 17:28:40 +03:00
Sergey Igushkin
84287d77ca Add Java tasks to relevant compilation APIs 2020-06-19 17:28:39 +03:00
Sergey Igushkin
1749cb9129 (minor) Initialize compilations with the precise target type 2020-06-19 17:28:39 +03:00
Sergey Igushkin
f4e4baa253 Add TaskProvider property for Kotlin compile tasks in compilations 2020-06-19 17:28:37 +03:00
Pavel Kirpichenkov
1ebb116056 Revert "Invalidate library caches on OOCBM with enabled resolution anchors"
This reverts commit 91b371789e.
^KT-39734 Open
2020-06-19 17:18:45 +03:00
Denis Zharkov
f1955c84aa FIR: Remove ignoreFrontendIR from GenerateInRangeExpressionTestData
It's unnecessary anymore since all tests are fixed
2020-06-19 17:15:56 +03:00
Sergey Rostov
6e9efefd2a gradle scripts: fix isFirstLoadActual and notification typos 2020-06-19 17:04:01 +03:00
Sergey Rostov
9f4569e5a1 gradle scripts: custom notification wording gradle with default scripting support (gradle older then 6.0) 2020-06-19 16:37:59 +03:00
Sergey Rostov
37fbc75008 gradle scripts: "link project" action implementation 2020-06-19 16:37:21 +03:00
Sergey Rostov
d6fc830c24 gradle scripts: temporary disable irrelevant actions when script configuration was not received during import 2020-06-19 16:37:21 +03:00
Dmitriy Novozhilov
a7675c16d5 [FIR] Fix problems with renaming invocationKind and field in FirAnonymousFunction 2020-06-19 16:28:07 +03:00
Mikhail Zarechenskiy
9c8e979308 Fix compatibility resolve for references with multiple outer candidates
#KT-39533 Fixed
2020-06-19 16:21:24 +03:00
Mikhail Bogdanov
58183b774d Fix test data 2020-06-19 15:07:36 +02:00
Alexey Trilis
99d844dcfb Deprecate kotlin.browser and kotlin.dom packages and provide
replacements in packages kotlinx.dom and kotlinx.browser

KT-39330 Fixed
2020-06-19 16:01:40 +03:00
Ilya Chernikov
16100843b2 Add classpaths from all plugin classloaders to the console scripts 2020-06-19 14:56:00 +02:00
Ilya Chernikov
b5ecab31f5 Load script configuration under read action - avoid possible exception 2020-06-19 14:56:00 +02:00
Dmitriy Novozhilov
bd8eaad885 [FIR-TEST] Update cfg dumps in some tests
One of previous commit changed order for those graphs, but i didn't
  find which one
2020-06-19 15:53:11 +03:00
Dmitriy Novozhilov
d01817ce14 Rename InvocationKind to EventOccurrencesRange 2020-06-19 15:53:11 +03:00
Dmitriy Novozhilov
1dfccf1416 [FIR] Rename edge kinds of control flow graph 2020-06-19 15:53:10 +03:00
Dmitriy Novozhilov
f0cc3a32d9 [FIR-TEST] Update testdata due to KT-39711 2020-06-19 15:53:10 +03:00
Dmitriy Novozhilov
64c9a83862 [FIR-TEST] Update testdata due to KT-39709 2020-06-19 15:53:10 +03:00
Dmitriy Novozhilov
a317c8a803 [FIR-TEST] Update testdata due to unresolved KT-36056 2020-06-19 15:53:09 +03:00
Dmitriy Novozhilov
26458875d5 [FIR] Add checker for uninitialized properties 2020-06-19 15:53:09 +03:00
Dmitriy Novozhilov
25621d699b Add methods for combine InvocationKind's
There is two methods added -- `or` and `and`

`or` is used by CFA for combining two kinds that came from different
edges of control flow graph

`and` is analog of `+` operator for invocation kinds
2020-06-19 15:53:08 +03:00
Dmitriy Novozhilov
4078b4b6f9 [FIR] Prepare ControlFlowAnalysisDiagnosticComponent 2020-06-19 15:53:07 +03:00
Dmitriy Novozhilov
c9bc5884dd [FIR] Add more utils for traversing control flow graph 2020-06-19 15:53:07 +03:00
Dmitriy Novozhilov
faa0f07d09 [FIR] Add utility flags to EdgeKind 2020-06-19 15:53:07 +03:00
Dmitriy Novozhilov
5ecbf8b7cd [FIR] Add CFGNodeWithCfgOwner to detect subgraphs in CFA 2020-06-19 15:53:06 +03:00
Dmitriy Novozhilov
05ee436db0 [FIR] Introduce FirControlFlowGraphOwner node 2020-06-19 15:53:06 +03:00
Dmitriy Novozhilov
8a81a09fd0 [FIR] Assume that when without branches is not exhaustive. KT-39621 2020-06-19 15:53:05 +03:00
Dmitriy Novozhilov
4e2e05e689 [FIR-TEST] Check control flow graph in old frontend diagnostic tests 2020-06-19 15:53:05 +03:00
Dmitriy Novozhilov
12ed8c3bb4 [FIR-TEST] Update CFG dumps according to new nodes order 2020-06-19 15:53:04 +03:00
Dmitriy Novozhilov
4e6542a646 [FIR] Add Stub kind for CFG
Edges of stub graphs shouldn't be completed
2020-06-19 15:53:04 +03:00
Dmitriy Novozhilov
1a0df97961 [FIR] Pop and complete graph only after adding last edge to it 2020-06-19 15:53:03 +03:00
Dmitriy Novozhilov
3765c5119f [FIR] Cache nodes in sorted order in CFG 2020-06-19 15:53:02 +03:00
Dmitriy Novozhilov
b5cceb8995 [FIR-TEST] Add validation of control flow graph nodes order 2020-06-19 15:53:02 +03:00
Dmitriy Novozhilov
2f8e95dace [FIR-TEST] Add validation for completed graph in diagnostic tests 2020-06-19 15:53:01 +03:00
Dmitriy Novozhilov
9f55d4f3cd [FIR-TEST] Mute test failing due to KT-39614 2020-06-19 15:53:01 +03:00
Dmitriy Novozhilov
87859b0faa [FIR] Introduce new algorithm for building CFG for declarations 2020-06-19 15:53:00 +03:00
Dmitriy Novozhilov
950bbfe3a5 [FIR] Add kind for back edges in CFG 2020-06-19 15:53:00 +03:00
Dmitriy Novozhilov
34be9e3569 [FIR] Add controlFlowGraph references to value parameters 2020-06-19 15:52:59 +03:00
Dmitriy Novozhilov
65fae3bb0c [FIR] Fix problem with local classes in anonymous objects 2020-06-19 15:52:58 +03:00
Dmitriy Novozhilov
5b64c0cfe2 [FIR] Add different states for CFG and some assertions for graph modification 2020-06-19 15:52:57 +03:00
Dmitriy Novozhilov
1261f62afb [FIR] Extract CFGNode and it's inheritors to separate file 2020-06-19 15:52:56 +03:00
Dmitriy Novozhilov
3a4f53682f [FIR] Don't convert non-local functions without name as FirAnonymousFunction 2020-06-19 15:52:56 +03:00
Natalia Selezneva
44f6a5adcd Filter only valid roots in KotlinScriptDependenciesClassFinder
ClassFinder should return only valid roots,
but in allScriptsDependenciesClassFiles may contain old roots
because they are persistently saved in the storage.
This may cause exception after IDE restart
2020-06-19 15:43:07 +03:00
Natalia Selezneva
d119298232 Add registry key to hide new Load Script Configurations action 2020-06-19 15:43:07 +03:00
Natalia Selezneva
b43014a097 Do not start gradle import if it is already in progress 2020-06-19 15:43:07 +03:00
Natalia Selezneva
66e23c9767 Floating notification shouldn't be shown during import
It depends on up to date check that is correct only after all caches are updated after import
2020-06-19 15:43:06 +03:00
Dmitriy Dolovov
59183a8142 [Commonizer] Replace j.u.HashMap by g.t.THashMap to reduce memory usage 2020-06-19 19:36:06 +07:00
Dmitriy Dolovov
70ea53315d [Commonizer] Intern duplicated CirContainingClassDetails instances 2020-06-19 19:18:13 +07:00
Dmitriy Dolovov
63d549dfa1 [Commonizer] Intern duplicated CirFunctionModifiers instances 2020-06-19 19:18:07 +07:00
Dmitriy Dolovov
68e1acd2cb [Commonizer] More detailed progress logging 2020-06-19 19:18:01 +07:00
Dmitriy Dolovov
6410aed1b4 Minor. Replace computeIfAbsent() by getOrPut() 2020-06-19 19:17:55 +07:00
Dmitriy Dolovov
6393667dda [Commonizer] Rework preparation of CIR cache in TypeCommonizerTest 2020-06-19 19:17:49 +07:00
Dmitriy Dolovov
5cad8a793c [Commonizer] Rework CommonizedGroup API to make it more usable 2020-06-19 19:17:43 +07:00
Dmitriy Dolovov
63575582c4 [Commonizer] Reduce memory consumption during approximation phase
^KT-39320
2020-06-19 19:17:33 +07:00
Ilya Chernikov
d5ffc7416d Clean-up and improve sam-with-receiver test with scripts 2020-06-19 14:08:19 +02:00
Ilya Chernikov
0ade8140f7 Add serialization plugin test with main-kts 2020-06-19 14:08:19 +02:00
Ilya Chernikov
dbb47cf48e Implement non-transitive dependencies resolving in main-kts 2020-06-19 14:08:19 +02:00
Ilya Chernikov
cd1bf563cd Add error reporting on the options parsing errors in scripting
also report standard parsing warnings
also fix language version test, since it is not possible anymore
  to use version 1.0
2020-06-19 13:20:58 +02:00
Mathias Quintero
f0bc52222d Fix annotation construction with array literals
Turns out the issue happens to be that ArrayValue uses a list of values which needs to be translated to an array of the percise type before it is used by callBy

This also addresses handling of arguments after a vararg in an annotation
2020-06-19 13:20:57 +02:00
Efeturi Money
8cb4f59114 Explicitly handle array annotation args in scripting pre-processing
#KT-35411 fixed
2020-06-19 13:20:57 +02:00
Ilya Muradyan
743abea690 Don't create default importing scopes for REPL snippets
Default scopes should be created only once, for the first snippet.
All following snippets should not create new default importing scopes.
#KT-35651 fixed
2020-06-19 13:03:25 +02:00
Ilya Muradyan
c3cbfe34c4 Allow not to create default importing scopes 2020-06-19 13:03:24 +02:00
Ilya Muradyan
53b31a20ca Refactor REPL IDE services testing configuration and add new tests 2020-06-19 13:03:24 +02:00
Ilya Muradyan
94de114894 Support selective filtering of implicits for extensions resolution in REPL 2020-06-19 13:03:23 +02:00
Ilya Muradyan
017f640f26 Allow skipping extensions resolution for implicit receivers 2020-06-19 13:03:23 +02:00
Mikhail Bogdanov
e93bcc55ae Revert "Deprecate DefaultImpl methods in compatibility mode"
This reverts commit 6c9c2a28
2020-06-19 12:58:46 +02:00
Mikhail Bogdanov
8bc4407be0 Fix compilation 2020-06-19 12:54:19 +02:00
Mikhail Bogdanov
6c9c2a287d Deprecate DefaultImpl methods in compatibility mode 2020-06-19 12:23:05 +02:00
Mikhail Bogdanov
9c0b96af71 Report error on missed specialization in compatibility mode
#KT-39603 Fixed
2020-06-19 11:57:36 +02:00
Mikhail Bogdanov
a150e7b6e5 Don't forget about extension parameter in methodSignatureMapping.kt 2020-06-19 11:57:36 +02:00
Mikhail Bogdanov
929bb0e8d1 Move common logic from CodegenTestCase to KotlinBaseTest 2020-06-19 11:57:36 +02:00
Mikhail Bogdanov
9d48ecfac3 Make proper check for defaults on delegation to DefaultImpls 2020-06-19 11:57:36 +02:00
Mikhail Bogdanov
b8f0ad2111 Generate nullability annotations on this receiver in DefaultImpls. Don't generate nullability annotations in private methods
#KT-36969 Fixed
2020-06-19 11:57:35 +02:00
Mikhail Bogdanov
5bdf3d5757 Don't generate compatibility stubs for @JvmDefaultWithoutCompatibility 2020-06-19 11:57:35 +02:00
Mikhail Bogdanov
477cca3c99 Add JvmDefaultWithoutCompatibility annotation 2020-06-19 11:57:35 +02:00
Dmitriy Novozhilov
a98ad79d86 [FIR-TEST] Add option to run modularized tests with checkers 2020-06-19 12:40:02 +03:00
Dmitriy Novozhilov
7a8908a75b [FIR-TEST] Change main module of [JPS] Fast FIR tests task
It's needed to correctly run FIR spec tests
2020-06-19 12:40:01 +03:00
Roman Artemev
a0cccdf75c [JS IR] Make backend work with new shared boxes 2020-06-19 12:23:15 +03:00
Roman Artemev
596c3d1af8 [JS IR] Implement shared box intrinsics translator 2020-06-19 12:23:15 +03:00
Roman Artemev
4c878c27a9 [JS IR] Introduce intrinsics to create shared boxes 2020-06-19 12:23:15 +03:00
Dmitry Savvinov
5b48845dfa Check for native-shared source-sets properly during facet import
Otherwise they are detected as common source-sets, thus getting
K2MetadataCompilerArguments (instead of FakeK2NativeCompilerArguments),
and the 'applyCompilerArgumentsToFacets' will fail due to check on
javaClass equality

^KT-39657 Fixed
2020-06-19 12:15:50 +03:00
Ilya Goncharov
ce553f1211 [Gradle, JS] Add webpackConfig for karma
#KT-39654 fixed
2020-06-19 11:38:51 +03:00
Ilya Goncharov
48a4e08d60 [Gradle, JS] Disable css support by default
#KT-39654 fixed
2020-06-19 11:38:31 +03:00
Denis Zharkov
efee0dae94 FIR: Simplify JvmBinaryAnnotationDeserializer
Currently, it's anyway created one per class
2020-06-19 10:21:09 +03:00
Denis Zharkov
0bc2642634 FIR: Add clarification to the workaround for KT-39659 2020-06-19 10:21:09 +03:00
Denis Zharkov
429b2a9705 FIR: Optimize deserialized annotations loading 2020-06-19 10:21:09 +03:00
Denis Zharkov
260e2d0dc3 FIR: Add dependency for :core:descriptors.runtime to modularized tests
Otherwise NoClassDefFoundError happens on JPS
2020-06-19 10:21:09 +03:00
Jinseong Jeon
6a28558d43 FIR deserializer: rename a callable kind that represents all "others" 2020-06-19 10:21:09 +03:00
Jinseong Jeon
12181e55c0 FIR deserializer: signature-aware annotation loading for constructors 2020-06-19 10:21:09 +03:00
Jinseong Jeon
955c7a1e5b FIR2IR: handle deserialized class reference inside GetClassCall 2020-06-19 10:21:09 +03:00
Jinseong Jeon
781bfa20e8 FIR deserializer: fix conversion of class literal inside annotation array value. 2020-06-19 10:21:09 +03:00
Jinseong Jeon
b076bec07f FIR deserializer: signature-aware annotation loading for functions 2020-06-19 10:21:09 +03:00
Ilya Kirillov
11a680d7d8 Wizard: group project templates into the categories on the first step
#KT-39700 fixed
2020-06-19 09:29:41 +03:00
Ilya Kirillov
bfedeed2c1 Wizard: use new icons in UI 2020-06-19 09:29:40 +03:00
Ilya Kirillov
7df0dd5032 Wizard: fix ui constants 2020-06-19 09:29:39 +03:00
Abduqodiri Qurbonzoda
6e5b94f695 Update js public api dump 2020-06-19 08:39:48 +03:00
Abduqodiri Qurbonzoda
c923b2e139 Deprecate contains, indexOf, lastIndexOf functions of Float/DoubleArray #KT-28753 2020-06-19 08:39:47 +03:00
Abduqodiri Qurbonzoda
97c688057d Compare floating point values asList elements in total order #KT-28753 2020-06-19 08:39:47 +03:00
Toshiaki Kameyama
ba5e643cb2 Redundant qualifier name: fix false positive with same name variable
#KT-39200 Fixed
2020-06-19 12:08:36 +07:00
Abduqodiri Qurbonzoda
bf26d87ee9 Update js public api dump 2020-06-19 04:53:54 +03:00
Abduqodiri Qurbonzoda
16b62b8e65 Introduce minWithOrNull and maxWithOrNull extension functions #KT-38854 2020-06-19 04:53:53 +03:00
Abduqodiri Qurbonzoda
194791a168 Introduce minByOrNull and maxByOrNull extension functions #KT-38854 2020-06-19 04:53:51 +03:00
Abduqodiri Qurbonzoda
846a7823ad Introduce minOrNull and maxOrNull extension functions #KT-39064 2020-06-19 04:53:49 +03:00
simon.ogorodnik
a8cd8ad8f8 [FIR] Fix testData after changing anonymous object name 2020-06-19 01:52:02 +03:00
Vladimir Ilmov
b100fd526f (CoroutineDebugger)(Test) local variable removed from generated code 2020-06-19 00:32:19 +02:00
Vyacheslav Gerasimov
5724c47bcf Build: Fix uri parsing on windows in publication repo configuration 2020-06-19 00:35:55 +03:00
Ilmir Usmanov
542f1b8709 Minor. Update tests 2020-06-18 17:53:47 +02:00
Ilya Goncharov
932cf21776 [Gradle, JS] Allow to change destDir only for separate task and name it destinationDir
#KT-38331 fixed
2020-06-18 18:51:30 +03:00
Ilya Goncharov
7386408e94 [Gradle, JS] AbstractDukatTask -> DukatTask
#KT-38331 fixed
2020-06-18 18:51:08 +03:00
Ilya Goncharov
49dd839131 [Gradle, JS] DukatTask -> IntegratedDukatTask
#KT-38331 fixed
2020-06-18 18:50:53 +03:00
Ilya Goncharov
46be588f27 [Gradle, JS] Add task for separate usage of Dukat with project npm dependencies
#KT-38331 fixed
2020-06-18 18:50:36 +03:00
Ilya Gorbunov
606fad64ad Leave StringBuilder.append/insert with non-nullable String parameter
Leave these methods as hidden in order to preserve binary compatibility.

#KT-39504
2020-06-18 18:45:43 +03:00
Pavel Kirpichenkov
91b371789e Invalidate library caches on OOCBM with enabled resolution anchors
Without forced clean stale references to declarations from source-dependent libraries
can be accessed after invalidation, i.e. resolved references can point to incorrect PSI.
TBD: more granular invalidation.

KT-24309
2020-06-18 18:27:28 +03:00
Alexander Udalov
204871a7ab Update bootstrap to 1.4.20-dev-772 2020-06-18 16:18:59 +02:00
Ilya Matveev
754a74ac4a [Gradle, native] Allow parallel in-process compiler execution
This commit allows parallel in-process execution of the K/N compiler
that was prohibited by 254a978a06.

Issue #KT-38991 fixed
2020-06-18 14:18:00 +00:00
Ilya Matveev
03bb9138ad [klib] Create ZipFileSystem from a Path instead of an URI
Calling FileSystems.newFileSystem(URI, ...) throws a
FileSystemAlreadyExistsException if a ZipFileSystem for this
URI is already created. We still can use a single instance
of ZipFileSystem by calling FileSystems.getFileSystem. In
this case we use reference counting to determine when this
instance can be safely closed.

But we cannot count references if the same ZipFileSystem is used
from different class loaders. This patch fixes this issue by
creating a file system from Path instead of an URI. Contract of
FileSystemProvider.newFileSystem(Path, ...) doesn't imply throwing
FileSystemAlreadyExistsException.

Issue #KT-37443 fixed
2020-06-18 14:17:59 +00:00
Natalia Selezneva
bf1ad44af9 Run partial import only for specified build root 2020-06-18 17:14:47 +03:00
Natalia Selezneva
5fe47ffbec Workaround for bug in GradleInstallationManager.resolveGradleVersion()
Wrong gradle version when wrapper is used
fixed in 201
2020-06-18 17:14:47 +03:00
Natalia Selezneva
7a47994498 Get gradle version and gradle home from corresponding BuildModel after import
GradleProjectSettings that were used, are updated after KotlinDslListener is called,
so it isn't correct to check if kotlinDslModels are supported using it.
Also GradleScriptDefinitionsContributor should use gradle home from BuildModel, not from settings for the same reasons.

^KT-39104 Fixed
2020-06-18 17:14:46 +03:00
Victor Petukhov
ece61915de NI: clean calls in coroutine inference before the second analysis of += only for right side
^KT-39660 Fixed
2020-06-18 17:09:59 +03:00
Vyacheslav Gerasimov
1f66049a1e Build: Fix plugin marker publication to a remote repository 2020-06-18 16:57:39 +03:00
Igor Chevdar
2fd657b768 [box-tests] Fixed test for K/N 2020-06-18 18:44:11 +05:00
Yan Zhulanow
8b5f2f9474 Fix duplicate stepping filter adding on plugin start-up (KT-38628)
Review KT-CR-1301.
2020-06-18 22:32:34 +09:00
Yan Zhulanow
235b9b9269 Add kotlin-stdlib-js and kotlin-test-js to IDE artifact dependencies 2020-06-18 22:32:34 +09:00
Pavel Kirpichenkov
470fef94fb Use bound resolution facade in DeprecationResolver usages
Resolution facade should be used consistently with direct usages of frontend components.
Otherwise they can start processing descriptors from foreign resolvers which leads to memory leaks.

Plain resolution API with provided facade is not suitable as-is for compiled declarations in KotlinIndicesHelper though.
Resolution facade for module sources contained in helper can't handle decompiled
sources from PSI indices (leads to "ModuleInfo not contained in resolver" errors).
That's why "hacked" resolve via import references should be used there.

#KT-39642 Fixed
2020-06-18 14:24:17 +03:00
Jinseong Jeon
82ef6bf96c FIR2IR: honor user-contributed members in data class if any 2020-06-18 14:23:52 +03:00
Mikhail Glukhikh
b839a91050 Mute 3 FIR BB tests due to LowPriorityInOverloadResolution in reflect
Recently second javaType function appeared in reflect and
now FIR can't correctly resolve the code :(.
Will be fixed after annotation deserialization full support
2020-06-18 13:39:48 +03:00
Mikhail Glukhikh
d009c90e3a Revert "Mute two FIR BB tests due to LowPriorityInOverloadResolution in reflect"
This reverts commit 3768af4f
2020-06-18 13:24:38 +03:00
Mikhail Glukhikh
3768af4f92 Mute two FIR BB tests due to LowPriorityInOverloadResolution in reflect
Recently second javaType function appeared in reflect and
now FIR can't correctly resolve the code :(.
Will be fixed after annotation deserialization full support
2020-06-18 13:21:35 +03:00
Mikhail Zarechenskiy
d44a7ff8f9 Add test for obsolete issue
The issue was fixed in df1595e

 #KT-39630 Fixed
2020-06-18 13:05:42 +03:00
Yan Zhulanow
559561ca6b Add missing intellij-core dependency for sam-with-receiver tests 2020-06-18 19:01:44 +09:00
Yan Zhulanow
713a305f45 Update change data for IrTextTestCaseGenerated
Reason of changes: 098469eb85
2020-06-18 19:01:06 +09:00
Ilya Gorbunov
ec5a04a6c7 Update public jvm API dump after introduction of javaType
See 9e37b62f62
2020-06-18 12:44:23 +03:00
Mikhail Zarechenskiy
a067d138e9 Enable test for new inference after df1595e4
Follow up KT-37149
2020-06-18 12:41:27 +03:00
Mikhail Zarechenskiy
df1595e4bc Fix SAM conversions for derived classes
#KT-39535 Fixed
 #KT-37149 Fixed
2020-06-18 12:36:30 +03:00
Georgy Bronnikov
ee6d432ced Add forgotten test files 2020-06-18 12:22:53 +03:00
Igor Chevdar
cf6eb138ce [box-tests] Turned on a test for JS_IR 2020-06-18 13:17:38 +05:00
Igor Chevdar
2bf73ccfe5 [IR] Supported extension receivers in SAM conversions 2020-06-18 13:17:38 +05:00
Ilya Muradyan
8c2baf0704 Add missing definitelyDoesNotContainName methods 2020-06-18 09:51:16 +02:00
Ilya Muradyan
573c60ed6b Add missing recordLookup implementations 2020-06-18 09:51:16 +02:00
Ilya Muradyan
7526ff9484 Compare lookups without respect to their order 2020-06-18 09:51:16 +02:00
Igor Chevdar
3634ad2d54 Added a test 2020-06-18 12:44:48 +05:00
Igor Chevdar
ecf9727568 [IR] Supported IrEnumEntry
Fixes https://youtrack.jetbrains.com/issue/KT-38996
2020-06-18 12:44:48 +05:00
879 changed files with 32824 additions and 20838 deletions

View File

@@ -804,7 +804,9 @@ tasks {
":kotlin-stdlib-jdk7:publish",
":kotlin-stdlib-jdk8:publish",
":kotlin-reflect:publish",
":kotlin-main-kts:publish"
":kotlin-main-kts:publish",
":kotlin-stdlib-js:publish",
":kotlin-test:kotlin-test-js:publish"
)
}
}

View File

@@ -9,12 +9,16 @@ import org.gradle.api.Project
import org.gradle.api.publish.PublicationContainer
import org.gradle.api.publish.PublishingExtension
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.publish.maven.tasks.PublishToMavenRepository
import org.gradle.api.tasks.bundling.Jar
import org.gradle.kotlin.dsl.*
import plugins.KotlinBuildPublishingPlugin
import plugins.configureRepository
import java.util.*
internal const val PLUGIN_MARKER_SUFFIX = ".gradle.plugin"
@UseExperimental(ExperimentalStdlibApi::class)
fun Project.publishPluginMarkers(withEmptyJars: Boolean = true) {
val pluginDevelopment = extensions.getByType<PluginBundleExtension>()
val publishingExtension = extensions.getByType<PublishingExtension>()
@@ -25,6 +29,10 @@ fun Project.publishPluginMarkers(withEmptyJars: Boolean = true) {
if (withEmptyJars) {
addEmptyJarArtifacts(markerPublication)
}
tasks.named<PublishToMavenRepository>(
"publish${markerPublication.name.capitalize(Locale.ROOT)}PublicationTo${KotlinBuildPublishingPlugin.REPOSITORY_NAME}Repository"
).configureRepository()
}
}

View File

@@ -15,9 +15,11 @@ import org.gradle.api.publish.PublishingExtension
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.publish.maven.plugins.MavenPublishPlugin
import org.gradle.api.publish.maven.tasks.PublishToMavenRepository
import org.gradle.api.tasks.TaskProvider
import org.gradle.kotlin.dsl.*
import org.gradle.plugins.signing.SigningExtension
import org.gradle.plugins.signing.SigningPlugin
import java.net.URI
import java.util.*
import javax.inject.Inject
@@ -119,25 +121,8 @@ class KotlinBuildPublishingPlugin @Inject constructor(
dependsOn(tasks.named("publishToMavenLocal"))
}
tasks.named<PublishToMavenRepository>("publish${PUBLICATION_NAME}PublicationTo${REPOSITORY_NAME}Repository") {
dependsOn(project.rootProject.tasks.named("preparePublication"))
doFirst {
val preparePublication = project.rootProject.tasks.named("preparePublication").get()
val username: String? by preparePublication.extra
val password: String? by preparePublication.extra
val repoUrl: String by preparePublication.extra
repository.apply {
url = uri(repoUrl)
if (url.scheme != "file" && username != null && password != null) {
credentials {
this.username = username
this.password = password
}
}
}
}
}
tasks.named<PublishToMavenRepository>("publish${PUBLICATION_NAME}PublicationTo${REPOSITORY_NAME}Repository")
.configureRepository()
}
companion object {
@@ -152,4 +137,24 @@ class KotlinBuildPublishingPlugin @Inject constructor(
fun humanReadableName(project: Project) =
project.name.split("-").joinToString(separator = " ") { it.capitalize(Locale.ROOT) }
}
}
fun TaskProvider<PublishToMavenRepository>.configureRepository() = configure {
dependsOn(project.rootProject.tasks.named("preparePublication"))
doFirst {
val preparePublication = project.rootProject.tasks.named("preparePublication").get()
val username: String? by preparePublication.extra
val password: String? by preparePublication.extra
val repoUrl: String by preparePublication.extra
repository.apply {
url = project.uri(repoUrl)
if (url.scheme != "file" && username != null && password != null) {
credentials {
this.username = username
this.password = password
}
}
}
}
}

View File

@@ -294,7 +294,7 @@ class CodegenTestsOnAndroidGenerator private constructor(private val pathManager
val kind = KotlinBaseTest.extractConfigurationKind(testFiles)
val jdkKind = KotlinBaseTest.getTestJdkKind(testFiles)
val keyConfiguration = CompilerConfiguration()
CodegenTestCase.updateConfigurationByDirectivesInTestFiles(testFiles, keyConfiguration)
KotlinBaseTest.updateConfigurationByDirectivesInTestFiles(testFiles, keyConfiguration)
val key = ConfigurationKey(kind, jdkKind, keyConfiguration.toString())
val compiler = if (isJvm8Target) {
@@ -303,7 +303,7 @@ class CodegenTestsOnAndroidGenerator private constructor(private val pathManager
val filesHolder = holders.getOrPut(key) {
FilesWriter(compiler, KotlinTestUtils.newConfiguration(kind, jdkKind, KotlinTestUtils.getAnnotationsJar()).apply {
println("Creating new configuration by $key")
CodegenTestCase.updateConfigurationByDirectivesInTestFiles(testFiles, this)
KotlinBaseTest.updateConfigurationByDirectivesInTestFiles(testFiles, this)
})
}

View File

@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.backend.common
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.backend.common.bridges.findInterfaceImplementation
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
import org.jetbrains.kotlin.diagnostics.Errors
@@ -24,6 +23,7 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
import org.jetbrains.kotlin.resolve.multiplatform.ExpectedActualResolver
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.util.getExceptionMessage
import org.jetbrains.kotlin.util.getNonPrivateTraitMembersForDelegation
import org.jetbrains.kotlin.utils.DFS
import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments
@@ -55,14 +55,8 @@ object CodegenUtil {
@JvmOverloads
fun getNonPrivateTraitMethods(descriptor: ClassDescriptor, copy: Boolean = true): Map<FunctionDescriptor, FunctionDescriptor> {
val result = linkedMapOf<FunctionDescriptor, FunctionDescriptor>()
for (declaration in DescriptorUtils.getAllDescriptors(descriptor.defaultType.memberScope)) {
if (declaration !is CallableMemberDescriptor) continue
val traitMember = findInterfaceImplementation(declaration)
if (traitMember == null ||
Visibilities.isPrivate(traitMember.visibility) ||
traitMember.visibility == Visibilities.INVISIBLE_FAKE) continue
for ((declaration, traitMember) in getNonPrivateTraitMembersForDelegation(descriptor)) {
assert(traitMember.modality !== Modality.ABSTRACT) { "Cannot delegate to abstract trait method: $declaration" }
// inheritedMember can be abstract here. In order for FunctionCodegen to generate the method body, we're creating a copy here

View File

@@ -24,6 +24,8 @@ import org.jetbrains.kotlin.resolve.OverridingUtil
import org.jetbrains.kotlin.resolve.calls.callResolverUtil.isOrOverridesSynthesized
import org.jetbrains.kotlin.resolve.descriptorUtil.isTypeRefinementEnabled
import org.jetbrains.kotlin.resolve.descriptorUtil.module
import org.jetbrains.kotlin.util.findImplementationFromInterface
import org.jetbrains.kotlin.util.findInterfaceImplementation
fun <Signature> generateBridgesForFunctionDescriptor(
descriptor: FunctionDescriptor,
@@ -81,60 +83,4 @@ open class DescriptorBasedFunctionHandle(val descriptor: FunctionDescriptor) : F
override fun toString(): String {
return descriptor.toString()
}
}
/**
* Given a fake override in a class, returns an overridden declaration with implementation in trait, such that a method delegating to that
* trait implementation should be generated into the class containing the fake override; or null if the given function is not a fake
* override of any trait implementation or such method was already generated into the superclass or is a method from Any.
*/
fun findInterfaceImplementation(descriptor: CallableMemberDescriptor): CallableMemberDescriptor? {
if (descriptor.kind.isReal) return null
if (isOrOverridesSynthesized(descriptor)) return null
val implementation = findImplementationFromInterface(descriptor) ?: return null
val immediateConcreteSuper = firstSuperMethodFromKotlin(descriptor, implementation) ?: return null
if (!DescriptorUtils.isInterface(immediateConcreteSuper.containingDeclaration)) {
// If this implementation is already generated into the superclass, we need not generate it again, it'll be inherited
return null
}
return immediateConcreteSuper
}
/**
* Given a fake override, returns an overridden non-abstract function from an interface which is the actual implementation of this function
* that should be called when the given fake override is called.
*/
fun findImplementationFromInterface(descriptor: CallableMemberDescriptor): CallableMemberDescriptor? {
val overridden = OverridingUtil.getOverriddenDeclarations(descriptor)
val filtered = OverridingUtil.filterOutOverridden(overridden)
val result = filtered.firstOrNull { it.modality != Modality.ABSTRACT } ?: return null
if (DescriptorUtils.isClassOrEnumClass(result.containingDeclaration)) return null
return result
}
/**
* Given a fake override and its implementation (non-abstract declaration) somewhere in supertypes,
* returns the first immediate super function of the given fake override which overrides that implementation.
* The returned function should be called from TImpl-bridges generated for the given fake override.
*/
fun firstSuperMethodFromKotlin(
descriptor: CallableMemberDescriptor,
implementation: CallableMemberDescriptor
): CallableMemberDescriptor? {
return descriptor.overriddenDescriptors.firstOrNull { overridden ->
overridden.modality != Modality.ABSTRACT &&
(overridden == implementation || OverridingUtil.overrides(
overridden,
implementation,
overridden.module.isTypeRefinementEnabled(),
true
))
}
}
}

View File

@@ -105,6 +105,15 @@ public abstract class AnnotationCodegen {
@Nullable Annotated annotated,
@Nullable Type returnType,
@Nullable KotlinType typeForTypeAnnotations
) {
genAnnotations(annotated, returnType, typeForTypeAnnotations, null);
}
public void genAnnotations(
@Nullable Annotated annotated,
@Nullable Type returnType,
@Nullable KotlinType typeForTypeAnnotations,
@Nullable DeclarationDescriptorWithVisibility parameterContainer
) {
if (annotated == null) return;
@@ -139,22 +148,23 @@ public abstract class AnnotationCodegen {
}
}
generateAdditionalAnnotations(annotated, returnType, annotationDescriptorsAlreadyPresent);
generateAdditionalAnnotations(annotated, returnType, annotationDescriptorsAlreadyPresent, parameterContainer);
generateTypeAnnotations(annotated, typeForTypeAnnotations);
}
private void generateAdditionalAnnotations(
@NotNull Annotated annotated,
@Nullable Type returnType,
@NotNull Set<String> annotationDescriptorsAlreadyPresent
@NotNull Set<String> annotationDescriptorsAlreadyPresent,
@Nullable DeclarationDescriptorWithVisibility parameterContainer
) {
if (annotated instanceof CallableDescriptor) {
generateAdditionalCallableAnnotations((CallableDescriptor) annotated, returnType, annotationDescriptorsAlreadyPresent);
generateAdditionalCallableAnnotations((CallableDescriptor) annotated, returnType, annotationDescriptorsAlreadyPresent, parameterContainer);
}
else if (annotated instanceof FieldDescriptor) {
generateAdditionalCallableAnnotations(
((FieldDescriptor) annotated).getCorrespondingProperty(), returnType, annotationDescriptorsAlreadyPresent
);
((FieldDescriptor) annotated).getCorrespondingProperty(), returnType, annotationDescriptorsAlreadyPresent,
parameterContainer);
}
else if (annotated instanceof ClassDescriptor) {
generateAdditionalClassAnnotations(annotationDescriptorsAlreadyPresent, (ClassDescriptor) annotated);
@@ -164,11 +174,15 @@ public abstract class AnnotationCodegen {
private void generateAdditionalCallableAnnotations(
@NotNull CallableDescriptor descriptor,
@Nullable Type returnType,
@NotNull Set<String> annotationDescriptorsAlreadyPresent
@NotNull Set<String> annotationDescriptorsAlreadyPresent,
@Nullable DeclarationDescriptorWithVisibility parameterContainer
) {
// No need to annotate privates, synthetic accessors and their parameters
if (isInvisibleFromTheOutside(descriptor)) return;
if (descriptor instanceof ValueParameterDescriptor && isInvisibleFromTheOutside(descriptor.getContainingDeclaration())) return;
if (descriptor instanceof ParameterDescriptor &&
isInvisibleFromTheOutside(parameterContainer != null ? parameterContainer : descriptor.getContainingDeclaration())) {
return;
}
// No need to annotate annotation methods since they're always non-null
if (descriptor instanceof PropertyGetterDescriptor &&

View File

@@ -39,6 +39,8 @@ import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.enumEntryNeedS
import static org.jetbrains.kotlin.resolve.DescriptorToSourceUtils.descriptorToDeclaration;
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.OBJECT_TYPE;
import static org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind.CLASS_MEMBER_DELEGATION_TO_DEFAULT_IMPL;
import static org.jetbrains.kotlin.util.DeclarationUtilKt.findImplementationFromInterface;
import static org.jetbrains.kotlin.util.DeclarationUtilKt.findInterfaceImplementation;
public abstract class ClassBodyCodegen extends MemberCodegen<KtPureClassOrObject> {
@NotNull
@@ -125,7 +127,7 @@ public abstract class ClassBodyCodegen extends MemberCodegen<KtPureClassOrObject
for (DeclarationDescriptor memberDescriptor : DescriptorUtils.getAllDescriptors(descriptor.getDefaultType().getMemberScope())) {
if (memberDescriptor instanceof CallableMemberDescriptor) {
CallableMemberDescriptor member = (CallableMemberDescriptor) memberDescriptor;
if (!member.getKind().isReal() && ImplKt.findInterfaceImplementation(member) == null) {
if (!member.getKind().isReal() && findInterfaceImplementation(member) == null) {
if (member instanceof FunctionDescriptor) {
functionCodegen.generateBridges((FunctionDescriptor) member);
}
@@ -237,11 +239,14 @@ public abstract class ClassBodyCodegen extends MemberCodegen<KtPureClassOrObject
boolean isErasedInlineClass
) {
// Skip Java 8 default methods
if (CodegenUtilKt.isDefinitelyNotDefaultImplsMethod(interfaceFun) ||
JvmAnnotationUtilKt.isCallableMemberCompiledToJvmDefault(
DescriptorUtils.unwrapFakeOverrideToAnyDeclaration(interfaceFun), state.getJvmDefaultMode()
)
) {
if (CodegenUtilKt.isDefinitelyNotDefaultImplsMethod(interfaceFun)) {
return;
}
CallableMemberDescriptor actualImplementation =
interfaceFun.getKind().isReal() ? interfaceFun : findImplementationFromInterface(interfaceFun);
assert actualImplementation != null : "Can't find actual implementation for " + interfaceFun;
if (JvmAnnotationUtilKt.isCallableMemberCompiledToJvmDefault(actualImplementation, state.getJvmDefaultMode())) {
return;
}

View File

@@ -492,11 +492,11 @@ public class FunctionCodegen {
@NotNull FunctionDescriptor functionDescriptor,
@NotNull MethodVisitor mv,
@NotNull JvmMethodSignature jvmSignature,
@NotNull InnerClassConsumer innerClassConsumer,
@NotNull MemberCodegen<?> memberCodegen,
@NotNull GenerationState state
) {
generateParameterAnnotations(
functionDescriptor, mv, jvmSignature, functionDescriptor.getValueParameters(), innerClassConsumer, state
functionDescriptor, mv, jvmSignature, functionDescriptor.getValueParameters(), memberCodegen, state
);
}
@@ -505,7 +505,7 @@ public class FunctionCodegen {
@NotNull MethodVisitor mv,
@NotNull JvmMethodSignature jvmSignature,
@NotNull List<ValueParameterDescriptor> valueParameters,
@NotNull InnerClassConsumer innerClassConsumer,
@NotNull MemberCodegen<?> memberCodegen,
@NotNull GenerationState state
) {
if (isAccessor(functionDescriptor)) return;
@@ -516,6 +516,7 @@ public class FunctionCodegen {
Asm7UtilKt.visitAnnotableParameterCount(mv, kotlinParameterTypes.size() - syntheticParameterCount);
boolean isDefaultImpl = OwnerKind.DEFAULT_IMPLS == memberCodegen.context.getContextKind();
for (int i = 0; i < kotlinParameterTypes.size(); i++) {
JvmMethodParameterSignature parameterSignature = kotlinParameterTypes.get(i);
JvmMethodParameterKind kind = parameterSignature.getKind();
@@ -528,13 +529,14 @@ public class FunctionCodegen {
? iterator.next()
: kind == JvmMethodParameterKind.RECEIVER
? JvmCodegenUtil.getDirectMember(functionDescriptor).getExtensionReceiverParameter()
: null;
: isDefaultImpl && kind == JvmMethodParameterKind.THIS ? JvmCodegenUtil.getDirectMember(functionDescriptor)
.getDispatchReceiverParameter() : null;
if (annotated != null) {
//noinspection ConstantConditions
int parameterIndex = i - syntheticParameterCount;
AnnotationCodegen.forParameter(parameterIndex, mv, innerClassConsumer, state)
.genAnnotations(annotated, parameterSignature.getAsmType(), annotated.getReturnType());
AnnotationCodegen.forParameter(parameterIndex, mv, memberCodegen, state)
.genAnnotations(annotated, parameterSignature.getAsmType(), annotated.getReturnType(), functionDescriptor);
}
}
}
@@ -606,7 +608,7 @@ public class FunctionCodegen {
true, mv,
method.getAsmMethod(),
method.getOwner().getInternalName(),
true);
true, signature.getReturnType());
methodEnd = new Label();
}
else {
@@ -710,8 +712,7 @@ public class FunctionCodegen {
@NotNull JvmDefaultMode jvmDefaultMode
) {
return OwnerKind.DEFAULT_IMPLS == context.getContextKind() &&
JvmAnnotationUtilKt
.isCompiledToJvmDefault(DescriptorUtils.unwrapFakeOverrideToAnyDeclaration(functionDescriptor),
JvmAnnotationUtilKt.isCompiledToJvmDefault(DescriptorUtils.unwrapFakeOverrideToAnyDeclaration(functionDescriptor),
jvmDefaultMode) &&
jvmDefaultMode.isCompatibility();
}
@@ -849,7 +850,8 @@ public class FunctionCodegen {
@NotNull Method asmMethod,
@NotNull String classToDelegateTo,
int opcode,
boolean isInterface
boolean isInterface,
@NotNull Type returnType
) {
InstructionAdapter iv = new InstructionAdapter(mv);
Type[] argTypes = asmMethod.getArgumentTypes();
@@ -871,7 +873,8 @@ public class FunctionCodegen {
paramIndex += argType.getSize();
}
iv.visitMethodInsn(opcode, classToDelegateTo, asmMethod.getName(), asmMethod.getDescriptor(), isInterface);
iv.areturn(asmMethod.getReturnType());
StackValue.onStack(asmMethod.getReturnType()).coerceTo(returnType, null, iv);
iv.areturn(returnType);
}
private static void generateDelegateToStaticErasedVersion(
@@ -910,7 +913,19 @@ public class FunctionCodegen {
@NotNull String classToDelegateTo,
boolean isInterfaceMethodCall
) {
generateDelegateToMethodBody(isStatic ? 0 : 1, mv, asmMethod, classToDelegateTo, Opcodes.INVOKESTATIC, isInterfaceMethodCall);
generateDelegateToStaticMethodBody(isStatic, mv, asmMethod, classToDelegateTo, isInterfaceMethodCall, asmMethod.getReturnType());
}
private static void generateDelegateToStaticMethodBody(
boolean isStatic,
@NotNull MethodVisitor mv,
@NotNull Method asmMethod,
@NotNull String classToDelegateTo,
boolean isInterfaceMethodCall,
@NotNull Type returnType
) {
generateDelegateToMethodBody(isStatic ? 0 : 1, mv, asmMethod, classToDelegateTo, Opcodes.INVOKESTATIC, isInterfaceMethodCall, returnType);
}
private static boolean needIndexForVar(JvmMethodParameterKind kind) {
@@ -1656,7 +1671,9 @@ public class FunctionCodegen {
if (JvmAnnotationUtilKt.isCompiledToJvmDefault(memberDescriptor, mode)) {
return (kind != OwnerKind.DEFAULT_IMPLS && !isSynthetic) ||
(kind == OwnerKind.DEFAULT_IMPLS && (isSynthetic || mode.isCompatibility()));
(kind == OwnerKind.DEFAULT_IMPLS &&
(isSynthetic || //TODO: move synthetic method generation into interface
(mode.isCompatibility() && !JvmAnnotationUtilKt.hasJvmDefaultNoCompatibilityAnnotation(containingDeclaration))));
} else {
switch (kind) {
case DEFAULT_IMPLS: return true;

View File

@@ -17,8 +17,7 @@
package org.jetbrains.kotlin.codegen
import com.intellij.util.ArrayUtil
import org.jetbrains.kotlin.backend.common.bridges.findImplementationFromInterface
import org.jetbrains.kotlin.backend.common.bridges.firstSuperMethodFromKotlin
import org.jetbrains.kotlin.util.findImplementationFromInterface
import org.jetbrains.kotlin.codegen.context.ClassContext
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.codegen.state.JvmMethodExceptionTypes
@@ -29,6 +28,7 @@ import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
import org.jetbrains.kotlin.util.firstSuperMethodFromKotlin
import org.jetbrains.org.objectweb.asm.MethodVisitor
import org.jetbrains.org.objectweb.asm.Opcodes.*

View File

@@ -16,6 +16,8 @@ import org.jetbrains.kotlin.load.java.descriptors.JavaForKotlinOverridePropertyD
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.jvm.annotations.isCompiledToJvmDefault
import org.jetbrains.kotlin.resolve.jvm.annotations.hasPlatformDependentAnnotation
import org.jetbrains.kotlin.util.findImplementationFromInterface
import org.jetbrains.kotlin.util.findInterfaceImplementation
class DescriptorBasedFunctionHandleForJvm(
descriptor: FunctionDescriptor,

View File

@@ -63,8 +63,8 @@ private interface ArgsConverter<T> {
}
fun tryConvertSingle(parameter: KParameter, arg: NamedArgument<T>): Result
fun tryConvertVararg(parameter: KParameter, firstArg: NamedArgument<T>, restArgsIt: Iterator<NamedArgument<T>>): Result
fun tryConvertTail(parameter: KParameter, firstArg: NamedArgument<T>, restArgsIt: Iterator<NamedArgument<T>>): Result
fun tryConvertVararg(parameter: KParameter, firstArg: NamedArgument<T>, restArgs: Sequence<NamedArgument<T>>): Result
fun tryConvertTail(parameter: KParameter, firstArg: NamedArgument<T>, restArgs: Sequence<NamedArgument<T>>): Result
}
private enum class ArgsTraversalState { UNNAMED, NAMED, TAIL }
@@ -77,7 +77,7 @@ private fun <T> tryCreateCallableMapping(
val res = mutableMapOf<KParameter, Any?>()
var state = ArgsTraversalState.UNNAMED
val unboundParams = callable.parameters.toMutableList()
val argIt = args.iterator()
val argIt = LookAheadIterator(args.iterator())
while (argIt.hasNext()) {
if (unboundParams.isEmpty()) return null // failed to match: no param left for the arg
val arg = argIt.next()
@@ -102,7 +102,11 @@ private fun <T> tryCreateCallableMapping(
res[par] = cvtRes.v
} else if (par.type.jvmErasure.java.isArray) {
// try vararg
val cvtVRes = converter.tryConvertVararg(par, arg, argIt)
// Collect all the arguments that do not have a name
val unnamed = argIt.sequenceUntil { it.name != null }
val cvtVRes = converter.tryConvertVararg(par, arg, unnamed)
if (cvtVRes is ArgsConverter.Result.Success) {
res[par] = cvtVRes.v
} else return null // failed to match: no suitable param for unnamed arg
@@ -121,7 +125,7 @@ private fun <T> tryCreateCallableMapping(
ArgsTraversalState.TAIL -> {
assert(arg.name == null)
val par = unboundParams.removeAt(unboundParams.lastIndex)
val cvtVRes = converter.tryConvertTail(par, arg, argIt)
val cvtVRes = converter.tryConvertTail(par, arg, argIt.asSequence())
if (cvtVRes is ArgsConverter.Result.Success) {
if (argIt.hasNext()) return null // failed to match: not all tail args are consumed
res[par] = cvtVRes.v
@@ -162,7 +166,7 @@ private class StringArgsConverter : ArgsConverter<String> {
override fun tryConvertVararg(
parameter: KParameter,
firstArg: NamedArgument<String>,
restArgsIt: Iterator<NamedArgument<String>>
restArgs: Sequence<NamedArgument<String>>
): ArgsConverter.Result {
fun convertPrimitivesArray(type: KType, args: Sequence<String?>): Any? =
when (type.classifier) {
@@ -179,7 +183,7 @@ private class StringArgsConverter : ArgsConverter<String> {
val parameterType = parameter.type
if (parameterType.jvmErasure.java.isArray) {
val argsSequence = sequenceOf(firstArg.value) + restArgsIt.asSequence().map { it.value }
val argsSequence = sequenceOf(firstArg.value) + restArgs.map { it.value }
val primArrayArgCandidate = convertPrimitivesArray(parameterType, argsSequence)
if (primArrayArgCandidate != null)
return ArgsConverter.Result.Success(primArrayArgCandidate)
@@ -195,9 +199,9 @@ private class StringArgsConverter : ArgsConverter<String> {
override fun tryConvertTail(
parameter: KParameter,
firstArg: NamedArgument<String>,
restArgsIt: Iterator<NamedArgument<String>>
restArgs: Sequence<NamedArgument<String>>
): ArgsConverter.Result =
tryConvertVararg(parameter, firstArg, restArgsIt)
tryConvertVararg(parameter, firstArg, restArgs)
}
private class AnyArgsConverter : ArgsConverter<Any> {
@@ -218,18 +222,33 @@ private class AnyArgsConverter : ArgsConverter<Any> {
else -> null
}
if (value::class.isSubclassOf(parameter.type.jvmErasure)) return ArgsConverter.Result.Success(value)
fun evaluateValue(arg: Any): Any? {
if (arg::class.isSubclassOf(parameter.type.jvmErasure)) return arg
return convertPrimitivesArray(parameter.type, arg)
}
return convertPrimitivesArray(parameter.type, value)?.let { ArgsConverter.Result.Success(it) }
?: ArgsConverter.Result.Failure
evaluateValue(value)?.let { return ArgsConverter.Result.Success(it) }
// Handle the scenario where [arg::class] is an Array<Any>
// but it's values could all still be valid
val parameterKClass = parameter.type.classifier as? KClass<*>
val arrayComponentType = parameterKClass?.java?.takeIf { it.isArray}?.componentType?.kotlin
if (value is Array<*> && arrayComponentType != null) {
// TODO: Idea! Maybe we should check if the values in the array are compatible with [arrayComponentType]
// if they aren't perhaps we should fail silently
convertAnyArray(arrayComponentType, value.asSequence())?.let(::evaluateValue)?.let { return ArgsConverter.Result.Success(it) }
}
return ArgsConverter.Result.Failure
}
override fun tryConvertVararg(
parameter: KParameter, firstArg: NamedArgument<Any>, restArgsIt: Iterator<NamedArgument<Any>>
parameter: KParameter, firstArg: NamedArgument<Any>, restArgs: Sequence<NamedArgument<Any>>
): ArgsConverter.Result {
val parameterType = parameter.type
if (parameterType.jvmErasure.java.isArray) {
val argsSequence = sequenceOf(firstArg.value) + restArgsIt.asSequence().map { it.value }
val argsSequence = sequenceOf(firstArg.value) + restArgs.map { it.value }
val arrayElementType = parameterType.arguments.firstOrNull()?.type
val arrayArgCandidate = convertAnyArray(arrayElementType?.classifier, argsSequence)
if (arrayArgCandidate != null)
@@ -242,7 +261,7 @@ private class AnyArgsConverter : ArgsConverter<Any> {
override fun tryConvertTail(
parameter: KParameter,
firstArg: NamedArgument<Any>,
restArgsIt: Iterator<NamedArgument<Any>>
restArgs: Sequence<NamedArgument<Any>>
): ArgsConverter.Result =
tryConvertSingle(parameter, firstArg)
}
@@ -266,3 +285,38 @@ private fun <T> convertAnyArrayImpl(classifier: KClassifier?, args: Sequence<T?>
}
return result
}
/*
An iterator that allows us to read the next value without consuming it.
*/
private class LookAheadIterator<T>(private val iterator: Iterator<T>) : Iterator<T> {
private var currentLookAhead: T? = null
override fun hasNext(): Boolean {
return currentLookAhead != null || iterator.hasNext()
}
override fun next(): T {
currentLookAhead?.let { value ->
currentLookAhead = null
return value
}
return iterator.next()
}
fun nextWithoutConsuming(): T {
return currentLookAhead ?: iterator.next().also { currentLookAhead = it }
}
}
/*
Will return a sequence with the values of the iterator until the predicate evaluates to true.
*/
private fun <T> LookAheadIterator<T>.sequenceUntil(predicate: (T) -> Boolean): Sequence<T> = sequence {
while (hasNext()) {
if (predicate(nextWithoutConsuming()))
break
yield(next())
}
}

View File

@@ -66,6 +66,7 @@ import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.*
import org.jetbrains.kotlin.resolve.calls.tower.ImplicitsExtensionsResolutionFilter
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
import org.jetbrains.kotlin.resolve.jvm.extensions.PackageFragmentProviderExtension
@@ -135,7 +136,8 @@ object TopDownAnalyzerFacadeForJVM {
declarationProviderFactory: (StorageManager, Collection<KtFile>) -> DeclarationProviderFactory,
targetEnvironment: TargetEnvironment = CompilerEnvironment,
sourceModuleSearchScope: GlobalSearchScope = newModuleSearchScope(project, files),
klibList: List<KotlinLibrary> = emptyList()
klibList: List<KotlinLibrary> = emptyList(),
implicitsResolutionFilter: ImplicitsExtensionsResolutionFilter? = null
): ComponentProvider {
val jvmTarget = configuration.get(JVMConfigurationKeys.JVM_TARGET, JvmTarget.DEFAULT)
val languageVersionSettings = configuration.languageVersionSettings
@@ -186,7 +188,8 @@ object TopDownAnalyzerFacadeForJVM {
targetEnvironment, lookupTracker, expectActualTracker,
packagePartProvider(dependencyScope), languageVersionSettings,
useBuiltInsProvider = true,
configureJavaClassFinder = configureJavaClassFinder
configureJavaClassFinder = configureJavaClassFinder,
implicitsResolutionFilter = implicitsResolutionFilter
)
moduleClassResolver.compiledCodeResolver = dependenciesContainer.get()
@@ -220,7 +223,8 @@ object TopDownAnalyzerFacadeForJVM {
partProvider, languageVersionSettings,
useBuiltInsProvider = true,
configureJavaClassFinder = configureJavaClassFinder,
javaClassTracker = configuration[JVMConfigurationKeys.JAVA_CLASSES_TRACKER]
javaClassTracker = configuration[JVMConfigurationKeys.JAVA_CLASSES_TRACKER],
implicitsResolutionFilter = implicitsResolutionFilter
).apply {
initJvmBuiltInsForTopDownAnalysis()
(partProvider as? IncrementalPackagePartProvider)?.deserializationConfiguration = get()

View File

@@ -1,5 +1,5 @@
public open class AnnotatedMethod : R|kotlin/Any| {
public open fun f(): R|kotlin/Unit|
@R|kotlin/Deprecated|(message = String(Deprecated in Java)) public open fun f(): R|kotlin/Unit|
public constructor(): R|test/AnnotatedMethod|

View File

@@ -15,7 +15,7 @@ public final annotation class Anno : R|kotlin/Annotation| {
}
@R|test/Anno|(klass = <getClass>(<getClass>(R|kotlin/String|)), klasses = <implicitArrayOf>(<getClass>(R|kotlin/Int|), <getClass>(R|kotlin/String|), <getClass>(R|kotlin/Float|)), sarKlass = <getClass>(<getClass>(R|kotlin/String|)), d2arKlass = <getClass>(<getClass>(R|kotlin/DoubleArray|))) public final class Klass : R|kotlin/Any| {
@R|test/Anno|(klass = <getClass>(<getClass>(R|kotlin/String|)), klasses = <implicitArrayOf>(<getClass>(<getClass>(R|kotlin/Int|)), <getClass>(<getClass>(R|kotlin/String|)), <getClass>(<getClass>(R|kotlin/Float|))), sarKlass = <getClass>(<getClass>(R|kotlin/String|)), d2arKlass = <getClass>(<getClass>(R|kotlin/DoubleArray|))) public final class Klass : R|kotlin/Any| {
public constructor(): R|test/Klass|
}

View File

@@ -19,7 +19,7 @@ public final annotation class EnumAnno : R|kotlin/Annotation| {
}
public final class EnumArgumentWithCustomToString : R|kotlin/Any| {
public final fun annotated(): R|kotlin/Unit|
@R|test/EnumAnno|(value = R|test/E.CAKE|()) @R|test/EnumArrayAnno|(value = <implicitArrayOf>(R|test/E.CAKE|(), R|test/E.CAKE|())) public final fun annotated(): R|kotlin/Unit|
public constructor(): R|test/EnumArgumentWithCustomToString|

View File

@@ -7,7 +7,7 @@ public final annotation class Anno : R|kotlin/Annotation| {
}
public abstract interface T : R|kotlin/Any| {
public abstract fun foo(): R|kotlin/Array<kotlin/Array<kotlin/Array<test/T>>>|
@R|test/Anno|(s = String(foo)) public abstract fun foo(): R|kotlin/Array<kotlin/Array<kotlin/Array<test/T>>>|
public abstract val bar: R|kotlin/Array<kotlin/Array<kotlin/BooleanArray>>|
public get(): R|kotlin/Array<kotlin/Array<kotlin/BooleanArray>>|

View File

@@ -7,6 +7,6 @@ public final annotation class Anno : R|kotlin/Annotation| {
}
public final class Constructor : R|kotlin/Any| {
public constructor(): R|test/Constructor|
@R|test/Anno|(value = String(string)) public constructor(): R|test/Constructor|
}

View File

@@ -7,7 +7,7 @@ public final annotation class Anno : R|kotlin/Annotation| {
}
public final class Class : R|kotlin/Any| {
public final fun foo(): R|kotlin/Unit|
@R|test/Anno|(t = R|java/lang/annotation/ElementType.METHOD|()) public final fun foo(): R|kotlin/Unit|
public final var bar: R|kotlin/Int|
public get(): R|kotlin/Int|

View File

@@ -4,7 +4,7 @@ public final annotation class Anno : R|kotlin/Annotation| {
}
public final class Class : R|kotlin/Any| {
public final fun foo(): R|kotlin/Unit|
@R|test/Anno|() public final fun foo(): R|kotlin/Unit|
public constructor(): R|test/Class|

View File

@@ -7,7 +7,7 @@ public sealed class Sealed : R|kotlin/Any| {
public final val z: R|test/Z|
public get(): R|test/Z|
private constructor(z: R|test/Z|): R|test/Sealed|
@R|test/Ann|() private constructor(z: R|test/Z|): R|test/Sealed|
public final class Derived : R|test/Sealed| {
public constructor(z: R|test/Z|): R|test/Sealed.Derived|
@@ -20,11 +20,11 @@ public final class Test : R|kotlin/Any| {
public final val z: R|test/Z|
public get(): R|test/Z|
public constructor(z: R|test/Z|, a: R|kotlin/Int|): R|test/Test|
@R|test/Ann|() public constructor(z: R|test/Z|, a: R|kotlin/Int|): R|test/Test|
private constructor(z: R|test/Z|, s: R|kotlin/String|): R|test/Test|
@R|test/Ann|() private constructor(z: R|test/Z|, s: R|kotlin/String|): R|test/Test|
public constructor(z: R|test/Z|): R|test/Test|
@R|test/Ann|() public constructor(z: R|test/Z|): R|test/Test|
}

View File

@@ -8,6 +8,6 @@ public final inline class Z : R|kotlin/Any| {
public final val value: R|kotlin/Int|
public get(): R|kotlin/Int|
internal constructor(value: R|kotlin/Int|): R|test/Z|
@R|kotlin/PublishedApi|() internal constructor(value: R|kotlin/Int|): R|test/Z|
}

View File

@@ -9,7 +9,7 @@ public final class A : R|kotlin/Any| {
}
@R|test/A.Anno|() public final class B : R|kotlin/Any| {
public final fun f(): R|kotlin/Unit|
@R|test/A.Anno|() public final fun f(): R|kotlin/Unit|
public constructor(): R|test/B|

View File

@@ -1,4 +1,4 @@
public final fun foo(): R|kotlin/Unit|
@R|test/Anno|(t = R|java/lang/annotation/ElementType.METHOD|()) public final fun foo(): R|kotlin/Unit|
public final annotation class Anno : R|kotlin/Annotation| {
public final val t: R|java/lang/annotation/ElementType|

View File

@@ -1,6 +1,6 @@
public final fun baz(): R|kotlin/Unit|
@R|test/Anno|(t = <implicitArrayOf>()) public final fun baz(): R|kotlin/Unit|
public final fun foo(): R|kotlin/Unit|
@R|test/Anno|(t = <implicitArrayOf>(R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.FIELD|())) public final fun foo(): R|kotlin/Unit|
public final annotation class Anno : R|kotlin/Annotation| {
public final val t: R|kotlin/Array<out java/lang/annotation/ElementType>|

View File

@@ -1,4 +1,4 @@
public final fun function(): R|kotlin/Unit|
@R|test/Anno|() public final fun function(): R|kotlin/Unit|
public final annotation class Anno : R|kotlin/Annotation| {
public constructor(): R|test/Anno|

View File

@@ -1,6 +1,6 @@
public final fun baz(): R|kotlin/Unit|
@R|test/Anno|(t = <implicitArrayOf>()) public final fun baz(): R|kotlin/Unit|
public final fun foo(): R|kotlin/Unit|
@R|test/Anno|(t = <implicitArrayOf>(String(live), String(long))) public final fun foo(): R|kotlin/Unit|
public final annotation class Anno : R|kotlin/Annotation| {
public final val t: R|kotlin/Array<out kotlin/String>|

View File

@@ -5,94 +5,100 @@ digraph annotatedLocalClass_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function <init>" style="filled" fillcolor=red];
2 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
1 [label="Exit function <init>" style="filled" fillcolor=red];
0 [label="Enter class Ann" style="filled" fillcolor=red];
1 [label="Exit class Ann" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {1};
0 -> {1} [color=green];
subgraph cluster_1 {
color=red
3 [label="Enter class Ann" style="filled" fillcolor=red];
4 [label="Exit class Ann" style="filled" fillcolor=red];
2 [label="Enter function <init>" style="filled" fillcolor=red];
3 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
4 [label="Exit function <init>" style="filled" fillcolor=red];
}
3 -> {4} [color=green];
2 -> {3};
3 -> {4};
subgraph cluster_2 {
color=red
5 [label="Enter function foo" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
7 [label="Enter when"];
subgraph cluster_4 {
color=blue
9 [label="Enter when branch condition "];
10 [label="Access variable R|<local>/b|"];
11 [label="Exit when branch condition"];
}
18 [label="Synthetic else branch"];
12 [label="Enter when branch result"];
23 [label="Enter class Local" style="filled" fillcolor=red];
24 [label="Exit class Local" style="filled" fillcolor=red];
}
subgraph cluster_4 {
color=blue
6 [label="Enter block"];
subgraph cluster_5 {
color=blue
13 [label="Enter block"];
14 [label="Jump: ^foo Unit"];
15 [label="Stub" style="filled" fillcolor=gray];
16 [label="Exit block" style="filled" fillcolor=gray];
7 [label="Enter when"];
subgraph cluster_6 {
color=blue
8 [label="Enter when branch condition "];
9 [label="Access variable R|<local>/b|"];
10 [label="Exit when branch condition"];
}
11 [label="Synthetic else branch"];
12 [label="Enter when branch result"];
subgraph cluster_7 {
color=blue
13 [label="Enter block"];
14 [label="Jump: ^foo Unit"];
15 [label="Stub" style="filled" fillcolor=gray];
16 [label="Exit block" style="filled" fillcolor=gray];
}
17 [label="Exit when branch result" style="filled" fillcolor=gray];
18 [label="Exit when"];
}
17 [label="Exit when branch result" style="filled" fillcolor=gray];
8 [label="Exit when"];
19 [label="Exit local class foo"];
20 [label="Function call: R|/bar|()"];
21 [label="Exit block"];
}
subgraph cluster_6 {
color=blue
19 [label="Enter annotation"];
20 [label="Exit annotation"];
}
21 [label="Exit local class foo"];
22 [label="Function call: R|/bar|()"];
6 [label="Exit function foo" style="filled" fillcolor=red];
22 [label="Exit function foo" style="filled" fillcolor=red];
}
5 -> {7};
7 -> {9};
8 -> {19};
5 -> {6};
6 -> {7};
7 -> {8};
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {12 18};
10 -> {12 11};
11 -> {18};
12 -> {13};
13 -> {14};
14 -> {6};
14 -> {22};
14 -> {15} [style=dotted];
15 -> {16} [style=dotted];
16 -> {17} [style=dotted];
17 -> {8} [style=dotted];
18 -> {8};
17 -> {18} [style=dotted];
18 -> {19};
18 -> {25} [color=red];
19 -> {20};
20 -> {21};
20 -> {23} [color=red];
21 -> {22};
22 -> {6};
subgraph cluster_7 {
color=red
23 [label="Enter function <init>" style="filled" fillcolor=red];
25 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
24 [label="Exit function <init>" style="filled" fillcolor=red];
}
23 -> {25};
25 -> {24};
23 -> {24} [color=green];
subgraph cluster_8 {
color=red
26 [label="Enter class Local" style="filled" fillcolor=red];
27 [label="Exit class Local" style="filled" fillcolor=red];
25 [label="Enter function <init>" style="filled" fillcolor=red];
26 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
27 [label="Exit function <init>" style="filled" fillcolor=red];
}
26 -> {27} [color=green];
25 -> {26};
26 -> {27};
subgraph cluster_9 {
color=red
28 [label="Enter function bar" style="filled" fillcolor=red];
29 [label="Exit function bar" style="filled" fillcolor=red];
subgraph cluster_10 {
color=blue
29 [label="Enter block"];
30 [label="Exit block"];
}
31 [label="Exit function bar" style="filled" fillcolor=red];
}
28 -> {29};
29 -> {30};
30 -> {31};
}

View File

@@ -8,229 +8,257 @@ digraph binaryOperations_kt {
0 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
2 [label="Enter when"];
1 [label="Enter block"];
subgraph cluster_2 {
color=blue
4 [label="Enter when branch condition "];
2 [label="Enter when"];
subgraph cluster_3 {
color=blue
6 [label="Enter ||"];
7 [label="Access variable R|<local>/b1|"];
8 [label="Exit left part of ||"];
9 [label="Enter right part of ||"];
10 [label="Access variable R|<local>/b2|"];
5 [label="Exit ||"];
3 [label="Enter when branch condition "];
subgraph cluster_4 {
color=blue
4 [label="Enter ||"];
5 [label="Access variable R|<local>/b1|"];
6 [label="Exit left part of ||"];
7 [label="Enter right part of ||"];
8 [label="Access variable R|<local>/b2|"];
9 [label="Exit ||"];
}
10 [label="Exit when branch condition"];
}
11 [label="Exit when branch condition"];
11 [label="Synthetic else branch"];
12 [label="Enter when branch result"];
subgraph cluster_5 {
color=blue
13 [label="Enter block"];
14 [label="Const: Int(1)"];
15 [label="Exit block"];
}
16 [label="Exit when branch result"];
17 [label="Exit when"];
}
17 [label="Synthetic else branch"];
12 [label="Enter when branch result"];
subgraph cluster_4 {
color=blue
13 [label="Enter block"];
14 [label="Const: Int(1)"];
15 [label="Exit block"];
}
16 [label="Exit when branch result"];
3 [label="Exit when"];
18 [label="Exit block"];
}
1 [label="Exit function test_1" style="filled" fillcolor=red];
19 [label="Exit function test_1" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {4};
3 -> {1};
4 -> {6};
5 -> {11};
6 -> {7};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
4 -> {5};
5 -> {6};
6 -> {9 7};
7 -> {8};
8 -> {5 9};
8 -> {9};
9 -> {10};
10 -> {5};
11 -> {12 17};
10 -> {12 11};
11 -> {17};
12 -> {13};
13 -> {14};
14 -> {15};
15 -> {16};
16 -> {3};
17 -> {3};
16 -> {17};
17 -> {18};
18 -> {19};
subgraph cluster_5 {
subgraph cluster_6 {
color=red
18 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_6 {
20 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
20 [label="Enter when"];
subgraph cluster_7 {
21 [label="Enter block"];
subgraph cluster_8 {
color=blue
22 [label="Enter when branch condition "];
subgraph cluster_8 {
22 [label="Enter when"];
subgraph cluster_9 {
color=blue
24 [label="Enter &&"];
25 [label="Access variable R|<local>/b1|"];
26 [label="Exit left part of &&"];
27 [label="Enter right part of &&"];
28 [label="Access variable R|<local>/b2|"];
23 [label="Exit &&"];
23 [label="Enter when branch condition "];
subgraph cluster_10 {
color=blue
24 [label="Enter &&"];
25 [label="Access variable R|<local>/b1|"];
26 [label="Exit left part of &&"];
27 [label="Enter right part of &&"];
28 [label="Access variable R|<local>/b2|"];
29 [label="Exit &&"];
}
30 [label="Exit when branch condition"];
}
29 [label="Exit when branch condition"];
31 [label="Synthetic else branch"];
32 [label="Enter when branch result"];
subgraph cluster_11 {
color=blue
33 [label="Enter block"];
34 [label="Const: Int(1)"];
35 [label="Exit block"];
}
36 [label="Exit when branch result"];
37 [label="Exit when"];
}
35 [label="Synthetic else branch"];
30 [label="Enter when branch result"];
subgraph cluster_9 {
color=blue
31 [label="Enter block"];
32 [label="Const: Int(1)"];
33 [label="Exit block"];
}
34 [label="Exit when branch result"];
21 [label="Exit when"];
38 [label="Exit block"];
}
19 [label="Exit function test_2" style="filled" fillcolor=red];
39 [label="Exit function test_2" style="filled" fillcolor=red];
}
18 -> {20};
20 -> {22};
21 -> {19};
22 -> {24};
23 -> {29};
20 -> {21};
21 -> {22};
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {26};
26 -> {23 27};
26 -> {29 27};
27 -> {28};
28 -> {23};
29 -> {30 35};
30 -> {31};
31 -> {32};
28 -> {29};
29 -> {30};
30 -> {32 31};
31 -> {37};
32 -> {33};
33 -> {34};
34 -> {21};
35 -> {21};
34 -> {35};
35 -> {36};
36 -> {37};
37 -> {38};
38 -> {39};
subgraph cluster_10 {
subgraph cluster_12 {
color=red
36 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_11 {
40 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_13 {
color=blue
38 [label="Enter when"];
subgraph cluster_12 {
41 [label="Enter block"];
subgraph cluster_14 {
color=blue
40 [label="Enter when branch condition "];
subgraph cluster_13 {
42 [label="Enter when"];
subgraph cluster_15 {
color=blue
42 [label="Enter ||"];
subgraph cluster_14 {
43 [label="Enter when branch condition "];
subgraph cluster_16 {
color=blue
44 [label="Enter &&"];
45 [label="Access variable R|<local>/b1|"];
46 [label="Exit left part of &&"];
47 [label="Enter right part of &&"];
48 [label="Access variable R|<local>/b2|"];
43 [label="Exit &&"];
44 [label="Enter ||"];
subgraph cluster_17 {
color=blue
45 [label="Enter &&"];
46 [label="Access variable R|<local>/b1|"];
47 [label="Exit left part of &&"];
48 [label="Enter right part of &&"];
49 [label="Access variable R|<local>/b2|"];
50 [label="Exit &&"];
}
51 [label="Exit left part of ||"];
52 [label="Enter right part of ||"];
53 [label="Access variable R|<local>/b3|"];
54 [label="Exit ||"];
}
49 [label="Exit left part of ||"];
50 [label="Enter right part of ||"];
51 [label="Access variable R|<local>/b3|"];
41 [label="Exit ||"];
55 [label="Exit when branch condition"];
}
52 [label="Exit when branch condition"];
56 [label="Synthetic else branch"];
57 [label="Enter when branch result"];
subgraph cluster_18 {
color=blue
58 [label="Enter block"];
59 [label="Const: Int(1)"];
60 [label="Exit block"];
}
61 [label="Exit when branch result"];
62 [label="Exit when"];
}
58 [label="Synthetic else branch"];
53 [label="Enter when branch result"];
subgraph cluster_15 {
color=blue
54 [label="Enter block"];
55 [label="Const: Int(1)"];
56 [label="Exit block"];
}
57 [label="Exit when branch result"];
39 [label="Exit when"];
63 [label="Exit block"];
}
37 [label="Exit function test_3" style="filled" fillcolor=red];
64 [label="Exit function test_3" style="filled" fillcolor=red];
}
36 -> {38};
38 -> {40};
39 -> {37};
40 -> {42};
41 -> {52};
42 -> {44};
43 -> {49};
40 -> {41};
41 -> {42};
42 -> {43};
43 -> {44};
44 -> {45};
45 -> {46};
46 -> {43 47};
47 -> {48};
48 -> {43};
49 -> {41 50};
46 -> {47};
47 -> {50 48};
48 -> {49};
49 -> {50};
50 -> {51};
51 -> {41};
52 -> {53 58};
51 -> {54 52};
52 -> {53};
53 -> {54};
54 -> {55};
55 -> {56};
56 -> {57};
57 -> {39};
58 -> {39};
55 -> {57 56};
56 -> {62};
57 -> {58};
58 -> {59};
59 -> {60};
60 -> {61};
61 -> {62};
62 -> {63};
63 -> {64};
subgraph cluster_16 {
subgraph cluster_19 {
color=red
59 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_17 {
65 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_20 {
color=blue
61 [label="Enter when"];
subgraph cluster_18 {
color=blue
63 [label="Enter when branch condition "];
subgraph cluster_19 {
color=blue
65 [label="Enter ||"];
66 [label="Access variable R|<local>/b1|"];
67 [label="Exit left part of ||"];
68 [label="Enter right part of ||"];
subgraph cluster_20 {
color=blue
70 [label="Enter &&"];
71 [label="Access variable R|<local>/b2|"];
72 [label="Exit left part of &&"];
73 [label="Enter right part of &&"];
74 [label="Access variable R|<local>/b3|"];
69 [label="Exit &&"];
}
64 [label="Exit ||"];
}
75 [label="Exit when branch condition"];
}
81 [label="Synthetic else branch"];
76 [label="Enter when branch result"];
66 [label="Enter block"];
subgraph cluster_21 {
color=blue
77 [label="Enter block"];
78 [label="Const: Int(1)"];
79 [label="Exit block"];
67 [label="Enter when"];
subgraph cluster_22 {
color=blue
68 [label="Enter when branch condition "];
subgraph cluster_23 {
color=blue
69 [label="Enter ||"];
70 [label="Access variable R|<local>/b1|"];
71 [label="Exit left part of ||"];
72 [label="Enter right part of ||"];
subgraph cluster_24 {
color=blue
73 [label="Enter &&"];
74 [label="Access variable R|<local>/b2|"];
75 [label="Exit left part of &&"];
76 [label="Enter right part of &&"];
77 [label="Access variable R|<local>/b3|"];
78 [label="Exit &&"];
}
79 [label="Exit ||"];
}
80 [label="Exit when branch condition"];
}
81 [label="Synthetic else branch"];
82 [label="Enter when branch result"];
subgraph cluster_25 {
color=blue
83 [label="Enter block"];
84 [label="Const: Int(1)"];
85 [label="Exit block"];
}
86 [label="Exit when branch result"];
87 [label="Exit when"];
}
80 [label="Exit when branch result"];
62 [label="Exit when"];
88 [label="Exit block"];
}
60 [label="Exit function test_4" style="filled" fillcolor=red];
89 [label="Exit function test_4" style="filled" fillcolor=red];
}
59 -> {61};
61 -> {63};
62 -> {60};
63 -> {65};
64 -> {75};
65 -> {66};
66 -> {67};
67 -> {64 68};
68 -> {70};
69 -> {64};
67 -> {68};
68 -> {69};
69 -> {70};
70 -> {71};
71 -> {72};
72 -> {69 73};
71 -> {79 72};
72 -> {73};
73 -> {74};
74 -> {69};
75 -> {76 81};
74 -> {75};
75 -> {78 76};
76 -> {77};
77 -> {78};
78 -> {79};
79 -> {80};
80 -> {62};
81 -> {62};
80 -> {82 81};
81 -> {87};
82 -> {83};
83 -> {84};
84 -> {85};
85 -> {86};
86 -> {87};
87 -> {88};
88 -> {89};
}

View File

@@ -8,411 +8,467 @@ digraph booleanOperatorsWithConsts_kt {
0 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
2 [label="Enter when"];
1 [label="Enter block"];
subgraph cluster_2 {
color=blue
4 [label="Enter when branch condition "];
2 [label="Enter when"];
subgraph cluster_3 {
color=blue
6 [label="Enter ||"];
7 [label="Access variable R|<local>/b|"];
8 [label="Exit left part of ||"];
9 [label="Enter right part of ||"];
10 [label="Const: Boolean(false)"];
5 [label="Exit ||"];
3 [label="Enter when branch condition "];
subgraph cluster_4 {
color=blue
4 [label="Enter ||"];
5 [label="Access variable R|<local>/b|"];
6 [label="Exit left part of ||"];
7 [label="Enter right part of ||"];
8 [label="Const: Boolean(false)"];
9 [label="Exit ||"];
}
10 [label="Exit when branch condition"];
}
11 [label="Exit when branch condition"];
11 [label="Synthetic else branch"];
12 [label="Enter when branch result"];
subgraph cluster_5 {
color=blue
13 [label="Enter block"];
14 [label="Const: Int(1)"];
15 [label="Exit block"];
}
16 [label="Exit when branch result"];
17 [label="Exit when"];
}
17 [label="Synthetic else branch"];
12 [label="Enter when branch result"];
subgraph cluster_4 {
color=blue
13 [label="Enter block"];
14 [label="Const: Int(1)"];
15 [label="Exit block"];
}
16 [label="Exit when branch result"];
3 [label="Exit when"];
18 [label="Exit block"];
}
1 [label="Exit function test_1" style="filled" fillcolor=red];
19 [label="Exit function test_1" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {4};
3 -> {1};
4 -> {6};
5 -> {11};
6 -> {7};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
4 -> {5};
5 -> {6};
6 -> {9 7};
7 -> {8};
8 -> {5 9};
8 -> {9};
9 -> {10};
10 -> {5};
11 -> {12 17};
10 -> {12 11};
11 -> {17};
12 -> {13};
13 -> {14};
14 -> {15};
15 -> {16};
16 -> {3};
17 -> {3};
16 -> {17};
17 -> {18};
18 -> {19};
subgraph cluster_5 {
subgraph cluster_6 {
color=red
18 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_6 {
20 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
20 [label="Enter when"];
subgraph cluster_7 {
21 [label="Enter block"];
subgraph cluster_8 {
color=blue
22 [label="Enter when branch condition "];
subgraph cluster_8 {
22 [label="Enter when"];
subgraph cluster_9 {
color=blue
24 [label="Enter ||"];
25 [label="Const: Boolean(false)"];
26 [label="Exit left part of ||"];
27 [label="Enter right part of ||"];
28 [label="Access variable R|<local>/b|"];
23 [label="Exit ||"];
23 [label="Enter when branch condition "];
subgraph cluster_10 {
color=blue
24 [label="Enter ||"];
25 [label="Const: Boolean(false)"];
26 [label="Exit left part of ||"];
27 [label="Enter right part of ||"];
28 [label="Access variable R|<local>/b|"];
29 [label="Exit ||"];
}
30 [label="Exit when branch condition"];
}
29 [label="Exit when branch condition"];
31 [label="Synthetic else branch"];
32 [label="Enter when branch result"];
subgraph cluster_11 {
color=blue
33 [label="Enter block"];
34 [label="Const: Int(1)"];
35 [label="Exit block"];
}
36 [label="Exit when branch result"];
37 [label="Exit when"];
}
35 [label="Synthetic else branch"];
30 [label="Enter when branch result"];
subgraph cluster_9 {
color=blue
31 [label="Enter block"];
32 [label="Const: Int(1)"];
33 [label="Exit block"];
}
34 [label="Exit when branch result"];
21 [label="Exit when"];
38 [label="Exit block"];
}
19 [label="Exit function test_2" style="filled" fillcolor=red];
39 [label="Exit function test_2" style="filled" fillcolor=red];
}
18 -> {20};
20 -> {22};
21 -> {19};
22 -> {24};
23 -> {29};
20 -> {21};
21 -> {22};
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {26};
26 -> {27};
26 -> {23} [style=dotted];
26 -> {29} [style=dotted];
27 -> {28};
28 -> {23};
29 -> {30 35};
30 -> {31};
31 -> {32};
28 -> {29};
29 -> {30};
30 -> {32 31};
31 -> {37};
32 -> {33};
33 -> {34};
34 -> {21};
35 -> {21};
34 -> {35};
35 -> {36};
36 -> {37};
37 -> {38};
38 -> {39};
subgraph cluster_10 {
subgraph cluster_12 {
color=red
36 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_11 {
40 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_13 {
color=blue
38 [label="Enter when"];
subgraph cluster_12 {
color=blue
40 [label="Enter when branch condition "];
subgraph cluster_13 {
color=blue
42 [label="Enter ||"];
43 [label="Access variable R|<local>/b|"];
44 [label="Exit left part of ||"];
45 [label="Enter right part of ||"];
46 [label="Const: Boolean(true)"];
41 [label="Exit ||"];
}
47 [label="Exit when branch condition"];
}
53 [label="Synthetic else branch"];
48 [label="Enter when branch result"];
41 [label="Enter block"];
subgraph cluster_14 {
color=blue
49 [label="Enter block"];
50 [label="Const: Int(1)"];
51 [label="Exit block"];
42 [label="Enter when"];
subgraph cluster_15 {
color=blue
43 [label="Enter when branch condition "];
subgraph cluster_16 {
color=blue
44 [label="Enter ||"];
45 [label="Access variable R|<local>/b|"];
46 [label="Exit left part of ||"];
47 [label="Enter right part of ||"];
48 [label="Const: Boolean(true)"];
49 [label="Exit ||"];
}
50 [label="Exit when branch condition"];
}
51 [label="Synthetic else branch"];
52 [label="Enter when branch result"];
subgraph cluster_17 {
color=blue
53 [label="Enter block"];
54 [label="Const: Int(1)"];
55 [label="Exit block"];
}
56 [label="Exit when branch result"];
57 [label="Exit when"];
}
52 [label="Exit when branch result"];
39 [label="Exit when"];
58 [label="Exit block"];
}
37 [label="Exit function test_3" style="filled" fillcolor=red];
59 [label="Exit function test_3" style="filled" fillcolor=red];
}
36 -> {38};
38 -> {40};
39 -> {37};
40 -> {42};
41 -> {47};
40 -> {41};
41 -> {42};
42 -> {43};
43 -> {44};
44 -> {41 45};
44 -> {45};
45 -> {46};
46 -> {41};
47 -> {48 53};
46 -> {49 47};
47 -> {48};
48 -> {49};
49 -> {50};
50 -> {51};
51 -> {52};
52 -> {39};
53 -> {39};
50 -> {52 51};
51 -> {57};
52 -> {53};
53 -> {54};
54 -> {55};
55 -> {56};
56 -> {57};
57 -> {58};
58 -> {59};
subgraph cluster_15 {
subgraph cluster_18 {
color=red
54 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_16 {
60 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_19 {
color=blue
56 [label="Enter when"];
subgraph cluster_17 {
61 [label="Enter block"];
subgraph cluster_20 {
color=blue
58 [label="Enter when branch condition "];
subgraph cluster_18 {
62 [label="Enter when"];
subgraph cluster_21 {
color=blue
60 [label="Enter ||"];
61 [label="Const: Boolean(true)"];
62 [label="Exit left part of ||"];
63 [label="Enter right part of ||" style="filled" fillcolor=gray];
64 [label="Access variable R|<local>/b|" style="filled" fillcolor=gray];
59 [label="Exit ||"];
63 [label="Enter when branch condition "];
subgraph cluster_22 {
color=blue
64 [label="Enter ||"];
65 [label="Const: Boolean(true)"];
66 [label="Exit left part of ||"];
67 [label="Enter right part of ||" style="filled" fillcolor=gray];
68 [label="Access variable R|<local>/b|" style="filled" fillcolor=gray];
69 [label="Exit ||"];
}
70 [label="Exit when branch condition"];
}
65 [label="Exit when branch condition"];
}
71 [label="Synthetic else branch"];
66 [label="Enter when branch result"];
subgraph cluster_19 {
color=blue
67 [label="Enter block"];
68 [label="Const: Int(1)"];
69 [label="Exit block"];
}
70 [label="Exit when branch result"];
57 [label="Exit when"];
}
55 [label="Exit function test_4" style="filled" fillcolor=red];
}
54 -> {56};
56 -> {58};
57 -> {55};
58 -> {60};
59 -> {65};
60 -> {61};
61 -> {62};
62 -> {59};
62 -> {63} [style=dotted];
63 -> {64} [style=dotted];
64 -> {59} [style=dotted];
65 -> {66 71};
66 -> {67};
67 -> {68};
68 -> {69};
69 -> {70};
70 -> {57};
71 -> {57};
subgraph cluster_20 {
color=red
72 [label="Enter function test_5" style="filled" fillcolor=red];
subgraph cluster_21 {
color=blue
74 [label="Enter when"];
subgraph cluster_22 {
color=blue
76 [label="Enter when branch condition "];
71 [label="Synthetic else branch"];
72 [label="Enter when branch result"];
subgraph cluster_23 {
color=blue
78 [label="Enter &&"];
79 [label="Access variable R|<local>/b|"];
80 [label="Exit left part of &&"];
81 [label="Enter right part of &&"];
82 [label="Const: Boolean(false)"];
77 [label="Exit &&"];
73 [label="Enter block"];
74 [label="Const: Int(1)"];
75 [label="Exit block"];
}
83 [label="Exit when branch condition"];
76 [label="Exit when branch result"];
77 [label="Exit when"];
}
89 [label="Synthetic else branch"];
84 [label="Enter when branch result"];
subgraph cluster_24 {
color=blue
85 [label="Enter block"];
86 [label="Const: Int(1)"];
87 [label="Exit block"];
}
88 [label="Exit when branch result"];
75 [label="Exit when"];
78 [label="Exit block"];
}
73 [label="Exit function test_5" style="filled" fillcolor=red];
79 [label="Exit function test_4" style="filled" fillcolor=red];
}
72 -> {74};
74 -> {76};
75 -> {73};
76 -> {78};
77 -> {83};
60 -> {61};
61 -> {62};
62 -> {63};
63 -> {64};
64 -> {65};
65 -> {66};
66 -> {69};
66 -> {67} [style=dotted];
67 -> {68} [style=dotted];
68 -> {69} [style=dotted];
69 -> {70};
70 -> {72 71};
71 -> {77};
72 -> {73};
73 -> {74};
74 -> {75};
75 -> {76};
76 -> {77};
77 -> {78};
78 -> {79};
79 -> {80};
80 -> {77 81};
subgraph cluster_24 {
color=red
80 [label="Enter function test_5" style="filled" fillcolor=red];
subgraph cluster_25 {
color=blue
81 [label="Enter block"];
subgraph cluster_26 {
color=blue
82 [label="Enter when"];
subgraph cluster_27 {
color=blue
83 [label="Enter when branch condition "];
subgraph cluster_28 {
color=blue
84 [label="Enter &&"];
85 [label="Access variable R|<local>/b|"];
86 [label="Exit left part of &&"];
87 [label="Enter right part of &&"];
88 [label="Const: Boolean(false)"];
89 [label="Exit &&"];
}
90 [label="Exit when branch condition"];
}
91 [label="Synthetic else branch"];
92 [label="Enter when branch result"];
subgraph cluster_29 {
color=blue
93 [label="Enter block"];
94 [label="Const: Int(1)"];
95 [label="Exit block"];
}
96 [label="Exit when branch result"];
97 [label="Exit when"];
}
98 [label="Exit block"];
}
99 [label="Exit function test_5" style="filled" fillcolor=red];
}
80 -> {81};
81 -> {82};
82 -> {77};
83 -> {84 89};
82 -> {83};
83 -> {84};
84 -> {85};
85 -> {86};
86 -> {87};
86 -> {89 87};
87 -> {88};
88 -> {75};
89 -> {75};
subgraph cluster_25 {
color=red
90 [label="Enter function test_6" style="filled" fillcolor=red];
subgraph cluster_26 {
color=blue
92 [label="Enter when"];
subgraph cluster_27 {
color=blue
94 [label="Enter when branch condition "];
subgraph cluster_28 {
color=blue
96 [label="Enter &&"];
97 [label="Const: Boolean(false)"];
98 [label="Exit left part of &&"];
99 [label="Enter right part of &&" style="filled" fillcolor=gray];
100 [label="Access variable R|<local>/b|" style="filled" fillcolor=gray];
95 [label="Exit &&"];
}
101 [label="Exit when branch condition"];
}
107 [label="Synthetic else branch"];
102 [label="Enter when branch result"];
subgraph cluster_29 {
color=blue
103 [label="Enter block"];
104 [label="Const: Int(1)"];
105 [label="Exit block"];
}
106 [label="Exit when branch result"];
93 [label="Exit when"];
}
91 [label="Exit function test_6" style="filled" fillcolor=red];
}
90 -> {92};
92 -> {94};
93 -> {91};
94 -> {96};
95 -> {101};
88 -> {89};
89 -> {90};
90 -> {92 91};
91 -> {97};
92 -> {93};
93 -> {94};
94 -> {95};
95 -> {96};
96 -> {97};
97 -> {98};
98 -> {95};
98 -> {99} [style=dotted];
99 -> {100} [style=dotted];
100 -> {95} [style=dotted];
101 -> {102 107};
98 -> {99};
subgraph cluster_30 {
color=red
100 [label="Enter function test_6" style="filled" fillcolor=red];
subgraph cluster_31 {
color=blue
101 [label="Enter block"];
subgraph cluster_32 {
color=blue
102 [label="Enter when"];
subgraph cluster_33 {
color=blue
103 [label="Enter when branch condition "];
subgraph cluster_34 {
color=blue
104 [label="Enter &&"];
105 [label="Const: Boolean(false)"];
106 [label="Exit left part of &&"];
107 [label="Enter right part of &&" style="filled" fillcolor=gray];
108 [label="Access variable R|<local>/b|" style="filled" fillcolor=gray];
109 [label="Exit &&"];
}
110 [label="Exit when branch condition"];
}
111 [label="Synthetic else branch"];
112 [label="Enter when branch result"];
subgraph cluster_35 {
color=blue
113 [label="Enter block"];
114 [label="Const: Int(1)"];
115 [label="Exit block"];
}
116 [label="Exit when branch result"];
117 [label="Exit when"];
}
118 [label="Exit block"];
}
119 [label="Exit function test_6" style="filled" fillcolor=red];
}
100 -> {101};
101 -> {102};
102 -> {103};
103 -> {104};
104 -> {105};
105 -> {106};
106 -> {93};
107 -> {93};
subgraph cluster_30 {
color=red
108 [label="Enter function test_7" style="filled" fillcolor=red];
subgraph cluster_31 {
color=blue
110 [label="Enter when"];
subgraph cluster_32 {
color=blue
112 [label="Enter when branch condition "];
subgraph cluster_33 {
color=blue
114 [label="Enter &&"];
115 [label="Access variable R|<local>/b|"];
116 [label="Exit left part of &&"];
117 [label="Enter right part of &&"];
118 [label="Const: Boolean(true)"];
113 [label="Exit &&"];
}
119 [label="Exit when branch condition"];
}
125 [label="Synthetic else branch"];
120 [label="Enter when branch result"];
subgraph cluster_34 {
color=blue
121 [label="Enter block"];
122 [label="Const: Int(1)"];
123 [label="Exit block"];
}
124 [label="Exit when branch result"];
111 [label="Exit when"];
}
109 [label="Exit function test_7" style="filled" fillcolor=red];
}
108 -> {110};
110 -> {112};
111 -> {109};
112 -> {114};
113 -> {119};
106 -> {109};
106 -> {107} [style=dotted];
107 -> {108} [style=dotted];
108 -> {109} [style=dotted];
109 -> {110};
110 -> {112 111};
111 -> {117};
112 -> {113};
113 -> {114};
114 -> {115};
115 -> {116};
116 -> {113 117};
116 -> {117};
117 -> {118};
118 -> {113};
119 -> {120 125};
118 -> {119};
subgraph cluster_36 {
color=red
120 [label="Enter function test_7" style="filled" fillcolor=red];
subgraph cluster_37 {
color=blue
121 [label="Enter block"];
subgraph cluster_38 {
color=blue
122 [label="Enter when"];
subgraph cluster_39 {
color=blue
123 [label="Enter when branch condition "];
subgraph cluster_40 {
color=blue
124 [label="Enter &&"];
125 [label="Access variable R|<local>/b|"];
126 [label="Exit left part of &&"];
127 [label="Enter right part of &&"];
128 [label="Const: Boolean(true)"];
129 [label="Exit &&"];
}
130 [label="Exit when branch condition"];
}
131 [label="Synthetic else branch"];
132 [label="Enter when branch result"];
subgraph cluster_41 {
color=blue
133 [label="Enter block"];
134 [label="Const: Int(1)"];
135 [label="Exit block"];
}
136 [label="Exit when branch result"];
137 [label="Exit when"];
}
138 [label="Exit block"];
}
139 [label="Exit function test_7" style="filled" fillcolor=red];
}
120 -> {121};
121 -> {122};
122 -> {123};
123 -> {124};
124 -> {111};
125 -> {111};
subgraph cluster_35 {
color=red
126 [label="Enter function test_8" style="filled" fillcolor=red];
subgraph cluster_36 {
color=blue
128 [label="Enter when"];
subgraph cluster_37 {
color=blue
130 [label="Enter when branch condition "];
subgraph cluster_38 {
color=blue
132 [label="Enter &&"];
133 [label="Const: Boolean(true)"];
134 [label="Exit left part of &&"];
135 [label="Enter right part of &&"];
136 [label="Access variable R|<local>/b|"];
131 [label="Exit &&"];
}
137 [label="Exit when branch condition"];
}
143 [label="Synthetic else branch"];
138 [label="Enter when branch result"];
subgraph cluster_39 {
color=blue
139 [label="Enter block"];
140 [label="Const: Int(1)"];
141 [label="Exit block"];
}
142 [label="Exit when branch result"];
129 [label="Exit when"];
}
127 [label="Exit function test_8" style="filled" fillcolor=red];
}
126 -> {128};
128 -> {130};
129 -> {127};
130 -> {132};
124 -> {125};
125 -> {126};
126 -> {129 127};
127 -> {128};
128 -> {129};
129 -> {130};
130 -> {132 131};
131 -> {137};
132 -> {133};
133 -> {134};
134 -> {135};
134 -> {131} [style=dotted];
135 -> {136};
136 -> {131};
137 -> {138 143};
136 -> {137};
137 -> {138};
138 -> {139};
139 -> {140};
subgraph cluster_42 {
color=red
140 [label="Enter function test_8" style="filled" fillcolor=red];
subgraph cluster_43 {
color=blue
141 [label="Enter block"];
subgraph cluster_44 {
color=blue
142 [label="Enter when"];
subgraph cluster_45 {
color=blue
143 [label="Enter when branch condition "];
subgraph cluster_46 {
color=blue
144 [label="Enter &&"];
145 [label="Const: Boolean(true)"];
146 [label="Exit left part of &&"];
147 [label="Enter right part of &&"];
148 [label="Access variable R|<local>/b|"];
149 [label="Exit &&"];
}
150 [label="Exit when branch condition"];
}
151 [label="Synthetic else branch"];
152 [label="Enter when branch result"];
subgraph cluster_47 {
color=blue
153 [label="Enter block"];
154 [label="Const: Int(1)"];
155 [label="Exit block"];
}
156 [label="Exit when branch result"];
157 [label="Exit when"];
}
158 [label="Exit block"];
}
159 [label="Exit function test_8" style="filled" fillcolor=red];
}
140 -> {141};
141 -> {142};
142 -> {129};
143 -> {129};
142 -> {143};
143 -> {144};
144 -> {145};
145 -> {146};
146 -> {147};
146 -> {149} [style=dotted];
147 -> {148};
148 -> {149};
149 -> {150};
150 -> {152 151};
151 -> {157};
152 -> {153};
153 -> {154};
154 -> {155};
155 -> {156};
156 -> {157};
157 -> {158};
158 -> {159};
}

View File

@@ -5,106 +5,116 @@ digraph complex_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function close" style="filled" fillcolor=red];
1 [label="Exit function close" style="filled" fillcolor=red];
0 [label="Enter class AutoCloseable" style="filled" fillcolor=red];
1 [label="Exit class AutoCloseable" style="filled" fillcolor=red];
}
0 -> {1};
0 -> {1} [color=green];
subgraph cluster_1 {
color=red
2 [label="Enter class AutoCloseable" style="filled" fillcolor=red];
3 [label="Exit class AutoCloseable" style="filled" fillcolor=red];
2 [label="Enter function close" style="filled" fillcolor=red];
3 [label="Exit function close" style="filled" fillcolor=red];
}
2 -> {3} [color=green];
2 -> {3};
subgraph cluster_2 {
color=red
4 [label="Enter function addSuppressed" style="filled" fillcolor=red];
5 [label="Exit function addSuppressed" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
5 [label="Enter block"];
6 [label="Exit block"];
}
7 [label="Exit function addSuppressed" style="filled" fillcolor=red];
}
4 -> {5};
5 -> {6};
6 -> {7};
subgraph cluster_3 {
subgraph cluster_4 {
color=red
6 [label="Enter function closeFinally" style="filled" fillcolor=red];
subgraph cluster_4 {
8 [label="Enter function closeFinally" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
8 [label="Enter when"];
subgraph cluster_5 {
color=blue
10 [label="Enter when branch condition "];
11 [label="Access variable this@R|/closeFinally|"];
12 [label="Const: Null(null)"];
13 [label="Operator =="];
14 [label="Exit when branch condition"];
}
9 [label="Enter block"];
subgraph cluster_6 {
color=blue
19 [label="Enter when branch condition "];
20 [label="Access variable R|<local>/cause|"];
21 [label="Const: Null(null)"];
22 [label="Operator =="];
23 [label="Exit when branch condition"];
}
subgraph cluster_7 {
color=blue
29 [label="Enter when branch condition else"];
30 [label="Exit when branch condition"];
}
31 [label="Enter when branch result"];
subgraph cluster_8 {
color=blue
32 [label="Enter block"];
10 [label="Enter when"];
subgraph cluster_7 {
color=blue
11 [label="Enter when branch condition "];
12 [label="Access variable this@R|/closeFinally|"];
13 [label="Const: Null(null)"];
14 [label="Operator =="];
15 [label="Exit when branch condition"];
}
subgraph cluster_8 {
color=blue
16 [label="Enter when branch condition "];
17 [label="Access variable R|<local>/cause|"];
18 [label="Const: Null(null)"];
19 [label="Operator =="];
20 [label="Exit when branch condition"];
}
subgraph cluster_9 {
color=blue
33 [label="Try expression enter"];
subgraph cluster_10 {
color=blue
35 [label="Try main block enter"];
subgraph cluster_11 {
color=blue
37 [label="Enter block"];
38 [label="Function call: this@R|/closeFinally|.R|/AutoCloseable.close|()"];
39 [label="Exit block"];
}
40 [label="Try main block exit"];
}
subgraph cluster_12 {
color=blue
36 [label="Catch enter"];
subgraph cluster_13 {
color=blue
41 [label="Enter block"];
42 [label="Access variable R|<local>/cause|"];
43 [label="Access variable R|<local>/closeException|"];
44 [label="Function call: R|<local>/cause|.R|/addSuppressed|(...)"];
45 [label="Exit block"];
}
46 [label="Catch exit"];
}
34 [label="Try expression exit"];
21 [label="Enter when branch condition else"];
22 [label="Exit when branch condition"];
}
47 [label="Exit block"];
23 [label="Enter when branch result"];
subgraph cluster_10 {
color=blue
24 [label="Enter block"];
subgraph cluster_11 {
color=blue
25 [label="Try expression enter"];
subgraph cluster_12 {
color=blue
26 [label="Try main block enter"];
subgraph cluster_13 {
color=blue
27 [label="Enter block"];
28 [label="Function call: this@R|/closeFinally|.R|/AutoCloseable.close|()"];
29 [label="Exit block"];
}
30 [label="Try main block exit"];
}
subgraph cluster_14 {
color=blue
31 [label="Catch enter"];
subgraph cluster_15 {
color=blue
32 [label="Enter block"];
33 [label="Access variable R|<local>/cause|"];
34 [label="Access variable R|<local>/closeException|"];
35 [label="Function call: R|<local>/cause|.R|/addSuppressed|(...)"];
36 [label="Exit block"];
}
37 [label="Catch exit"];
}
38 [label="Try expression exit"];
}
39 [label="Exit block"];
}
40 [label="Exit when branch result"];
41 [label="Enter when branch result"];
subgraph cluster_16 {
color=blue
42 [label="Enter block"];
43 [label="Function call: this@R|/closeFinally|.R|/AutoCloseable.close|()"];
44 [label="Exit block"];
}
45 [label="Exit when branch result"];
46 [label="Enter when branch result"];
subgraph cluster_17 {
color=blue
47 [label="Enter block"];
48 [label="Exit block"];
}
49 [label="Exit when branch result"];
50 [label="Exit when"];
}
48 [label="Exit when branch result"];
24 [label="Enter when branch result"];
subgraph cluster_14 {
color=blue
25 [label="Enter block"];
26 [label="Function call: this@R|/closeFinally|.R|/AutoCloseable.close|()"];
27 [label="Exit block"];
}
28 [label="Exit when branch result"];
15 [label="Enter when branch result"];
subgraph cluster_15 {
color=blue
16 [label="Enter block"];
17 [label="Exit block"];
}
18 [label="Exit when branch result"];
9 [label="Exit when"];
}
49 [label="Jump: ^closeFinally when () {
51 [label="Jump: ^closeFinally when () {
==(this@R|/closeFinally|, Null(null)) -> {
}
==(R|<local>/cause|, Null(null)) -> {
@@ -121,149 +131,160 @@ digraph complex_kt {
}
}
"];
50 [label="Stub" style="filled" fillcolor=gray];
7 [label="Exit function closeFinally" style="filled" fillcolor=red];
52 [label="Stub" style="filled" fillcolor=gray];
53 [label="Exit block" style="filled" fillcolor=gray];
}
54 [label="Exit function closeFinally" style="filled" fillcolor=red];
}
6 -> {8};
8 -> {10};
9 -> {49};
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {12};
12 -> {13};
13 -> {14};
14 -> {15 19};
15 -> {16};
14 -> {15};
15 -> {46 16};
16 -> {17};
17 -> {18};
18 -> {9};
18 -> {19};
19 -> {20};
20 -> {21};
20 -> {41 21};
21 -> {22};
22 -> {23};
23 -> {24 29};
23 -> {24};
24 -> {25};
25 -> {26};
26 -> {27};
26 -> {54 31 27};
27 -> {28};
28 -> {9};
28 -> {29};
29 -> {30};
30 -> {31};
31 -> {32};
30 -> {38};
31 -> {54 32};
32 -> {33};
33 -> {35};
34 -> {47};
35 -> {7 36 37};
36 -> {7 41};
33 -> {34};
34 -> {35};
35 -> {36};
36 -> {37};
37 -> {38};
38 -> {39};
39 -> {40};
40 -> {34};
40 -> {50};
41 -> {42};
42 -> {43};
43 -> {44};
44 -> {45};
45 -> {46};
46 -> {34};
45 -> {50};
46 -> {47};
47 -> {48};
48 -> {9};
49 -> {7};
49 -> {50} [style=dotted];
50 -> {7} [style=dotted];
48 -> {49};
49 -> {50};
50 -> {51};
51 -> {54};
51 -> {52} [style=dotted];
52 -> {53} [style=dotted];
53 -> {54} [style=dotted];
subgraph cluster_16 {
subgraph cluster_18 {
color=red
51 [label="Enter function firstIsInstanceOrNull" style="filled" fillcolor=red];
53 [label="Access variable this@R|/firstIsInstanceOrNull|"];
54 [label="Function call: this@R|/firstIsInstanceOrNull|.R|FakeOverride<kotlin/collections/List.iterator: R|kotlin/collections/Iterator<kotlin/Any?>|>|()"];
55 [label="Variable declaration: lval <iterator>: R|kotlin/collections/Iterator<kotlin/Any?>|"];
subgraph cluster_17 {
55 [label="Enter function firstIsInstanceOrNull" style="filled" fillcolor=red];
subgraph cluster_19 {
color=blue
56 [label="Enter while loop"];
subgraph cluster_18 {
56 [label="Enter block"];
57 [label="Access variable this@R|/firstIsInstanceOrNull|"];
58 [label="Function call: this@R|/firstIsInstanceOrNull|.R|FakeOverride<kotlin/collections/List.iterator: R|kotlin/collections/Iterator<kotlin/Any?>|>|()"];
59 [label="Variable declaration: lval <iterator>: R|kotlin/collections/Iterator<kotlin/Any?>|"];
subgraph cluster_20 {
color=blue
58 [label="Enter loop condition"];
59 [label="Access variable R|<local>/<iterator>|"];
60 [label="Function call: R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()"];
61 [label="Exit loop condition"];
}
subgraph cluster_19 {
color=blue
62 [label="Enter loop block"];
subgraph cluster_20 {
60 [label="Enter while loop"];
subgraph cluster_21 {
color=blue
63 [label="Enter block"];
64 [label="Access variable R|<local>/<iterator>|"];
65 [label="Function call: R|<local>/<iterator>|.R|FakeOverride<kotlin/collections/Iterator.next: R|kotlin/Any?|>|()"];
66 [label="Variable declaration: lval element: R|kotlin/Any?|"];
subgraph cluster_21 {
color=blue
67 [label="Enter when"];
subgraph cluster_22 {
color=blue
69 [label="Enter when branch condition "];
70 [label="Access variable R|<local>/element|"];
71 [label="Type operator: (R|<local>/element| is R|T|)"];
72 [label="Exit when branch condition"];
}
80 [label="Synthetic else branch"];
73 [label="Enter when branch result"];
subgraph cluster_23 {
color=blue
74 [label="Enter block"];
75 [label="Access variable R|<local>/element|"];
76 [label="Jump: ^firstIsInstanceOrNull R|<local>/element|"];
77 [label="Stub" style="filled" fillcolor=gray];
78 [label="Exit block" style="filled" fillcolor=gray];
}
79 [label="Exit when branch result" style="filled" fillcolor=gray];
68 [label="Exit when"];
}
81 [label="Exit block"];
61 [label="Enter loop condition"];
62 [label="Access variable R|<local>/<iterator>|"];
63 [label="Function call: R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()"];
64 [label="Exit loop condition"];
}
82 [label="Exit loop block"];
subgraph cluster_22 {
color=blue
65 [label="Enter loop block"];
subgraph cluster_23 {
color=blue
66 [label="Enter block"];
67 [label="Access variable R|<local>/<iterator>|"];
68 [label="Function call: R|<local>/<iterator>|.R|FakeOverride<kotlin/collections/Iterator.next: R|kotlin/Any?|>|()"];
69 [label="Variable declaration: lval element: R|kotlin/Any?|"];
subgraph cluster_24 {
color=blue
70 [label="Enter when"];
subgraph cluster_25 {
color=blue
71 [label="Enter when branch condition "];
72 [label="Access variable R|<local>/element|"];
73 [label="Type operator: (R|<local>/element| is R|T|)"];
74 [label="Exit when branch condition"];
}
75 [label="Synthetic else branch"];
76 [label="Enter when branch result"];
subgraph cluster_26 {
color=blue
77 [label="Enter block"];
78 [label="Access variable R|<local>/element|"];
79 [label="Jump: ^firstIsInstanceOrNull R|<local>/element|"];
80 [label="Stub" style="filled" fillcolor=gray];
81 [label="Exit block" style="filled" fillcolor=gray];
}
82 [label="Exit when branch result" style="filled" fillcolor=gray];
83 [label="Exit when"];
}
84 [label="Exit block"];
}
85 [label="Exit loop block"];
}
86 [label="Exit whileloop"];
}
57 [label="Exit whileloop"];
87 [label="Const: Null(null)"];
88 [label="Jump: ^firstIsInstanceOrNull Null(null)"];
89 [label="Stub" style="filled" fillcolor=gray];
90 [label="Exit block" style="filled" fillcolor=gray];
}
83 [label="Const: Null(null)"];
84 [label="Jump: ^firstIsInstanceOrNull Null(null)"];
85 [label="Stub" style="filled" fillcolor=gray];
52 [label="Exit function firstIsInstanceOrNull" style="filled" fillcolor=red];
91 [label="Exit function firstIsInstanceOrNull" style="filled" fillcolor=red];
}
51 -> {53};
53 -> {54};
54 -> {55};
55 -> {56};
56 -> {58};
57 -> {83};
56 -> {57};
57 -> {58};
58 -> {59};
59 -> {60};
60 -> {61};
61 -> {57 62};
61 -> {62};
62 -> {63};
63 -> {64};
64 -> {65};
64 -> {86 65};
65 -> {66};
66 -> {67};
67 -> {69};
68 -> {81};
67 -> {68};
68 -> {69};
69 -> {70};
70 -> {71};
71 -> {72};
72 -> {73 80};
72 -> {73};
73 -> {74};
74 -> {75};
75 -> {76};
76 -> {52};
76 -> {77} [style=dotted];
77 -> {78} [style=dotted];
78 -> {79} [style=dotted];
79 -> {68} [style=dotted];
80 -> {68};
81 -> {82};
82 -> {58};
74 -> {76 75};
75 -> {83};
76 -> {77};
77 -> {78};
78 -> {79};
79 -> {91};
79 -> {80} [style=dotted];
80 -> {81} [style=dotted];
81 -> {82} [style=dotted];
82 -> {83} [style=dotted];
83 -> {84};
84 -> {52};
84 -> {85} [style=dotted];
85 -> {52} [style=dotted];
84 -> {85};
85 -> {61} [color=green style=dashed];
86 -> {87};
87 -> {88};
88 -> {91};
88 -> {89} [style=dotted];
89 -> {90} [style=dotted];
90 -> {91} [style=dotted];
}

View File

@@ -0,0 +1,85 @@
digraph defaultArguments_kt {
graph [nodesep=3]
node [shape=box penwidth=2]
edge [penwidth=2]
subgraph cluster_0 {
color=red
0 [label="Enter function foo" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
1 [label="Enter block"];
2 [label="Const: Int(1)"];
3 [label="Jump: ^foo Int(1)"];
4 [label="Stub" style="filled" fillcolor=gray];
5 [label="Exit block" style="filled" fillcolor=gray];
}
6 [label="Exit function foo" style="filled" fillcolor=red];
}
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {6};
3 -> {4} [style=dotted];
4 -> {5} [style=dotted];
5 -> {6} [style=dotted];
subgraph cluster_2 {
color=red
7 [label="Enter function test" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
16 [label="Enter default value of z" style="filled" fillcolor=red];
17 [label="Postponed enter to lambda"];
subgraph cluster_4 {
color=blue
22 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
23 [label="Enter block"];
24 [label="Function call: R|/foo|()"];
25 [label="Exit block"];
}
26 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
18 [label="Call arguments union" style="filled" fillcolor=yellow];
19 [label="Postponed exit from lambda"];
20 [label="Function call: R|kotlin/run|<R|kotlin/Int|>(...)"];
21 [label="Exit default value of z" style="filled" fillcolor=red];
}
subgraph cluster_6 {
color=blue
12 [label="Enter default value of y" style="filled" fillcolor=red];
13 [label="Access variable R|<local>/x|"];
14 [label="Type operator: (R|<local>/x| as R|kotlin/String|)"];
15 [label="Exit default value of y" style="filled" fillcolor=red];
}
subgraph cluster_7 {
color=blue
8 [label="Enter block"];
9 [label="Function call: R|/foo|()"];
10 [label="Exit block"];
}
11 [label="Exit function test" style="filled" fillcolor=red];
}
7 -> {12 16 8};
8 -> {9};
9 -> {10};
10 -> {11};
12 -> {13};
13 -> {14};
14 -> {15};
16 -> {17};
17 -> {22};
17 -> {19} [color=red];
18 -> {20} [color=red];
19 -> {20} [color=green];
20 -> {21};
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {26};
26 -> {18} [color=red];
26 -> {19} [color=green];
}

View File

@@ -0,0 +1,7 @@
// !DUMP_CFG
fun foo(): Int = 1
fun test(x: Any, y: String = x as String, z: Int = run { foo() }) {
foo()
}

View File

@@ -0,0 +1,10 @@
FILE: defaultArguments.kt
public final fun foo(): R|kotlin/Int| {
^foo Int(1)
}
public final fun test(x: R|kotlin/Any|, y: R|kotlin/String| = (R|<local>/x| as R|kotlin/String|), z: R|kotlin/Int| = R|kotlin/run|<R|kotlin/Int|>(<L> = run@fun <anonymous>(): R|kotlin/Int| <kind=EXACTLY_ONCE> {
^ R|/foo|()
}
)): R|kotlin/Unit| {
R|/foo|()
}

View File

@@ -8,53 +8,74 @@ digraph emptyWhen_kt {
0 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
2 [label="Enter when"];
4 [label="Synthetic else branch"];
3 [label="Exit when"];
1 [label="Enter block"];
subgraph cluster_2 {
color=blue
2 [label="Enter when"];
3 [label="Synthetic else branch"];
4 [label="Exit when"];
}
5 [label="Exit block"];
}
1 [label="Exit function test_1" style="filled" fillcolor=red];
6 [label="Exit function test_1" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {4};
3 -> {1};
4 -> {3};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
4 -> {5};
5 -> {6};
subgraph cluster_2 {
subgraph cluster_3 {
color=red
5 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_3 {
7 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_4 {
color=blue
7 [label="Enter when"];
9 [label="Access variable R|<local>/x|"];
10 [label="Synthetic else branch"];
8 [label="Exit when"];
8 [label="Enter block"];
subgraph cluster_5 {
color=blue
9 [label="Enter when"];
10 [label="Access variable R|<local>/x|"];
11 [label="Synthetic else branch"];
12 [label="Exit when"];
}
13 [label="Exit block"];
}
6 [label="Exit function test_2" style="filled" fillcolor=red];
14 [label="Exit function test_2" style="filled" fillcolor=red];
}
5 -> {7};
7 -> {9};
8 -> {6};
7 -> {8};
8 -> {9};
9 -> {10};
10 -> {8};
10 -> {11};
11 -> {12};
12 -> {13};
13 -> {14};
subgraph cluster_4 {
subgraph cluster_6 {
color=red
11 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_5 {
15 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
13 [label="Enter when"];
15 [label="Access variable R|<local>/x|"];
16 [label="Variable declaration: lval y: R|kotlin/Int|"];
17 [label="Synthetic else branch"];
14 [label="Exit when"];
16 [label="Enter block"];
subgraph cluster_8 {
color=blue
17 [label="Enter when"];
18 [label="Access variable R|<local>/x|"];
19 [label="Variable declaration: lval y: R|kotlin/Int|"];
20 [label="Synthetic else branch"];
21 [label="Exit when"];
}
22 [label="Exit block"];
}
12 [label="Exit function test_3" style="filled" fillcolor=red];
23 [label="Exit function test_3" style="filled" fillcolor=red];
}
11 -> {13};
13 -> {15};
14 -> {12};
15 -> {16};
16 -> {17};
17 -> {14};
17 -> {18};
18 -> {19};
19 -> {20};
20 -> {21};
21 -> {22};
22 -> {23};
}

View File

@@ -6,428 +6,579 @@ digraph flowFromInplaceLambda_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function takeInt" style="filled" fillcolor=red];
1 [label="Exit function takeInt" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
1 [label="Enter block"];
2 [label="Exit block"];
}
3 [label="Exit function takeInt" style="filled" fillcolor=red];
}
0 -> {1};
subgraph cluster_1 {
color=red
2 [label="Enter function select" style="filled" fillcolor=red];
4 [label="Access variable R|<local>/x|"];
5 [label="Const: Int(0)"];
6 [label="Function call: R|<local>/x|.R|FakeOverride<kotlin/Array.get: R|K|>|(...)"];
7 [label="Jump: ^select R|<local>/x|.R|FakeOverride<kotlin/Array.get: R|K|>|(Int(0))"];
8 [label="Stub" style="filled" fillcolor=gray];
3 [label="Exit function select" style="filled" fillcolor=red];
}
2 -> {4};
4 -> {5};
5 -> {6};
6 -> {7};
7 -> {3};
7 -> {8} [style=dotted];
8 -> {3} [style=dotted];
1 -> {2};
2 -> {3};
subgraph cluster_2 {
color=red
9 [label="Enter function id" style="filled" fillcolor=red];
11 [label="Access variable R|<local>/x|"];
12 [label="Jump: ^id R|<local>/x|"];
13 [label="Stub" style="filled" fillcolor=gray];
10 [label="Exit function id" style="filled" fillcolor=red];
4 [label="Enter function select" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
5 [label="Enter block"];
6 [label="Access variable R|<local>/x|"];
7 [label="Const: Int(0)"];
8 [label="Function call: R|<local>/x|.R|FakeOverride<kotlin/Array.get: R|K|>|(...)"];
9 [label="Jump: ^select R|<local>/x|.R|FakeOverride<kotlin/Array.get: R|K|>|(Int(0))"];
10 [label="Stub" style="filled" fillcolor=gray];
11 [label="Exit block" style="filled" fillcolor=gray];
}
12 [label="Exit function select" style="filled" fillcolor=red];
}
9 -> {11};
11 -> {12};
12 -> {10};
12 -> {13} [style=dotted];
13 -> {10} [style=dotted];
subgraph cluster_3 {
color=red
14 [label="Enter function materialize" style="filled" fillcolor=red];
16 [label="Const: Null(null)"];
17 [label="Check not null: Null(null)!!"];
18 [label="Jump: ^materialize Null(null)!!"];
19 [label="Stub" style="filled" fillcolor=gray];
15 [label="Exit function materialize" style="filled" fillcolor=red];
}
14 -> {16};
16 -> {17};
17 -> {18};
18 -> {15};
18 -> {19} [style=dotted];
19 -> {15} [style=dotted];
4 -> {5};
5 -> {6};
6 -> {7};
7 -> {8};
8 -> {9};
9 -> {12};
9 -> {10} [style=dotted];
10 -> {11} [style=dotted];
11 -> {12} [style=dotted];
subgraph cluster_4 {
color=red
20 [label="Enter function myRun" style="filled" fillcolor=red];
22 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|R|>|()"];
23 [label="Jump: ^myRun R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|R|>|()"];
24 [label="Stub" style="filled" fillcolor=gray];
21 [label="Exit function myRun" style="filled" fillcolor=red];
13 [label="Enter function id" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
14 [label="Enter block"];
15 [label="Access variable R|<local>/x|"];
16 [label="Jump: ^id R|<local>/x|"];
17 [label="Stub" style="filled" fillcolor=gray];
18 [label="Exit block" style="filled" fillcolor=gray];
}
19 [label="Exit function id" style="filled" fillcolor=red];
}
20 -> {22};
13 -> {14};
14 -> {15};
15 -> {16};
16 -> {19};
16 -> {17} [style=dotted];
17 -> {18} [style=dotted];
18 -> {19} [style=dotted];
subgraph cluster_6 {
color=red
20 [label="Enter function materialize" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
21 [label="Enter block"];
22 [label="Const: Null(null)"];
23 [label="Check not null: Null(null)!!"];
24 [label="Jump: ^materialize Null(null)!!"];
25 [label="Stub" style="filled" fillcolor=gray];
26 [label="Exit block" style="filled" fillcolor=gray];
}
27 [label="Exit function materialize" style="filled" fillcolor=red];
}
20 -> {21};
21 -> {22};
22 -> {23};
23 -> {21};
23 -> {24} [style=dotted];
24 -> {21} [style=dotted];
23 -> {24};
24 -> {27};
24 -> {25} [style=dotted];
25 -> {26} [style=dotted];
26 -> {27} [style=dotted];
subgraph cluster_5 {
subgraph cluster_8 {
color=red
25 [label="Enter function test_1" style="filled" fillcolor=red];
27 [label="Postponed enter to lambda"];
subgraph cluster_6 {
color=blue
33 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
35 [label="Access variable R|<local>/x|"];
36 [label="Type operator: (R|<local>/x| as R|kotlin/Int|)"];
34 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
30 [label="Call arguments union" style="filled" fillcolor=yellow];
28 [label="Postponed exit from lambda"];
29 [label="Function call: R|kotlin/run|<R|kotlin/Int|>(...)"];
31 [label="Access variable R|<local>/x|"];
32 [label="Function call: R|/takeInt|(...)"];
26 [label="Exit function test_1" style="filled" fillcolor=red];
}
25 -> {27};
27 -> {33};
27 -> {28} [color=red];
28 -> {29} [color=green];
29 -> {31};
30 -> {29} [color=red];
31 -> {32};
32 -> {26};
33 -> {35};
34 -> {28} [color=green];
34 -> {30} [color=red];
35 -> {36};
36 -> {34};
subgraph cluster_7 {
color=red
37 [label="Enter function test_2" style="filled" fillcolor=red];
39 [label="Postponed enter to lambda"];
subgraph cluster_8 {
color=blue
58 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
60 [label="Access variable R|<local>/y|"];
61 [label="Function call: R|<local>/y|.<Unresolved name: inc>#()"];
62 [label="Access variable R|<local>/x|"];
63 [label="Type operator: (R|<local>/x| as R|kotlin/Int|)"];
59 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
40 [label="Postponed exit from lambda"];
41 [label="Function call: R|kotlin/run|<R|kotlin/Int|>(...)"];
43 [label="Call arguments union" style="filled" fillcolor=yellow];
42 [label="Function call: R|/id|<R|kotlin/Int|>(...)"];
44 [label="Access variable R|<local>/y|"];
45 [label="Type operator: (R|<local>/y| as R|kotlin/Int|)"];
46 [label="Postponed enter to lambda"];
28 [label="Enter function myRun" style="filled" fillcolor=red];
subgraph cluster_9 {
color=blue
64 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
66 [label="Access variable R|<local>/x|"];
67 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
68 [label="Access variable R|<local>/y|"];
69 [label="Function call: R|<local>/y|.R|kotlin/Int.inc|()"];
70 [label="Const: Int(1)"];
65 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
29 [label="Enter block"];
30 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|R|>|()"];
31 [label="Jump: ^myRun R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|R|>|()"];
32 [label="Stub" style="filled" fillcolor=gray];
33 [label="Exit block" style="filled" fillcolor=gray];
}
47 [label="Postponed exit from lambda"];
48 [label="Function call: R|kotlin/run|<R|kotlin/Int|>(...)"];
50 [label="Call arguments union" style="filled" fillcolor=yellow];
49 [label="Function call: R|/select|<R|kotlin/Int|>(...)"];
51 [label="Variable declaration: lval a: R|kotlin/Int|"];
52 [label="Access variable R|<local>/x|"];
53 [label="Function call: R|/takeInt|(...)"];
54 [label="Access variable R|<local>/y|"];
55 [label="Function call: R|/takeInt|(...)"];
56 [label="Access variable R|<local>/a|"];
57 [label="Function call: R|/takeInt|(...)"];
38 [label="Exit function test_2" style="filled" fillcolor=red];
34 [label="Exit function myRun" style="filled" fillcolor=red];
}
37 -> {39};
39 -> {58};
39 -> {40} [color=red];
28 -> {29};
29 -> {30};
30 -> {31};
31 -> {34};
31 -> {32} [style=dotted];
32 -> {33} [style=dotted];
33 -> {34} [style=dotted];
subgraph cluster_10 {
color=red
35 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_11 {
color=blue
36 [label="Enter block"];
37 [label="Postponed enter to lambda"];
subgraph cluster_12 {
color=blue
45 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_13 {
color=blue
46 [label="Enter block"];
47 [label="Access variable R|<local>/x|"];
48 [label="Type operator: (R|<local>/x| as R|kotlin/Int|)"];
49 [label="Exit block"];
}
50 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
38 [label="Call arguments union" style="filled" fillcolor=yellow];
39 [label="Postponed exit from lambda"];
40 [label="Function call: R|kotlin/run|<R|kotlin/Int|>(...)"];
41 [label="Access variable R|<local>/x|"];
42 [label="Function call: R|/takeInt|(...)"];
43 [label="Exit block"];
}
44 [label="Exit function test_1" style="filled" fillcolor=red];
}
35 -> {36};
36 -> {37};
37 -> {45};
37 -> {39} [color=red];
38 -> {40} [color=red];
39 -> {40} [color=green];
40 -> {41};
41 -> {43};
42 -> {44};
43 -> {42};
44 -> {45};
41 -> {42};
42 -> {43};
43 -> {44};
45 -> {46};
46 -> {64};
46 -> {47} [color=red];
46 -> {47};
47 -> {48};
48 -> {50};
49 -> {51};
50 -> {49};
48 -> {49};
49 -> {50};
50 -> {38} [color=red];
50 -> {39} [color=green];
subgraph cluster_14 {
color=red
51 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_15 {
color=blue
52 [label="Enter block"];
53 [label="Postponed enter to lambda"];
subgraph cluster_16 {
color=blue
74 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_17 {
color=blue
75 [label="Enter block"];
76 [label="Access variable R|<local>/y|"];
77 [label="Function call: R|<local>/y|.<Unresolved name: inc>#()"];
78 [label="Access variable R|<local>/x|"];
79 [label="Type operator: (R|<local>/x| as R|kotlin/Int|)"];
80 [label="Exit block"];
}
81 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
54 [label="Postponed exit from lambda"];
55 [label="Function call: R|kotlin/run|<R|kotlin/Int|>(...)"];
56 [label="Call arguments union" style="filled" fillcolor=yellow];
57 [label="Function call: R|/id|<R|kotlin/Int|>(...)"];
58 [label="Access variable R|<local>/y|"];
59 [label="Type operator: (R|<local>/y| as R|kotlin/Int|)"];
60 [label="Postponed enter to lambda"];
subgraph cluster_18 {
color=blue
82 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_19 {
color=blue
83 [label="Enter block"];
84 [label="Access variable R|<local>/x|"];
85 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
86 [label="Access variable R|<local>/y|"];
87 [label="Function call: R|<local>/y|.R|kotlin/Int.inc|()"];
88 [label="Const: Int(1)"];
89 [label="Exit block"];
}
90 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
61 [label="Postponed exit from lambda"];
62 [label="Function call: R|kotlin/run|<R|kotlin/Int|>(...)"];
63 [label="Call arguments union" style="filled" fillcolor=yellow];
64 [label="Function call: R|/select|<R|kotlin/Int|>(...)"];
65 [label="Variable declaration: lval a: R|kotlin/Int|"];
66 [label="Access variable R|<local>/x|"];
67 [label="Function call: R|/takeInt|(...)"];
68 [label="Access variable R|<local>/y|"];
69 [label="Function call: R|/takeInt|(...)"];
70 [label="Access variable R|<local>/a|"];
71 [label="Function call: R|/takeInt|(...)"];
72 [label="Exit block"];
}
73 [label="Exit function test_2" style="filled" fillcolor=red];
}
51 -> {52};
52 -> {53};
53 -> {54};
53 -> {74};
53 -> {54} [color=red];
54 -> {55};
55 -> {56};
56 -> {57};
57 -> {38};
58 -> {60};
59 -> {40} [color=green];
59 -> {43} [color=red];
60 -> {61};
57 -> {58};
58 -> {59};
59 -> {60};
60 -> {82};
60 -> {61} [color=red];
61 -> {62};
62 -> {63};
63 -> {59};
64 -> {66};
65 -> {47} [color=green];
65 -> {50} [color=red];
63 -> {64};
64 -> {65};
65 -> {66};
66 -> {67};
67 -> {68};
68 -> {69};
69 -> {70};
70 -> {65};
subgraph cluster_10 {
color=red
71 [label="Enter function test_3" style="filled" fillcolor=red];
73 [label="Postponed enter to lambda"];
subgraph cluster_11 {
color=blue
89 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
91 [label="Access variable R|<local>/y|"];
92 [label="Function call: R|<local>/y|.<Unresolved name: inc>#()"];
93 [label="Access variable R|<local>/x|"];
94 [label="Type operator: (R|<local>/x| as R|kotlin/Int|)"];
95 [label="Function call: R|/materialize|<R|kotlin/Int|>()"];
90 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
74 [label="Postponed exit from lambda"];
75 [label="Function call: R|kotlin/run|<R|kotlin/Int|>(...)"];
76 [label="Function call: R|/id|<R|kotlin/Int|>(...)"];
77 [label="Postponed enter to lambda"];
subgraph cluster_12 {
color=blue
96 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
98 [label="Access variable R|<local>/y|"];
99 [label="Type operator: (R|<local>/y| as R|kotlin/Int|)"];
100 [label="Access variable R|<local>/x|"];
101 [label="Function call: R|<local>/x|.<Unresolved name: inc>#()"];
102 [label="Access variable R|<local>/y|"];
103 [label="Function call: R|<local>/y|.R|kotlin/Int.inc|()"];
104 [label="Const: Int(1)"];
97 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
78 [label="Postponed exit from lambda"];
79 [label="Function call: R|kotlin/run|<R|kotlin/Int|>(...)"];
81 [label="Call arguments union" style="filled" fillcolor=yellow];
80 [label="Function call: R|/select|<R|kotlin/Int|>(...)"];
82 [label="Variable declaration: lval a: R|kotlin/Int|"];
83 [label="Access variable R|<local>/x|"];
84 [label="Function call: R|/takeInt|(...)"];
85 [label="Access variable R|<local>/y|"];
86 [label="Function call: R|/takeInt|(...)"];
87 [label="Access variable R|<local>/a|"];
88 [label="Function call: R|/takeInt|(...)"];
72 [label="Exit function test_3" style="filled" fillcolor=red];
}
71 -> {73};
73 -> {89};
73 -> {74} [color=red];
70 -> {71};
71 -> {72};
72 -> {73};
74 -> {75};
75 -> {76};
76 -> {77};
77 -> {96};
77 -> {78} [color=red];
77 -> {78};
78 -> {79};
79 -> {81};
80 -> {82};
81 -> {80};
79 -> {80};
80 -> {81};
81 -> {56} [color=red];
81 -> {54} [color=green];
82 -> {83};
83 -> {84};
84 -> {85};
85 -> {86};
86 -> {87};
87 -> {88};
88 -> {72};
89 -> {91};
90 -> {74} [color=green];
90 -> {81} [color=red];
88 -> {89};
89 -> {90};
90 -> {63} [color=red];
90 -> {61} [color=green];
subgraph cluster_20 {
color=red
91 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_21 {
color=blue
92 [label="Enter block"];
93 [label="Postponed enter to lambda"];
subgraph cluster_22 {
color=blue
111 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_23 {
color=blue
112 [label="Enter block"];
113 [label="Access variable R|<local>/y|"];
114 [label="Function call: R|<local>/y|.<Unresolved name: inc>#()"];
115 [label="Access variable R|<local>/x|"];
116 [label="Type operator: (R|<local>/x| as R|kotlin/Int|)"];
117 [label="Function call: R|/materialize|<R|kotlin/Int|>()"];
118 [label="Exit block"];
}
119 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
94 [label="Postponed exit from lambda"];
95 [label="Function call: R|kotlin/run|<R|kotlin/Int|>(...)"];
96 [label="Function call: R|/id|<R|kotlin/Int|>(...)"];
97 [label="Postponed enter to lambda"];
subgraph cluster_24 {
color=blue
120 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_25 {
color=blue
121 [label="Enter block"];
122 [label="Access variable R|<local>/y|"];
123 [label="Type operator: (R|<local>/y| as R|kotlin/Int|)"];
124 [label="Access variable R|<local>/x|"];
125 [label="Function call: R|<local>/x|.<Unresolved name: inc>#()"];
126 [label="Access variable R|<local>/y|"];
127 [label="Function call: R|<local>/y|.R|kotlin/Int.inc|()"];
128 [label="Const: Int(1)"];
129 [label="Exit block"];
}
130 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
98 [label="Postponed exit from lambda"];
99 [label="Function call: R|kotlin/run|<R|kotlin/Int|>(...)"];
100 [label="Call arguments union" style="filled" fillcolor=yellow];
101 [label="Function call: R|/select|<R|kotlin/Int|>(...)"];
102 [label="Variable declaration: lval a: R|kotlin/Int|"];
103 [label="Access variable R|<local>/x|"];
104 [label="Function call: R|/takeInt|(...)"];
105 [label="Access variable R|<local>/y|"];
106 [label="Function call: R|/takeInt|(...)"];
107 [label="Access variable R|<local>/a|"];
108 [label="Function call: R|/takeInt|(...)"];
109 [label="Exit block"];
}
110 [label="Exit function test_3" style="filled" fillcolor=red];
}
91 -> {92};
92 -> {93};
93 -> {94};
93 -> {111};
93 -> {94} [color=red];
94 -> {95};
95 -> {90};
96 -> {98};
97 -> {78} [color=green];
97 -> {81} [color=red];
95 -> {96};
96 -> {97};
97 -> {120};
97 -> {98} [color=red];
98 -> {99};
99 -> {100};
100 -> {101};
101 -> {102};
102 -> {103};
103 -> {104};
104 -> {97};
subgraph cluster_13 {
color=red
105 [label="Enter function test_4" style="filled" fillcolor=red];
107 [label="Postponed enter to lambda"];
subgraph cluster_14 {
color=blue
124 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
126 [label="Access variable R|<local>/y|"];
127 [label="Function call: R|<local>/y|.<Unresolved name: inc>#()"];
128 [label="Access variable R|<local>/x|"];
129 [label="Type operator: (R|<local>/x| as R|kotlin/Int|)"];
125 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
108 [label="Postponed exit from lambda"];
109 [label="Function call: R|/myRun|<R|kotlin/Int|>(...)"];
110 [label="Function call: R|/id|<R|kotlin/Int|>(...)"];
111 [label="Access variable R|<local>/y|"];
112 [label="Type operator: (R|<local>/y| as R|kotlin/Int|)"];
113 [label="Postponed enter to lambda"];
subgraph cluster_15 {
color=blue
130 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
132 [label="Access variable R|<local>/x|"];
133 [label="Function call: R|<local>/x|.<Unresolved name: inc>#()"];
134 [label="Access variable R|<local>/y|"];
135 [label="Function call: R|<local>/y|.R|kotlin/Int.inc|()"];
136 [label="Const: Int(1)"];
131 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
114 [label="Postponed exit from lambda"];
115 [label="Function call: R|/myRun|<R|kotlin/Int|>(...)"];
116 [label="Function call: R|/select|<R|kotlin/Int|>(...)"];
117 [label="Variable declaration: lval a: R|kotlin/Int|"];
118 [label="Access variable R|<local>/x|"];
119 [label="Function call: <Inapplicable(INAPPLICABLE): [/takeInt]>#(...)"];
120 [label="Access variable R|<local>/y|"];
121 [label="Function call: R|/takeInt|(...)"];
122 [label="Access variable R|<local>/a|"];
123 [label="Function call: R|/takeInt|(...)"];
106 [label="Exit function test_4" style="filled" fillcolor=red];
}
105 -> {107};
104 -> {105};
105 -> {106};
106 -> {107};
107 -> {108};
107 -> {124} [color=red];
108 -> {109};
109 -> {110};
110 -> {111};
111 -> {112};
112 -> {113};
113 -> {114};
113 -> {130} [color=red];
114 -> {115};
115 -> {116};
116 -> {117};
117 -> {118};
118 -> {119};
119 -> {120};
119 -> {100} [color=red];
119 -> {94} [color=green];
120 -> {121};
121 -> {122};
122 -> {123};
123 -> {106};
124 -> {126};
123 -> {124};
124 -> {125};
125 -> {126};
126 -> {127};
127 -> {128};
128 -> {129};
129 -> {125};
130 -> {132};
129 -> {130};
130 -> {100} [color=red];
130 -> {98} [color=green];
subgraph cluster_26 {
color=red
131 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_27 {
color=blue
132 [label="Enter block"];
133 [label="Postponed enter to lambda"];
subgraph cluster_28 {
color=blue
152 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_29 {
color=blue
153 [label="Enter block"];
154 [label="Access variable R|<local>/y|"];
155 [label="Function call: R|<local>/y|.<Unresolved name: inc>#()"];
156 [label="Access variable R|<local>/x|"];
157 [label="Type operator: (R|<local>/x| as R|kotlin/Int|)"];
158 [label="Exit block"];
}
159 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
134 [label="Postponed exit from lambda"];
135 [label="Function call: R|/myRun|<R|kotlin/Int|>(...)"];
136 [label="Function call: R|/id|<R|kotlin/Int|>(...)"];
137 [label="Access variable R|<local>/y|"];
138 [label="Type operator: (R|<local>/y| as R|kotlin/Int|)"];
139 [label="Postponed enter to lambda"];
subgraph cluster_30 {
color=blue
160 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_31 {
color=blue
161 [label="Enter block"];
162 [label="Access variable R|<local>/x|"];
163 [label="Function call: R|<local>/x|.<Unresolved name: inc>#()"];
164 [label="Access variable R|<local>/y|"];
165 [label="Function call: R|<local>/y|.R|kotlin/Int.inc|()"];
166 [label="Const: Int(1)"];
167 [label="Exit block"];
}
168 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
140 [label="Postponed exit from lambda"];
141 [label="Function call: R|/myRun|<R|kotlin/Int|>(...)"];
142 [label="Function call: R|/select|<R|kotlin/Int|>(...)"];
143 [label="Variable declaration: lval a: R|kotlin/Int|"];
144 [label="Access variable R|<local>/x|"];
145 [label="Function call: <Inapplicable(INAPPLICABLE): [/takeInt]>#(...)"];
146 [label="Access variable R|<local>/y|"];
147 [label="Function call: R|/takeInt|(...)"];
148 [label="Access variable R|<local>/a|"];
149 [label="Function call: R|/takeInt|(...)"];
150 [label="Exit block"];
}
151 [label="Exit function test_4" style="filled" fillcolor=red];
}
131 -> {132};
132 -> {133};
133 -> {134};
133 -> {134 152};
134 -> {135};
135 -> {136};
136 -> {131};
subgraph cluster_16 {
color=red
137 [label="Enter function test_5" style="filled" fillcolor=red];
139 [label="Postponed enter to lambda"];
subgraph cluster_17 {
color=blue
150 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
152 [label="Function call: R|/materialize|<R|kotlin/Int|>()"];
151 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
140 [label="Postponed exit from lambda"];
141 [label="Function call: R|kotlin/run|<R|kotlin/Int|>(...)"];
142 [label="Postponed enter to lambda"];
subgraph cluster_18 {
color=blue
153 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
155 [label="Function call: R|/materialize|<R|kotlin/Int|>()"];
154 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
143 [label="Postponed exit from lambda"];
144 [label="Function call: R|kotlin/run|<R|kotlin/Int|>(...)"];
146 [label="Call arguments union" style="filled" fillcolor=yellow];
145 [label="Function call: R|/select|<R|kotlin/Int|>(...)"];
147 [label="Variable declaration: lval x: R|kotlin/Int|"];
148 [label="Access variable R|<local>/x|"];
149 [label="Function call: R|/takeInt|(...)"];
138 [label="Exit function test_5" style="filled" fillcolor=red];
}
137 -> {139};
139 -> {150};
139 -> {140} [color=red];
136 -> {137};
137 -> {138};
138 -> {139};
139 -> {140 160};
140 -> {141};
141 -> {142};
142 -> {153};
142 -> {143} [color=red];
142 -> {143};
143 -> {144};
144 -> {146};
145 -> {147};
146 -> {145};
144 -> {145};
145 -> {146};
146 -> {147};
147 -> {148};
148 -> {149};
149 -> {138};
150 -> {152};
151 -> {140} [color=green];
151 -> {146} [color=red];
152 -> {151};
153 -> {155};
154 -> {143} [color=green];
154 -> {146} [color=red];
155 -> {154};
subgraph cluster_19 {
color=red
156 [label="Enter function test_6" style="filled" fillcolor=red];
158 [label="Postponed enter to lambda"];
subgraph cluster_20 {
color=blue
163 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
165 [label="Postponed enter to lambda"];
subgraph cluster_21 {
color=blue
168 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
170 [label="Function call: R|/materialize|<R|kotlin/String|>()"];
169 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
166 [label="Postponed exit from lambda"];
167 [label="Function call: R|kotlin/run|<R|kotlin/String|>(...)"];
164 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
159 [label="Postponed exit from lambda"];
160 [label="Function call: R|/myRun|<R|kotlin/String|>(...)"];
161 [label="Function call: R|/id|<R|kotlin/String|>(...)"];
162 [label="Variable declaration: lval x: R|kotlin/String|"];
157 [label="Exit function test_6" style="filled" fillcolor=red];
}
156 -> {158};
149 -> {150};
150 -> {151};
152 -> {153};
153 -> {154};
154 -> {155};
155 -> {156};
156 -> {157};
157 -> {158};
158 -> {159};
158 -> {163} [color=red];
159 -> {160};
160 -> {161};
161 -> {162};
162 -> {157};
163 -> {165};
165 -> {168};
165 -> {166} [color=red];
162 -> {163};
163 -> {164};
164 -> {165};
165 -> {166};
166 -> {167};
167 -> {164};
168 -> {170};
169 -> {166} [color=green];
170 -> {169};
167 -> {168};
subgraph cluster_32 {
color=red
169 [label="Enter function test_5" style="filled" fillcolor=red];
subgraph cluster_33 {
color=blue
170 [label="Enter block"];
171 [label="Postponed enter to lambda"];
subgraph cluster_34 {
color=blue
184 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_35 {
color=blue
185 [label="Enter block"];
186 [label="Function call: R|/materialize|<R|kotlin/Int|>()"];
187 [label="Exit block"];
}
188 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
172 [label="Postponed exit from lambda"];
173 [label="Function call: R|kotlin/run|<R|kotlin/Int|>(...)"];
174 [label="Postponed enter to lambda"];
subgraph cluster_36 {
color=blue
189 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_37 {
color=blue
190 [label="Enter block"];
191 [label="Function call: R|/materialize|<R|kotlin/Int|>()"];
192 [label="Exit block"];
}
193 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
175 [label="Postponed exit from lambda"];
176 [label="Function call: R|kotlin/run|<R|kotlin/Int|>(...)"];
177 [label="Call arguments union" style="filled" fillcolor=yellow];
178 [label="Function call: R|/select|<R|kotlin/Int|>(...)"];
179 [label="Variable declaration: lval x: R|kotlin/Int|"];
180 [label="Access variable R|<local>/x|"];
181 [label="Function call: R|/takeInt|(...)"];
182 [label="Exit block"];
}
183 [label="Exit function test_5" style="filled" fillcolor=red];
}
169 -> {170};
170 -> {171};
171 -> {184};
171 -> {172} [color=red];
172 -> {173};
173 -> {174};
174 -> {189};
174 -> {175} [color=red];
175 -> {176};
176 -> {177};
177 -> {178};
178 -> {179};
179 -> {180};
180 -> {181};
181 -> {182};
182 -> {183};
184 -> {185};
185 -> {186};
186 -> {187};
187 -> {188};
188 -> {177} [color=red];
188 -> {172} [color=green];
189 -> {190};
190 -> {191};
191 -> {192};
192 -> {193};
193 -> {177} [color=red];
193 -> {175} [color=green];
subgraph cluster_38 {
color=red
194 [label="Enter function test_6" style="filled" fillcolor=red];
subgraph cluster_39 {
color=blue
195 [label="Enter block"];
196 [label="Postponed enter to lambda"];
subgraph cluster_40 {
color=blue
203 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_41 {
color=blue
204 [label="Enter block"];
205 [label="Postponed enter to lambda"];
subgraph cluster_42 {
color=blue
210 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_43 {
color=blue
211 [label="Enter block"];
212 [label="Function call: R|/materialize|<R|kotlin/String|>()"];
213 [label="Exit block"];
}
214 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
206 [label="Postponed exit from lambda"];
207 [label="Function call: R|kotlin/run|<R|kotlin/String|>(...)"];
208 [label="Exit block"];
}
209 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
197 [label="Postponed exit from lambda"];
198 [label="Function call: R|/myRun|<R|kotlin/String|>(...)"];
199 [label="Function call: R|/id|<R|kotlin/String|>(...)"];
200 [label="Variable declaration: lval x: R|kotlin/String|"];
201 [label="Exit block"];
}
202 [label="Exit function test_6" style="filled" fillcolor=red];
}
194 -> {195};
195 -> {196};
196 -> {197 203};
197 -> {198};
198 -> {199};
199 -> {200};
200 -> {201};
201 -> {202};
203 -> {204};
204 -> {205};
205 -> {210};
205 -> {206} [color=red];
206 -> {207};
207 -> {208};
208 -> {209};
210 -> {211};
211 -> {212};
212 -> {213};
213 -> {214};
214 -> {206} [color=green];
}

View File

@@ -5,81 +5,81 @@ digraph initBlock_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function <init>" style="filled" fillcolor=red];
2 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
1 [label="Exit function <init>" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {1};
subgraph cluster_1 {
color=red
9 [label="Enter class Foo" style="filled" fillcolor=red];
subgraph cluster_2 {
0 [label="Enter class Foo" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
3 [label="Enter init block" style="filled" fillcolor=red];
subgraph cluster_3 {
2 [label="Enter init block" style="filled" fillcolor=red];
subgraph cluster_2 {
color=blue
5 [label="Enter block"];
6 [label="Const: Int(1)"];
7 [label="Variable declaration: lval x: R|kotlin/Int|"];
8 [label="Exit block"];
3 [label="Enter block"];
4 [label="Const: Int(1)"];
5 [label="Variable declaration: lval x: R|kotlin/Int|"];
6 [label="Exit block"];
}
4 [label="Exit init block" style="filled" fillcolor=red];
7 [label="Exit init block" style="filled" fillcolor=red];
}
10 [label="Exit class Foo" style="filled" fillcolor=red];
1 [label="Exit class Foo" style="filled" fillcolor=red];
}
9 -> {3} [color=green];
3 -> {5};
4 -> {10} [color=green];
0 -> {2} [color=green];
2 -> {3};
3 -> {4};
4 -> {5};
5 -> {6};
6 -> {7};
7 -> {8};
8 -> {4};
7 -> {1} [color=green];
subgraph cluster_3 {
color=red
8 [label="Enter function <init>" style="filled" fillcolor=red];
9 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
10 [label="Exit function <init>" style="filled" fillcolor=red];
}
8 -> {9};
9 -> {10};
subgraph cluster_4 {
color=red
11 [label="Enter function <init>" style="filled" fillcolor=red];
13 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
12 [label="Exit function <init>" style="filled" fillcolor=red];
}
11 -> {13};
13 -> {12};
subgraph cluster_5 {
color=red
25 [label="Enter class Bar" style="filled" fillcolor=red];
subgraph cluster_6 {
11 [label="Enter class Bar" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
14 [label="Enter init block" style="filled" fillcolor=red];
subgraph cluster_7 {
13 [label="Enter init block" style="filled" fillcolor=red];
subgraph cluster_6 {
color=blue
16 [label="Enter block"];
17 [label="Const: Int(1)"];
18 [label="Variable declaration: lval x: R|kotlin/Int|"];
19 [label="Function call: R|java/lang/Exception.Exception|()"];
20 [label="Throw: throw R|java/lang/Exception.Exception|()"];
21 [label="Stub" style="filled" fillcolor=gray];
22 [label="Const: Int(2)" style="filled" fillcolor=gray];
23 [label="Variable declaration: lval y: R|kotlin/Int|" style="filled" fillcolor=gray];
24 [label="Exit block" style="filled" fillcolor=gray];
14 [label="Enter block"];
15 [label="Const: Int(1)"];
16 [label="Variable declaration: lval x: R|kotlin/Int|"];
17 [label="Function call: R|java/lang/Exception.Exception|()"];
18 [label="Throw: throw R|java/lang/Exception.Exception|()"];
19 [label="Stub" style="filled" fillcolor=gray];
20 [label="Const: Int(2)" style="filled" fillcolor=gray];
21 [label="Variable declaration: lval y: R|kotlin/Int|" style="filled" fillcolor=gray];
22 [label="Exit block" style="filled" fillcolor=gray];
}
15 [label="Exit init block" style="filled" fillcolor=red];
23 [label="Exit init block" style="filled" fillcolor=red];
}
26 [label="Exit class Bar" style="filled" fillcolor=red];
12 [label="Exit class Bar" style="filled" fillcolor=red];
}
25 -> {14} [color=green];
14 -> {16};
15 -> {26} [color=green];
11 -> {13} [color=green];
13 -> {14};
14 -> {15};
15 -> {16};
16 -> {17};
17 -> {18};
18 -> {19};
19 -> {20};
20 -> {15};
18 -> {23};
18 -> {19} [style=dotted];
19 -> {20} [style=dotted];
20 -> {21} [style=dotted];
21 -> {22} [style=dotted];
22 -> {23} [style=dotted];
23 -> {24} [style=dotted];
24 -> {15} [style=dotted];
23 -> {12} [color=green];
subgraph cluster_7 {
color=red
24 [label="Enter function <init>" style="filled" fillcolor=red];
25 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
26 [label="Exit function <init>" style="filled" fillcolor=red];
}
24 -> {25};
25 -> {26};
}

View File

@@ -12,85 +12,86 @@ digraph initBlockAndInPlaceLambda_kt {
subgraph cluster_1 {
color=red
6 [label="Enter class A" style="filled" fillcolor=red];
subgraph cluster_2 {
color=blue
2 [label="Enter function getter" style="filled" fillcolor=red];
3 [label="Exit function getter" style="filled" fillcolor=red];
}
subgraph cluster_3 {
color=blue
4 [label="Enter property" style="filled" fillcolor=red];
5 [label="Exit property" style="filled" fillcolor=red];
}
7 [label="Exit class A" style="filled" fillcolor=red];
2 [label="Enter class A" style="filled" fillcolor=red];
3 [label="Exit class A" style="filled" fillcolor=red];
}
2 -> {3} [color=green];
subgraph cluster_2 {
color=red
4 [label="Enter function getter" style="filled" fillcolor=red];
5 [label="Exit function getter" style="filled" fillcolor=red];
}
6 -> {4} [color=green];
4 -> {5};
5 -> {7} [color=green];
2 -> {3};
subgraph cluster_4 {
subgraph cluster_3 {
color=red
8 [label="Enter function <init>" style="filled" fillcolor=red];
10 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
9 [label="Exit function <init>" style="filled" fillcolor=red];
}
8 -> {10};
10 -> {9};
subgraph cluster_5 {
color=red
29 [label="Enter class C" style="filled" fillcolor=red];
subgraph cluster_6 {
6 [label="Enter class C" style="filled" fillcolor=red];
subgraph cluster_4 {
color=blue
16 [label="Enter init block" style="filled" fillcolor=red];
subgraph cluster_7 {
8 [label="Enter init block" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
18 [label="Enter block"];
19 [label="Access variable R|<local>/a|"];
20 [label="Access variable R|/A.b|"];
21 [label="Enter safe call"];
23 [label="Postponed enter to lambda"];
subgraph cluster_8 {
9 [label="Enter block"];
10 [label="Access variable R|<local>/a|"];
11 [label="Access variable R|/A.b|"];
12 [label="Enter safe call"];
13 [label="Postponed enter to lambda"];
subgraph cluster_6 {
color=blue
11 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
13 [label="Access variable R|<local>/a|"];
14 [label="Access variable R|<local>/it|"];
15 [label="Function call: R|/C.C|(...)"];
12 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
21 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
22 [label="Enter block"];
23 [label="Access variable R|<local>/a|"];
24 [label="Access variable R|<local>/it|"];
25 [label="Function call: R|/C.C|(...)"];
26 [label="Exit block"];
}
27 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
26 [label="Call arguments union" style="filled" fillcolor=yellow];
24 [label="Postponed exit from lambda"];
25 [label="Function call: $subj$.R|kotlin/let|<R|B|, R|C|>(...)"];
22 [label="Exit safe call"];
27 [label="Variable declaration: lval c: R|C?|"];
28 [label="Exit block"];
14 [label="Call arguments union" style="filled" fillcolor=yellow];
15 [label="Postponed exit from lambda"];
16 [label="Function call: $subj$.R|kotlin/let|<R|B|, R|C|>(...)"];
17 [label="Exit safe call"];
18 [label="Variable declaration: lval c: R|C?|"];
19 [label="Exit block"];
}
17 [label="Exit init block" style="filled" fillcolor=red];
20 [label="Exit init block" style="filled" fillcolor=red];
}
30 [label="Exit class C" style="filled" fillcolor=red];
7 [label="Exit class C" style="filled" fillcolor=red];
}
29 -> {16} [color=green];
16 -> {18};
17 -> {30} [color=green];
6 -> {8} [color=green];
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {12 17};
12 -> {13};
13 -> {21};
13 -> {15} [color=red];
14 -> {16} [color=red];
15 -> {16} [color=green];
16 -> {17};
17 -> {18};
18 -> {19};
19 -> {20};
20 -> {21 22};
21 -> {23};
22 -> {27};
23 -> {11};
23 -> {24} [color=red];
24 -> {25} [color=green];
25 -> {22};
26 -> {25} [color=red];
27 -> {28};
28 -> {17};
11 -> {13};
12 -> {24} [color=green];
12 -> {26} [color=red];
13 -> {14};
14 -> {15};
15 -> {12};
20 -> {7} [color=green];
21 -> {22};
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {26};
26 -> {27};
27 -> {14} [color=red];
27 -> {15} [color=green];
subgraph cluster_8 {
color=red
28 [label="Enter function <init>" style="filled" fillcolor=red];
29 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
30 [label="Exit function <init>" style="filled" fillcolor=red];
}
28 -> {29};
29 -> {30};
}

View File

@@ -0,0 +1,68 @@
digraph innerClassInAnonymousObject_kt {
graph [nodesep=3]
node [shape=box penwidth=2]
edge [penwidth=2]
subgraph cluster_0 {
color=red
0 [label="Enter function <init>" style="filled" fillcolor=red];
1 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
2 [label="Exit function <init>" style="filled" fillcolor=red];
}
0 -> {1};
1 -> {2};
subgraph cluster_1 {
color=red
3 [label="Enter class Nested" style="filled" fillcolor=red];
4 [label="Exit class Nested" style="filled" fillcolor=red];
}
3 -> {4} [color=green];
subgraph cluster_2 {
color=red
5 [label="Enter function <init>" style="filled" fillcolor=red];
6 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
7 [label="Exit function <init>" style="filled" fillcolor=red];
}
5 -> {6};
6 -> {7};
subgraph cluster_3 {
color=red
8 [label="Enter function foo" style="filled" fillcolor=red];
subgraph cluster_4 {
color=blue
9 [label="Enter block"];
10 [label="Exit block"];
}
11 [label="Exit function foo" style="filled" fillcolor=red];
}
8 -> {9};
9 -> {10};
10 -> {11};
subgraph cluster_5 {
color=red
14 [label="Enter function getter" style="filled" fillcolor=red];
15 [label="Exit function getter" style="filled" fillcolor=red];
}
14 -> {15};
subgraph cluster_6 {
color=red
16 [label="Enter property" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
12 [label="Enter class <anonymous object>" style="filled" fillcolor=red];
13 [label="Exit class <anonymous object>" style="filled" fillcolor=red];
}
17 [label="Exit anonymous object"];
18 [label="Exit property" style="filled" fillcolor=red];
}
16 -> {17};
16 -> {0 5 8} [color=red];
17 -> {18};
12 -> {13} [color=green];
}

View File

@@ -0,0 +1,7 @@
// !DUMP_CFG
val x = object {
class Nested {
fun foo() {}
}
}

View File

@@ -0,0 +1,19 @@
FILE: innerClassInAnonymousObject.kt
public final val x: R|<anonymous>| = object : R|kotlin/Any| {
private[local] constructor(): R|<anonymous>| {
super<R|kotlin/Any|>()
}
local final class Nested : R|kotlin/Any| {
public[local] constructor(): R|<anonymous>.Nested| {
super<R|kotlin/Any|>()
}
public[local] final fun foo(): R|kotlin/Unit| {
}
}
}
public get(): R|<anonymous>|

View File

@@ -6,187 +6,236 @@ digraph inplaceLambdaInControlFlowExpressions_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function materialize" style="filled" fillcolor=red];
2 [label="Const: Null(null)"];
3 [label="Check not null: Null(null)!!"];
4 [label="Jump: ^materialize Null(null)!!"];
5 [label="Stub" style="filled" fillcolor=gray];
1 [label="Exit function materialize" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
1 [label="Enter block"];
2 [label="Const: Null(null)"];
3 [label="Check not null: Null(null)!!"];
4 [label="Jump: ^materialize Null(null)!!"];
5 [label="Stub" style="filled" fillcolor=gray];
6 [label="Exit block" style="filled" fillcolor=gray];
}
7 [label="Exit function materialize" style="filled" fillcolor=red];
}
0 -> {2};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
4 -> {1};
4 -> {7};
4 -> {5} [style=dotted];
5 -> {1} [style=dotted];
5 -> {6} [style=dotted];
6 -> {7} [style=dotted];
subgraph cluster_1 {
subgraph cluster_2 {
color=red
6 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_2 {
8 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
8 [label="Enter when"];
subgraph cluster_3 {
color=blue
10 [label="Enter when branch condition "];
11 [label="Const: Boolean(true)"];
12 [label="Exit when branch condition"];
}
9 [label="Enter block"];
subgraph cluster_4 {
color=blue
20 [label="Enter when branch condition else"];
21 [label="Exit when branch condition"];
}
22 [label="Enter when branch result"];
subgraph cluster_5 {
color=blue
23 [label="Enter block"];
24 [label="Const: String()"];
25 [label="Exit block"];
}
26 [label="Exit when branch result"];
13 [label="Enter when branch result"];
subgraph cluster_6 {
color=blue
14 [label="Enter block"];
15 [label="Postponed enter to lambda"];
10 [label="Enter when"];
subgraph cluster_5 {
color=blue
11 [label="Enter when branch condition "];
12 [label="Const: Boolean(true)"];
13 [label="Exit when branch condition"];
}
subgraph cluster_6 {
color=blue
14 [label="Enter when branch condition else"];
15 [label="Exit when branch condition"];
}
16 [label="Enter when branch result"];
subgraph cluster_7 {
color=blue
29 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
31 [label="Function call: R|/materialize|<R|kotlin/String|>()"];
30 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
17 [label="Enter block"];
18 [label="Const: String()"];
19 [label="Exit block"];
}
16 [label="Postponed exit from lambda"];
17 [label="Function call: R|kotlin/run|<R|kotlin/String|>(...)"];
18 [label="Exit block"];
20 [label="Exit when branch result"];
21 [label="Enter when branch result"];
subgraph cluster_8 {
color=blue
22 [label="Enter block"];
23 [label="Postponed enter to lambda"];
subgraph cluster_9 {
color=blue
33 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_10 {
color=blue
34 [label="Enter block"];
35 [label="Function call: R|/materialize|<R|kotlin/String|>()"];
36 [label="Exit block"];
}
37 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
24 [label="Postponed exit from lambda"];
25 [label="Function call: R|kotlin/run|<R|kotlin/String|>(...)"];
26 [label="Exit block"];
}
27 [label="Exit when branch result"];
28 [label="Exit when"];
}
19 [label="Exit when branch result"];
9 [label="Exit when"];
29 [label="Call arguments union" style="filled" fillcolor=yellow];
30 [label="Variable declaration: lval x: R|kotlin/String|"];
31 [label="Exit block"];
}
27 [label="Call arguments union" style="filled" fillcolor=yellow];
28 [label="Variable declaration: lval x: R|kotlin/String|"];
7 [label="Exit function test_1" style="filled" fillcolor=red];
32 [label="Exit function test_1" style="filled" fillcolor=red];
}
6 -> {8};
8 -> {10};
9 -> {27};
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {12};
12 -> {13 20};
13 -> {14};
12 -> {13};
13 -> {21 14};
14 -> {15};
15 -> {29};
15 -> {16} [color=red];
15 -> {16};
16 -> {17};
17 -> {18};
18 -> {19};
19 -> {9};
20 -> {21};
19 -> {20};
20 -> {28};
21 -> {22};
22 -> {23};
23 -> {24};
23 -> {33};
23 -> {24} [color=red];
24 -> {25};
25 -> {26};
26 -> {9};
26 -> {27};
27 -> {28};
28 -> {7};
29 -> {31};
30 -> {16} [color=green];
30 -> {27} [color=red];
31 -> {30};
28 -> {29};
29 -> {30};
30 -> {31};
31 -> {32};
33 -> {34};
34 -> {35};
35 -> {36};
36 -> {37};
37 -> {29} [color=red];
37 -> {24} [color=green];
subgraph cluster_8 {
subgraph cluster_11 {
color=red
32 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_9 {
38 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_12 {
color=blue
34 [label="Try expression enter"];
subgraph cluster_10 {
color=blue
36 [label="Try main block enter"];
subgraph cluster_11 {
color=blue
38 [label="Enter block"];
39 [label="Postponed enter to lambda"];
subgraph cluster_12 {
color=blue
50 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
52 [label="Function call: R|/materialize|<R|kotlin/String|>()"];
51 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
40 [label="Postponed exit from lambda"];
41 [label="Function call: R|kotlin/run|<R|kotlin/String|>(...)"];
42 [label="Exit block"];
}
43 [label="Try main block exit"];
}
39 [label="Enter block"];
subgraph cluster_13 {
color=blue
37 [label="Catch enter"];
40 [label="Try expression enter"];
subgraph cluster_14 {
color=blue
44 [label="Enter block"];
45 [label="Const: String()"];
46 [label="Exit block"];
41 [label="Try main block enter"];
subgraph cluster_15 {
color=blue
42 [label="Enter block"];
43 [label="Postponed enter to lambda"];
subgraph cluster_16 {
color=blue
58 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_17 {
color=blue
59 [label="Enter block"];
60 [label="Function call: R|/materialize|<R|kotlin/String|>()"];
61 [label="Exit block"];
}
62 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
44 [label="Postponed exit from lambda"];
45 [label="Function call: R|kotlin/run|<R|kotlin/String|>(...)"];
46 [label="Exit block"];
}
47 [label="Try main block exit"];
}
47 [label="Catch exit"];
subgraph cluster_18 {
color=blue
48 [label="Catch enter"];
subgraph cluster_19 {
color=blue
49 [label="Enter block"];
50 [label="Const: String()"];
51 [label="Exit block"];
}
52 [label="Catch exit"];
}
53 [label="Try expression exit"];
}
35 [label="Try expression exit"];
54 [label="Call arguments union" style="filled" fillcolor=yellow];
55 [label="Variable declaration: lval x: R|kotlin/String|"];
56 [label="Exit block"];
}
48 [label="Call arguments union" style="filled" fillcolor=yellow];
49 [label="Variable declaration: lval x: R|kotlin/String|"];
33 [label="Exit function test_2" style="filled" fillcolor=red];
57 [label="Exit function test_2" style="filled" fillcolor=red];
}
32 -> {34};
34 -> {36};
35 -> {48};
36 -> {33 37 38};
37 -> {33 44};
38 -> {39};
39 -> {50};
39 -> {40} [color=red];
39 -> {40};
40 -> {41};
41 -> {42};
41 -> {57 48 42};
42 -> {43};
43 -> {35};
43 -> {58};
43 -> {44} [color=red];
44 -> {45};
45 -> {46};
46 -> {47};
47 -> {35};
48 -> {49};
49 -> {33};
50 -> {52};
51 -> {40} [color=green];
51 -> {48} [color=red];
52 -> {51};
subgraph cluster_15 {
color=red
53 [label="Enter function test_3" style="filled" fillcolor=red];
55 [label="Postponed enter to lambda"];
subgraph cluster_16 {
color=blue
61 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
63 [label="Function call: R|/materialize|<R|kotlin/String?|>()"];
62 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
56 [label="Postponed exit from lambda"];
57 [label="Function call: R|kotlin/run|<R|kotlin/String?|>(...)"];
58 [label="Check not null: R|kotlin/run|<R|kotlin/String?|>(...)!!"];
59 [label="Call arguments union" style="filled" fillcolor=yellow];
60 [label="Variable declaration: lval x: R|kotlin/String|"];
54 [label="Exit function test_3" style="filled" fillcolor=red];
}
53 -> {55};
55 -> {61};
55 -> {56} [color=red];
47 -> {53};
48 -> {57 49};
49 -> {50};
50 -> {51};
51 -> {52};
52 -> {53};
53 -> {54};
54 -> {55};
55 -> {56};
56 -> {57};
57 -> {58};
58 -> {59};
59 -> {60};
60 -> {54};
61 -> {63};
62 -> {56} [color=green];
62 -> {59} [color=red];
63 -> {62};
60 -> {61};
61 -> {62};
62 -> {54} [color=red];
62 -> {44} [color=green];
subgraph cluster_20 {
color=red
63 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_21 {
color=blue
64 [label="Enter block"];
65 [label="Postponed enter to lambda"];
subgraph cluster_22 {
color=blue
73 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_23 {
color=blue
74 [label="Enter block"];
75 [label="Function call: R|/materialize|<R|kotlin/String?|>()"];
76 [label="Exit block"];
}
77 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
66 [label="Postponed exit from lambda"];
67 [label="Function call: R|kotlin/run|<R|kotlin/String?|>(...)"];
68 [label="Check not null: R|kotlin/run|<R|kotlin/String?|>(...)!!"];
69 [label="Call arguments union" style="filled" fillcolor=yellow];
70 [label="Variable declaration: lval x: R|kotlin/String|"];
71 [label="Exit block"];
}
72 [label="Exit function test_3" style="filled" fillcolor=red];
}
63 -> {64};
64 -> {65};
65 -> {73};
65 -> {66} [color=red];
66 -> {67};
67 -> {68};
68 -> {69};
69 -> {70};
70 -> {71};
71 -> {72};
73 -> {74};
74 -> {75};
75 -> {76};
76 -> {77};
77 -> {69} [color=red];
77 -> {66} [color=green];
}

View File

@@ -8,348 +8,405 @@ digraph jumps_kt {
0 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
2 [label="Enter when"];
1 [label="Enter block"];
subgraph cluster_2 {
color=blue
4 [label="Enter when branch condition "];
5 [label="Access variable R|<local>/x|"];
6 [label="Const: Null(null)"];
7 [label="Operator =="];
8 [label="Exit when branch condition"];
2 [label="Enter when"];
subgraph cluster_3 {
color=blue
3 [label="Enter when branch condition "];
4 [label="Access variable R|<local>/x|"];
5 [label="Const: Null(null)"];
6 [label="Operator =="];
7 [label="Exit when branch condition"];
}
subgraph cluster_4 {
color=blue
8 [label="Enter when branch condition else"];
9 [label="Exit when branch condition"];
}
10 [label="Enter when branch result"];
subgraph cluster_5 {
color=blue
11 [label="Enter block"];
12 [label="Access variable R|<local>/x|"];
13 [label="Exit block"];
}
14 [label="Exit when branch result"];
15 [label="Enter when branch result"];
subgraph cluster_6 {
color=blue
16 [label="Enter block"];
17 [label="Function call: R|java/lang/Exception.Exception|()"];
18 [label="Throw: throw R|java/lang/Exception.Exception|()"];
19 [label="Stub" style="filled" fillcolor=gray];
20 [label="Exit block" style="filled" fillcolor=gray];
}
21 [label="Exit when branch result" style="filled" fillcolor=gray];
22 [label="Exit when"];
}
subgraph cluster_3 {
color=blue
16 [label="Enter when branch condition else"];
17 [label="Exit when branch condition"];
}
18 [label="Enter when branch result"];
subgraph cluster_4 {
color=blue
19 [label="Enter block"];
20 [label="Access variable R|<local>/x|"];
21 [label="Exit block"];
}
22 [label="Exit when branch result"];
9 [label="Enter when branch result"];
subgraph cluster_5 {
color=blue
10 [label="Enter block"];
11 [label="Function call: R|java/lang/Exception.Exception|()"];
12 [label="Throw: throw R|java/lang/Exception.Exception|()"];
13 [label="Stub" style="filled" fillcolor=gray];
14 [label="Exit block" style="filled" fillcolor=gray];
}
15 [label="Exit when branch result" style="filled" fillcolor=gray];
3 [label="Exit when"];
23 [label="Variable declaration: lval y: R|kotlin/Int|"];
24 [label="Access variable R|<local>/y|"];
25 [label="Function call: R|<local>/y|.R|kotlin/Int.inc|()"];
26 [label="Access variable R|<local>/x|"];
27 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
28 [label="Exit block"];
}
23 [label="Variable declaration: lval y: R|kotlin/Int|"];
24 [label="Access variable R|<local>/y|"];
25 [label="Function call: R|<local>/y|.R|kotlin/Int.inc|()"];
26 [label="Access variable R|<local>/x|"];
27 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
1 [label="Exit function test_1" style="filled" fillcolor=red];
29 [label="Exit function test_1" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {4};
3 -> {23};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
4 -> {5};
5 -> {6};
6 -> {7};
7 -> {8};
8 -> {9 16};
7 -> {15 8};
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {12};
12 -> {1};
12 -> {13} [style=dotted];
13 -> {14} [style=dotted];
14 -> {15} [style=dotted];
15 -> {3} [style=dotted];
12 -> {13};
13 -> {14};
14 -> {22};
15 -> {16};
16 -> {17};
17 -> {18};
18 -> {19};
19 -> {20};
20 -> {21};
21 -> {22};
22 -> {3};
18 -> {29};
18 -> {19} [style=dotted];
19 -> {20} [style=dotted];
20 -> {21} [style=dotted];
21 -> {22} [style=dotted];
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {26};
26 -> {27};
27 -> {1};
27 -> {28};
28 -> {29};
subgraph cluster_6 {
subgraph cluster_7 {
color=red
28 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_7 {
30 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_8 {
color=blue
30 [label="Enter when"];
subgraph cluster_8 {
color=blue
32 [label="Enter when branch condition "];
33 [label="Access variable R|<local>/x|"];
34 [label="Const: Null(null)"];
35 [label="Operator =="];
36 [label="Exit when branch condition"];
}
31 [label="Enter block"];
subgraph cluster_9 {
color=blue
42 [label="Enter when branch condition else"];
43 [label="Exit when branch condition"];
32 [label="Enter when"];
subgraph cluster_10 {
color=blue
33 [label="Enter when branch condition "];
34 [label="Access variable R|<local>/x|"];
35 [label="Const: Null(null)"];
36 [label="Operator =="];
37 [label="Exit when branch condition"];
}
subgraph cluster_11 {
color=blue
38 [label="Enter when branch condition else"];
39 [label="Exit when branch condition"];
}
40 [label="Enter when branch result"];
subgraph cluster_12 {
color=blue
41 [label="Enter block"];
42 [label="Access variable R|<local>/x|"];
43 [label="Exit block"];
}
44 [label="Exit when branch result"];
45 [label="Enter when branch result"];
subgraph cluster_13 {
color=blue
46 [label="Enter block"];
47 [label="Access variable R|<local>/x|"];
48 [label="Exit block"];
}
49 [label="Exit when branch result"];
50 [label="Exit when"];
}
44 [label="Enter when branch result"];
subgraph cluster_10 {
color=blue
45 [label="Enter block"];
46 [label="Access variable R|<local>/x|"];
47 [label="Exit block"];
}
48 [label="Exit when branch result"];
37 [label="Enter when branch result"];
subgraph cluster_11 {
color=blue
38 [label="Enter block"];
39 [label="Access variable R|<local>/x|"];
40 [label="Exit block"];
}
41 [label="Exit when branch result"];
31 [label="Exit when"];
51 [label="Variable declaration: lval y: R|kotlin/Int?|"];
52 [label="Access variable R|<local>/y|"];
53 [label="Function call: R|<local>/y|.<Inapplicable(WRONG_RECEIVER): [kotlin/Int.inc]>#()"];
54 [label="Exit block"];
}
49 [label="Variable declaration: lval y: R|kotlin/Int?|"];
50 [label="Access variable R|<local>/y|"];
51 [label="Function call: R|<local>/y|.<Inapplicable(WRONG_RECEIVER): [kotlin/Int.inc]>#()"];
29 [label="Exit function test_2" style="filled" fillcolor=red];
55 [label="Exit function test_2" style="filled" fillcolor=red];
}
28 -> {30};
30 -> {32};
31 -> {49};
30 -> {31};
31 -> {32};
32 -> {33};
33 -> {34};
34 -> {35};
35 -> {36};
36 -> {37 42};
37 -> {38};
36 -> {37};
37 -> {45 38};
38 -> {39};
39 -> {40};
40 -> {41};
41 -> {31};
41 -> {42};
42 -> {43};
43 -> {44};
44 -> {45};
44 -> {50};
45 -> {46};
46 -> {47};
47 -> {48};
48 -> {31};
48 -> {49};
49 -> {50};
50 -> {51};
51 -> {29};
51 -> {52};
52 -> {53};
53 -> {54};
54 -> {55};
subgraph cluster_12 {
subgraph cluster_14 {
color=red
52 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_13 {
56 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_15 {
color=blue
54 [label="Enter while loop"];
subgraph cluster_14 {
57 [label="Enter block"];
subgraph cluster_16 {
color=blue
56 [label="Enter loop condition"];
57 [label="Const: Boolean(true)"];
58 [label="Exit loop condition"];
}
subgraph cluster_15 {
color=blue
59 [label="Enter loop block"];
subgraph cluster_16 {
58 [label="Enter while loop"];
subgraph cluster_17 {
color=blue
60 [label="Enter block"];
61 [label="Access variable R|<local>/x|"];
62 [label="Type operator: (R|<local>/x| as R|kotlin/Int|)"];
63 [label="Jump: break@@@[Boolean(true)] "];
64 [label="Stub" style="filled" fillcolor=gray];
65 [label="Exit block" style="filled" fillcolor=gray];
59 [label="Enter loop condition"];
60 [label="Const: Boolean(true)"];
61 [label="Exit loop condition"];
}
66 [label="Exit loop block" style="filled" fillcolor=gray];
subgraph cluster_18 {
color=blue
62 [label="Enter loop block"];
subgraph cluster_19 {
color=blue
63 [label="Enter block"];
64 [label="Access variable R|<local>/x|"];
65 [label="Type operator: (R|<local>/x| as R|kotlin/Int|)"];
66 [label="Jump: break@@@[Boolean(true)] "];
67 [label="Stub" style="filled" fillcolor=gray];
68 [label="Exit block" style="filled" fillcolor=gray];
}
69 [label="Exit loop block" style="filled" fillcolor=gray];
}
70 [label="Exit whileloop"];
}
55 [label="Exit whileloop"];
71 [label="Access variable R|<local>/x|"];
72 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
73 [label="Exit block"];
}
67 [label="Access variable R|<local>/x|"];
68 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
53 [label="Exit function test_3" style="filled" fillcolor=red];
74 [label="Exit function test_3" style="filled" fillcolor=red];
}
52 -> {54};
54 -> {56};
55 -> {67};
56 -> {57};
57 -> {58};
58 -> {59};
58 -> {55} [style=dotted];
59 -> {60};
60 -> {61};
61 -> {62};
61 -> {70} [style=dotted];
62 -> {63};
63 -> {55};
63 -> {64} [style=dotted];
64 -> {65} [style=dotted];
65 -> {66} [style=dotted];
66 -> {56} [style=dotted];
67 -> {68};
68 -> {53};
subgraph cluster_17 {
color=red
69 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_18 {
color=blue
71 [label="Enter do-while loop"];
subgraph cluster_19 {
color=blue
73 [label="Enter loop block"];
subgraph cluster_20 {
color=blue
74 [label="Enter block"];
75 [label="Access variable R|<local>/x|"];
76 [label="Type operator: (R|<local>/x| as R|kotlin/Int|)"];
77 [label="Jump: break@@@[Boolean(true)] "];
78 [label="Stub" style="filled" fillcolor=gray];
79 [label="Exit block" style="filled" fillcolor=gray];
}
80 [label="Exit loop block" style="filled" fillcolor=gray];
}
subgraph cluster_21 {
color=blue
81 [label="Enter loop condition" style="filled" fillcolor=gray];
82 [label="Const: Boolean(true)" style="filled" fillcolor=gray];
83 [label="Exit loop condition" style="filled" fillcolor=gray];
}
72 [label="Exit do-whileloop"];
}
84 [label="Access variable R|<local>/x|"];
85 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
70 [label="Exit function test_4" style="filled" fillcolor=red];
}
69 -> {71};
71 -> {73};
72 -> {84};
63 -> {64};
64 -> {65};
65 -> {66};
66 -> {70};
66 -> {67} [style=dotted];
67 -> {68} [style=dotted];
68 -> {69} [style=dotted];
69 -> {59} [color=green style=dotted];
70 -> {71};
71 -> {72};
72 -> {73};
73 -> {74};
74 -> {75};
subgraph cluster_20 {
color=red
75 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_21 {
color=blue
76 [label="Enter block"];
subgraph cluster_22 {
color=blue
77 [label="Enter do-while loop"];
subgraph cluster_23 {
color=blue
78 [label="Enter loop block"];
subgraph cluster_24 {
color=blue
79 [label="Enter block"];
80 [label="Access variable R|<local>/x|"];
81 [label="Type operator: (R|<local>/x| as R|kotlin/Int|)"];
82 [label="Jump: break@@@[Boolean(true)] "];
83 [label="Stub" style="filled" fillcolor=gray];
84 [label="Exit block" style="filled" fillcolor=gray];
}
85 [label="Exit loop block" style="filled" fillcolor=gray];
}
subgraph cluster_25 {
color=blue
86 [label="Enter loop condition" style="filled" fillcolor=gray];
87 [label="Const: Boolean(true)" style="filled" fillcolor=gray];
88 [label="Exit loop condition" style="filled" fillcolor=gray];
}
89 [label="Exit do-whileloop"];
}
90 [label="Access variable R|<local>/x|"];
91 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
92 [label="Exit block"];
}
93 [label="Exit function test_4" style="filled" fillcolor=red];
}
75 -> {76};
76 -> {77};
77 -> {72};
77 -> {78} [style=dotted];
78 -> {79} [style=dotted];
79 -> {80} [style=dotted];
80 -> {81} [style=dotted];
81 -> {82} [style=dotted];
77 -> {78};
78 -> {79};
79 -> {80};
80 -> {81};
81 -> {82};
82 -> {89};
82 -> {83} [style=dotted];
83 -> {73 72} [style=dotted];
84 -> {85};
85 -> {70};
subgraph cluster_22 {
color=red
86 [label="Enter function test_5" style="filled" fillcolor=red];
subgraph cluster_23 {
color=blue
88 [label="Enter while loop"];
subgraph cluster_24 {
color=blue
90 [label="Enter loop condition"];
91 [label="Access variable R|<local>/b|"];
92 [label="Exit loop condition"];
}
subgraph cluster_25 {
color=blue
93 [label="Enter loop block"];
subgraph cluster_26 {
color=blue
94 [label="Enter block"];
subgraph cluster_27 {
color=blue
95 [label="Enter when"];
subgraph cluster_28 {
color=blue
97 [label="Enter when branch condition "];
98 [label="Access variable R|<local>/b|"];
99 [label="Exit when branch condition"];
}
106 [label="Synthetic else branch"];
100 [label="Enter when branch result"];
subgraph cluster_29 {
color=blue
101 [label="Enter block"];
102 [label="Jump: continue@@@[R|<local>/b|] "];
103 [label="Stub" style="filled" fillcolor=gray];
104 [label="Exit block" style="filled" fillcolor=gray];
}
105 [label="Exit when branch result" style="filled" fillcolor=gray];
96 [label="Exit when"];
}
107 [label="Exit block"];
}
108 [label="Exit loop block"];
}
89 [label="Exit whileloop"];
}
87 [label="Exit function test_5" style="filled" fillcolor=red];
}
86 -> {88};
88 -> {90};
89 -> {87};
83 -> {84} [style=dotted];
84 -> {85} [style=dotted];
85 -> {86} [style=dotted];
86 -> {87} [style=dotted];
87 -> {88} [style=dotted];
88 -> {89} [style=dotted];
88 -> {78} [color=green style=dotted];
89 -> {90};
90 -> {91};
91 -> {92};
92 -> {89 93};
93 -> {94};
92 -> {93};
subgraph cluster_26 {
color=red
94 [label="Enter function test_5" style="filled" fillcolor=red];
subgraph cluster_27 {
color=blue
95 [label="Enter block"];
subgraph cluster_28 {
color=blue
96 [label="Enter while loop"];
subgraph cluster_29 {
color=blue
97 [label="Enter loop condition"];
98 [label="Access variable R|<local>/b|"];
99 [label="Exit loop condition"];
}
subgraph cluster_30 {
color=blue
100 [label="Enter loop block"];
subgraph cluster_31 {
color=blue
101 [label="Enter block"];
subgraph cluster_32 {
color=blue
102 [label="Enter when"];
subgraph cluster_33 {
color=blue
103 [label="Enter when branch condition "];
104 [label="Access variable R|<local>/b|"];
105 [label="Exit when branch condition"];
}
106 [label="Synthetic else branch"];
107 [label="Enter when branch result"];
subgraph cluster_34 {
color=blue
108 [label="Enter block"];
109 [label="Jump: continue@@@[R|<local>/b|] "];
110 [label="Stub" style="filled" fillcolor=gray];
111 [label="Exit block" style="filled" fillcolor=gray];
}
112 [label="Exit when branch result" style="filled" fillcolor=gray];
113 [label="Exit when"];
}
114 [label="Exit block"];
}
115 [label="Exit loop block"];
}
116 [label="Exit whileloop"];
}
117 [label="Exit block"];
}
118 [label="Exit function test_5" style="filled" fillcolor=red];
}
94 -> {95};
95 -> {97};
96 -> {107};
95 -> {96};
96 -> {97};
97 -> {98};
98 -> {99};
99 -> {100 106};
99 -> {116 100};
100 -> {101};
101 -> {102};
102 -> {88};
102 -> {103} [style=dotted];
103 -> {104} [style=dotted];
104 -> {105} [style=dotted];
105 -> {96} [style=dotted];
106 -> {96};
102 -> {103};
103 -> {104};
104 -> {105};
105 -> {107 106};
106 -> {113};
107 -> {108};
108 -> {90};
108 -> {109};
109 -> {110} [style=dotted];
109 -> {96} [color=green style=dashed];
110 -> {111} [style=dotted];
111 -> {112} [style=dotted];
112 -> {113} [style=dotted];
113 -> {114};
114 -> {115};
115 -> {97} [color=green style=dashed];
116 -> {117};
117 -> {118};
subgraph cluster_30 {
subgraph cluster_35 {
color=red
109 [label="Enter function run" style="filled" fillcolor=red];
111 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
110 [label="Exit function run" style="filled" fillcolor=red];
}
109 -> {111};
111 -> {110};
subgraph cluster_31 {
color=red
112 [label="Enter function test_6" style="filled" fillcolor=red];
114 [label="Postponed enter to lambda"];
subgraph cluster_32 {
119 [label="Enter function run" style="filled" fillcolor=red];
subgraph cluster_36 {
color=blue
117 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
119 [label="Jump: ^@run Unit"];
120 [label="Stub" style="filled" fillcolor=gray];
118 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
120 [label="Enter block"];
121 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
122 [label="Exit block"];
}
115 [label="Postponed exit from lambda"];
116 [label="Function call: R|/run|(...)"];
113 [label="Exit function test_6" style="filled" fillcolor=red];
123 [label="Exit function run" style="filled" fillcolor=red];
}
112 -> {114};
114 -> {117};
114 -> {115} [color=red];
115 -> {116};
116 -> {113};
117 -> {118 119};
118 -> {117};
118 -> {115} [color=green];
119 -> {118};
119 -> {120} [style=dotted];
120 -> {118} [style=dotted];
119 -> {120};
120 -> {121};
121 -> {122};
122 -> {123};
subgraph cluster_37 {
color=red
124 [label="Enter function test_6" style="filled" fillcolor=red];
subgraph cluster_38 {
color=blue
125 [label="Enter block"];
126 [label="Postponed enter to lambda"];
subgraph cluster_39 {
color=blue
131 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_40 {
color=blue
132 [label="Enter block"];
133 [label="Jump: ^@run Unit"];
134 [label="Stub" style="filled" fillcolor=gray];
135 [label="Exit block" style="filled" fillcolor=gray];
}
136 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
127 [label="Postponed exit from lambda"];
128 [label="Function call: R|/run|(...)"];
129 [label="Exit block"];
}
130 [label="Exit function test_6" style="filled" fillcolor=red];
}
124 -> {125};
125 -> {126};
126 -> {131};
126 -> {127} [color=red];
127 -> {128};
128 -> {129};
129 -> {130};
131 -> {136 132};
132 -> {133};
133 -> {136};
133 -> {134} [style=dotted];
134 -> {135} [style=dotted];
135 -> {136} [style=dotted];
136 -> {127} [color=green];
136 -> {131} [color=green style=dashed];
}

View File

@@ -5,75 +5,106 @@ digraph lambdaAsReturnOfLambda_kt {
subgraph cluster_0 {
color=red
10 [label="Enter property" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
8 [label="Enter function getter" style="filled" fillcolor=red];
9 [label="Exit function getter" style="filled" fillcolor=red];
}
12 [label="Postponed enter to lambda"];
14 [label="Enter function getter" style="filled" fillcolor=red];
15 [label="Exit function getter" style="filled" fillcolor=red];
}
14 -> {15};
subgraph cluster_1 {
color=red
16 [label="Enter property" style="filled" fillcolor=red];
17 [label="Postponed enter to lambda"];
subgraph cluster_2 {
color=blue
0 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
2 [label="Jump: ^@run lambda@fun <anonymous>(foo: R|kotlin/String|): R|kotlin/Unit| {
subgraph cluster_3 {
color=blue
1 [label="Enter block"];
2 [label="Postponed enter to lambda"];
subgraph cluster_4 {
color=blue
8 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
9 [label="Enter block"];
10 [label="Access variable R|<local>/foo|"];
11 [label="Function call: R|/bar|(...)"];
12 [label="Exit block"];
}
13 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
3 [label="Postponed exit from lambda"];
4 [label="Jump: ^@run lambda@fun <anonymous>(foo: R|kotlin/String|): R|kotlin/Unit| {
R|/bar|(R|<local>/foo|)
}
"];
3 [label="Stub" style="filled" fillcolor=gray];
1 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
5 [label="Stub" style="filled" fillcolor=gray];
6 [label="Exit block" style="filled" fillcolor=gray];
}
7 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
subgraph cluster_3 {
18 [label="Postponed exit from lambda"];
subgraph cluster_6 {
color=blue
4 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
6 [label="Access variable R|<local>/foo|"];
7 [label="Function call: R|/bar|(...)"];
5 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
19 [label="Enter block"];
20 [label="Exit block"];
}
13 [label="Postponed exit from lambda"];
subgraph cluster_4 {
color=blue
14 [label="Enter block"];
15 [label="Exit block"];
}
16 [label="Function call: R|/run|<R|(kotlin/String) -> kotlin/Unit|>(...)"];
11 [label="Exit property" style="filled" fillcolor=red];
21 [label="Function call: R|/run|<R|(kotlin/String) -> kotlin/Unit|>(...)"];
22 [label="Exit property" style="filled" fillcolor=red];
}
10 -> {12};
12 -> {13};
12 -> {0} [color=red];
13 -> {14};
14 -> {15};
15 -> {16};
16 -> {11};
0 -> {2};
0 -> {4} [color=red];
2 -> {1};
2 -> {3} [style=dotted];
3 -> {1} [style=dotted];
4 -> {6};
6 -> {7};
7 -> {5};
8 -> {9};
subgraph cluster_5 {
color=red
17 [label="Enter function bar" style="filled" fillcolor=red];
18 [label="Exit function bar" style="filled" fillcolor=red];
}
17 -> {18};
subgraph cluster_6 {
color=red
19 [label="Enter function run" style="filled" fillcolor=red];
21 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|R|>|()"];
22 [label="Jump: ^run R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|R|>|()"];
23 [label="Stub" style="filled" fillcolor=gray];
20 [label="Exit function run" style="filled" fillcolor=red];
}
19 -> {21};
16 -> {17};
17 -> {18 0};
18 -> {19};
19 -> {20};
20 -> {21};
21 -> {22};
22 -> {20};
22 -> {23} [style=dotted];
23 -> {20} [style=dotted];
0 -> {1};
1 -> {2};
2 -> {3 8};
3 -> {4};
4 -> {7};
4 -> {5} [style=dotted];
5 -> {6} [style=dotted];
6 -> {7} [style=dotted];
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {12};
12 -> {13};
subgraph cluster_7 {
color=red
23 [label="Enter function bar" style="filled" fillcolor=red];
subgraph cluster_8 {
color=blue
24 [label="Enter block"];
25 [label="Exit block"];
}
26 [label="Exit function bar" style="filled" fillcolor=red];
}
23 -> {24};
24 -> {25};
25 -> {26};
subgraph cluster_9 {
color=red
27 [label="Enter function run" style="filled" fillcolor=red];
subgraph cluster_10 {
color=blue
28 [label="Enter block"];
29 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|R|>|()"];
30 [label="Jump: ^run R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|R|>|()"];
31 [label="Stub" style="filled" fillcolor=gray];
32 [label="Exit block" style="filled" fillcolor=gray];
}
33 [label="Exit function run" style="filled" fillcolor=red];
}
27 -> {28};
28 -> {29};
29 -> {30};
30 -> {33};
30 -> {31} [style=dotted];
31 -> {32} [style=dotted];
32 -> {33} [style=dotted];
}

View File

@@ -13,71 +13,98 @@ digraph lambdaReturningObject_kt {
subgraph cluster_1 {
color=red
2 [label="Enter function bar" style="filled" fillcolor=red];
3 [label="Exit function bar" style="filled" fillcolor=red];
subgraph cluster_2 {
color=blue
3 [label="Enter block"];
4 [label="Exit block"];
}
5 [label="Exit function bar" style="filled" fillcolor=red];
}
2 -> {3};
subgraph cluster_2 {
color=red
4 [label="Enter class IrTypeArgument" style="filled" fillcolor=red];
5 [label="Exit class IrTypeArgument" style="filled" fillcolor=red];
}
4 -> {5} [color=green];
3 -> {4};
4 -> {5};
subgraph cluster_3 {
color=red
6 [label="Enter function <init>" style="filled" fillcolor=red];
8 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
7 [label="Exit function <init>" style="filled" fillcolor=red];
6 [label="Enter class IrTypeArgument" style="filled" fillcolor=red];
7 [label="Exit class IrTypeArgument" style="filled" fillcolor=red];
}
6 -> {8};
8 -> {7};
6 -> {7} [color=green];
subgraph cluster_4 {
color=red
9 [label="Enter class IrStarProjectionImpl" style="filled" fillcolor=red];
10 [label="Exit class IrStarProjectionImpl" style="filled" fillcolor=red];
8 [label="Enter class IrStarProjectionImpl" style="filled" fillcolor=red];
9 [label="Exit class IrStarProjectionImpl" style="filled" fillcolor=red];
}
9 -> {10} [color=green];
8 -> {9} [color=green];
subgraph cluster_5 {
color=red
11 [label="Enter function MyOut" style="filled" fillcolor=red];
13 [label="Function call: R|kotlin/TODO|()"];
14 [label="Stub" style="filled" fillcolor=gray];
15 [label="Jump: ^MyOut R|kotlin/TODO|()" style="filled" fillcolor=gray];
16 [label="Stub" style="filled" fillcolor=gray];
12 [label="Exit function MyOut" style="filled" fillcolor=red];
10 [label="Enter function <init>" style="filled" fillcolor=red];
11 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
12 [label="Exit function <init>" style="filled" fillcolor=red];
}
11 -> {13};
13 -> {12};
13 -> {14} [style=dotted];
14 -> {15} [style=dotted];
15 -> {12 16} [style=dotted];
16 -> {12} [style=dotted];
10 -> {11};
11 -> {12};
subgraph cluster_6 {
color=red
17 [label="Enter function foo" style="filled" fillcolor=red];
19 [label="Postponed enter to lambda"];
13 [label="Enter function MyOut" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
23 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
25 [label="Access qualifier /IrStarProjectionImpl"];
24 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
14 [label="Enter block"];
15 [label="Function call: R|kotlin/TODO|()"];
16 [label="Stub" style="filled" fillcolor=gray];
17 [label="Jump: ^MyOut R|kotlin/TODO|()" style="filled" fillcolor=gray];
18 [label="Stub" style="filled" fillcolor=gray];
19 [label="Exit block" style="filled" fillcolor=gray];
}
20 [label="Postponed exit from lambda"];
21 [label="Function call: R|/MyOut|<R|IrStarProjectionImpl|>(...)"];
22 [label="Function call: R|/bar|(...)"];
18 [label="Exit function foo" style="filled" fillcolor=red];
20 [label="Exit function MyOut" style="filled" fillcolor=red];
}
13 -> {14};
14 -> {15};
15 -> {20};
15 -> {16} [style=dotted];
16 -> {17} [style=dotted];
17 -> {20 18} [style=dotted];
18 -> {19} [style=dotted];
19 -> {20} [style=dotted];
subgraph cluster_8 {
color=red
21 [label="Enter function foo" style="filled" fillcolor=red];
subgraph cluster_9 {
color=blue
22 [label="Enter block"];
23 [label="Postponed enter to lambda"];
subgraph cluster_10 {
color=blue
29 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_11 {
color=blue
30 [label="Enter block"];
31 [label="Access qualifier /IrStarProjectionImpl"];
32 [label="Exit block"];
}
33 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
24 [label="Postponed exit from lambda"];
25 [label="Function call: R|/MyOut|<R|IrStarProjectionImpl|>(...)"];
26 [label="Function call: R|/bar|(...)"];
27 [label="Exit block"];
}
28 [label="Exit function foo" style="filled" fillcolor=red];
}
17 -> {19};
19 -> {20};
19 -> {23} [color=red];
20 -> {21};
21 -> {22};
22 -> {18};
23 -> {25};
25 -> {24};
22 -> {23};
23 -> {24 29};
24 -> {25};
25 -> {26};
26 -> {27};
27 -> {28};
29 -> {30};
30 -> {31};
31 -> {32};
32 -> {33};
}

View File

@@ -6,208 +6,281 @@ digraph lambdas_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function run" style="filled" fillcolor=red];
2 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
1 [label="Exit function run" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {1};
subgraph cluster_1 {
color=red
3 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_2 {
subgraph cluster_1 {
color=blue
5 [label="Enter when"];
subgraph cluster_3 {
color=blue
7 [label="Enter when branch condition "];
8 [label="Access variable R|<local>/x|"];
9 [label="Type operator: (R|<local>/x| is R|kotlin/Int|)"];
10 [label="Exit when branch condition"];
}
18 [label="Synthetic else branch"];
11 [label="Enter when branch result"];
1 [label="Enter block"];
2 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
3 [label="Exit block"];
}
4 [label="Exit function run" style="filled" fillcolor=red];
}
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
subgraph cluster_2 {
color=red
5 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
6 [label="Enter block"];
subgraph cluster_4 {
color=blue
12 [label="Enter block"];
13 [label="Postponed enter to lambda"];
7 [label="Enter when"];
subgraph cluster_5 {
color=blue
19 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
21 [label="Access variable R|<local>/x|"];
22 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
20 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
8 [label="Enter when branch condition "];
9 [label="Access variable R|<local>/x|"];
10 [label="Type operator: (R|<local>/x| is R|kotlin/Int|)"];
11 [label="Exit when branch condition"];
}
14 [label="Postponed exit from lambda"];
15 [label="Function call: R|/run|(...)"];
16 [label="Exit block"];
12 [label="Synthetic else branch"];
13 [label="Enter when branch result"];
subgraph cluster_6 {
color=blue
14 [label="Enter block"];
15 [label="Postponed enter to lambda"];
subgraph cluster_7 {
color=blue
23 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_8 {
color=blue
24 [label="Enter block"];
25 [label="Access variable R|<local>/x|"];
26 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
27 [label="Exit block"];
}
28 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
16 [label="Postponed exit from lambda"];
17 [label="Function call: R|/run|(...)"];
18 [label="Exit block"];
}
19 [label="Exit when branch result"];
20 [label="Exit when"];
}
17 [label="Exit when branch result"];
6 [label="Exit when"];
21 [label="Exit block"];
}
4 [label="Exit function test_1" style="filled" fillcolor=red];
22 [label="Exit function test_1" style="filled" fillcolor=red];
}
3 -> {5};
5 -> {7};
6 -> {4};
5 -> {6};
6 -> {7};
7 -> {8};
8 -> {9};
9 -> {10};
10 -> {11 18};
11 -> {12};
12 -> {13};
13 -> {19};
13 -> {14} [color=red];
10 -> {11};
11 -> {13 12};
12 -> {20};
13 -> {14};
14 -> {15};
15 -> {16};
15 -> {23};
15 -> {16} [color=red];
16 -> {17};
17 -> {6};
18 -> {6};
19 -> {20 21};
20 -> {19};
20 -> {14} [color=green];
17 -> {18};
18 -> {19};
19 -> {20};
20 -> {21};
21 -> {22};
22 -> {20};
23 -> {28 24};
24 -> {25};
25 -> {26};
26 -> {27};
27 -> {28};
28 -> {16} [color=green];
28 -> {23} [color=green style=dashed];
subgraph cluster_6 {
subgraph cluster_9 {
color=red
23 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
25 [label="Enter when"];
subgraph cluster_8 {
color=blue
27 [label="Enter when branch condition "];
28 [label="Access variable R|<local>/x|"];
29 [label="Type operator: (R|<local>/x| is R|kotlin/Int|)"];
30 [label="Exit when branch condition"];
}
36 [label="Synthetic else branch"];
31 [label="Enter when branch result"];
subgraph cluster_9 {
color=blue
32 [label="Enter block"];
33 [label="Variable declaration: lval lambda: R|() -> kotlin/Int|"];
34 [label="Exit block"];
}
35 [label="Exit when branch result"];
26 [label="Exit when"];
}
29 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_10 {
color=blue
37 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
39 [label="Access variable R|<local>/x|"];
40 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
38 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
30 [label="Enter block"];
subgraph cluster_11 {
color=blue
31 [label="Enter when"];
subgraph cluster_12 {
color=blue
32 [label="Enter when branch condition "];
33 [label="Access variable R|<local>/x|"];
34 [label="Type operator: (R|<local>/x| is R|kotlin/Int|)"];
35 [label="Exit when branch condition"];
}
36 [label="Synthetic else branch"];
37 [label="Enter when branch result"];
subgraph cluster_13 {
color=blue
38 [label="Enter block"];
39 [label="Postponed enter to lambda"];
subgraph cluster_14 {
color=blue
47 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_15 {
color=blue
48 [label="Enter block"];
49 [label="Access variable R|<local>/x|"];
50 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
51 [label="Exit block"];
}
52 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
40 [label="Postponed exit from lambda"];
41 [label="Variable declaration: lval lambda: R|() -> kotlin/Int|"];
42 [label="Exit block"];
}
43 [label="Exit when branch result"];
44 [label="Exit when"];
}
45 [label="Exit block"];
}
24 [label="Exit function test_2" style="filled" fillcolor=red];
46 [label="Exit function test_2" style="filled" fillcolor=red];
}
23 -> {25};
25 -> {27};
26 -> {24};
27 -> {28};
28 -> {29};
29 -> {30};
30 -> {31 36};
30 -> {31};
31 -> {32};
32 -> {33};
32 -> {37} [color=red];
33 -> {34};
34 -> {35};
35 -> {26};
36 -> {26};
37 -> {39};
39 -> {40};
40 -> {38};
subgraph cluster_11 {
color=red
41 [label="Enter function getInt" style="filled" fillcolor=red];
43 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
44 [label="Const: Int(1)"];
45 [label="Jump: ^getInt Int(1)"];
46 [label="Stub" style="filled" fillcolor=gray];
42 [label="Exit function getInt" style="filled" fillcolor=red];
}
41 -> {43};
35 -> {37 36};
36 -> {44};
37 -> {38};
38 -> {39};
39 -> {40 47};
40 -> {41};
41 -> {42};
42 -> {43};
43 -> {44};
44 -> {45};
45 -> {42};
45 -> {46} [style=dotted];
46 -> {42} [style=dotted];
45 -> {46};
47 -> {48};
48 -> {49};
49 -> {50};
50 -> {51};
51 -> {52};
subgraph cluster_12 {
subgraph cluster_16 {
color=red
47 [label="Enter function test_3" style="filled" fillcolor=red];
49 [label="Postponed enter to lambda"];
subgraph cluster_13 {
53 [label="Enter function getInt" style="filled" fillcolor=red];
subgraph cluster_17 {
color=blue
54 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
54 [label="Enter block"];
55 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
56 [label="Const: Int(1)"];
57 [label="Jump: ^test_3 Int(1)"];
57 [label="Jump: ^getInt Int(1)"];
58 [label="Stub" style="filled" fillcolor=gray];
55 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
59 [label="Exit block" style="filled" fillcolor=gray];
}
50 [label="Postponed exit from lambda"];
51 [label="Function call: R|/getInt|(...)"];
52 [label="Jump: ^test_3 R|/getInt|(<L> = getInt@fun <anonymous>(): R|kotlin/Unit| <kind=UNKNOWN> {
60 [label="Exit function getInt" style="filled" fillcolor=red];
}
53 -> {54};
54 -> {55};
55 -> {56};
56 -> {57};
57 -> {60};
57 -> {58} [style=dotted];
58 -> {59} [style=dotted];
59 -> {60} [style=dotted];
subgraph cluster_18 {
color=red
61 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_19 {
color=blue
62 [label="Enter block"];
63 [label="Postponed enter to lambda"];
subgraph cluster_20 {
color=blue
70 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_21 {
color=blue
71 [label="Enter block"];
72 [label="Const: Int(1)"];
73 [label="Jump: ^test_3 Int(1)"];
74 [label="Stub" style="filled" fillcolor=gray];
75 [label="Exit block" style="filled" fillcolor=gray];
}
76 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
64 [label="Postponed exit from lambda"];
65 [label="Function call: R|/getInt|(...)"];
66 [label="Jump: ^test_3 R|/getInt|(<L> = getInt@fun <anonymous>(): R|kotlin/Unit| <kind=UNKNOWN> {
^test_3 Int(1)
}
)"];
53 [label="Stub" style="filled" fillcolor=gray];
48 [label="Exit function test_3" style="filled" fillcolor=red];
}
47 -> {49};
49 -> {54};
49 -> {50} [color=red];
50 -> {51};
51 -> {52};
52 -> {48};
52 -> {53} [style=dotted];
53 -> {48} [style=dotted];
54 -> {55 56};
55 -> {54};
55 -> {50} [color=green];
56 -> {57};
57 -> {48};
57 -> {58} [style=dotted];
58 -> {55} [style=dotted];
subgraph cluster_14 {
color=red
59 [label="Enter function test_4" style="filled" fillcolor=red];
61 [label="Postponed enter to lambda"];
subgraph cluster_15 {
color=blue
66 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
68 [label="Const: Int(1)"];
69 [label="Jump: ^test_4 Int(1)"];
70 [label="Stub" style="filled" fillcolor=gray];
67 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
67 [label="Stub" style="filled" fillcolor=gray];
68 [label="Exit block" style="filled" fillcolor=gray];
}
62 [label="Postponed exit from lambda"];
63 [label="Function call: R|/getInt|(...)"];
64 [label="Jump: ^test_4 R|/getInt|(block = getInt@fun <anonymous>(): R|kotlin/Unit| <kind=UNKNOWN> {
69 [label="Exit function test_3" style="filled" fillcolor=red];
}
61 -> {62};
62 -> {63};
63 -> {70};
63 -> {64} [color=red];
64 -> {65};
65 -> {66};
66 -> {69};
66 -> {67} [style=dotted];
67 -> {68} [style=dotted];
68 -> {69} [style=dotted];
70 -> {76 71};
71 -> {72};
72 -> {73};
73 -> {69};
73 -> {74} [style=dotted];
74 -> {75} [style=dotted];
75 -> {76} [style=dotted];
76 -> {64} [color=green];
76 -> {70} [color=green style=dashed];
subgraph cluster_22 {
color=red
77 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_23 {
color=blue
78 [label="Enter block"];
79 [label="Postponed enter to lambda"];
subgraph cluster_24 {
color=blue
86 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_25 {
color=blue
87 [label="Enter block"];
88 [label="Const: Int(1)"];
89 [label="Jump: ^test_4 Int(1)"];
90 [label="Stub" style="filled" fillcolor=gray];
91 [label="Exit block" style="filled" fillcolor=gray];
}
92 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
80 [label="Postponed exit from lambda"];
81 [label="Function call: R|/getInt|(...)"];
82 [label="Jump: ^test_4 R|/getInt|(block = getInt@fun <anonymous>(): R|kotlin/Unit| <kind=UNKNOWN> {
^test_4 Int(1)
}
)"];
65 [label="Stub" style="filled" fillcolor=gray];
60 [label="Exit function test_4" style="filled" fillcolor=red];
83 [label="Stub" style="filled" fillcolor=gray];
84 [label="Exit block" style="filled" fillcolor=gray];
}
85 [label="Exit function test_4" style="filled" fillcolor=red];
}
59 -> {61};
61 -> {66};
61 -> {62} [color=red];
62 -> {63};
63 -> {64};
64 -> {60};
64 -> {65} [style=dotted];
65 -> {60} [style=dotted];
66 -> {67 68};
67 -> {66};
67 -> {62} [color=green];
68 -> {69};
69 -> {60};
69 -> {70} [style=dotted];
70 -> {67} [style=dotted];
77 -> {78};
78 -> {79};
79 -> {86};
79 -> {80} [color=red];
80 -> {81};
81 -> {82};
82 -> {85};
82 -> {83} [style=dotted];
83 -> {84} [style=dotted];
84 -> {85} [style=dotted];
86 -> {92 87};
87 -> {88};
88 -> {89};
89 -> {85};
89 -> {90} [style=dotted];
90 -> {91} [style=dotted];
91 -> {92} [style=dotted];
92 -> {80} [color=green];
92 -> {86} [color=green style=dashed];
}

View File

@@ -6,159 +6,160 @@ digraph localClassesWithImplicit_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function myRun" style="filled" fillcolor=red];
2 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|T|>|()"];
3 [label="Jump: ^myRun R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|T|>|()"];
4 [label="Stub" style="filled" fillcolor=gray];
1 [label="Exit function myRun" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {3};
3 -> {1};
3 -> {4} [style=dotted];
4 -> {1} [style=dotted];
subgraph cluster_1 {
color=red
5 [label="Enter function test" style="filled" fillcolor=red];
subgraph cluster_2 {
subgraph cluster_1 {
color=blue
7 [label="Enter when"];
subgraph cluster_3 {
color=blue
9 [label="Enter when branch condition "];
10 [label="Access variable R|<local>/a|"];
11 [label="Type operator: (R|<local>/a| !is R|kotlin/String|)"];
12 [label="Exit when branch condition"];
}
19 [label="Synthetic else branch"];
13 [label="Enter when branch result"];
subgraph cluster_4 {
color=blue
14 [label="Enter block"];
15 [label="Jump: ^test Unit"];
16 [label="Stub" style="filled" fillcolor=gray];
17 [label="Exit block" style="filled" fillcolor=gray];
}
18 [label="Exit when branch result" style="filled" fillcolor=gray];
8 [label="Exit when"];
1 [label="Enter block"];
2 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|T|>|()"];
3 [label="Jump: ^myRun R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|T|>|()"];
4 [label="Stub" style="filled" fillcolor=gray];
5 [label="Exit block" style="filled" fillcolor=gray];
}
20 [label="Exit local class test"];
21 [label="Exit anonymous object"];
22 [label="Variable declaration: lval x: R|<anonymous>|"];
6 [label="Exit function test" style="filled" fillcolor=red];
6 [label="Exit function myRun" style="filled" fillcolor=red];
}
5 -> {7};
7 -> {9};
8 -> {20};
8 -> {23 26 57 71} [color=red];
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {6};
3 -> {4} [style=dotted];
4 -> {5} [style=dotted];
5 -> {6} [style=dotted];
subgraph cluster_2 {
color=red
7 [label="Enter function test" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
29 [label="Enter class <anonymous object>" style="filled" fillcolor=red];
30 [label="Exit class <anonymous object>" style="filled" fillcolor=red];
}
subgraph cluster_4 {
color=blue
27 [label="Enter class A" style="filled" fillcolor=red];
28 [label="Exit class A" style="filled" fillcolor=red];
}
subgraph cluster_5 {
color=blue
8 [label="Enter block"];
subgraph cluster_6 {
color=blue
9 [label="Enter when"];
subgraph cluster_7 {
color=blue
10 [label="Enter when branch condition "];
11 [label="Access variable R|<local>/a|"];
12 [label="Type operator: (R|<local>/a| !is R|kotlin/String|)"];
13 [label="Exit when branch condition"];
}
14 [label="Synthetic else branch"];
15 [label="Enter when branch result"];
subgraph cluster_8 {
color=blue
16 [label="Enter block"];
17 [label="Jump: ^test Unit"];
18 [label="Stub" style="filled" fillcolor=gray];
19 [label="Exit block" style="filled" fillcolor=gray];
}
20 [label="Exit when branch result" style="filled" fillcolor=gray];
21 [label="Exit when"];
}
22 [label="Exit local class test"];
23 [label="Exit anonymous object"];
24 [label="Variable declaration: lval x: R|<anonymous>|"];
25 [label="Exit block"];
}
26 [label="Exit function test" style="filled" fillcolor=red];
}
7 -> {8};
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {12};
12 -> {13 19};
13 -> {14};
14 -> {15};
15 -> {6};
15 -> {16} [style=dotted];
16 -> {17} [style=dotted];
12 -> {13};
13 -> {15 14};
14 -> {21};
15 -> {16};
16 -> {17};
17 -> {26};
17 -> {18} [style=dotted];
18 -> {8} [style=dotted];
19 -> {8};
20 -> {21};
20 -> {78 81 112 126} [color=red];
18 -> {19} [style=dotted];
19 -> {20} [style=dotted];
20 -> {21} [style=dotted];
21 -> {22};
22 -> {6};
21 -> {31 34 69 87} [color=red];
22 -> {23};
22 -> {94 97 132 150} [color=red];
23 -> {24};
24 -> {25};
25 -> {26};
27 -> {28} [color=green];
29 -> {30} [color=green];
subgraph cluster_5 {
subgraph cluster_9 {
color=red
23 [label="Enter function <init>" style="filled" fillcolor=red];
25 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
24 [label="Exit function <init>" style="filled" fillcolor=red];
31 [label="Enter function <init>" style="filled" fillcolor=red];
32 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
33 [label="Exit function <init>" style="filled" fillcolor=red];
}
23 -> {25};
25 -> {24};
31 -> {32};
32 -> {33};
subgraph cluster_6 {
subgraph cluster_10 {
color=red
26 [label="Enter function foo" style="filled" fillcolor=red];
subgraph cluster_7 {
34 [label="Enter function foo" style="filled" fillcolor=red];
subgraph cluster_11 {
color=blue
71 [label="Enter function baz" style="filled" fillcolor=red];
73 [label="Const: Int(1)"];
74 [label="Jump: ^baz Int(1)"];
75 [label="Stub" style="filled" fillcolor=gray];
72 [label="Exit function baz" style="filled" fillcolor=red];
}
subgraph cluster_8 {
color=blue
57 [label="Enter function bar" style="filled" fillcolor=red];
59 [label="Postponed enter to lambda"];
subgraph cluster_9 {
35 [label="Enter block"];
36 [label="Postponed enter to lambda"];
subgraph cluster_12 {
color=blue
64 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
66 [label="Access variable R|<local>/b|"];
67 [label="Access variable <Unresolved name: length>#"];
68 [label="Access variable R|<local>/a|"];
69 [label="Access variable R|kotlin/String.length|"];
70 [label="Function call: this@R|/A|.R|/A.baz|()"];
65 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
60 [label="Postponed exit from lambda"];
61 [label="Function call: R|/myRun|<R|kotlin/Int|>(...)"];
62 [label="Jump: ^bar R|/myRun|<R|kotlin/Int|>(<L> = myRun@fun <anonymous>(): R|kotlin/Int| <kind=UNKNOWN> {
R|<local>/b|.<Unresolved name: length>#
R|<local>/a|.R|kotlin/String.length|
^ this@R|/A|.R|/A.baz|()
}
)"];
63 [label="Stub" style="filled" fillcolor=gray];
58 [label="Exit function bar" style="filled" fillcolor=red];
}
28 [label="Postponed enter to lambda"];
subgraph cluster_10 {
color=blue
33 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
35 [label="Access variable R|<local>/a|"];
36 [label="Access variable R|kotlin/String.length|"];
subgraph cluster_11 {
color=blue
37 [label="Enter when"];
subgraph cluster_12 {
color=blue
39 [label="Enter when branch condition "];
40 [label="Access variable R|<local>/b|"];
41 [label="Type operator: (R|<local>/b| is R|kotlin/String|)"];
42 [label="Exit when branch condition"];
}
43 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_13 {
color=blue
50 [label="Enter when branch condition else"];
51 [label="Exit when branch condition"];
}
52 [label="Enter when branch result"];
subgraph cluster_14 {
color=blue
53 [label="Enter block"];
54 [label="Const: Int(1)"];
55 [label="Exit block"];
}
56 [label="Exit when branch result"];
43 [label="Enter when branch result"];
subgraph cluster_15 {
color=blue
44 [label="Enter block"];
45 [label="Access variable R|<local>/b|"];
45 [label="Access variable R|<local>/a|"];
46 [label="Access variable R|kotlin/String.length|"];
47 [label="Function call: this@R|/A|.R|/A.bar|()"];
48 [label="Exit block"];
subgraph cluster_14 {
color=blue
47 [label="Enter when"];
subgraph cluster_15 {
color=blue
48 [label="Enter when branch condition "];
49 [label="Access variable R|<local>/b|"];
50 [label="Type operator: (R|<local>/b| is R|kotlin/String|)"];
51 [label="Exit when branch condition"];
}
subgraph cluster_16 {
color=blue
52 [label="Enter when branch condition else"];
53 [label="Exit when branch condition"];
}
54 [label="Enter when branch result"];
subgraph cluster_17 {
color=blue
55 [label="Enter block"];
56 [label="Const: Int(1)"];
57 [label="Exit block"];
}
58 [label="Exit when branch result"];
59 [label="Enter when branch result"];
subgraph cluster_18 {
color=blue
60 [label="Enter block"];
61 [label="Access variable R|<local>/b|"];
62 [label="Access variable R|kotlin/String.length|"];
63 [label="Function call: this@R|/A|.R|/A.bar|()"];
64 [label="Exit block"];
}
65 [label="Exit when branch result"];
66 [label="Exit when"];
}
67 [label="Exit block"];
}
49 [label="Exit when branch result"];
38 [label="Exit when"];
68 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
34 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
29 [label="Postponed exit from lambda"];
30 [label="Function call: R|/myRun|<R|kotlin/Int|>(...)"];
31 [label="Jump: ^foo R|/myRun|<R|kotlin/Int|>(<L> = myRun@fun <anonymous>(): R|kotlin/Int| <kind=UNKNOWN> {
37 [label="Postponed exit from lambda"];
38 [label="Function call: R|/myRun|<R|kotlin/Int|>(...)"];
39 [label="Jump: ^foo R|/myRun|<R|kotlin/Int|>(<L> = myRun@fun <anonymous>(): R|kotlin/Int| <kind=UNKNOWN> {
R|<local>/a|.R|kotlin/String.length|
^ when () {
(R|<local>/b| is R|kotlin/String|) -> {
@@ -172,129 +173,192 @@ digraph localClassesWithImplicit_kt {
}
)"];
32 [label="Stub" style="filled" fillcolor=gray];
27 [label="Exit function foo" style="filled" fillcolor=red];
40 [label="Stub" style="filled" fillcolor=gray];
41 [label="Exit block" style="filled" fillcolor=gray];
}
42 [label="Exit function foo" style="filled" fillcolor=red];
}
26 -> {28};
28 -> {33};
28 -> {29} [color=red];
29 -> {30};
30 -> {31};
31 -> {27};
31 -> {32} [style=dotted];
32 -> {27} [style=dotted];
33 -> {34 35};
34 -> {33};
34 -> {29} [color=green];
34 -> {35};
35 -> {36};
36 -> {37};
37 -> {39};
38 -> {34};
39 -> {40};
40 -> {41};
41 -> {42};
42 -> {43 50};
43 -> {44};
36 -> {43};
36 -> {37} [color=red];
37 -> {38};
38 -> {39};
39 -> {42};
39 -> {40} [style=dotted];
40 -> {41} [style=dotted];
41 -> {42} [style=dotted];
43 -> {68 44};
44 -> {45};
45 -> {46};
46 -> {47};
47 -> {48};
48 -> {49};
49 -> {38};
49 -> {50};
50 -> {51};
51 -> {52};
51 -> {59 52};
52 -> {53};
53 -> {54};
54 -> {55};
55 -> {56};
56 -> {38};
57 -> {59};
59 -> {64};
59 -> {60} [color=red];
56 -> {57};
57 -> {58};
58 -> {66};
59 -> {60};
60 -> {61};
61 -> {62};
62 -> {58};
62 -> {63} [style=dotted];
63 -> {58} [style=dotted];
64 -> {65 66};
65 -> {64};
65 -> {60} [color=green];
62 -> {63};
63 -> {64};
64 -> {65};
65 -> {66};
66 -> {67};
67 -> {68};
68 -> {69};
69 -> {70};
70 -> {65};
71 -> {73};
73 -> {74};
74 -> {72};
74 -> {75} [style=dotted];
75 -> {72} [style=dotted];
68 -> {37} [color=green];
68 -> {43} [color=green style=dashed];
subgraph cluster_16 {
subgraph cluster_19 {
color=red
76 [label="Enter class A" style="filled" fillcolor=red];
77 [label="Exit class A" style="filled" fillcolor=red];
}
76 -> {77} [color=green];
subgraph cluster_17 {
color=red
78 [label="Enter function <init>" style="filled" fillcolor=red];
80 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
79 [label="Exit function <init>" style="filled" fillcolor=red];
}
78 -> {80};
80 -> {79};
subgraph cluster_18 {
color=red
81 [label="Enter function foo" style="filled" fillcolor=red];
83 [label="Postponed enter to lambda"];
subgraph cluster_19 {
69 [label="Enter function bar" style="filled" fillcolor=red];
subgraph cluster_20 {
color=blue
88 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
90 [label="Access variable R|<local>/a|"];
91 [label="Access variable R|kotlin/String.length|"];
subgraph cluster_20 {
70 [label="Enter block"];
71 [label="Postponed enter to lambda"];
subgraph cluster_21 {
color=blue
92 [label="Enter when"];
subgraph cluster_21 {
color=blue
94 [label="Enter when branch condition "];
95 [label="Access variable R|<local>/b|"];
96 [label="Type operator: (R|<local>/b| is R|kotlin/String|)"];
97 [label="Exit when branch condition"];
}
78 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_22 {
color=blue
105 [label="Enter when branch condition else"];
106 [label="Exit when branch condition"];
79 [label="Enter block"];
80 [label="Access variable R|<local>/b|"];
81 [label="Access variable <Unresolved name: length>#"];
82 [label="Access variable R|<local>/a|"];
83 [label="Access variable R|kotlin/String.length|"];
84 [label="Function call: this@R|/A|.R|/A.baz|()"];
85 [label="Exit block"];
}
107 [label="Enter when branch result"];
subgraph cluster_23 {
color=blue
108 [label="Enter block"];
109 [label="Const: Int(1)"];
110 [label="Exit block"];
}
111 [label="Exit when branch result"];
98 [label="Enter when branch result"];
subgraph cluster_24 {
color=blue
99 [label="Enter block"];
100 [label="Access variable R|<local>/b|"];
101 [label="Access variable R|kotlin/String.length|"];
102 [label="Function call: this@R|/<anonymous>|.R|/<anonymous>.bar|()"];
103 [label="Exit block"];
}
104 [label="Exit when branch result"];
93 [label="Exit when"];
86 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
89 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
72 [label="Postponed exit from lambda"];
73 [label="Function call: R|/myRun|<R|kotlin/Int|>(...)"];
74 [label="Jump: ^bar R|/myRun|<R|kotlin/Int|>(<L> = myRun@fun <anonymous>(): R|kotlin/Int| <kind=UNKNOWN> {
R|<local>/b|.<Unresolved name: length>#
R|<local>/a|.R|kotlin/String.length|
^ this@R|/A|.R|/A.baz|()
}
)"];
75 [label="Stub" style="filled" fillcolor=gray];
76 [label="Exit block" style="filled" fillcolor=gray];
}
84 [label="Postponed exit from lambda"];
85 [label="Function call: R|/myRun|<R|kotlin/Int|>(...)"];
86 [label="Jump: ^foo R|/myRun|<R|kotlin/Int|>(<L> = myRun@fun <anonymous>(): R|kotlin/Int| <kind=UNKNOWN> {
77 [label="Exit function bar" style="filled" fillcolor=red];
}
69 -> {70};
70 -> {71};
71 -> {78};
71 -> {72} [color=red];
72 -> {73};
73 -> {74};
74 -> {77};
74 -> {75} [style=dotted];
75 -> {76} [style=dotted];
76 -> {77} [style=dotted];
78 -> {86 79};
79 -> {80};
80 -> {81};
81 -> {82};
82 -> {83};
83 -> {84};
84 -> {85};
85 -> {86};
86 -> {72} [color=green];
86 -> {78} [color=green style=dashed];
subgraph cluster_23 {
color=red
87 [label="Enter function baz" style="filled" fillcolor=red];
subgraph cluster_24 {
color=blue
88 [label="Enter block"];
89 [label="Const: Int(1)"];
90 [label="Jump: ^baz Int(1)"];
91 [label="Stub" style="filled" fillcolor=gray];
92 [label="Exit block" style="filled" fillcolor=gray];
}
93 [label="Exit function baz" style="filled" fillcolor=red];
}
87 -> {88};
88 -> {89};
89 -> {90};
90 -> {93};
90 -> {91} [style=dotted];
91 -> {92} [style=dotted];
92 -> {93} [style=dotted];
subgraph cluster_25 {
color=red
94 [label="Enter function <init>" style="filled" fillcolor=red];
95 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
96 [label="Exit function <init>" style="filled" fillcolor=red];
}
94 -> {95};
95 -> {96};
subgraph cluster_26 {
color=red
97 [label="Enter function foo" style="filled" fillcolor=red];
subgraph cluster_27 {
color=blue
98 [label="Enter block"];
99 [label="Postponed enter to lambda"];
subgraph cluster_28 {
color=blue
106 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_29 {
color=blue
107 [label="Enter block"];
108 [label="Access variable R|<local>/a|"];
109 [label="Access variable R|kotlin/String.length|"];
subgraph cluster_30 {
color=blue
110 [label="Enter when"];
subgraph cluster_31 {
color=blue
111 [label="Enter when branch condition "];
112 [label="Access variable R|<local>/b|"];
113 [label="Type operator: (R|<local>/b| is R|kotlin/String|)"];
114 [label="Exit when branch condition"];
}
subgraph cluster_32 {
color=blue
115 [label="Enter when branch condition else"];
116 [label="Exit when branch condition"];
}
117 [label="Enter when branch result"];
subgraph cluster_33 {
color=blue
118 [label="Enter block"];
119 [label="Const: Int(1)"];
120 [label="Exit block"];
}
121 [label="Exit when branch result"];
122 [label="Enter when branch result"];
subgraph cluster_34 {
color=blue
123 [label="Enter block"];
124 [label="Access variable R|<local>/b|"];
125 [label="Access variable R|kotlin/String.length|"];
126 [label="Function call: this@R|/<anonymous>|.R|/<anonymous>.bar|()"];
127 [label="Exit block"];
}
128 [label="Exit when branch result"];
129 [label="Exit when"];
}
130 [label="Exit block"];
}
131 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
100 [label="Postponed exit from lambda"];
101 [label="Function call: R|/myRun|<R|kotlin/Int|>(...)"];
102 [label="Jump: ^foo R|/myRun|<R|kotlin/Int|>(<L> = myRun@fun <anonymous>(): R|kotlin/Int| <kind=UNKNOWN> {
R|<local>/a|.R|kotlin/String.length|
^ when () {
(R|<local>/b| is R|kotlin/String|) -> {
@@ -308,104 +372,124 @@ digraph localClassesWithImplicit_kt {
}
)"];
87 [label="Stub" style="filled" fillcolor=gray];
82 [label="Exit function foo" style="filled" fillcolor=red];
103 [label="Stub" style="filled" fillcolor=gray];
104 [label="Exit block" style="filled" fillcolor=gray];
}
105 [label="Exit function foo" style="filled" fillcolor=red];
}
81 -> {83};
83 -> {88};
83 -> {84} [color=red];
84 -> {85};
85 -> {86};
86 -> {82};
86 -> {87} [style=dotted];
87 -> {82} [style=dotted];
88 -> {89 90};
89 -> {88};
89 -> {84} [color=green];
90 -> {91};
91 -> {92};
92 -> {94};
93 -> {89};
94 -> {95};
95 -> {96};
96 -> {97};
97 -> {98 105};
97 -> {98};
98 -> {99};
99 -> {100};
99 -> {106};
99 -> {100} [color=red];
100 -> {101};
101 -> {102};
102 -> {103};
103 -> {104};
104 -> {93};
105 -> {106};
106 -> {107};
102 -> {105};
102 -> {103} [style=dotted];
103 -> {104} [style=dotted];
104 -> {105} [style=dotted];
106 -> {131 107};
107 -> {108};
108 -> {109};
109 -> {110};
110 -> {111};
111 -> {93};
111 -> {112};
112 -> {113};
113 -> {114};
114 -> {122 115};
115 -> {116};
116 -> {117};
117 -> {118};
118 -> {119};
119 -> {120};
120 -> {121};
121 -> {129};
122 -> {123};
123 -> {124};
124 -> {125};
125 -> {126};
126 -> {127};
127 -> {128};
128 -> {129};
129 -> {130};
130 -> {131};
131 -> {100} [color=green];
131 -> {106} [color=green style=dashed];
subgraph cluster_25 {
subgraph cluster_35 {
color=red
112 [label="Enter function bar" style="filled" fillcolor=red];
114 [label="Postponed enter to lambda"];
subgraph cluster_26 {
132 [label="Enter function bar" style="filled" fillcolor=red];
subgraph cluster_36 {
color=blue
119 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
121 [label="Access variable R|<local>/a|"];
122 [label="Access variable R|kotlin/String.length|"];
123 [label="Access variable R|<local>/b|"];
124 [label="Access variable <Unresolved name: length>#"];
125 [label="Function call: this@R|/<anonymous>|.R|/<anonymous>.baz|()"];
120 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
115 [label="Postponed exit from lambda"];
116 [label="Function call: R|/myRun|<R|kotlin/Int|>(...)"];
117 [label="Jump: ^bar R|/myRun|<R|kotlin/Int|>(<L> = myRun@fun <anonymous>(): R|kotlin/Int| <kind=UNKNOWN> {
133 [label="Enter block"];
134 [label="Postponed enter to lambda"];
subgraph cluster_37 {
color=blue
141 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_38 {
color=blue
142 [label="Enter block"];
143 [label="Access variable R|<local>/a|"];
144 [label="Access variable R|kotlin/String.length|"];
145 [label="Access variable R|<local>/b|"];
146 [label="Access variable <Unresolved name: length>#"];
147 [label="Function call: this@R|/<anonymous>|.R|/<anonymous>.baz|()"];
148 [label="Exit block"];
}
149 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
135 [label="Postponed exit from lambda"];
136 [label="Function call: R|/myRun|<R|kotlin/Int|>(...)"];
137 [label="Jump: ^bar R|/myRun|<R|kotlin/Int|>(<L> = myRun@fun <anonymous>(): R|kotlin/Int| <kind=UNKNOWN> {
R|<local>/a|.R|kotlin/String.length|
R|<local>/b|.<Unresolved name: length>#
^ this@R|/<anonymous>|.R|/<anonymous>.baz|()
}
)"];
118 [label="Stub" style="filled" fillcolor=gray];
113 [label="Exit function bar" style="filled" fillcolor=red];
138 [label="Stub" style="filled" fillcolor=gray];
139 [label="Exit block" style="filled" fillcolor=gray];
}
140 [label="Exit function bar" style="filled" fillcolor=red];
}
112 -> {114};
114 -> {119};
114 -> {115} [color=red];
115 -> {116};
116 -> {117};
117 -> {113};
117 -> {118} [style=dotted];
118 -> {113} [style=dotted];
119 -> {120 121};
120 -> {119};
120 -> {115} [color=green];
121 -> {122};
122 -> {123};
123 -> {124};
124 -> {125};
125 -> {120};
132 -> {133};
133 -> {134};
134 -> {141};
134 -> {135} [color=red];
135 -> {136};
136 -> {137};
137 -> {140};
137 -> {138} [style=dotted];
138 -> {139} [style=dotted];
139 -> {140} [style=dotted];
141 -> {149 142};
142 -> {143};
143 -> {144};
144 -> {145};
145 -> {146};
146 -> {147};
147 -> {148};
148 -> {149};
149 -> {135} [color=green];
149 -> {141} [color=green style=dashed];
subgraph cluster_27 {
subgraph cluster_39 {
color=red
126 [label="Enter function baz" style="filled" fillcolor=red];
128 [label="Const: Int(1)"];
129 [label="Jump: ^baz Int(1)"];
130 [label="Stub" style="filled" fillcolor=gray];
127 [label="Exit function baz" style="filled" fillcolor=red];
150 [label="Enter function baz" style="filled" fillcolor=red];
subgraph cluster_40 {
color=blue
151 [label="Enter block"];
152 [label="Const: Int(1)"];
153 [label="Jump: ^baz Int(1)"];
154 [label="Stub" style="filled" fillcolor=gray];
155 [label="Exit block" style="filled" fillcolor=gray];
}
156 [label="Exit function baz" style="filled" fillcolor=red];
}
126 -> {128};
128 -> {129};
129 -> {127};
129 -> {130} [style=dotted];
130 -> {127} [style=dotted];
subgraph cluster_28 {
color=red
131 [label="Enter class <anonymous>" style="filled" fillcolor=red];
132 [label="Exit class <anonymous>" style="filled" fillcolor=red];
}
131 -> {132} [color=green];
150 -> {151};
151 -> {152};
152 -> {153};
153 -> {156};
153 -> {154} [style=dotted];
154 -> {155} [style=dotted];
155 -> {156} [style=dotted];
}

View File

@@ -8,82 +8,93 @@ digraph loops_kt {
0 [label="Enter function testWhile" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
2 [label="Enter while loop"];
1 [label="Enter block"];
subgraph cluster_2 {
color=blue
4 [label="Enter loop condition"];
5 [label="Access variable R|<local>/b|"];
6 [label="Exit loop condition"];
}
subgraph cluster_3 {
color=blue
7 [label="Enter loop block"];
2 [label="Enter while loop"];
subgraph cluster_3 {
color=blue
3 [label="Enter loop condition"];
4 [label="Access variable R|<local>/b|"];
5 [label="Exit loop condition"];
}
subgraph cluster_4 {
color=blue
8 [label="Enter block"];
9 [label="Access variable R|<local>/x|"];
10 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
11 [label="Variable declaration: lval y: R|kotlin/Boolean|"];
12 [label="Exit block"];
6 [label="Enter loop block"];
subgraph cluster_5 {
color=blue
7 [label="Enter block"];
8 [label="Access variable R|<local>/x|"];
9 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
10 [label="Variable declaration: lval y: R|kotlin/Boolean|"];
11 [label="Exit block"];
}
12 [label="Exit loop block"];
}
13 [label="Exit loop block"];
13 [label="Exit whileloop"];
}
3 [label="Exit whileloop"];
14 [label="Access variable R|<local>/x|"];
15 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
16 [label="Exit block"];
}
14 [label="Access variable R|<local>/x|"];
15 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
1 [label="Exit function testWhile" style="filled" fillcolor=red];
17 [label="Exit function testWhile" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {4};
3 -> {14};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
4 -> {5};
5 -> {6};
6 -> {3 7};
5 -> {13 6};
6 -> {7};
7 -> {8};
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {12};
12 -> {13};
13 -> {4};
12 -> {3} [color=green style=dashed];
13 -> {14};
14 -> {15};
15 -> {1};
15 -> {16};
16 -> {17};
subgraph cluster_5 {
subgraph cluster_6 {
color=red
16 [label="Enter function testDoWhile" style="filled" fillcolor=red];
subgraph cluster_6 {
18 [label="Enter function testDoWhile" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
18 [label="Enter do-while loop"];
subgraph cluster_7 {
19 [label="Enter block"];
subgraph cluster_8 {
color=blue
20 [label="Enter loop block"];
subgraph cluster_8 {
20 [label="Enter do-while loop"];
subgraph cluster_9 {
color=blue
21 [label="Enter block"];
22 [label="Access variable R|<local>/x|"];
23 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
24 [label="Variable declaration: lval y: R|kotlin/Boolean|"];
25 [label="Exit block"];
21 [label="Enter loop block"];
subgraph cluster_10 {
color=blue
22 [label="Enter block"];
23 [label="Access variable R|<local>/x|"];
24 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
25 [label="Variable declaration: lval y: R|kotlin/Boolean|"];
26 [label="Exit block"];
}
27 [label="Exit loop block"];
}
26 [label="Exit loop block"];
subgraph cluster_11 {
color=blue
28 [label="Enter loop condition"];
29 [label="Access variable R|<local>/b|"];
30 [label="Exit loop condition"];
}
31 [label="Exit do-whileloop"];
}
subgraph cluster_9 {
color=blue
27 [label="Enter loop condition"];
28 [label="Access variable R|<local>/b|"];
29 [label="Exit loop condition"];
}
19 [label="Exit do-whileloop"];
32 [label="Access variable R|<local>/x|"];
33 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
34 [label="Exit block"];
}
30 [label="Access variable R|<local>/x|"];
31 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
17 [label="Exit function testDoWhile" style="filled" fillcolor=red];
35 [label="Exit function testDoWhile" style="filled" fillcolor=red];
}
16 -> {18};
18 -> {20};
19 -> {30};
18 -> {19};
19 -> {20};
20 -> {21};
21 -> {22};
22 -> {23};
@@ -93,389 +104,442 @@ digraph loops_kt {
26 -> {27};
27 -> {28};
28 -> {29};
29 -> {20 19};
29 -> {30};
30 -> {31};
31 -> {17};
subgraph cluster_10 {
color=red
32 [label="Enter function testFor" style="filled" fillcolor=red];
34 [label="Const: Int(0)"];
35 [label="Const: Int(5)"];
36 [label="Function call: Int(0).R|kotlin/Int.rangeTo|(...)"];
37 [label="Function call: Int(0).R|kotlin/Int.rangeTo|(...).R|kotlin/ranges/IntProgression.iterator|()"];
38 [label="Variable declaration: lval <iterator>: R|kotlin/collections/IntIterator|"];
subgraph cluster_11 {
color=blue
39 [label="Enter while loop"];
subgraph cluster_12 {
color=blue
41 [label="Enter loop condition"];
42 [label="Access variable R|<local>/<iterator>|"];
43 [label="Function call: R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()"];
44 [label="Exit loop condition"];
}
subgraph cluster_13 {
color=blue
45 [label="Enter loop block"];
subgraph cluster_14 {
color=blue
46 [label="Enter block"];
47 [label="Access variable R|<local>/<iterator>|"];
48 [label="Function call: R|<local>/<iterator>|.R|kotlin/collections/IntIterator.next|()"];
49 [label="Variable declaration: lval i: R|kotlin/Int|"];
50 [label="Access variable R|<local>/x|"];
51 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
52 [label="Variable declaration: lval y: R|kotlin/Boolean|"];
53 [label="Exit block"];
}
54 [label="Exit loop block"];
}
40 [label="Exit whileloop"];
}
55 [label="Access variable R|<local>/x|"];
56 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
33 [label="Exit function testFor" style="filled" fillcolor=red];
}
32 -> {34};
30 -> {21} [color=green style=dashed];
31 -> {32};
32 -> {33};
33 -> {34};
34 -> {35};
35 -> {36};
subgraph cluster_12 {
color=red
36 [label="Enter function testFor" style="filled" fillcolor=red];
subgraph cluster_13 {
color=blue
37 [label="Enter block"];
38 [label="Const: Int(0)"];
39 [label="Const: Int(5)"];
40 [label="Function call: Int(0).R|kotlin/Int.rangeTo|(...)"];
41 [label="Function call: Int(0).R|kotlin/Int.rangeTo|(...).R|kotlin/ranges/IntProgression.iterator|()"];
42 [label="Variable declaration: lval <iterator>: R|kotlin/collections/IntIterator|"];
subgraph cluster_14 {
color=blue
43 [label="Enter while loop"];
subgraph cluster_15 {
color=blue
44 [label="Enter loop condition"];
45 [label="Access variable R|<local>/<iterator>|"];
46 [label="Function call: R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()"];
47 [label="Exit loop condition"];
}
subgraph cluster_16 {
color=blue
48 [label="Enter loop block"];
subgraph cluster_17 {
color=blue
49 [label="Enter block"];
50 [label="Access variable R|<local>/<iterator>|"];
51 [label="Function call: R|<local>/<iterator>|.R|kotlin/collections/IntIterator.next|()"];
52 [label="Variable declaration: lval i: R|kotlin/Int|"];
53 [label="Access variable R|<local>/x|"];
54 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
55 [label="Variable declaration: lval y: R|kotlin/Boolean|"];
56 [label="Exit block"];
}
57 [label="Exit loop block"];
}
58 [label="Exit whileloop"];
}
59 [label="Access variable R|<local>/x|"];
60 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
61 [label="Exit block"];
}
62 [label="Exit function testFor" style="filled" fillcolor=red];
}
36 -> {37};
37 -> {38};
38 -> {39};
39 -> {41};
40 -> {55};
39 -> {40};
40 -> {41};
41 -> {42};
42 -> {43};
43 -> {44};
44 -> {40 45};
44 -> {45};
45 -> {46};
46 -> {47};
47 -> {48};
47 -> {58 48};
48 -> {49};
49 -> {50};
50 -> {51};
51 -> {52};
52 -> {53};
53 -> {54};
54 -> {41};
54 -> {55};
55 -> {56};
56 -> {33};
subgraph cluster_15 {
color=red
57 [label="Enter function testWhileTrue" style="filled" fillcolor=red];
subgraph cluster_16 {
color=blue
59 [label="Enter while loop"];
subgraph cluster_17 {
color=blue
61 [label="Enter loop condition"];
62 [label="Const: Boolean(true)"];
63 [label="Exit loop condition"];
}
subgraph cluster_18 {
color=blue
64 [label="Enter loop block"];
subgraph cluster_19 {
color=blue
65 [label="Enter block"];
66 [label="Const: Int(1)"];
67 [label="Exit block"];
}
68 [label="Exit loop block"];
}
60 [label="Exit whileloop" style="filled" fillcolor=gray];
}
69 [label="Const: Int(1)" style="filled" fillcolor=gray];
58 [label="Exit function testWhileTrue" style="filled" fillcolor=red style="filled" fillcolor=gray];
}
57 -> {59};
59 -> {61};
60 -> {69} [style=dotted];
56 -> {57};
57 -> {44} [color=green style=dashed];
58 -> {59};
59 -> {60};
60 -> {61};
61 -> {62};
62 -> {63};
subgraph cluster_18 {
color=red
63 [label="Enter function testWhileTrue" style="filled" fillcolor=red];
subgraph cluster_19 {
color=blue
64 [label="Enter block"];
subgraph cluster_20 {
color=blue
65 [label="Enter while loop"];
subgraph cluster_21 {
color=blue
66 [label="Enter loop condition"];
67 [label="Const: Boolean(true)"];
68 [label="Exit loop condition"];
}
subgraph cluster_22 {
color=blue
69 [label="Enter loop block"];
subgraph cluster_23 {
color=blue
70 [label="Enter block"];
71 [label="Const: Int(1)"];
72 [label="Exit block"];
}
73 [label="Exit loop block"];
}
74 [label="Exit whileloop" style="filled" fillcolor=gray];
}
75 [label="Const: Int(1)" style="filled" fillcolor=gray];
76 [label="Exit block" style="filled" fillcolor=gray];
}
77 [label="Exit function testWhileTrue" style="filled" fillcolor=red style="filled" fillcolor=gray];
}
63 -> {64};
63 -> {60} [style=dotted];
64 -> {65};
65 -> {66};
66 -> {67};
67 -> {68};
68 -> {61};
69 -> {58} [style=dotted];
68 -> {69};
68 -> {74} [style=dotted];
69 -> {70};
70 -> {71};
71 -> {72};
72 -> {73};
73 -> {66} [color=green style=dashed];
74 -> {75} [style=dotted];
75 -> {76} [style=dotted];
76 -> {77} [style=dotted];
subgraph cluster_20 {
subgraph cluster_24 {
color=red
70 [label="Enter function testWhileTrueWithBreak" style="filled" fillcolor=red];
subgraph cluster_21 {
78 [label="Enter function testWhileTrueWithBreak" style="filled" fillcolor=red];
subgraph cluster_25 {
color=blue
72 [label="Enter while loop"];
subgraph cluster_22 {
79 [label="Enter block"];
subgraph cluster_26 {
color=blue
74 [label="Enter loop condition"];
75 [label="Const: Boolean(true)"];
76 [label="Exit loop condition"];
}
subgraph cluster_23 {
color=blue
77 [label="Enter loop block"];
subgraph cluster_24 {
80 [label="Enter while loop"];
subgraph cluster_27 {
color=blue
78 [label="Enter block"];
subgraph cluster_25 {
color=blue
79 [label="Enter when"];
subgraph cluster_26 {
color=blue
81 [label="Enter when branch condition "];
82 [label="Access variable R|<local>/b|"];
83 [label="Exit when branch condition"];
}
90 [label="Synthetic else branch"];
84 [label="Enter when branch result"];
subgraph cluster_27 {
color=blue
85 [label="Enter block"];
86 [label="Jump: break@@@[Boolean(true)] "];
87 [label="Stub" style="filled" fillcolor=gray];
88 [label="Exit block" style="filled" fillcolor=gray];
}
89 [label="Exit when branch result" style="filled" fillcolor=gray];
80 [label="Exit when"];
}
91 [label="Exit block"];
81 [label="Enter loop condition"];
82 [label="Const: Boolean(true)"];
83 [label="Exit loop condition"];
}
92 [label="Exit loop block"];
subgraph cluster_28 {
color=blue
84 [label="Enter loop block"];
subgraph cluster_29 {
color=blue
85 [label="Enter block"];
subgraph cluster_30 {
color=blue
86 [label="Enter when"];
subgraph cluster_31 {
color=blue
87 [label="Enter when branch condition "];
88 [label="Access variable R|<local>/b|"];
89 [label="Exit when branch condition"];
}
90 [label="Synthetic else branch"];
91 [label="Enter when branch result"];
subgraph cluster_32 {
color=blue
92 [label="Enter block"];
93 [label="Jump: break@@@[Boolean(true)] "];
94 [label="Stub" style="filled" fillcolor=gray];
95 [label="Exit block" style="filled" fillcolor=gray];
}
96 [label="Exit when branch result" style="filled" fillcolor=gray];
97 [label="Exit when"];
}
98 [label="Exit block"];
}
99 [label="Exit loop block"];
}
100 [label="Exit whileloop"];
}
73 [label="Exit whileloop"];
101 [label="Const: Int(1)"];
102 [label="Exit block"];
}
93 [label="Const: Int(1)"];
71 [label="Exit function testWhileTrueWithBreak" style="filled" fillcolor=red];
103 [label="Exit function testWhileTrueWithBreak" style="filled" fillcolor=red];
}
70 -> {72};
72 -> {74};
73 -> {93};
74 -> {75};
75 -> {76};
76 -> {77};
76 -> {73} [style=dotted];
77 -> {78};
78 -> {79};
79 -> {81};
80 -> {91};
79 -> {80};
80 -> {81};
81 -> {82};
82 -> {83};
83 -> {84 90};
83 -> {84};
83 -> {100} [style=dotted];
84 -> {85};
85 -> {86};
86 -> {73};
86 -> {87} [style=dotted];
87 -> {88} [style=dotted];
88 -> {89} [style=dotted];
89 -> {80} [style=dotted];
90 -> {80};
86 -> {87};
87 -> {88};
88 -> {89};
89 -> {91 90};
90 -> {97};
91 -> {92};
92 -> {74};
93 -> {71};
subgraph cluster_28 {
color=red
94 [label="Enter function testWhileFalse" style="filled" fillcolor=red];
subgraph cluster_29 {
color=blue
96 [label="Enter while loop"];
subgraph cluster_30 {
color=blue
98 [label="Enter loop condition"];
99 [label="Const: Boolean(false)"];
100 [label="Exit loop condition"];
}
subgraph cluster_31 {
color=blue
101 [label="Enter loop block" style="filled" fillcolor=gray];
subgraph cluster_32 {
color=blue
102 [label="Enter block" style="filled" fillcolor=gray];
103 [label="Const: Int(1)" style="filled" fillcolor=gray];
104 [label="Exit block" style="filled" fillcolor=gray];
}
105 [label="Exit loop block" style="filled" fillcolor=gray];
}
97 [label="Exit whileloop"];
}
106 [label="Const: Int(1)"];
95 [label="Exit function testWhileFalse" style="filled" fillcolor=red];
}
94 -> {96};
96 -> {98};
97 -> {106};
92 -> {93};
93 -> {100};
93 -> {94} [style=dotted];
94 -> {95} [style=dotted];
95 -> {96} [style=dotted];
96 -> {97} [style=dotted];
97 -> {98};
98 -> {99};
99 -> {100};
100 -> {97};
100 -> {101} [style=dotted];
101 -> {102} [style=dotted];
102 -> {103} [style=dotted];
103 -> {104} [style=dotted];
104 -> {105} [style=dotted];
105 -> {98} [style=dotted];
106 -> {95};
99 -> {81} [color=green style=dashed];
100 -> {101};
101 -> {102};
102 -> {103};
subgraph cluster_33 {
color=red
107 [label="Enter function testDoWhileTrue" style="filled" fillcolor=red];
104 [label="Enter function testWhileFalse" style="filled" fillcolor=red];
subgraph cluster_34 {
color=blue
109 [label="Enter do-while loop"];
105 [label="Enter block"];
subgraph cluster_35 {
color=blue
111 [label="Enter loop block"];
106 [label="Enter while loop"];
subgraph cluster_36 {
color=blue
112 [label="Enter block"];
113 [label="Const: Int(1)"];
114 [label="Exit block"];
107 [label="Enter loop condition"];
108 [label="Const: Boolean(false)"];
109 [label="Exit loop condition"];
}
115 [label="Exit loop block"];
subgraph cluster_37 {
color=blue
110 [label="Enter loop block" style="filled" fillcolor=gray];
subgraph cluster_38 {
color=blue
111 [label="Enter block" style="filled" fillcolor=gray];
112 [label="Const: Int(1)" style="filled" fillcolor=gray];
113 [label="Exit block" style="filled" fillcolor=gray];
}
114 [label="Exit loop block" style="filled" fillcolor=gray];
}
115 [label="Exit whileloop"];
}
subgraph cluster_37 {
color=blue
116 [label="Enter loop condition"];
117 [label="Const: Boolean(true)"];
118 [label="Exit loop condition"];
}
110 [label="Exit do-whileloop" style="filled" fillcolor=gray];
116 [label="Const: Int(1)"];
117 [label="Exit block"];
}
119 [label="Const: Int(1)" style="filled" fillcolor=gray];
108 [label="Exit function testDoWhileTrue" style="filled" fillcolor=red style="filled" fillcolor=gray];
118 [label="Exit function testWhileFalse" style="filled" fillcolor=red];
}
107 -> {109};
109 -> {111};
110 -> {119} [style=dotted];
111 -> {112};
112 -> {113};
113 -> {114};
114 -> {115};
104 -> {105};
105 -> {106};
106 -> {107};
107 -> {108};
108 -> {109};
109 -> {115};
109 -> {110} [style=dotted];
110 -> {111} [style=dotted];
111 -> {112} [style=dotted];
112 -> {113} [style=dotted];
113 -> {114} [style=dotted];
114 -> {107} [color=green style=dotted];
115 -> {116};
116 -> {117};
117 -> {118};
118 -> {111};
118 -> {110} [style=dotted];
119 -> {108} [style=dotted];
subgraph cluster_38 {
subgraph cluster_39 {
color=red
120 [label="Enter function testDoWhileTrueWithBreak" style="filled" fillcolor=red];
subgraph cluster_39 {
119 [label="Enter function testDoWhileTrue" style="filled" fillcolor=red];
subgraph cluster_40 {
color=blue
122 [label="Enter do-while loop"];
subgraph cluster_40 {
120 [label="Enter block"];
subgraph cluster_41 {
color=blue
124 [label="Enter loop block"];
subgraph cluster_41 {
121 [label="Enter do-while loop"];
subgraph cluster_42 {
color=blue
125 [label="Enter block"];
subgraph cluster_42 {
122 [label="Enter loop block"];
subgraph cluster_43 {
color=blue
126 [label="Enter when"];
subgraph cluster_43 {
color=blue
128 [label="Enter when branch condition "];
129 [label="Access variable R|<local>/b|"];
130 [label="Exit when branch condition"];
}
137 [label="Synthetic else branch"];
131 [label="Enter when branch result"];
subgraph cluster_44 {
color=blue
132 [label="Enter block"];
133 [label="Jump: break@@@[Boolean(true)] "];
134 [label="Stub" style="filled" fillcolor=gray];
135 [label="Exit block" style="filled" fillcolor=gray];
}
136 [label="Exit when branch result" style="filled" fillcolor=gray];
127 [label="Exit when"];
123 [label="Enter block"];
124 [label="Const: Int(1)"];
125 [label="Exit block"];
}
138 [label="Exit block"];
126 [label="Exit loop block"];
}
139 [label="Exit loop block"];
subgraph cluster_44 {
color=blue
127 [label="Enter loop condition"];
128 [label="Const: Boolean(true)"];
129 [label="Exit loop condition"];
}
130 [label="Exit do-whileloop" style="filled" fillcolor=gray];
}
subgraph cluster_45 {
color=blue
140 [label="Enter loop condition"];
141 [label="Const: Boolean(true)"];
142 [label="Exit loop condition"];
}
123 [label="Exit do-whileloop"];
131 [label="Const: Int(1)" style="filled" fillcolor=gray];
132 [label="Exit block" style="filled" fillcolor=gray];
}
143 [label="Const: Int(1)"];
121 [label="Exit function testDoWhileTrueWithBreak" style="filled" fillcolor=red];
133 [label="Exit function testDoWhileTrue" style="filled" fillcolor=red style="filled" fillcolor=gray];
}
120 -> {122};
122 -> {124};
123 -> {143};
119 -> {120};
120 -> {121};
121 -> {122};
122 -> {123};
123 -> {124};
124 -> {125};
125 -> {126};
126 -> {128};
127 -> {138};
126 -> {127};
127 -> {128};
128 -> {129};
129 -> {130};
130 -> {131 137};
131 -> {132};
132 -> {133};
133 -> {123};
133 -> {134} [style=dotted];
134 -> {135} [style=dotted];
135 -> {136} [style=dotted];
136 -> {127} [style=dotted];
137 -> {127};
129 -> {130} [style=dotted];
129 -> {122} [color=green style=dashed];
130 -> {131} [style=dotted];
131 -> {132} [style=dotted];
132 -> {133} [style=dotted];
subgraph cluster_45 {
color=red
134 [label="Enter function testDoWhileTrueWithBreak" style="filled" fillcolor=red];
subgraph cluster_46 {
color=blue
135 [label="Enter block"];
subgraph cluster_47 {
color=blue
136 [label="Enter do-while loop"];
subgraph cluster_48 {
color=blue
137 [label="Enter loop block"];
subgraph cluster_49 {
color=blue
138 [label="Enter block"];
subgraph cluster_50 {
color=blue
139 [label="Enter when"];
subgraph cluster_51 {
color=blue
140 [label="Enter when branch condition "];
141 [label="Access variable R|<local>/b|"];
142 [label="Exit when branch condition"];
}
143 [label="Synthetic else branch"];
144 [label="Enter when branch result"];
subgraph cluster_52 {
color=blue
145 [label="Enter block"];
146 [label="Jump: break@@@[Boolean(true)] "];
147 [label="Stub" style="filled" fillcolor=gray];
148 [label="Exit block" style="filled" fillcolor=gray];
}
149 [label="Exit when branch result" style="filled" fillcolor=gray];
150 [label="Exit when"];
}
151 [label="Exit block"];
}
152 [label="Exit loop block"];
}
subgraph cluster_53 {
color=blue
153 [label="Enter loop condition"];
154 [label="Const: Boolean(true)"];
155 [label="Exit loop condition"];
}
156 [label="Exit do-whileloop"];
}
157 [label="Const: Int(1)"];
158 [label="Exit block"];
}
159 [label="Exit function testDoWhileTrueWithBreak" style="filled" fillcolor=red];
}
134 -> {135};
135 -> {136};
136 -> {137};
137 -> {138};
138 -> {139};
139 -> {140};
140 -> {141};
141 -> {142};
142 -> {124};
142 -> {123} [style=dotted];
143 -> {121};
subgraph cluster_46 {
color=red
144 [label="Enter function testDoWhileFalse" style="filled" fillcolor=red];
subgraph cluster_47 {
color=blue
146 [label="Enter do-while loop"];
subgraph cluster_48 {
color=blue
148 [label="Enter loop block"];
subgraph cluster_49 {
color=blue
149 [label="Enter block"];
150 [label="Const: Int(1)"];
151 [label="Exit block"];
}
152 [label="Exit loop block"];
}
subgraph cluster_50 {
color=blue
153 [label="Enter loop condition"];
154 [label="Const: Boolean(false)"];
155 [label="Exit loop condition"];
}
147 [label="Exit do-whileloop"];
}
156 [label="Const: Int(1)"];
145 [label="Exit function testDoWhileFalse" style="filled" fillcolor=red];
}
144 -> {146};
146 -> {148};
147 -> {156};
148 -> {149};
149 -> {150};
142 -> {144 143};
143 -> {150};
144 -> {145};
145 -> {146};
146 -> {156};
146 -> {147} [style=dotted];
147 -> {148} [style=dotted];
148 -> {149} [style=dotted];
149 -> {150} [style=dotted];
150 -> {151};
151 -> {152};
152 -> {153};
153 -> {154};
154 -> {155};
155 -> {147};
155 -> {148} [style=dotted];
156 -> {145};
155 -> {156} [style=dotted];
155 -> {137} [color=green style=dashed];
156 -> {157};
157 -> {158};
158 -> {159};
subgraph cluster_54 {
color=red
160 [label="Enter function testDoWhileFalse" style="filled" fillcolor=red];
subgraph cluster_55 {
color=blue
161 [label="Enter block"];
subgraph cluster_56 {
color=blue
162 [label="Enter do-while loop"];
subgraph cluster_57 {
color=blue
163 [label="Enter loop block"];
subgraph cluster_58 {
color=blue
164 [label="Enter block"];
165 [label="Const: Int(1)"];
166 [label="Exit block"];
}
167 [label="Exit loop block"];
}
subgraph cluster_59 {
color=blue
168 [label="Enter loop condition"];
169 [label="Const: Boolean(false)"];
170 [label="Exit loop condition"];
}
171 [label="Exit do-whileloop"];
}
172 [label="Const: Int(1)"];
173 [label="Exit block"];
}
174 [label="Exit function testDoWhileFalse" style="filled" fillcolor=red];
}
160 -> {161};
161 -> {162};
162 -> {163};
163 -> {164};
164 -> {165};
165 -> {166};
166 -> {167};
167 -> {168};
168 -> {169};
169 -> {170};
170 -> {171};
170 -> {163} [color=green style=dotted];
171 -> {172};
172 -> {173};
173 -> {174};
}

View File

@@ -5,90 +5,111 @@ digraph postponedLambdaInConstructor_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function <init>" style="filled" fillcolor=red];
2 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
1 [label="Exit function <init>" style="filled" fillcolor=red];
0 [label="Enter class A" style="filled" fillcolor=red];
1 [label="Exit class A" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {1};
0 -> {1} [color=green];
subgraph cluster_1 {
color=red
3 [label="Enter class A" style="filled" fillcolor=red];
4 [label="Exit class A" style="filled" fillcolor=red];
2 [label="Enter function <init>" style="filled" fillcolor=red];
3 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
4 [label="Exit function <init>" style="filled" fillcolor=red];
}
3 -> {4} [color=green];
2 -> {3};
3 -> {4};
subgraph cluster_2 {
color=red
5 [label="Enter function <init>" style="filled" fillcolor=red];
7 [label="Access variable R|<local>/s|"];
8 [label="Postponed enter to lambda"];
5 [label="Enter class B" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
13 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
15 [label="Postponed enter to lambda"];
subgraph cluster_4 {
color=blue
17 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
19 [label="Access variable R|<local>/it|"];
18 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
16 [label="Postponed exit from lambda"];
14 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
7 [label="Enter property" style="filled" fillcolor=red];
8 [label="Access variable R|<local>/s|"];
9 [label="Exit property" style="filled" fillcolor=red];
}
9 [label="Postponed exit from lambda"];
10 [label="Function call: R|<local>/s|.R|kotlin/let|<R|kotlin/String|, R|() -> kotlin/String|>(...)"];
12 [label="Call arguments union" style="filled" fillcolor=yellow];
11 [label="Delegated constructor call: super<R|A|>(...)"];
6 [label="Exit function <init>" style="filled" fillcolor=red];
6 [label="Exit class B" style="filled" fillcolor=red];
}
5 -> {7};
5 -> {7} [color=green];
7 -> {8};
8 -> {13};
8 -> {9} [color=red];
9 -> {10};
10 -> {12};
11 -> {6};
12 -> {11};
13 -> {15};
14 -> {9} [color=green];
14 -> {12} [color=red];
8 -> {9};
9 -> {6} [color=green];
subgraph cluster_4 {
color=red
10 [label="Enter function <init>" style="filled" fillcolor=red];
11 [label="Access variable R|<local>/s|"];
12 [label="Postponed enter to lambda"];
subgraph cluster_5 {
color=blue
18 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_6 {
color=blue
19 [label="Enter block"];
20 [label="Postponed enter to lambda"];
subgraph cluster_7 {
color=blue
24 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_8 {
color=blue
25 [label="Enter block"];
26 [label="Access variable R|<local>/it|"];
27 [label="Exit block"];
}
28 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
21 [label="Postponed exit from lambda"];
22 [label="Exit block"];
}
23 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
13 [label="Postponed exit from lambda"];
14 [label="Function call: R|<local>/s|.R|kotlin/let|<R|kotlin/String|, R|() -> kotlin/String|>(...)"];
15 [label="Call arguments union" style="filled" fillcolor=yellow];
16 [label="Delegated constructor call: super<R|A|>(...)"];
17 [label="Exit function <init>" style="filled" fillcolor=red];
}
10 -> {11};
11 -> {12};
12 -> {18};
12 -> {13} [color=red];
13 -> {14};
14 -> {15};
15 -> {16};
15 -> {17} [color=red];
16 -> {14};
17 -> {19};
19 -> {18};
16 -> {17};
18 -> {19};
19 -> {20};
20 -> {21 24};
21 -> {22};
22 -> {23};
23 -> {15} [color=red];
23 -> {13} [color=green];
24 -> {25};
25 -> {26};
26 -> {27};
27 -> {28};
subgraph cluster_5 {
subgraph cluster_9 {
color=red
25 [label="Enter function foo" style="filled" fillcolor=red];
27 [label="Function call: this@R|/B|.R|/B.foo|()"];
26 [label="Exit function foo" style="filled" fillcolor=red];
29 [label="Enter function getter" style="filled" fillcolor=red];
30 [label="Exit function getter" style="filled" fillcolor=red];
}
25 -> {27};
27 -> {26};
29 -> {30};
subgraph cluster_6 {
subgraph cluster_10 {
color=red
28 [label="Enter class B" style="filled" fillcolor=red];
subgraph cluster_7 {
31 [label="Enter function foo" style="filled" fillcolor=red];
subgraph cluster_11 {
color=blue
20 [label="Enter function getter" style="filled" fillcolor=red];
21 [label="Exit function getter" style="filled" fillcolor=red];
32 [label="Enter block"];
33 [label="Function call: this@R|/B|.R|/B.foo|()"];
34 [label="Exit block"];
}
subgraph cluster_8 {
color=blue
22 [label="Enter property" style="filled" fillcolor=red];
24 [label="Access variable R|<local>/s|"];
23 [label="Exit property" style="filled" fillcolor=red];
}
29 [label="Exit class B" style="filled" fillcolor=red];
35 [label="Exit function foo" style="filled" fillcolor=red];
}
28 -> {22} [color=green];
22 -> {24};
23 -> {29} [color=green];
24 -> {23};
20 -> {21};
31 -> {32};
32 -> {33};
33 -> {34};
34 -> {35};
}

View File

@@ -6,36 +6,57 @@ digraph postponedLambdas_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function foo" style="filled" fillcolor=red];
1 [label="Exit function foo" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
1 [label="Enter block"];
2 [label="Exit block"];
}
3 [label="Exit function foo" style="filled" fillcolor=red];
}
0 -> {1};
1 -> {2};
2 -> {3};
subgraph cluster_1 {
subgraph cluster_2 {
color=red
2 [label="Enter function test" style="filled" fillcolor=red];
4 [label="Access variable R|<local>/a|"];
5 [label="Postponed enter to lambda"];
subgraph cluster_2 {
4 [label="Enter function test" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
9 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
11 [label="Const: String()"];
10 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
5 [label="Enter block"];
6 [label="Access variable R|<local>/a|"];
7 [label="Postponed enter to lambda"];
subgraph cluster_4 {
color=blue
13 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
14 [label="Enter block"];
15 [label="Const: String()"];
16 [label="Exit block"];
}
17 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
8 [label="Postponed exit from lambda"];
9 [label="Access variable R|<local>/b|"];
10 [label="Function call: R|/foo|(...)"];
11 [label="Exit block"];
}
6 [label="Postponed exit from lambda"];
7 [label="Access variable R|<local>/b|"];
8 [label="Function call: R|/foo|(...)"];
3 [label="Exit function test" style="filled" fillcolor=red];
12 [label="Exit function test" style="filled" fillcolor=red];
}
2 -> {4};
4 -> {5};
5 -> {9};
5 -> {6} [color=red];
5 -> {6};
6 -> {7};
7 -> {8};
8 -> {3};
9 -> {10 11};
10 -> {9};
10 -> {6} [color=green];
11 -> {10};
7 -> {13};
7 -> {8} [color=red];
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {12};
13 -> {17 14};
14 -> {15};
15 -> {16};
16 -> {17};
17 -> {8} [color=green];
17 -> {13} [color=green style=dashed];
}

View File

@@ -6,263 +6,309 @@ digraph propertiesAndInitBlocks_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function run" style="filled" fillcolor=red];
2 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
1 [label="Exit function run" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {1};
subgraph cluster_1 {
color=red
5 [label="Enter property" style="filled" fillcolor=red];
subgraph cluster_2 {
subgraph cluster_1 {
color=blue
3 [label="Enter function getter" style="filled" fillcolor=red];
4 [label="Exit function getter" style="filled" fillcolor=red];
1 [label="Enter block"];
2 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
3 [label="Exit block"];
}
7 [label="Const: Int(1)"];
6 [label="Exit property" style="filled" fillcolor=red];
4 [label="Exit function run" style="filled" fillcolor=red];
}
5 -> {7};
7 -> {6};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
subgraph cluster_2 {
color=red
5 [label="Enter function getter" style="filled" fillcolor=red];
6 [label="Exit function getter" style="filled" fillcolor=red];
}
5 -> {6};
subgraph cluster_3 {
color=red
17 [label="Enter property" style="filled" fillcolor=red];
subgraph cluster_4 {
color=blue
13 [label="Enter function setter" style="filled" fillcolor=red];
15 [label="Const: Int(1)"];
16 [label="Assignment: F|/x2|"];
14 [label="Exit function setter" style="filled" fillcolor=red];
}
7 [label="Enter property" style="filled" fillcolor=red];
8 [label="Const: Int(1)"];
9 [label="Exit property" style="filled" fillcolor=red];
}
7 -> {8};
8 -> {9};
subgraph cluster_4 {
color=red
10 [label="Enter function getter" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
8 [label="Enter function getter" style="filled" fillcolor=red];
10 [label="Const: Int(1)"];
11 [label="Jump: ^ Int(1)"];
12 [label="Stub" style="filled" fillcolor=gray];
9 [label="Exit function getter" style="filled" fillcolor=red];
11 [label="Enter block"];
12 [label="Const: Int(1)"];
13 [label="Jump: ^ Int(1)"];
14 [label="Stub" style="filled" fillcolor=gray];
15 [label="Exit block" style="filled" fillcolor=gray];
}
19 [label="Const: Int(1)"];
18 [label="Exit property" style="filled" fillcolor=red];
16 [label="Exit function getter" style="filled" fillcolor=red];
}
17 -> {19};
19 -> {18};
8 -> {10};
10 -> {11};
11 -> {9};
11 -> {12} [style=dotted];
12 -> {9} [style=dotted];
13 -> {15};
15 -> {16};
16 -> {14};
11 -> {12};
12 -> {13};
13 -> {16};
13 -> {14} [style=dotted];
14 -> {15} [style=dotted];
15 -> {16} [style=dotted];
subgraph cluster_6 {
color=red
35 [label="Enter function <init>" style="filled" fillcolor=red];
37 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
36 [label="Exit function <init>" style="filled" fillcolor=red];
}
35 -> {37};
37 -> {36};
subgraph cluster_7 {
color=red
46 [label="Enter class LocalClass" style="filled" fillcolor=red];
subgraph cluster_8 {
17 [label="Enter function setter" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
38 [label="Enter init block" style="filled" fillcolor=red];
subgraph cluster_9 {
color=blue
40 [label="Enter block"];
41 [label="Function call: R|java/lang/Exception.Exception|()"];
42 [label="Throw: throw R|java/lang/Exception.Exception|()"];
43 [label="Stub" style="filled" fillcolor=gray];
44 [label="Const: Int(1)" style="filled" fillcolor=gray];
45 [label="Exit block" style="filled" fillcolor=gray];
}
39 [label="Exit init block" style="filled" fillcolor=red];
18 [label="Enter block"];
19 [label="Const: Int(1)"];
20 [label="Assignment: F|/x2|"];
21 [label="Exit block"];
}
47 [label="Exit class LocalClass" style="filled" fillcolor=red];
22 [label="Exit function setter" style="filled" fillcolor=red];
}
46 -> {38} [color=green];
38 -> {40};
39 -> {47} [color=green];
40 -> {41};
41 -> {42};
42 -> {39};
42 -> {43} [style=dotted];
43 -> {44} [style=dotted];
44 -> {45} [style=dotted];
45 -> {39} [style=dotted];
17 -> {18};
18 -> {19};
19 -> {20};
20 -> {21};
21 -> {22};
subgraph cluster_10 {
subgraph cluster_8 {
color=red
51 [label="Enter function <init>" style="filled" fillcolor=red];
53 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
52 [label="Exit function <init>" style="filled" fillcolor=red];
23 [label="Enter property" style="filled" fillcolor=red];
24 [label="Const: Int(1)"];
25 [label="Exit property" style="filled" fillcolor=red];
}
51 -> {53};
53 -> {52};
23 -> {24};
24 -> {25};
subgraph cluster_9 {
color=red
44 [label="Enter function foo" style="filled" fillcolor=red];
subgraph cluster_10 {
color=blue
45 [label="Enter block"];
46 [label="Const: Int(1)"];
47 [label="Const: Int(1)"];
48 [label="Function call: Int(1).R|kotlin/Int.plus|(...)"];
49 [label="Variable declaration: lval c: R|kotlin/Int|"];
50 [label="Function call: R|java/lang/Exception.Exception|()"];
51 [label="Throw: throw R|java/lang/Exception.Exception|()"];
52 [label="Stub" style="filled" fillcolor=gray];
53 [label="Exit block" style="filled" fillcolor=gray];
}
54 [label="Exit function foo" style="filled" fillcolor=red];
}
44 -> {45};
45 -> {46};
46 -> {47};
47 -> {48};
48 -> {49};
49 -> {50};
50 -> {51};
51 -> {54};
51 -> {52} [style=dotted];
52 -> {53} [style=dotted];
53 -> {54} [style=dotted];
subgraph cluster_11 {
color=red
61 [label="Enter class LocalClass" style="filled" fillcolor=red];
subgraph cluster_12 {
color=blue
54 [label="Enter init block" style="filled" fillcolor=red];
subgraph cluster_13 {
color=blue
56 [label="Enter block"];
57 [label="Function call: R|java/lang/Exception.Exception|()"];
58 [label="Throw: throw R|java/lang/Exception.Exception|()"];
59 [label="Stub" style="filled" fillcolor=gray];
60 [label="Exit block" style="filled" fillcolor=gray];
}
55 [label="Exit init block" style="filled" fillcolor=red];
}
62 [label="Exit class LocalClass" style="filled" fillcolor=red];
55 [label="Enter function <init>" style="filled" fillcolor=red];
56 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
57 [label="Exit function <init>" style="filled" fillcolor=red];
}
61 -> {54} [color=green];
54 -> {56};
55 -> {62} [color=green];
55 -> {56};
56 -> {57};
57 -> {58};
58 -> {55};
58 -> {59} [style=dotted];
59 -> {60} [style=dotted];
60 -> {55} [style=dotted];
subgraph cluster_14 {
subgraph cluster_12 {
color=red
63 [label="Enter property" style="filled" fillcolor=red];
58 [label="Enter function getter" style="filled" fillcolor=red];
subgraph cluster_13 {
color=blue
63 [label="Enter class GetterLocalClass" style="filled" fillcolor=red];
subgraph cluster_14 {
color=blue
59 [label="Enter block"];
60 [label="Exit local class <getter>"];
61 [label="Exit block"];
}
62 [label="Exit function getter" style="filled" fillcolor=red];
}
subgraph cluster_15 {
color=blue
48 [label="Enter function getter" style="filled" fillcolor=red];
50 [label="Exit local class <getter>"];
49 [label="Exit function getter" style="filled" fillcolor=red];
}
65 [label="Postponed enter to lambda"];
subgraph cluster_16 {
color=blue
20 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
22 [label="Exit local class <anonymous>"];
23 [label="Function call: R|java/lang/Exception.Exception|()"];
24 [label="Throw: throw R|java/lang/Exception.Exception|()"];
25 [label="Stub" style="filled" fillcolor=gray];
subgraph cluster_17 {
65 [label="Enter init block" style="filled" fillcolor=red];
subgraph cluster_16 {
color=blue
26 [label="Enter function foo" style="filled" fillcolor=red];
28 [label="Const: Int(1)"];
29 [label="Const: Int(1)"];
30 [label="Function call: Int(1).R|kotlin/Int.plus|(...)"];
31 [label="Variable declaration: lval c: R|kotlin/Int|"];
32 [label="Function call: R|java/lang/Exception.Exception|()"];
33 [label="Throw: throw R|java/lang/Exception.Exception|()"];
34 [label="Stub" style="filled" fillcolor=gray];
27 [label="Exit function foo" style="filled" fillcolor=red];
66 [label="Enter block"];
67 [label="Function call: R|java/lang/Exception.Exception|()"];
68 [label="Throw: throw R|java/lang/Exception.Exception|()"];
69 [label="Stub" style="filled" fillcolor=gray];
70 [label="Exit block" style="filled" fillcolor=gray];
}
21 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
71 [label="Exit init block" style="filled" fillcolor=red];
}
66 [label="Postponed exit from lambda"];
67 [label="Function call: R|/run|(...)"];
64 [label="Exit property" style="filled" fillcolor=red];
64 [label="Exit class GetterLocalClass" style="filled" fillcolor=red];
}
63 -> {65};
65 -> {20};
65 -> {66} [color=red];
58 -> {59};
59 -> {60};
59 -> {72 65} [color=red];
60 -> {61};
61 -> {62};
63 -> {65} [color=green];
65 -> {66};
66 -> {67};
67 -> {64};
20 -> {21 22};
20 -> {26 35 38} [color=red];
21 -> {20};
21 -> {66} [color=green];
22 -> {23};
23 -> {24};
24 -> {64};
24 -> {25} [style=dotted];
25 -> {21} [style=dotted];
26 -> {28};
28 -> {29};
29 -> {30};
30 -> {31};
31 -> {32};
32 -> {33};
33 -> {27};
33 -> {34} [style=dotted];
34 -> {27} [style=dotted];
48 -> {50};
48 -> {51 54} [color=red];
50 -> {49};
67 -> {68};
68 -> {71};
68 -> {69} [style=dotted];
69 -> {70} [style=dotted];
70 -> {71} [style=dotted];
71 -> {64} [color=green];
subgraph cluster_17 {
color=red
72 [label="Enter function <init>" style="filled" fillcolor=red];
73 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
74 [label="Exit function <init>" style="filled" fillcolor=red];
}
72 -> {73};
73 -> {74};
subgraph cluster_18 {
color=red
70 [label="Enter property" style="filled" fillcolor=red];
75 [label="Enter property" style="filled" fillcolor=red];
subgraph cluster_19 {
color=blue
68 [label="Enter function getter" style="filled" fillcolor=red];
69 [label="Exit function getter" style="filled" fillcolor=red];
}
subgraph cluster_20 {
color=blue
72 [label="Try expression enter"];
subgraph cluster_21 {
34 [label="Enter class InitializerLocalClass" style="filled" fillcolor=red];
76 [label="Postponed enter to lambda"];
subgraph cluster_20 {
color=blue
74 [label="Try main block enter"];
26 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_21 {
color=blue
27 [label="Enter block"];
28 [label="Exit local class <anonymous>"];
29 [label="Function call: R|java/lang/Exception.Exception|()"];
30 [label="Throw: throw R|java/lang/Exception.Exception|()"];
31 [label="Stub" style="filled" fillcolor=gray];
32 [label="Exit block" style="filled" fillcolor=gray];
}
subgraph cluster_22 {
color=blue
77 [label="Enter block"];
78 [label="Const: Int(1)"];
79 [label="Exit block"];
36 [label="Enter init block" style="filled" fillcolor=red];
subgraph cluster_23 {
color=blue
37 [label="Enter block"];
38 [label="Function call: R|java/lang/Exception.Exception|()"];
39 [label="Throw: throw R|java/lang/Exception.Exception|()"];
40 [label="Stub" style="filled" fillcolor=gray];
41 [label="Const: Int(1)" style="filled" fillcolor=gray];
42 [label="Exit block" style="filled" fillcolor=gray];
}
43 [label="Exit init block" style="filled" fillcolor=red];
}
80 [label="Try main block exit"];
35 [label="Exit class InitializerLocalClass" style="filled" fillcolor=red];
}
subgraph cluster_23 {
color=blue
76 [label="Enter finally"];
subgraph cluster_24 {
color=blue
85 [label="Enter block"];
86 [label="Const: Int(0)"];
87 [label="Exit block"];
}
88 [label="Exit finally"];
}
subgraph cluster_25 {
color=blue
75 [label="Catch enter"];
subgraph cluster_26 {
color=blue
81 [label="Enter block"];
82 [label="Const: Int(2)"];
83 [label="Exit block"];
}
84 [label="Catch exit"];
}
73 [label="Try expression exit"];
33 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
71 [label="Exit property" style="filled" fillcolor=red];
77 [label="Postponed exit from lambda"];
78 [label="Function call: R|/run|(...)"];
79 [label="Exit property" style="filled" fillcolor=red];
}
70 -> {72};
72 -> {74};
73 -> {71};
74 -> {71 75 76 77};
75 -> {71 81};
76 -> {85};
75 -> {76};
76 -> {26};
76 -> {77} [color=red];
77 -> {78};
78 -> {79};
79 -> {80};
80 -> {73};
81 -> {82};
26 -> {33 27};
27 -> {28};
27 -> {44 55 36} [color=red];
28 -> {29};
29 -> {30};
30 -> {33};
30 -> {31} [style=dotted];
31 -> {32} [style=dotted];
32 -> {33} [style=dotted];
33 -> {77} [color=green];
33 -> {26} [color=green style=dashed];
34 -> {36} [color=green];
36 -> {37};
37 -> {38};
38 -> {39};
39 -> {43};
39 -> {40} [style=dotted];
40 -> {41} [style=dotted];
41 -> {42} [style=dotted];
42 -> {43} [style=dotted];
43 -> {35} [color=green];
subgraph cluster_24 {
color=red
80 [label="Enter function getter" style="filled" fillcolor=red];
81 [label="Exit function getter" style="filled" fillcolor=red];
}
80 -> {81};
subgraph cluster_25 {
color=red
82 [label="Enter property" style="filled" fillcolor=red];
subgraph cluster_26 {
color=blue
83 [label="Try expression enter"];
subgraph cluster_27 {
color=blue
84 [label="Try main block enter"];
subgraph cluster_28 {
color=blue
85 [label="Enter block"];
86 [label="Const: Int(1)"];
87 [label="Exit block"];
}
88 [label="Try main block exit"];
}
subgraph cluster_29 {
color=blue
89 [label="Enter finally"];
subgraph cluster_30 {
color=blue
90 [label="Enter block"];
91 [label="Const: Int(0)"];
92 [label="Exit block"];
}
93 [label="Exit finally"];
}
subgraph cluster_31 {
color=blue
94 [label="Catch enter"];
subgraph cluster_32 {
color=blue
95 [label="Enter block"];
96 [label="Const: Int(2)"];
97 [label="Exit block"];
}
98 [label="Catch exit"];
}
99 [label="Try expression exit"];
}
100 [label="Exit property" style="filled" fillcolor=red];
}
82 -> {83};
83 -> {84};
84 -> {73};
84 -> {100 94 89 85};
85 -> {86};
86 -> {87};
87 -> {88};
88 -> {73};
68 -> {69};
88 -> {99};
89 -> {90};
90 -> {91};
91 -> {92};
92 -> {93};
93 -> {99};
94 -> {100 95};
95 -> {96};
96 -> {97};
97 -> {98};
98 -> {99};
99 -> {100};
}

View File

@@ -17,7 +17,7 @@ val x3 = run {
throw Exception()
}
class LocalClass {
class InitializerLocalClass {
init {
throw Exception()
1
@@ -27,7 +27,7 @@ val x3 = run {
throw Exception()
}
get() {
class LocalClass {
class GetterLocalClass {
init {
throw Exception()
}

View File

@@ -17,8 +17,8 @@ FILE: propertiesAndInitBlocks.kt
throw R|java/lang/Exception.Exception|()
}
local final class LocalClass : R|kotlin/Any| {
public[local] constructor(): R|LocalClass| {
local final class InitializerLocalClass : R|kotlin/Any| {
public[local] constructor(): R|InitializerLocalClass| {
super<R|kotlin/Any|>()
}
@@ -33,8 +33,8 @@ FILE: propertiesAndInitBlocks.kt
}
)
public get(): R|kotlin/Unit| {
local final class LocalClass : R|kotlin/Any| {
public[local] constructor(): R|LocalClass| {
local final class GetterLocalClass : R|kotlin/Any| {
public[local] constructor(): R|GetterLocalClass| {
super<R|kotlin/Any|>()
}

View File

@@ -12,164 +12,205 @@ digraph returnValuesFromLambda_kt {
subgraph cluster_1 {
color=red
2 [label="Enter function <init>" style="filled" fillcolor=red];
4 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
3 [label="Exit function <init>" style="filled" fillcolor=red];
2 [label="Enter class B" style="filled" fillcolor=red];
3 [label="Exit class B" style="filled" fillcolor=red];
}
2 -> {4};
4 -> {3};
2 -> {3} [color=green];
subgraph cluster_2 {
color=red
5 [label="Enter class B" style="filled" fillcolor=red];
6 [label="Exit class B" style="filled" fillcolor=red];
4 [label="Enter function <init>" style="filled" fillcolor=red];
5 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
6 [label="Exit function <init>" style="filled" fillcolor=red];
}
5 -> {6} [color=green];
4 -> {5};
5 -> {6};
subgraph cluster_3 {
color=red
7 [label="Enter function <init>" style="filled" fillcolor=red];
9 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
8 [label="Exit function <init>" style="filled" fillcolor=red];
7 [label="Enter class C" style="filled" fillcolor=red];
8 [label="Exit class C" style="filled" fillcolor=red];
}
7 -> {9};
9 -> {8};
7 -> {8} [color=green];
subgraph cluster_4 {
color=red
10 [label="Enter class C" style="filled" fillcolor=red];
11 [label="Exit class C" style="filled" fillcolor=red];
9 [label="Enter function <init>" style="filled" fillcolor=red];
10 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
11 [label="Exit function <init>" style="filled" fillcolor=red];
}
10 -> {11} [color=green];
9 -> {10};
10 -> {11};
subgraph cluster_5 {
color=red
12 [label="Enter function test_1" style="filled" fillcolor=red];
14 [label="Postponed enter to lambda"];
subgraph cluster_6 {
color=blue
19 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
13 [label="Enter block"];
14 [label="Postponed enter to lambda"];
subgraph cluster_7 {
color=blue
21 [label="Enter when"];
21 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_8 {
color=blue
23 [label="Enter when branch condition "];
24 [label="Access variable R|<local>/b|"];
25 [label="Exit when branch condition"];
22 [label="Enter block"];
subgraph cluster_9 {
color=blue
23 [label="Enter when"];
subgraph cluster_10 {
color=blue
24 [label="Enter when branch condition "];
25 [label="Access variable R|<local>/b|"];
26 [label="Exit when branch condition"];
}
27 [label="Synthetic else branch"];
28 [label="Enter when branch result"];
subgraph cluster_11 {
color=blue
29 [label="Enter block"];
30 [label="Function call: R|/B.B|()"];
31 [label="Jump: ^@run R|/B.B|()"];
32 [label="Stub" style="filled" fillcolor=gray];
33 [label="Exit block" style="filled" fillcolor=gray];
}
34 [label="Exit when branch result" style="filled" fillcolor=gray];
35 [label="Exit when"];
}
36 [label="Function call: R|/C.C|()"];
37 [label="Exit block"];
}
33 [label="Synthetic else branch"];
26 [label="Enter when branch result"];
subgraph cluster_9 {
color=blue
27 [label="Enter block"];
28 [label="Function call: R|/B.B|()"];
29 [label="Jump: ^@run R|/B.B|()"];
30 [label="Stub" style="filled" fillcolor=gray];
31 [label="Exit block" style="filled" fillcolor=gray];
}
32 [label="Exit when branch result" style="filled" fillcolor=gray];
22 [label="Exit when"];
38 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
34 [label="Function call: R|/C.C|()"];
20 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
15 [label="Call arguments union" style="filled" fillcolor=yellow];
16 [label="Postponed exit from lambda"];
17 [label="Function call: R|kotlin/run|<R|A|>(...)"];
18 [label="Variable declaration: lval x: R|A|"];
19 [label="Exit block"];
}
17 [label="Call arguments union" style="filled" fillcolor=yellow];
15 [label="Postponed exit from lambda"];
16 [label="Function call: R|kotlin/run|<R|A|>(...)"];
18 [label="Variable declaration: lval x: R|A|"];
13 [label="Exit function test_1" style="filled" fillcolor=red];
20 [label="Exit function test_1" style="filled" fillcolor=red];
}
12 -> {14};
14 -> {19};
14 -> {15} [color=red];
15 -> {16} [color=green];
16 -> {18};
17 -> {16} [color=red];
18 -> {13};
19 -> {21};
20 -> {15} [color=green];
20 -> {17} [color=red];
21 -> {23};
22 -> {34};
12 -> {13};
13 -> {14};
14 -> {21};
14 -> {16} [color=red];
15 -> {17} [color=red];
16 -> {17} [color=green];
17 -> {18};
18 -> {19};
19 -> {20};
21 -> {22};
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {26 33};
26 -> {27};
27 -> {28};
25 -> {26};
26 -> {28 27};
27 -> {35};
28 -> {29};
29 -> {20};
29 -> {30} [style=dotted];
30 -> {31} [style=dotted];
29 -> {30};
30 -> {31};
31 -> {38};
31 -> {32} [style=dotted];
32 -> {22} [style=dotted];
33 -> {22};
34 -> {20};
subgraph cluster_10 {
color=red
35 [label="Enter function test_2" style="filled" fillcolor=red];
37 [label="Postponed enter to lambda"];
subgraph cluster_11 {
color=blue
42 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
44 [label="Function call: R|/C.C|()"];
45 [label="Jump: ^@run R|/C.C|()"];
46 [label="Stub" style="filled" fillcolor=gray];
43 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
40 [label="Call arguments union" style="filled" fillcolor=yellow];
38 [label="Postponed exit from lambda"];
39 [label="Function call: R|kotlin/run|<R|C|>(...)"];
41 [label="Variable declaration: lval x: R|C|"];
36 [label="Exit function test_2" style="filled" fillcolor=red];
}
35 -> {37};
37 -> {42};
37 -> {38} [color=red];
38 -> {39} [color=green];
39 -> {41};
40 -> {39} [color=red];
41 -> {36};
42 -> {44};
43 -> {38} [color=green];
43 -> {40} [color=red];
44 -> {45};
45 -> {43};
45 -> {46} [style=dotted];
46 -> {43} [style=dotted];
32 -> {33} [style=dotted];
33 -> {34} [style=dotted];
34 -> {35} [style=dotted];
35 -> {36};
36 -> {37};
37 -> {38};
38 -> {15} [color=red];
38 -> {16} [color=green];
subgraph cluster_12 {
color=red
47 [label="Enter function test_3" style="filled" fillcolor=red];
49 [label="Postponed enter to lambda"];
39 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_13 {
color=blue
55 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
57 [label="Jump: ^test_3 Unit"];
58 [label="Stub" style="filled" fillcolor=gray];
56 [label="Exit function anonymousFunction" style="filled" fillcolor=red style="filled" fillcolor=gray];
40 [label="Enter block"];
41 [label="Postponed enter to lambda"];
subgraph cluster_14 {
color=blue
48 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_15 {
color=blue
49 [label="Enter block"];
50 [label="Function call: R|/C.C|()"];
51 [label="Jump: ^@run R|/C.C|()"];
52 [label="Stub" style="filled" fillcolor=gray];
53 [label="Exit block" style="filled" fillcolor=gray];
}
54 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
42 [label="Call arguments union" style="filled" fillcolor=yellow];
43 [label="Postponed exit from lambda"];
44 [label="Function call: R|kotlin/run|<R|C|>(...)"];
45 [label="Variable declaration: lval x: R|C|"];
46 [label="Exit block"];
}
52 [label="Call arguments union" style="filled" fillcolor=gray];
50 [label="Postponed exit from lambda"];
51 [label="Function call: R|kotlin/run|<R|kotlin/Nothing|>(...)" style="filled" fillcolor=gray];
53 [label="Stub" style="filled" fillcolor=gray];
54 [label="Variable declaration: lval x: R|kotlin/Nothing|" style="filled" fillcolor=gray];
48 [label="Exit function test_3" style="filled" fillcolor=red];
47 [label="Exit function test_2" style="filled" fillcolor=red];
}
47 -> {49};
49 -> {55};
49 -> {50} [color=red];
50 -> {51} [color=green];
51 -> {48 53} [style=dotted];
52 -> {51} [style=dotted];
39 -> {40};
40 -> {41};
41 -> {48};
41 -> {43} [color=red];
42 -> {44} [color=red];
43 -> {44} [color=green];
44 -> {45};
45 -> {46};
46 -> {47};
48 -> {49};
49 -> {50};
50 -> {51};
51 -> {54};
51 -> {52} [style=dotted];
52 -> {53} [style=dotted];
53 -> {54} [style=dotted];
54 -> {48} [style=dotted];
55 -> {57};
56 -> {52} [style=dotted];
56 -> {50} [color=green];
57 -> {48};
57 -> {58} [style=dotted];
58 -> {56} [style=dotted];
54 -> {42} [color=red];
54 -> {43} [color=green];
subgraph cluster_16 {
color=red
55 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_17 {
color=blue
56 [label="Enter block"];
57 [label="Postponed enter to lambda"];
subgraph cluster_18 {
color=blue
65 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_19 {
color=blue
66 [label="Enter block"];
67 [label="Jump: ^test_3 Unit"];
68 [label="Stub" style="filled" fillcolor=gray];
69 [label="Exit block" style="filled" fillcolor=gray];
}
70 [label="Exit function anonymousFunction" style="filled" fillcolor=red style="filled" fillcolor=gray];
}
58 [label="Call arguments union" style="filled" fillcolor=gray];
59 [label="Postponed exit from lambda" style="filled" fillcolor=gray];
60 [label="Function call: R|kotlin/run|<R|kotlin/Nothing|>(...)" style="filled" fillcolor=gray];
61 [label="Stub" style="filled" fillcolor=gray];
62 [label="Variable declaration: lval x: R|kotlin/Nothing|" style="filled" fillcolor=gray];
63 [label="Exit block" style="filled" fillcolor=gray];
}
64 [label="Exit function test_3" style="filled" fillcolor=red];
}
55 -> {56};
56 -> {57};
57 -> {65};
57 -> {59} [color=red];
58 -> {60} [style=dotted];
59 -> {60} [style=dotted];
60 -> {64 61} [style=dotted];
61 -> {62} [style=dotted];
62 -> {63} [style=dotted];
63 -> {64} [style=dotted];
65 -> {66};
66 -> {67};
67 -> {64};
67 -> {68} [style=dotted];
68 -> {69} [style=dotted];
69 -> {70} [style=dotted];
70 -> {59 58} [style=dotted];
}

View File

@@ -5,98 +5,100 @@ digraph safeCalls_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function foo" style="filled" fillcolor=red];
1 [label="Exit function foo" style="filled" fillcolor=red];
0 [label="Enter class A" style="filled" fillcolor=red];
1 [label="Exit class A" style="filled" fillcolor=red];
}
0 -> {1};
0 -> {1} [color=green];
subgraph cluster_1 {
color=red
2 [label="Enter function bar" style="filled" fillcolor=red];
3 [label="Exit function bar" style="filled" fillcolor=red];
2 [label="Enter function foo" style="filled" fillcolor=red];
3 [label="Exit function foo" style="filled" fillcolor=red];
}
2 -> {3};
subgraph cluster_2 {
color=red
4 [label="Enter class A" style="filled" fillcolor=red];
5 [label="Exit class A" style="filled" fillcolor=red];
4 [label="Enter function bar" style="filled" fillcolor=red];
5 [label="Exit function bar" style="filled" fillcolor=red];
}
4 -> {5} [color=green];
4 -> {5};
subgraph cluster_3 {
color=red
14 [label="Enter class B" style="filled" fillcolor=red];
subgraph cluster_4 {
color=blue
10 [label="Enter function getter" style="filled" fillcolor=red];
11 [label="Exit function getter" style="filled" fillcolor=red];
}
subgraph cluster_5 {
color=blue
6 [label="Enter function getter" style="filled" fillcolor=red];
7 [label="Exit function getter" style="filled" fillcolor=red];
}
subgraph cluster_6 {
color=blue
8 [label="Enter property" style="filled" fillcolor=red];
9 [label="Exit property" style="filled" fillcolor=red];
}
6 [label="Enter class B" style="filled" fillcolor=red];
7 [label="Exit class B" style="filled" fillcolor=red];
}
6 -> {7} [color=green];
subgraph cluster_4 {
color=red
8 [label="Enter function getter" style="filled" fillcolor=red];
9 [label="Exit function getter" style="filled" fillcolor=red];
}
8 -> {9};
subgraph cluster_5 {
color=red
10 [label="Enter function getter" style="filled" fillcolor=red];
11 [label="Exit function getter" style="filled" fillcolor=red];
}
10 -> {11};
subgraph cluster_6 {
color=red
12 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
12 [label="Enter property" style="filled" fillcolor=red];
13 [label="Exit property" style="filled" fillcolor=red];
13 [label="Enter block"];
14 [label="Access variable R|<local>/x|"];
15 [label="Enter safe call"];
16 [label="Function call: $subj$.R|/A.foo|()"];
17 [label="Exit safe call"];
18 [label="Enter safe call"];
19 [label="Function call: $subj$.R|/A.bar|()"];
20 [label="Exit safe call"];
21 [label="Exit block"];
}
15 [label="Exit class B" style="filled" fillcolor=red];
22 [label="Exit function test_1" style="filled" fillcolor=red];
}
14 -> {8} [color=green];
8 -> {9};
9 -> {12} [color=green];
6 -> {7};
12 -> {13};
13 -> {15} [color=green];
10 -> {11};
13 -> {14};
14 -> {15 17};
15 -> {16};
16 -> {17};
17 -> {18 20};
18 -> {19};
19 -> {20};
20 -> {21};
21 -> {22};
subgraph cluster_8 {
color=red
16 [label="Enter function test_1" style="filled" fillcolor=red];
18 [label="Access variable R|<local>/x|"];
19 [label="Enter safe call"];
21 [label="Function call: $subj$.R|/A.foo|()"];
20 [label="Exit safe call"];
22 [label="Enter safe call"];
24 [label="Function call: $subj$.R|/A.bar|()"];
23 [label="Exit safe call"];
17 [label="Exit function test_1" style="filled" fillcolor=red];
23 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_9 {
color=blue
24 [label="Enter block"];
25 [label="Access variable R|<local>/x|"];
26 [label="Enter safe call"];
27 [label="Access variable R|/B.foo|"];
28 [label="Exit safe call"];
29 [label="Enter safe call"];
30 [label="Access variable R|/B.bar|"];
31 [label="Exit safe call"];
32 [label="Exit block"];
}
33 [label="Exit function test_2" style="filled" fillcolor=red];
}
16 -> {18};
18 -> {19 20};
19 -> {21};
20 -> {22 23};
21 -> {20};
22 -> {24};
23 -> {17};
24 -> {23};
subgraph cluster_9 {
color=red
25 [label="Enter function test_2" style="filled" fillcolor=red];
27 [label="Access variable R|<local>/x|"];
28 [label="Enter safe call"];
30 [label="Access variable R|/B.foo|"];
29 [label="Exit safe call"];
31 [label="Enter safe call"];
33 [label="Access variable R|/B.bar|"];
32 [label="Exit safe call"];
26 [label="Exit function test_2" style="filled" fillcolor=red];
}
25 -> {27};
27 -> {28 29};
28 -> {30};
29 -> {31 32};
30 -> {29};
31 -> {33};
32 -> {26};
33 -> {32};
23 -> {24};
24 -> {25};
25 -> {26 28};
26 -> {27};
27 -> {28};
28 -> {29 31};
29 -> {30};
30 -> {31};
31 -> {32};
32 -> {33};
}

View File

@@ -6,29 +6,43 @@ digraph simple_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function foo" style="filled" fillcolor=red];
1 [label="Exit function foo" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
1 [label="Enter block"];
2 [label="Exit block"];
}
3 [label="Exit function foo" style="filled" fillcolor=red];
}
0 -> {1};
1 -> {2};
2 -> {3};
subgraph cluster_1 {
subgraph cluster_2 {
color=red
2 [label="Enter function test" style="filled" fillcolor=red];
4 [label="Const: Int(1)"];
5 [label="Variable declaration: lval x: R|kotlin/Int|"];
6 [label="Access variable R|<local>/x|"];
7 [label="Const: Int(1)"];
8 [label="Function call: R|<local>/x|.R|kotlin/Int.plus|(...)"];
9 [label="Variable declaration: lval y: R|kotlin/Int|"];
10 [label="Function call: R|/foo|()"];
3 [label="Exit function test" style="filled" fillcolor=red];
4 [label="Enter function test" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
5 [label="Enter block"];
6 [label="Const: Int(1)"];
7 [label="Variable declaration: lval x: R|kotlin/Int|"];
8 [label="Access variable R|<local>/x|"];
9 [label="Const: Int(1)"];
10 [label="Function call: R|<local>/x|.R|kotlin/Int.plus|(...)"];
11 [label="Variable declaration: lval y: R|kotlin/Int|"];
12 [label="Function call: R|/foo|()"];
13 [label="Exit block"];
}
14 [label="Exit function test" style="filled" fillcolor=red];
}
2 -> {4};
4 -> {5};
5 -> {6};
6 -> {7};
7 -> {8};
8 -> {9};
9 -> {10};
10 -> {3};
10 -> {11};
11 -> {12};
12 -> {13};
13 -> {14};
}

View File

@@ -8,294 +8,315 @@ digraph tryCatch_kt {
0 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
2 [label="Try expression enter"];
1 [label="Enter block"];
subgraph cluster_2 {
color=blue
4 [label="Try main block enter"];
2 [label="Try expression enter"];
subgraph cluster_3 {
color=blue
7 [label="Enter block"];
8 [label="Const: Int(1)"];
9 [label="Variable declaration: lval x: R|kotlin/Int|"];
10 [label="Exit block"];
3 [label="Try main block enter"];
subgraph cluster_4 {
color=blue
4 [label="Enter block"];
5 [label="Const: Int(1)"];
6 [label="Variable declaration: lval x: R|kotlin/Int|"];
7 [label="Exit block"];
}
8 [label="Try main block exit"];
}
11 [label="Try main block exit"];
}
subgraph cluster_4 {
color=blue
6 [label="Catch enter"];
subgraph cluster_5 {
color=blue
17 [label="Enter block"];
18 [label="Const: Int(3)"];
19 [label="Variable declaration: lval z: R|kotlin/Int|"];
20 [label="Exit block"];
9 [label="Catch enter"];
subgraph cluster_6 {
color=blue
10 [label="Enter block"];
11 [label="Const: Int(3)"];
12 [label="Variable declaration: lval z: R|kotlin/Int|"];
13 [label="Exit block"];
}
14 [label="Catch exit"];
}
21 [label="Catch exit"];
}
subgraph cluster_6 {
color=blue
5 [label="Catch enter"];
subgraph cluster_7 {
color=blue
12 [label="Enter block"];
13 [label="Const: Int(2)"];
14 [label="Variable declaration: lval y: R|kotlin/Int|"];
15 [label="Exit block"];
15 [label="Catch enter"];
subgraph cluster_8 {
color=blue
16 [label="Enter block"];
17 [label="Const: Int(2)"];
18 [label="Variable declaration: lval y: R|kotlin/Int|"];
19 [label="Exit block"];
}
20 [label="Catch exit"];
}
16 [label="Catch exit"];
21 [label="Try expression exit"];
}
3 [label="Try expression exit"];
22 [label="Exit block"];
}
1 [label="Exit function test_1" style="filled" fillcolor=red];
23 [label="Exit function test_1" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {4};
3 -> {1};
4 -> {1 5 6 7};
5 -> {1 12};
6 -> {1 17};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {23 15 9 4};
4 -> {5};
5 -> {6};
6 -> {7};
7 -> {8};
8 -> {9};
9 -> {10};
8 -> {21};
9 -> {23 10};
10 -> {11};
11 -> {3};
11 -> {12};
12 -> {13};
13 -> {14};
14 -> {15};
15 -> {16};
16 -> {3};
14 -> {21};
15 -> {23 16};
16 -> {17};
17 -> {18};
18 -> {19};
19 -> {20};
20 -> {21};
21 -> {3};
21 -> {22};
22 -> {23};
subgraph cluster_8 {
subgraph cluster_9 {
color=red
22 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_9 {
24 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_10 {
color=blue
24 [label="Try expression enter"];
subgraph cluster_10 {
25 [label="Enter block"];
subgraph cluster_11 {
color=blue
26 [label="Try main block enter"];
subgraph cluster_11 {
26 [label="Try expression enter"];
subgraph cluster_12 {
color=blue
28 [label="Enter block"];
29 [label="Const: Int(1)"];
30 [label="Exit block"];
27 [label="Try main block enter"];
subgraph cluster_13 {
color=blue
28 [label="Enter block"];
29 [label="Const: Int(1)"];
30 [label="Exit block"];
}
31 [label="Try main block exit"];
}
31 [label="Try main block exit"];
}
subgraph cluster_12 {
color=blue
27 [label="Catch enter"];
subgraph cluster_13 {
subgraph cluster_14 {
color=blue
32 [label="Enter block"];
33 [label="Const: Int(2)"];
34 [label="Exit block"];
32 [label="Catch enter"];
subgraph cluster_15 {
color=blue
33 [label="Enter block"];
34 [label="Const: Int(2)"];
35 [label="Exit block"];
}
36 [label="Catch exit"];
}
35 [label="Catch exit"];
37 [label="Try expression exit"];
}
25 [label="Try expression exit"];
38 [label="Variable declaration: lval x: R|kotlin/Int|"];
39 [label="Exit block"];
}
36 [label="Variable declaration: lval x: R|kotlin/Int|"];
23 [label="Exit function test_2" style="filled" fillcolor=red];
40 [label="Exit function test_2" style="filled" fillcolor=red];
}
22 -> {24};
24 -> {26};
25 -> {36};
26 -> {23 27 28};
27 -> {23 32};
24 -> {25};
25 -> {26};
26 -> {27};
27 -> {40 32 28};
28 -> {29};
29 -> {30};
30 -> {31};
31 -> {25};
32 -> {33};
31 -> {37};
32 -> {40 33};
33 -> {34};
34 -> {35};
35 -> {25};
36 -> {23};
35 -> {36};
36 -> {37};
37 -> {38};
38 -> {39};
39 -> {40};
subgraph cluster_14 {
subgraph cluster_16 {
color=red
37 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_15 {
41 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_17 {
color=blue
39 [label="Enter while loop"];
subgraph cluster_16 {
42 [label="Enter block"];
subgraph cluster_18 {
color=blue
41 [label="Enter loop condition"];
42 [label="Const: Boolean(true)"];
43 [label="Exit loop condition"];
}
subgraph cluster_17 {
color=blue
44 [label="Enter loop block"];
subgraph cluster_18 {
43 [label="Enter while loop"];
subgraph cluster_19 {
color=blue
45 [label="Enter block"];
subgraph cluster_19 {
44 [label="Enter loop condition"];
45 [label="Const: Boolean(true)"];
46 [label="Exit loop condition"];
}
subgraph cluster_20 {
color=blue
47 [label="Enter loop block"];
subgraph cluster_21 {
color=blue
46 [label="Try expression enter"];
subgraph cluster_20 {
48 [label="Enter block"];
subgraph cluster_22 {
color=blue
48 [label="Try main block enter"];
subgraph cluster_21 {
49 [label="Try expression enter"];
subgraph cluster_23 {
color=blue
51 [label="Enter block"];
subgraph cluster_22 {
50 [label="Try main block enter"];
subgraph cluster_24 {
color=blue
52 [label="Enter when"];
subgraph cluster_23 {
51 [label="Enter block"];
subgraph cluster_25 {
color=blue
54 [label="Enter when branch condition "];
55 [label="Access variable R|<local>/b|"];
56 [label="Exit when branch condition"];
52 [label="Enter when"];
subgraph cluster_26 {
color=blue
53 [label="Enter when branch condition "];
54 [label="Access variable R|<local>/b|"];
55 [label="Exit when branch condition"];
}
56 [label="Synthetic else branch"];
57 [label="Enter when branch result"];
subgraph cluster_27 {
color=blue
58 [label="Enter block"];
59 [label="Jump: ^test_3 Unit"];
60 [label="Stub" style="filled" fillcolor=gray];
61 [label="Exit block" style="filled" fillcolor=gray];
}
62 [label="Exit when branch result" style="filled" fillcolor=gray];
63 [label="Exit when"];
}
63 [label="Synthetic else branch"];
57 [label="Enter when branch result"];
subgraph cluster_24 {
64 [label="Const: Int(1)"];
65 [label="Variable declaration: lval x: R|kotlin/Int|"];
subgraph cluster_28 {
color=blue
58 [label="Enter block"];
59 [label="Jump: ^test_3 Unit"];
60 [label="Stub" style="filled" fillcolor=gray];
61 [label="Exit block" style="filled" fillcolor=gray];
66 [label="Enter when"];
subgraph cluster_29 {
color=blue
67 [label="Enter when branch condition "];
68 [label="Access variable R|<local>/b|"];
69 [label="Function call: R|<local>/b|.R|kotlin/Boolean.not|()"];
70 [label="Exit when branch condition"];
}
71 [label="Synthetic else branch"];
72 [label="Enter when branch result"];
subgraph cluster_30 {
color=blue
73 [label="Enter block"];
74 [label="Jump: break@@@[Boolean(true)] "];
75 [label="Stub" style="filled" fillcolor=gray];
76 [label="Exit block" style="filled" fillcolor=gray];
}
77 [label="Exit when branch result" style="filled" fillcolor=gray];
78 [label="Exit when"];
}
62 [label="Exit when branch result" style="filled" fillcolor=gray];
53 [label="Exit when"];
79 [label="Exit block"];
}
64 [label="Const: Int(1)"];
65 [label="Variable declaration: lval x: R|kotlin/Int|"];
subgraph cluster_25 {
color=blue
66 [label="Enter when"];
subgraph cluster_26 {
color=blue
68 [label="Enter when branch condition "];
69 [label="Access variable R|<local>/b|"];
70 [label="Function call: R|<local>/b|.R|kotlin/Boolean.not|()"];
71 [label="Exit when branch condition"];
}
78 [label="Synthetic else branch"];
72 [label="Enter when branch result"];
subgraph cluster_27 {
color=blue
73 [label="Enter block"];
74 [label="Jump: break@@@[Boolean(true)] "];
75 [label="Stub" style="filled" fillcolor=gray];
76 [label="Exit block" style="filled" fillcolor=gray];
}
77 [label="Exit when branch result" style="filled" fillcolor=gray];
67 [label="Exit when"];
}
79 [label="Exit block"];
80 [label="Try main block exit"];
}
80 [label="Try main block exit"];
}
subgraph cluster_28 {
color=blue
50 [label="Catch enter"];
subgraph cluster_29 {
color=blue
86 [label="Enter block"];
87 [label="Jump: break@@@[Boolean(true)] "];
88 [label="Stub" style="filled" fillcolor=gray];
89 [label="Exit block" style="filled" fillcolor=gray];
}
90 [label="Catch exit" style="filled" fillcolor=gray];
}
subgraph cluster_30 {
color=blue
49 [label="Catch enter"];
subgraph cluster_31 {
color=blue
81 [label="Enter block"];
82 [label="Jump: continue@@@[Boolean(true)] "];
83 [label="Stub" style="filled" fillcolor=gray];
84 [label="Exit block" style="filled" fillcolor=gray];
81 [label="Catch enter"];
subgraph cluster_32 {
color=blue
82 [label="Enter block"];
83 [label="Jump: break@@@[Boolean(true)] "];
84 [label="Stub" style="filled" fillcolor=gray];
85 [label="Exit block" style="filled" fillcolor=gray];
}
86 [label="Catch exit" style="filled" fillcolor=gray];
}
85 [label="Catch exit" style="filled" fillcolor=gray];
subgraph cluster_33 {
color=blue
91 [label="Catch enter"];
subgraph cluster_34 {
color=blue
92 [label="Enter block"];
93 [label="Jump: continue@@@[Boolean(true)] "];
94 [label="Stub" style="filled" fillcolor=gray];
95 [label="Exit block" style="filled" fillcolor=gray];
}
96 [label="Catch exit" style="filled" fillcolor=gray];
}
97 [label="Try expression exit"];
}
47 [label="Try expression exit"];
98 [label="Const: Int(2)"];
99 [label="Variable declaration: lval y: R|kotlin/Int|"];
100 [label="Exit block"];
}
91 [label="Const: Int(2)"];
92 [label="Variable declaration: lval y: R|kotlin/Int|"];
93 [label="Exit block"];
101 [label="Exit loop block"];
}
94 [label="Exit loop block"];
87 [label="Exit whileloop"];
}
40 [label="Exit whileloop"];
88 [label="Const: Int(3)"];
89 [label="Variable declaration: lval z: R|kotlin/Int|"];
90 [label="Exit block"];
}
95 [label="Const: Int(3)"];
96 [label="Variable declaration: lval z: R|kotlin/Int|"];
38 [label="Exit function test_3" style="filled" fillcolor=red];
102 [label="Exit function test_3" style="filled" fillcolor=red];
}
37 -> {39};
39 -> {41};
40 -> {95};
41 -> {42};
42 -> {43};
43 -> {44};
43 -> {40} [style=dotted];
44 -> {45};
45 -> {46};
46 -> {48};
47 -> {91};
48 -> {38 49 50 51};
49 -> {38 81};
50 -> {38 86};
46 -> {47};
46 -> {87} [style=dotted];
47 -> {48};
48 -> {49};
49 -> {50};
50 -> {102 91 81 51};
51 -> {52};
52 -> {54};
53 -> {64};
52 -> {53};
53 -> {54};
54 -> {55};
55 -> {56};
56 -> {57 63};
55 -> {57 56};
56 -> {63};
57 -> {58};
58 -> {59};
59 -> {38};
59 -> {102};
59 -> {60} [style=dotted];
60 -> {61} [style=dotted];
61 -> {62} [style=dotted];
62 -> {53} [style=dotted];
63 -> {53};
62 -> {63} [style=dotted];
63 -> {64};
64 -> {65};
65 -> {66};
66 -> {68};
67 -> {79};
66 -> {67};
67 -> {68};
68 -> {69};
69 -> {70};
70 -> {71};
71 -> {72 78};
70 -> {72 71};
71 -> {78};
72 -> {73};
73 -> {74};
74 -> {40};
74 -> {87};
74 -> {75} [style=dotted];
75 -> {76} [style=dotted];
76 -> {77} [style=dotted];
77 -> {67} [style=dotted];
78 -> {67};
77 -> {78} [style=dotted];
78 -> {79};
79 -> {80};
80 -> {47};
81 -> {82};
82 -> {39};
82 -> {83} [style=dotted];
80 -> {97};
81 -> {102 82};
82 -> {83};
83 -> {87};
83 -> {84} [style=dotted];
84 -> {85} [style=dotted];
85 -> {47} [style=dotted];
86 -> {87};
87 -> {40};
87 -> {88} [style=dotted];
88 -> {89} [style=dotted];
89 -> {90} [style=dotted];
90 -> {47} [style=dotted];
91 -> {92};
85 -> {86} [style=dotted];
86 -> {97} [style=dotted];
87 -> {88};
88 -> {89};
89 -> {90};
90 -> {102};
91 -> {102 92};
92 -> {93};
93 -> {94};
94 -> {41};
95 -> {96};
96 -> {38};
93 -> {94} [style=dotted];
93 -> {43} [color=green style=dashed];
94 -> {95} [style=dotted];
95 -> {96} [style=dotted];
96 -> {97} [style=dotted];
97 -> {98};
98 -> {99};
99 -> {100};
100 -> {101};
101 -> {44} [color=green style=dashed];
}

View File

@@ -8,195 +8,209 @@ digraph when_kt {
0 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
2 [label="Enter when"];
1 [label="Enter block"];
subgraph cluster_2 {
color=blue
4 [label="Enter when branch condition "];
5 [label="Access variable R|<local>/x|"];
6 [label="Const: Int(1)"];
7 [label="Operator =="];
8 [label="Exit when branch condition"];
2 [label="Enter when"];
subgraph cluster_3 {
color=blue
3 [label="Enter when branch condition "];
4 [label="Access variable R|<local>/x|"];
5 [label="Const: Int(1)"];
6 [label="Operator =="];
7 [label="Exit when branch condition"];
}
subgraph cluster_4 {
color=blue
8 [label="Enter when branch condition "];
9 [label="Access variable R|<local>/x|"];
10 [label="Const: Int(2)"];
11 [label="Function call: R|<local>/x|.R|kotlin/Int.rem|(...)"];
12 [label="Const: Int(0)"];
13 [label="Operator =="];
14 [label="Exit when branch condition"];
}
subgraph cluster_5 {
color=blue
15 [label="Enter when branch condition "];
16 [label="Const: Int(1)"];
17 [label="Const: Int(1)"];
18 [label="Function call: Int(1).R|kotlin/Int.minus|(...)"];
19 [label="Const: Int(0)"];
20 [label="Operator =="];
21 [label="Exit when branch condition"];
}
subgraph cluster_6 {
color=blue
22 [label="Enter when branch condition else"];
23 [label="Exit when branch condition"];
}
24 [label="Enter when branch result"];
subgraph cluster_7 {
color=blue
25 [label="Enter block"];
26 [label="Const: Int(5)"];
27 [label="Exit block"];
}
28 [label="Exit when branch result"];
29 [label="Enter when branch result"];
subgraph cluster_8 {
color=blue
30 [label="Enter block"];
31 [label="Jump: ^test_1 Unit"];
32 [label="Stub" style="filled" fillcolor=gray];
33 [label="Exit block" style="filled" fillcolor=gray];
}
34 [label="Exit when branch result" style="filled" fillcolor=gray];
35 [label="Enter when branch result"];
subgraph cluster_9 {
color=blue
36 [label="Enter block"];
37 [label="Const: Int(20)"];
38 [label="Exit block"];
}
39 [label="Exit when branch result"];
40 [label="Enter when branch result"];
subgraph cluster_10 {
color=blue
41 [label="Enter block"];
42 [label="Const: Int(10)"];
43 [label="Exit block"];
}
44 [label="Exit when branch result"];
45 [label="Exit when"];
}
subgraph cluster_3 {
color=blue
14 [label="Enter when branch condition "];
15 [label="Access variable R|<local>/x|"];
16 [label="Const: Int(2)"];
17 [label="Function call: R|<local>/x|.R|kotlin/Int.rem|(...)"];
18 [label="Const: Int(0)"];
19 [label="Operator =="];
20 [label="Exit when branch condition"];
}
subgraph cluster_4 {
color=blue
26 [label="Enter when branch condition "];
27 [label="Const: Int(1)"];
28 [label="Const: Int(1)"];
29 [label="Function call: Int(1).R|kotlin/Int.minus|(...)"];
30 [label="Const: Int(0)"];
31 [label="Operator =="];
32 [label="Exit when branch condition"];
}
subgraph cluster_5 {
color=blue
39 [label="Enter when branch condition else"];
40 [label="Exit when branch condition"];
}
41 [label="Enter when branch result"];
subgraph cluster_6 {
color=blue
42 [label="Enter block"];
43 [label="Const: Int(5)"];
44 [label="Exit block"];
}
45 [label="Exit when branch result"];
33 [label="Enter when branch result"];
subgraph cluster_7 {
color=blue
34 [label="Enter block"];
35 [label="Jump: ^test_1 Unit"];
36 [label="Stub" style="filled" fillcolor=gray];
37 [label="Exit block" style="filled" fillcolor=gray];
}
38 [label="Exit when branch result" style="filled" fillcolor=gray];
21 [label="Enter when branch result"];
subgraph cluster_8 {
color=blue
22 [label="Enter block"];
23 [label="Const: Int(20)"];
24 [label="Exit block"];
}
25 [label="Exit when branch result"];
9 [label="Enter when branch result"];
subgraph cluster_9 {
color=blue
10 [label="Enter block"];
11 [label="Const: Int(10)"];
12 [label="Exit block"];
}
13 [label="Exit when branch result"];
3 [label="Exit when"];
46 [label="Variable declaration: lval y: R|kotlin/Int|"];
47 [label="Exit block"];
}
46 [label="Variable declaration: lval y: R|kotlin/Int|"];
1 [label="Exit function test_1" style="filled" fillcolor=red];
48 [label="Exit function test_1" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {4};
3 -> {46};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
4 -> {5};
5 -> {6};
6 -> {7};
7 -> {8};
8 -> {9 14};
7 -> {40 8};
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {12};
12 -> {13};
13 -> {3};
14 -> {15};
13 -> {14};
14 -> {35 15};
15 -> {16};
16 -> {17};
17 -> {18};
18 -> {19};
19 -> {20};
20 -> {21 26};
21 -> {22};
20 -> {21};
21 -> {29 22};
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {3};
25 -> {26};
26 -> {27};
27 -> {28};
28 -> {29};
28 -> {45};
29 -> {30};
30 -> {31};
31 -> {32};
32 -> {33 39};
33 -> {34};
34 -> {35};
35 -> {1};
35 -> {36} [style=dotted];
36 -> {37} [style=dotted];
37 -> {38} [style=dotted];
38 -> {3} [style=dotted];
39 -> {40};
31 -> {48};
31 -> {32} [style=dotted];
32 -> {33} [style=dotted];
33 -> {34} [style=dotted];
34 -> {45} [style=dotted];
35 -> {36};
36 -> {37};
37 -> {38};
38 -> {39};
39 -> {45};
40 -> {41};
41 -> {42};
42 -> {43};
43 -> {44};
44 -> {45};
45 -> {3};
46 -> {1};
subgraph cluster_10 {
color=red
47 [label="Enter class A" style="filled" fillcolor=red];
48 [label="Exit class A" style="filled" fillcolor=red];
}
47 -> {48} [color=green];
45 -> {46};
46 -> {47};
47 -> {48};
subgraph cluster_11 {
color=red
49 [label="Enter class B" style="filled" fillcolor=red];
50 [label="Exit class B" style="filled" fillcolor=red];
49 [label="Enter class A" style="filled" fillcolor=red];
50 [label="Exit class A" style="filled" fillcolor=red];
}
49 -> {50} [color=green];
subgraph cluster_12 {
color=red
51 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_13 {
color=blue
53 [label="Enter when"];
subgraph cluster_14 {
color=blue
55 [label="Enter when branch condition "];
subgraph cluster_15 {
color=blue
57 [label="Enter &&"];
58 [label="Access variable R|<local>/x|"];
59 [label="Type operator: (R|<local>/x| is R|A|)"];
60 [label="Exit left part of &&"];
61 [label="Enter right part of &&"];
62 [label="Access variable R|<local>/x|"];
63 [label="Type operator: (R|<local>/x| is R|B|)"];
56 [label="Exit &&"];
}
64 [label="Exit when branch condition"];
}
71 [label="Synthetic else branch"];
65 [label="Enter when branch result"];
subgraph cluster_16 {
color=blue
66 [label="Enter block"];
67 [label="Access variable R|<local>/x|"];
68 [label="Type operator: (R|<local>/x| is R|A|)"];
69 [label="Exit block"];
}
70 [label="Exit when branch result"];
54 [label="Exit when"];
}
52 [label="Exit function test_2" style="filled" fillcolor=red];
51 [label="Enter class B" style="filled" fillcolor=red];
52 [label="Exit class B" style="filled" fillcolor=red];
}
51 -> {53};
53 -> {55};
54 -> {52};
55 -> {57};
56 -> {64};
51 -> {52} [color=green];
subgraph cluster_13 {
color=red
53 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_14 {
color=blue
54 [label="Enter block"];
subgraph cluster_15 {
color=blue
55 [label="Enter when"];
subgraph cluster_16 {
color=blue
56 [label="Enter when branch condition "];
subgraph cluster_17 {
color=blue
57 [label="Enter &&"];
58 [label="Access variable R|<local>/x|"];
59 [label="Type operator: (R|<local>/x| is R|A|)"];
60 [label="Exit left part of &&"];
61 [label="Enter right part of &&"];
62 [label="Access variable R|<local>/x|"];
63 [label="Type operator: (R|<local>/x| is R|B|)"];
64 [label="Exit &&"];
}
65 [label="Exit when branch condition"];
}
66 [label="Synthetic else branch"];
67 [label="Enter when branch result"];
subgraph cluster_18 {
color=blue
68 [label="Enter block"];
69 [label="Access variable R|<local>/x|"];
70 [label="Type operator: (R|<local>/x| is R|A|)"];
71 [label="Exit block"];
}
72 [label="Exit when branch result"];
73 [label="Exit when"];
}
74 [label="Exit block"];
}
75 [label="Exit function test_2" style="filled" fillcolor=red];
}
53 -> {54};
54 -> {55};
55 -> {56};
56 -> {57};
57 -> {58};
58 -> {59};
59 -> {60};
60 -> {56 61};
60 -> {64 61};
61 -> {62};
62 -> {63};
63 -> {56};
64 -> {65 71};
65 -> {66};
66 -> {67};
63 -> {64};
64 -> {65};
65 -> {67 66};
66 -> {73};
67 -> {68};
68 -> {69};
69 -> {70};
70 -> {54};
71 -> {54};
70 -> {71};
71 -> {72};
72 -> {73};
73 -> {74};
74 -> {75};
}

View File

@@ -5,125 +5,146 @@ digraph exhaustiveWhenAndDNNType_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function <init>" style="filled" fillcolor=red];
2 [label="Delegated constructor call: super<R|kotlin/Enum<SomeEnum>|>()"];
1 [label="Exit function <init>" style="filled" fillcolor=red];
0 [label="Enter class SomeEnum" style="filled" fillcolor=red];
1 [label="Exit class SomeEnum" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {1};
0 -> {1} [color=green];
subgraph cluster_1 {
color=red
3 [label="Enter function values" style="filled" fillcolor=red];
4 [label="Exit function values" style="filled" fillcolor=red];
2 [label="Enter function <init>" style="filled" fillcolor=red];
3 [label="Delegated constructor call: super<R|kotlin/Enum<SomeEnum>|>()"];
4 [label="Exit function <init>" style="filled" fillcolor=red];
}
2 -> {3};
3 -> {4};
subgraph cluster_2 {
color=red
5 [label="Enter function valueOf" style="filled" fillcolor=red];
6 [label="Exit function valueOf" style="filled" fillcolor=red];
5 [label="Enter function values" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
6 [label="Enter block"];
7 [label="Exit block"];
}
8 [label="Exit function values" style="filled" fillcolor=red];
}
5 -> {6};
subgraph cluster_3 {
color=red
7 [label="Enter class SomeEnum" style="filled" fillcolor=red];
8 [label="Exit class SomeEnum" style="filled" fillcolor=red];
}
7 -> {8} [color=green];
6 -> {7};
7 -> {8};
subgraph cluster_4 {
color=red
9 [label="Enter function <init>" style="filled" fillcolor=red];
11 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
10 [label="Exit function <init>" style="filled" fillcolor=red];
9 [label="Enter function valueOf" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
10 [label="Enter block"];
11 [label="Exit block"];
}
12 [label="Exit function valueOf" style="filled" fillcolor=red];
}
9 -> {11};
11 -> {10};
subgraph cluster_5 {
color=red
12 [label="Enter class B" style="filled" fillcolor=red];
13 [label="Exit class B" style="filled" fillcolor=red];
}
12 -> {13} [color=green];
9 -> {10};
10 -> {11};
11 -> {12};
subgraph cluster_6 {
color=red
14 [label="Enter function takeB" style="filled" fillcolor=red];
15 [label="Exit function takeB" style="filled" fillcolor=red];
13 [label="Enter class B" style="filled" fillcolor=red];
14 [label="Exit class B" style="filled" fillcolor=red];
}
14 -> {15};
13 -> {14} [color=green];
subgraph cluster_7 {
color=red
16 [label="Enter function test_1" style="filled" fillcolor=red];
18 [label="Access qualifier /SomeEnum"];
19 [label="Access variable R|/SomeEnum.A1|"];
20 [label="Variable declaration: lval flag: R|SomeEnum|"];
subgraph cluster_8 {
color=blue
21 [label="Enter when"];
23 [label="Access variable R|<local>/flag|"];
24 [label="Check not null: R|<local>/flag|!!"];
subgraph cluster_9 {
color=blue
25 [label="Enter when branch condition "];
26 [label="Access qualifier /SomeEnum"];
27 [label="Access variable R|/SomeEnum.A1|"];
28 [label="Operator =="];
29 [label="Exit when branch condition"];
}
subgraph cluster_10 {
color=blue
35 [label="Enter when branch condition "];
36 [label="Access qualifier /SomeEnum"];
37 [label="Access variable R|/SomeEnum.A2|"];
38 [label="Operator =="];
39 [label="Exit when branch condition"];
}
40 [label="Enter when branch result"];
subgraph cluster_11 {
color=blue
41 [label="Enter block"];
42 [label="Function call: R|/B.B|()"];
43 [label="Exit block"];
}
44 [label="Exit when branch result"];
30 [label="Enter when branch result"];
subgraph cluster_12 {
color=blue
31 [label="Enter block"];
32 [label="Function call: R|/B.B|()"];
33 [label="Exit block"];
}
34 [label="Exit when branch result"];
22 [label="Exit when"];
}
45 [label="Variable declaration: lval b: R|B|"];
46 [label="Access variable R|<local>/b|"];
47 [label="Function call: R|/takeB|(...)"];
17 [label="Exit function test_1" style="filled" fillcolor=red];
15 [label="Enter function <init>" style="filled" fillcolor=red];
16 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
17 [label="Exit function <init>" style="filled" fillcolor=red];
}
15 -> {16};
16 -> {17};
subgraph cluster_8 {
color=red
18 [label="Enter function takeB" style="filled" fillcolor=red];
subgraph cluster_9 {
color=blue
19 [label="Enter block"];
20 [label="Exit block"];
}
21 [label="Exit function takeB" style="filled" fillcolor=red];
}
16 -> {18};
18 -> {19};
19 -> {20};
20 -> {21};
21 -> {23};
22 -> {45};
subgraph cluster_10 {
color=red
22 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_11 {
color=blue
23 [label="Enter block"];
24 [label="Access qualifier /SomeEnum"];
25 [label="Access variable R|/SomeEnum.A1|"];
26 [label="Variable declaration: lval flag: R|SomeEnum|"];
subgraph cluster_12 {
color=blue
27 [label="Enter when"];
28 [label="Access variable R|<local>/flag|"];
29 [label="Check not null: R|<local>/flag|!!"];
subgraph cluster_13 {
color=blue
30 [label="Enter when branch condition "];
31 [label="Access qualifier /SomeEnum"];
32 [label="Access variable R|/SomeEnum.A1|"];
33 [label="Operator =="];
34 [label="Exit when branch condition"];
}
subgraph cluster_14 {
color=blue
35 [label="Enter when branch condition "];
36 [label="Access qualifier /SomeEnum"];
37 [label="Access variable R|/SomeEnum.A2|"];
38 [label="Operator =="];
39 [label="Exit when branch condition"];
}
40 [label="Enter when branch result"];
subgraph cluster_15 {
color=blue
41 [label="Enter block"];
42 [label="Function call: R|/B.B|()"];
43 [label="Exit block"];
}
44 [label="Exit when branch result"];
45 [label="Enter when branch result"];
subgraph cluster_16 {
color=blue
46 [label="Enter block"];
47 [label="Function call: R|/B.B|()"];
48 [label="Exit block"];
}
49 [label="Exit when branch result"];
50 [label="Exit when"];
}
51 [label="Variable declaration: lval b: R|B|"];
52 [label="Access variable R|<local>/b|"];
53 [label="Function call: R|/takeB|(...)"];
54 [label="Exit block"];
}
55 [label="Exit function test_1" style="filled" fillcolor=red];
}
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {26};
26 -> {27};
27 -> {28};
28 -> {29};
29 -> {30 35};
29 -> {30};
30 -> {31};
31 -> {32};
32 -> {33};
33 -> {34};
34 -> {22};
34 -> {45 35};
35 -> {36};
36 -> {37};
37 -> {38};
@@ -133,81 +154,86 @@ digraph exhaustiveWhenAndDNNType_kt {
41 -> {42};
42 -> {43};
43 -> {44};
44 -> {22};
44 -> {50};
45 -> {46};
46 -> {47};
47 -> {17};
subgraph cluster_13 {
color=red
48 [label="Enter function test_2" style="filled" fillcolor=red];
50 [label="Access qualifier /SomeEnum"];
51 [label="Access variable R|/SomeEnum.A1|"];
52 [label="Variable declaration: lval flag: R|SomeEnum|"];
subgraph cluster_14 {
color=blue
53 [label="Enter when"];
55 [label="Access variable R|<local>/flag|"];
56 [label="Check not null: R|<local>/flag|!!"];
subgraph cluster_15 {
color=blue
57 [label="Enter when branch condition "];
58 [label="Access qualifier /SomeEnum"];
59 [label="Access variable R|/SomeEnum.A1|"];
60 [label="Operator =="];
61 [label="Exit when branch condition"];
}
subgraph cluster_16 {
color=blue
67 [label="Enter when branch condition "];
68 [label="Access qualifier /SomeEnum"];
69 [label="Access variable R|/SomeEnum.A2|"];
70 [label="Operator =="];
71 [label="Exit when branch condition"];
}
72 [label="Enter when branch result"];
subgraph cluster_17 {
color=blue
73 [label="Enter block"];
74 [label="Function call: R|/B.B|()"];
75 [label="Exit block"];
}
76 [label="Exit when branch result"];
62 [label="Enter when branch result"];
subgraph cluster_18 {
color=blue
63 [label="Enter block"];
64 [label="Function call: R|/B.B|()"];
65 [label="Exit block"];
}
66 [label="Exit when branch result"];
54 [label="Exit when"];
}
77 [label="Variable declaration: lval b: R|B|"];
78 [label="Access variable R|<local>/b|"];
79 [label="Function call: R|/takeB|(...)"];
49 [label="Exit function test_2" style="filled" fillcolor=red];
}
48 -> {50};
47 -> {48};
48 -> {49};
49 -> {50};
50 -> {51};
51 -> {52};
52 -> {53};
53 -> {55};
54 -> {77};
55 -> {56};
53 -> {54};
54 -> {55};
subgraph cluster_17 {
color=red
56 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_18 {
color=blue
57 [label="Enter block"];
58 [label="Access qualifier /SomeEnum"];
59 [label="Access variable R|/SomeEnum.A1|"];
60 [label="Variable declaration: lval flag: R|SomeEnum|"];
subgraph cluster_19 {
color=blue
61 [label="Enter when"];
62 [label="Access variable R|<local>/flag|"];
63 [label="Check not null: R|<local>/flag|!!"];
subgraph cluster_20 {
color=blue
64 [label="Enter when branch condition "];
65 [label="Access qualifier /SomeEnum"];
66 [label="Access variable R|/SomeEnum.A1|"];
67 [label="Operator =="];
68 [label="Exit when branch condition"];
}
subgraph cluster_21 {
color=blue
69 [label="Enter when branch condition "];
70 [label="Access qualifier /SomeEnum"];
71 [label="Access variable R|/SomeEnum.A2|"];
72 [label="Operator =="];
73 [label="Exit when branch condition"];
}
74 [label="Enter when branch result"];
subgraph cluster_22 {
color=blue
75 [label="Enter block"];
76 [label="Function call: R|/B.B|()"];
77 [label="Exit block"];
}
78 [label="Exit when branch result"];
79 [label="Enter when branch result"];
subgraph cluster_23 {
color=blue
80 [label="Enter block"];
81 [label="Function call: R|/B.B|()"];
82 [label="Exit block"];
}
83 [label="Exit when branch result"];
84 [label="Exit when"];
}
85 [label="Variable declaration: lval b: R|B|"];
86 [label="Access variable R|<local>/b|"];
87 [label="Function call: R|/takeB|(...)"];
88 [label="Exit block"];
}
89 [label="Exit function test_2" style="filled" fillcolor=red];
}
56 -> {57};
57 -> {58};
58 -> {59};
59 -> {60};
60 -> {61};
61 -> {62 67};
61 -> {62};
62 -> {63};
63 -> {64};
64 -> {65};
65 -> {66};
66 -> {54};
66 -> {67};
67 -> {68};
68 -> {69};
68 -> {79 69};
69 -> {70};
70 -> {71};
71 -> {72};
@@ -215,89 +241,105 @@ digraph exhaustiveWhenAndDNNType_kt {
73 -> {74};
74 -> {75};
75 -> {76};
76 -> {54};
76 -> {77};
77 -> {78};
78 -> {79};
79 -> {49};
subgraph cluster_19 {
color=red
80 [label="Enter function test_3" style="filled" fillcolor=red];
82 [label="Access qualifier /SomeEnum"];
83 [label="Access variable R|/SomeEnum.A1|"];
84 [label="Variable declaration: lval flag: R|SomeEnum|"];
subgraph cluster_20 {
color=blue
85 [label="Enter when"];
87 [label="Access variable R|<local>/flag|"];
subgraph cluster_21 {
color=blue
88 [label="Enter when branch condition "];
89 [label="Access qualifier /SomeEnum"];
90 [label="Access variable R|/SomeEnum.A1|"];
91 [label="Operator =="];
92 [label="Exit when branch condition"];
}
subgraph cluster_22 {
color=blue
98 [label="Enter when branch condition "];
99 [label="Access qualifier /SomeEnum"];
100 [label="Access variable R|/SomeEnum.A2|"];
101 [label="Operator =="];
102 [label="Exit when branch condition"];
}
103 [label="Enter when branch result"];
subgraph cluster_23 {
color=blue
104 [label="Enter block"];
105 [label="Function call: R|/B.B|()"];
106 [label="Exit block"];
}
107 [label="Exit when branch result"];
93 [label="Enter when branch result"];
subgraph cluster_24 {
color=blue
94 [label="Enter block"];
95 [label="Function call: R|/B.B|()"];
96 [label="Exit block"];
}
97 [label="Exit when branch result"];
86 [label="Exit when"];
}
108 [label="Variable declaration: lval b: R|B|"];
109 [label="Access variable R|<local>/b|"];
110 [label="Function call: R|/takeB|(...)"];
81 [label="Exit function test_3" style="filled" fillcolor=red];
}
80 -> {82};
78 -> {84};
79 -> {80};
80 -> {81};
81 -> {82};
82 -> {83};
83 -> {84};
84 -> {85};
85 -> {87};
86 -> {108};
85 -> {86};
86 -> {87};
87 -> {88};
88 -> {89};
89 -> {90};
subgraph cluster_24 {
color=red
90 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_25 {
color=blue
91 [label="Enter block"];
92 [label="Access qualifier /SomeEnum"];
93 [label="Access variable R|/SomeEnum.A1|"];
94 [label="Variable declaration: lval flag: R|SomeEnum|"];
subgraph cluster_26 {
color=blue
95 [label="Enter when"];
96 [label="Access variable R|<local>/flag|"];
subgraph cluster_27 {
color=blue
97 [label="Enter when branch condition "];
98 [label="Access qualifier /SomeEnum"];
99 [label="Access variable R|/SomeEnum.A1|"];
100 [label="Operator =="];
101 [label="Exit when branch condition"];
}
subgraph cluster_28 {
color=blue
102 [label="Enter when branch condition "];
103 [label="Access qualifier /SomeEnum"];
104 [label="Access variable R|/SomeEnum.A2|"];
105 [label="Operator =="];
106 [label="Exit when branch condition"];
}
107 [label="Enter when branch result"];
subgraph cluster_29 {
color=blue
108 [label="Enter block"];
109 [label="Function call: R|/B.B|()"];
110 [label="Exit block"];
}
111 [label="Exit when branch result"];
112 [label="Enter when branch result"];
subgraph cluster_30 {
color=blue
113 [label="Enter block"];
114 [label="Function call: R|/B.B|()"];
115 [label="Exit block"];
}
116 [label="Exit when branch result"];
117 [label="Exit when"];
}
118 [label="Variable declaration: lval b: R|B|"];
119 [label="Access variable R|<local>/b|"];
120 [label="Function call: R|/takeB|(...)"];
121 [label="Exit block"];
}
122 [label="Exit function test_3" style="filled" fillcolor=red];
}
90 -> {91};
91 -> {92};
92 -> {93 98};
92 -> {93};
93 -> {94};
94 -> {95};
95 -> {96};
96 -> {97};
97 -> {86};
97 -> {98};
98 -> {99};
99 -> {100};
100 -> {101};
101 -> {102};
101 -> {112 102};
102 -> {103};
103 -> {104};
104 -> {105};
105 -> {106};
106 -> {107};
107 -> {86};
107 -> {108};
108 -> {109};
109 -> {110};
110 -> {81};
110 -> {111};
111 -> {117};
112 -> {113};
113 -> {114};
114 -> {115};
115 -> {116};
116 -> {117};
117 -> {118};
118 -> {119};
119 -> {120};
120 -> {121};
121 -> {122};
}

View File

@@ -5,108 +5,112 @@ digraph secondaryConstructorCfg_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function <init>" style="filled" fillcolor=red];
2 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
1 [label="Exit function <init>" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {1};
subgraph cluster_1 {
color=red
20 [label="Enter function <init>" style="filled" fillcolor=red];
22 [label="Access variable R|<local>/p0|"];
23 [label="Delegated constructor call: this<R|B|>(...)"];
24 [label="Access variable R|<local>/p1|"];
25 [label="Assignment: R|/B.p3|"];
21 [label="Exit function <init>" style="filled" fillcolor=red];
}
20 -> {22};
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {21};
subgraph cluster_2 {
color=red
35 [label="Enter class B" style="filled" fillcolor=red];
subgraph cluster_3 {
0 [label="Enter class B" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
16 [label="Enter function setter" style="filled" fillcolor=red];
17 [label="Exit function setter" style="filled" fillcolor=red];
2 [label="Enter property" style="filled" fillcolor=red];
3 [label="Access variable R|<local>/p0|"];
4 [label="Exit property" style="filled" fillcolor=red];
}
subgraph cluster_4 {
color=blue
14 [label="Enter function getter" style="filled" fillcolor=red];
15 [label="Exit function getter" style="filled" fillcolor=red];
}
subgraph cluster_5 {
color=blue
8 [label="Enter function getter" style="filled" fillcolor=red];
9 [label="Exit function getter" style="filled" fillcolor=red];
}
subgraph cluster_6 {
color=blue
3 [label="Enter function getter" style="filled" fillcolor=red];
4 [label="Exit function getter" style="filled" fillcolor=red];
}
subgraph cluster_7 {
subgraph cluster_2 {
color=blue
5 [label="Enter property" style="filled" fillcolor=red];
7 [label="Access variable R|<local>/p0|"];
6 [label="Exit property" style="filled" fillcolor=red];
6 [label="Access variable R|<local>/p0|"];
7 [label="Access variable R|kotlin/String.length|"];
8 [label="Exit property" style="filled" fillcolor=red];
}
subgraph cluster_8 {
subgraph cluster_3 {
color=blue
10 [label="Enter property" style="filled" fillcolor=red];
12 [label="Access variable R|<local>/p0|"];
13 [label="Access variable R|kotlin/String.length|"];
11 [label="Exit property" style="filled" fillcolor=red];
}
subgraph cluster_9 {
color=blue
18 [label="Enter property" style="filled" fillcolor=red];
19 [label="Exit property" style="filled" fillcolor=red];
}
subgraph cluster_10 {
color=blue
26 [label="Enter init block" style="filled" fillcolor=red];
subgraph cluster_11 {
9 [label="Enter init block" style="filled" fillcolor=red];
subgraph cluster_4 {
color=blue
28 [label="Enter block"];
29 [label="Access variable R|<local>/p0|"];
30 [label="Access variable R|kotlin/String.length|"];
31 [label="Assignment: R|/B.p1|"];
32 [label="Const: String()"];
33 [label="Assignment: R|/B.p3|"];
34 [label="Exit block"];
10 [label="Enter block"];
11 [label="Access variable R|<local>/p0|"];
12 [label="Access variable R|kotlin/String.length|"];
13 [label="Assignment: R|/B.p1|"];
14 [label="Const: String()"];
15 [label="Assignment: R|/B.p3|"];
16 [label="Exit block"];
}
27 [label="Exit init block" style="filled" fillcolor=red];
17 [label="Exit init block" style="filled" fillcolor=red];
}
36 [label="Exit class B" style="filled" fillcolor=red];
1 [label="Exit class B" style="filled" fillcolor=red];
}
35 -> {5} [color=green];
5 -> {7};
6 -> {10} [color=green];
7 -> {6};
0 -> {2} [color=green];
2 -> {3};
3 -> {4};
10 -> {12};
11 -> {18} [color=green];
4 -> {5} [color=green];
5 -> {6};
6 -> {7};
7 -> {8};
8 -> {9} [color=green];
9 -> {10};
10 -> {11};
11 -> {12};
12 -> {13};
13 -> {11};
8 -> {9};
18 -> {19};
19 -> {26} [color=green];
13 -> {14};
14 -> {15};
15 -> {16};
16 -> {17};
26 -> {28};
27 -> {36} [color=green];
28 -> {29};
17 -> {1} [color=green];
subgraph cluster_5 {
color=red
18 [label="Enter function <init>" style="filled" fillcolor=red];
19 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
20 [label="Exit function <init>" style="filled" fillcolor=red];
}
18 -> {19};
19 -> {20};
subgraph cluster_6 {
color=red
21 [label="Enter function getter" style="filled" fillcolor=red];
22 [label="Exit function getter" style="filled" fillcolor=red];
}
21 -> {22};
subgraph cluster_7 {
color=red
23 [label="Enter function getter" style="filled" fillcolor=red];
24 [label="Exit function getter" style="filled" fillcolor=red];
}
23 -> {24};
subgraph cluster_8 {
color=red
25 [label="Enter function getter" style="filled" fillcolor=red];
26 [label="Exit function getter" style="filled" fillcolor=red];
}
25 -> {26};
subgraph cluster_9 {
color=red
27 [label="Enter function setter" style="filled" fillcolor=red];
28 [label="Exit function setter" style="filled" fillcolor=red];
}
27 -> {28};
subgraph cluster_10 {
color=red
29 [label="Enter function <init>" style="filled" fillcolor=red];
30 [label="Access variable R|<local>/p0|"];
31 [label="Delegated constructor call: this<R|B|>(...)"];
subgraph cluster_11 {
color=blue
32 [label="Enter block"];
33 [label="Access variable R|<local>/p1|"];
34 [label="Assignment: R|/B.p3|"];
35 [label="Exit block"];
}
36 [label="Exit function <init>" style="filled" fillcolor=red];
}
29 -> {30};
30 -> {31};
31 -> {32};
32 -> {33};
33 -> {34};
34 -> {27};
34 -> {35};
35 -> {36};
}

View File

@@ -5,351 +5,407 @@ digraph bangbang_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function foo" style="filled" fillcolor=red];
1 [label="Exit function foo" style="filled" fillcolor=red];
0 [label="Enter class A" style="filled" fillcolor=red];
1 [label="Exit class A" style="filled" fillcolor=red];
}
0 -> {1};
0 -> {1} [color=green];
subgraph cluster_1 {
color=red
2 [label="Enter class A" style="filled" fillcolor=red];
3 [label="Exit class A" style="filled" fillcolor=red];
2 [label="Enter function foo" style="filled" fillcolor=red];
3 [label="Exit function foo" style="filled" fillcolor=red];
}
2 -> {3} [color=green];
2 -> {3};
subgraph cluster_2 {
color=red
4 [label="Enter function test_0" style="filled" fillcolor=red];
6 [label="Access variable R|<local>/a|"];
7 [label="Check not null: R|<local>/a|!!"];
8 [label="Function call: R|<local>/a|!!.R|/A.foo|()"];
9 [label="Access variable R|<local>/a|"];
10 [label="Function call: R|<local>/a|.R|/A.foo|()"];
5 [label="Exit function test_0" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
5 [label="Enter block"];
6 [label="Access variable R|<local>/a|"];
7 [label="Check not null: R|<local>/a|!!"];
8 [label="Function call: R|<local>/a|!!.R|/A.foo|()"];
9 [label="Access variable R|<local>/a|"];
10 [label="Function call: R|<local>/a|.R|/A.foo|()"];
11 [label="Exit block"];
}
12 [label="Exit function test_0" style="filled" fillcolor=red];
}
4 -> {6};
4 -> {5};
5 -> {6};
6 -> {7};
7 -> {8};
8 -> {9};
9 -> {10};
10 -> {5};
10 -> {11};
11 -> {12};
subgraph cluster_3 {
subgraph cluster_4 {
color=red
11 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_4 {
13 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
13 [label="Enter when"];
subgraph cluster_5 {
color=blue
15 [label="Enter when branch condition "];
16 [label="Access variable R|<local>/a|"];
17 [label="Check not null: R|<local>/a|!!"];
18 [label="Function call: R|<local>/a|!!.R|/A.foo|()"];
19 [label="Exit when branch condition"];
}
26 [label="Synthetic else branch"];
20 [label="Enter when branch result"];
14 [label="Enter block"];
subgraph cluster_6 {
color=blue
21 [label="Enter block"];
22 [label="Access variable R|<local>/a|"];
23 [label="Function call: R|<local>/a|.R|/A.foo|()"];
24 [label="Exit block"];
15 [label="Enter when"];
subgraph cluster_7 {
color=blue
16 [label="Enter when branch condition "];
17 [label="Access variable R|<local>/a|"];
18 [label="Check not null: R|<local>/a|!!"];
19 [label="Function call: R|<local>/a|!!.R|/A.foo|()"];
20 [label="Exit when branch condition"];
}
21 [label="Synthetic else branch"];
22 [label="Enter when branch result"];
subgraph cluster_8 {
color=blue
23 [label="Enter block"];
24 [label="Access variable R|<local>/a|"];
25 [label="Function call: R|<local>/a|.R|/A.foo|()"];
26 [label="Exit block"];
}
27 [label="Exit when branch result"];
28 [label="Exit when"];
}
25 [label="Exit when branch result"];
14 [label="Exit when"];
29 [label="Access variable R|<local>/a|"];
30 [label="Function call: R|<local>/a|.R|/A.foo|()"];
31 [label="Exit block"];
}
27 [label="Access variable R|<local>/a|"];
28 [label="Function call: R|<local>/a|.R|/A.foo|()"];
12 [label="Exit function test_1" style="filled" fillcolor=red];
32 [label="Exit function test_1" style="filled" fillcolor=red];
}
11 -> {13};
13 -> {15};
14 -> {27};
13 -> {14};
14 -> {15};
15 -> {16};
16 -> {17};
17 -> {18};
18 -> {19};
19 -> {20 26};
20 -> {21};
21 -> {22};
19 -> {20};
20 -> {22 21};
21 -> {28};
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {14};
26 -> {14};
25 -> {26};
26 -> {27};
27 -> {28};
28 -> {12};
28 -> {29};
29 -> {30};
30 -> {31};
31 -> {32};
subgraph cluster_7 {
subgraph cluster_9 {
color=red
29 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_8 {
33 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_10 {
color=blue
31 [label="Enter when"];
subgraph cluster_9 {
color=blue
33 [label="Enter when branch condition "];
subgraph cluster_10 {
color=blue
35 [label="Enter &&"];
36 [label="Access variable R|<local>/a|"];
37 [label="Check not null: R|<local>/a|!!"];
38 [label="Function call: R|<local>/a|!!.R|/A.foo|()"];
39 [label="Exit left part of &&"];
40 [label="Enter right part of &&"];
41 [label="Access variable R|<local>/b|"];
34 [label="Exit &&"];
}
42 [label="Exit when branch condition"];
}
49 [label="Synthetic else branch"];
43 [label="Enter when branch result"];
34 [label="Enter block"];
subgraph cluster_11 {
color=blue
44 [label="Enter block"];
45 [label="Access variable R|<local>/a|"];
46 [label="Function call: R|<local>/a|.R|/A.foo|()"];
47 [label="Exit block"];
35 [label="Enter when"];
subgraph cluster_12 {
color=blue
36 [label="Enter when branch condition "];
subgraph cluster_13 {
color=blue
37 [label="Enter &&"];
38 [label="Access variable R|<local>/a|"];
39 [label="Check not null: R|<local>/a|!!"];
40 [label="Function call: R|<local>/a|!!.R|/A.foo|()"];
41 [label="Exit left part of &&"];
42 [label="Enter right part of &&"];
43 [label="Access variable R|<local>/b|"];
44 [label="Exit &&"];
}
45 [label="Exit when branch condition"];
}
46 [label="Synthetic else branch"];
47 [label="Enter when branch result"];
subgraph cluster_14 {
color=blue
48 [label="Enter block"];
49 [label="Access variable R|<local>/a|"];
50 [label="Function call: R|<local>/a|.R|/A.foo|()"];
51 [label="Exit block"];
}
52 [label="Exit when branch result"];
53 [label="Exit when"];
}
48 [label="Exit when branch result"];
32 [label="Exit when"];
54 [label="Access variable R|<local>/a|"];
55 [label="Function call: R|<local>/a|.R|/A.foo|()"];
56 [label="Exit block"];
}
50 [label="Access variable R|<local>/a|"];
51 [label="Function call: R|<local>/a|.R|/A.foo|()"];
30 [label="Exit function test_2" style="filled" fillcolor=red];
57 [label="Exit function test_2" style="filled" fillcolor=red];
}
29 -> {31};
31 -> {33};
32 -> {50};
33 -> {35};
34 -> {42};
33 -> {34};
34 -> {35};
35 -> {36};
36 -> {37};
37 -> {38};
38 -> {39};
39 -> {34 40};
39 -> {40};
40 -> {41};
41 -> {34};
42 -> {43 49};
41 -> {44 42};
42 -> {43};
43 -> {44};
44 -> {45};
45 -> {46};
46 -> {47};
45 -> {47 46};
46 -> {53};
47 -> {48};
48 -> {32};
49 -> {32};
48 -> {49};
49 -> {50};
50 -> {51};
51 -> {30};
51 -> {52};
52 -> {53};
53 -> {54};
54 -> {55};
55 -> {56};
56 -> {57};
subgraph cluster_12 {
subgraph cluster_15 {
color=red
52 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_13 {
58 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_16 {
color=blue
54 [label="Enter when"];
subgraph cluster_14 {
59 [label="Enter block"];
subgraph cluster_17 {
color=blue
56 [label="Enter when branch condition "];
subgraph cluster_15 {
60 [label="Enter when"];
subgraph cluster_18 {
color=blue
58 [label="Enter &&"];
59 [label="Access variable R|<local>/b|"];
60 [label="Exit left part of &&"];
61 [label="Enter right part of &&"];
62 [label="Access variable R|<local>/a|"];
63 [label="Check not null: R|<local>/a|!!"];
64 [label="Function call: R|<local>/a|!!.R|/A.foo|()"];
57 [label="Exit &&"];
61 [label="Enter when branch condition "];
subgraph cluster_19 {
color=blue
62 [label="Enter &&"];
63 [label="Access variable R|<local>/b|"];
64 [label="Exit left part of &&"];
65 [label="Enter right part of &&"];
66 [label="Access variable R|<local>/a|"];
67 [label="Check not null: R|<local>/a|!!"];
68 [label="Function call: R|<local>/a|!!.R|/A.foo|()"];
69 [label="Exit &&"];
}
70 [label="Exit when branch condition"];
}
65 [label="Exit when branch condition"];
71 [label="Synthetic else branch"];
72 [label="Enter when branch result"];
subgraph cluster_20 {
color=blue
73 [label="Enter block"];
74 [label="Access variable R|<local>/a|"];
75 [label="Function call: R|<local>/a|.R|/A.foo|()"];
76 [label="Exit block"];
}
77 [label="Exit when branch result"];
78 [label="Exit when"];
}
72 [label="Synthetic else branch"];
66 [label="Enter when branch result"];
subgraph cluster_16 {
color=blue
67 [label="Enter block"];
68 [label="Access variable R|<local>/a|"];
69 [label="Function call: R|<local>/a|.R|/A.foo|()"];
70 [label="Exit block"];
}
71 [label="Exit when branch result"];
55 [label="Exit when"];
79 [label="Access variable R|<local>/a|"];
80 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
81 [label="Exit block"];
}
73 [label="Access variable R|<local>/a|"];
74 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
53 [label="Exit function test_3" style="filled" fillcolor=red];
82 [label="Exit function test_3" style="filled" fillcolor=red];
}
52 -> {54};
54 -> {56};
55 -> {73};
56 -> {58};
57 -> {65};
58 -> {59};
59 -> {60};
60 -> {57 61};
60 -> {61};
61 -> {62};
62 -> {63};
63 -> {64};
64 -> {57};
65 -> {66 72};
64 -> {69 65};
65 -> {66};
66 -> {67};
67 -> {68};
68 -> {69};
69 -> {70};
70 -> {71};
71 -> {55};
72 -> {55};
70 -> {72 71};
71 -> {78};
72 -> {73};
73 -> {74};
74 -> {53};
subgraph cluster_17 {
color=red
75 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_18 {
color=blue
77 [label="Enter when"];
subgraph cluster_19 {
color=blue
79 [label="Enter when branch condition "];
subgraph cluster_20 {
color=blue
81 [label="Enter ||"];
82 [label="Access variable R|<local>/a|"];
83 [label="Check not null: R|<local>/a|!!"];
84 [label="Function call: R|<local>/a|!!.R|/A.foo|()"];
85 [label="Exit left part of ||"];
86 [label="Enter right part of ||"];
87 [label="Access variable R|<local>/b|"];
80 [label="Exit ||"];
}
88 [label="Exit when branch condition"];
}
95 [label="Synthetic else branch"];
89 [label="Enter when branch result"];
subgraph cluster_21 {
color=blue
90 [label="Enter block"];
91 [label="Access variable R|<local>/a|"];
92 [label="Function call: R|<local>/a|.R|/A.foo|()"];
93 [label="Exit block"];
}
94 [label="Exit when branch result"];
78 [label="Exit when"];
}
96 [label="Access variable R|<local>/a|"];
97 [label="Function call: R|<local>/a|.R|/A.foo|()"];
76 [label="Exit function test_4" style="filled" fillcolor=red];
}
75 -> {77};
77 -> {79};
78 -> {96};
79 -> {81};
80 -> {88};
74 -> {75};
75 -> {76};
76 -> {77};
77 -> {78};
78 -> {79};
79 -> {80};
80 -> {81};
81 -> {82};
82 -> {83};
subgraph cluster_21 {
color=red
83 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_22 {
color=blue
84 [label="Enter block"];
subgraph cluster_23 {
color=blue
85 [label="Enter when"];
subgraph cluster_24 {
color=blue
86 [label="Enter when branch condition "];
subgraph cluster_25 {
color=blue
87 [label="Enter ||"];
88 [label="Access variable R|<local>/a|"];
89 [label="Check not null: R|<local>/a|!!"];
90 [label="Function call: R|<local>/a|!!.R|/A.foo|()"];
91 [label="Exit left part of ||"];
92 [label="Enter right part of ||"];
93 [label="Access variable R|<local>/b|"];
94 [label="Exit ||"];
}
95 [label="Exit when branch condition"];
}
96 [label="Synthetic else branch"];
97 [label="Enter when branch result"];
subgraph cluster_26 {
color=blue
98 [label="Enter block"];
99 [label="Access variable R|<local>/a|"];
100 [label="Function call: R|<local>/a|.R|/A.foo|()"];
101 [label="Exit block"];
}
102 [label="Exit when branch result"];
103 [label="Exit when"];
}
104 [label="Access variable R|<local>/a|"];
105 [label="Function call: R|<local>/a|.R|/A.foo|()"];
106 [label="Exit block"];
}
107 [label="Exit function test_4" style="filled" fillcolor=red];
}
83 -> {84};
84 -> {85};
85 -> {80 86};
85 -> {86};
86 -> {87};
87 -> {80};
88 -> {89 95};
87 -> {88};
88 -> {89};
89 -> {90};
90 -> {91};
91 -> {92};
91 -> {94 92};
92 -> {93};
93 -> {94};
94 -> {78};
95 -> {78};
96 -> {97};
97 -> {76};
subgraph cluster_22 {
color=red
98 [label="Enter function test_5" style="filled" fillcolor=red];
subgraph cluster_23 {
color=blue
100 [label="Enter when"];
subgraph cluster_24 {
color=blue
102 [label="Enter when branch condition "];
subgraph cluster_25 {
color=blue
104 [label="Enter ||"];
105 [label="Access variable R|<local>/b|"];
106 [label="Exit left part of ||"];
107 [label="Enter right part of ||"];
108 [label="Access variable R|<local>/a|"];
109 [label="Check not null: R|<local>/a|!!"];
110 [label="Function call: R|<local>/a|!!.R|/A.foo|()"];
103 [label="Exit ||"];
}
111 [label="Exit when branch condition"];
}
118 [label="Synthetic else branch"];
112 [label="Enter when branch result"];
subgraph cluster_26 {
color=blue
113 [label="Enter block"];
114 [label="Access variable R|<local>/a|"];
115 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
116 [label="Exit block"];
}
117 [label="Exit when branch result"];
101 [label="Exit when"];
}
119 [label="Access variable R|<local>/a|"];
120 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
99 [label="Exit function test_5" style="filled" fillcolor=red];
}
98 -> {100};
100 -> {102};
101 -> {119};
102 -> {104};
103 -> {111};
94 -> {95};
95 -> {97 96};
96 -> {103};
97 -> {98};
98 -> {99};
99 -> {100};
100 -> {101};
101 -> {102};
102 -> {103};
103 -> {104};
104 -> {105};
105 -> {106};
106 -> {103 107};
107 -> {108};
108 -> {109};
109 -> {110};
110 -> {103};
111 -> {112 118};
112 -> {113};
113 -> {114};
114 -> {115};
115 -> {116};
116 -> {117};
117 -> {101};
118 -> {101};
119 -> {120};
120 -> {99};
106 -> {107};
subgraph cluster_27 {
color=red
121 [label="Enter function test_6" style="filled" fillcolor=red];
123 [label="Access variable R|<local>/x|"];
124 [label="Check not null: R|<local>/x|!!"];
125 [label="Function call: R|<local>/x|!!.R|/A.foo|()"];
122 [label="Exit function test_6" style="filled" fillcolor=red];
108 [label="Enter function test_5" style="filled" fillcolor=red];
subgraph cluster_28 {
color=blue
109 [label="Enter block"];
subgraph cluster_29 {
color=blue
110 [label="Enter when"];
subgraph cluster_30 {
color=blue
111 [label="Enter when branch condition "];
subgraph cluster_31 {
color=blue
112 [label="Enter ||"];
113 [label="Access variable R|<local>/b|"];
114 [label="Exit left part of ||"];
115 [label="Enter right part of ||"];
116 [label="Access variable R|<local>/a|"];
117 [label="Check not null: R|<local>/a|!!"];
118 [label="Function call: R|<local>/a|!!.R|/A.foo|()"];
119 [label="Exit ||"];
}
120 [label="Exit when branch condition"];
}
121 [label="Synthetic else branch"];
122 [label="Enter when branch result"];
subgraph cluster_32 {
color=blue
123 [label="Enter block"];
124 [label="Access variable R|<local>/a|"];
125 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
126 [label="Exit block"];
}
127 [label="Exit when branch result"];
128 [label="Exit when"];
}
129 [label="Access variable R|<local>/a|"];
130 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
131 [label="Exit block"];
}
132 [label="Exit function test_5" style="filled" fillcolor=red];
}
121 -> {123};
108 -> {109};
109 -> {110};
110 -> {111};
111 -> {112};
112 -> {113};
113 -> {114};
114 -> {119 115};
115 -> {116};
116 -> {117};
117 -> {118};
118 -> {119};
119 -> {120};
120 -> {122 121};
121 -> {128};
122 -> {123};
123 -> {124};
124 -> {125};
125 -> {122};
subgraph cluster_28 {
color=red
126 [label="Enter function test_7" style="filled" fillcolor=red];
128 [label="Access variable R|<local>/x|"];
129 [label="Check not null: R|<local>/x|!!"];
130 [label="Function call: R|<local>/x|!!.R|/A.foo|()"];
127 [label="Exit function test_7" style="filled" fillcolor=red];
}
126 -> {128};
125 -> {126};
126 -> {127};
127 -> {128};
128 -> {129};
129 -> {130};
130 -> {127};
130 -> {131};
131 -> {132};
subgraph cluster_33 {
color=red
133 [label="Enter function test_6" style="filled" fillcolor=red];
subgraph cluster_34 {
color=blue
134 [label="Enter block"];
135 [label="Access variable R|<local>/x|"];
136 [label="Check not null: R|<local>/x|!!"];
137 [label="Function call: R|<local>/x|!!.R|/A.foo|()"];
138 [label="Exit block"];
}
139 [label="Exit function test_6" style="filled" fillcolor=red];
}
133 -> {134};
134 -> {135};
135 -> {136};
136 -> {137};
137 -> {138};
138 -> {139};
subgraph cluster_35 {
color=red
140 [label="Enter function test_7" style="filled" fillcolor=red];
subgraph cluster_36 {
color=blue
141 [label="Enter block"];
142 [label="Access variable R|<local>/x|"];
143 [label="Check not null: R|<local>/x|!!"];
144 [label="Function call: R|<local>/x|!!.R|/A.foo|()"];
145 [label="Exit block"];
}
146 [label="Exit function test_7" style="filled" fillcolor=red];
}
140 -> {141};
141 -> {142};
142 -> {143};
143 -> {144};
144 -> {145};
145 -> {146};
}

View File

@@ -5,420 +5,476 @@ digraph jumpFromRhsOfOperator_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function foo" style="filled" fillcolor=red];
1 [label="Exit function foo" style="filled" fillcolor=red];
0 [label="Enter class A" style="filled" fillcolor=red];
1 [label="Exit class A" style="filled" fillcolor=red];
}
0 -> {1};
0 -> {1} [color=green];
subgraph cluster_1 {
color=red
2 [label="Enter class A" style="filled" fillcolor=red];
3 [label="Exit class A" style="filled" fillcolor=red];
2 [label="Enter function foo" style="filled" fillcolor=red];
3 [label="Exit function foo" style="filled" fillcolor=red];
}
2 -> {3} [color=green];
2 -> {3};
subgraph cluster_2 {
color=red
4 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
7 [label="Enter ||"];
8 [label="Access variable R|<local>/a|"];
9 [label="Const: Null(null)"];
10 [label="Operator !="];
11 [label="Exit left part of ||"];
12 [label="Enter right part of ||"];
13 [label="Function call: R|java/lang/Exception.Exception|()"];
14 [label="Throw: throw R|java/lang/Exception.Exception|()"];
15 [label="Stub" style="filled" fillcolor=gray];
6 [label="Exit ||"];
5 [label="Enter block"];
subgraph cluster_4 {
color=blue
6 [label="Enter ||"];
7 [label="Access variable R|<local>/a|"];
8 [label="Const: Null(null)"];
9 [label="Operator !="];
10 [label="Exit left part of ||"];
11 [label="Enter right part of ||"];
12 [label="Function call: R|java/lang/Exception.Exception|()"];
13 [label="Throw: throw R|java/lang/Exception.Exception|()"];
14 [label="Stub" style="filled" fillcolor=gray];
15 [label="Exit ||"];
}
16 [label="Access variable R|<local>/a|"];
17 [label="Function call: R|<local>/a|.R|/A.foo|()"];
18 [label="Exit block"];
}
16 [label="Access variable R|<local>/a|"];
17 [label="Function call: R|<local>/a|.R|/A.foo|()"];
5 [label="Exit function test_1" style="filled" fillcolor=red];
19 [label="Exit function test_1" style="filled" fillcolor=red];
}
4 -> {7};
6 -> {16};
4 -> {5};
5 -> {6};
6 -> {7};
7 -> {8};
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {6 12};
10 -> {15 11};
11 -> {12};
12 -> {13};
13 -> {14};
14 -> {5};
13 -> {19};
13 -> {14} [style=dotted];
14 -> {15} [style=dotted];
15 -> {6} [style=dotted];
15 -> {16};
16 -> {17};
17 -> {5};
17 -> {18};
18 -> {19};
subgraph cluster_4 {
subgraph cluster_5 {
color=red
18 [label="Enter function teat_2" style="filled" fillcolor=red];
subgraph cluster_5 {
20 [label="Enter function teat_2" style="filled" fillcolor=red];
subgraph cluster_6 {
color=blue
21 [label="Enter &&"];
22 [label="Access variable R|<local>/a|"];
23 [label="Const: Null(null)"];
24 [label="Operator =="];
25 [label="Exit left part of &&"];
26 [label="Enter right part of &&"];
27 [label="Function call: R|java/lang/Exception.Exception|()"];
28 [label="Throw: throw R|java/lang/Exception.Exception|()"];
29 [label="Stub" style="filled" fillcolor=gray];
20 [label="Exit &&"];
21 [label="Enter block"];
subgraph cluster_7 {
color=blue
22 [label="Enter &&"];
23 [label="Access variable R|<local>/a|"];
24 [label="Const: Null(null)"];
25 [label="Operator =="];
26 [label="Exit left part of &&"];
27 [label="Enter right part of &&"];
28 [label="Function call: R|java/lang/Exception.Exception|()"];
29 [label="Throw: throw R|java/lang/Exception.Exception|()"];
30 [label="Stub" style="filled" fillcolor=gray];
31 [label="Exit &&"];
}
32 [label="Access variable R|<local>/a|"];
33 [label="Function call: R|<local>/a|.R|/A.foo|()"];
34 [label="Exit block"];
}
30 [label="Access variable R|<local>/a|"];
31 [label="Function call: R|<local>/a|.R|/A.foo|()"];
19 [label="Exit function teat_2" style="filled" fillcolor=red];
35 [label="Exit function teat_2" style="filled" fillcolor=red];
}
18 -> {21};
20 -> {30};
20 -> {21};
21 -> {22};
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {20 26};
26 -> {27};
25 -> {26};
26 -> {31 27};
27 -> {28};
28 -> {19};
28 -> {29} [style=dotted];
29 -> {20} [style=dotted];
30 -> {31};
31 -> {19};
28 -> {29};
29 -> {35};
29 -> {30} [style=dotted];
30 -> {31} [style=dotted];
31 -> {32};
32 -> {33};
33 -> {34};
34 -> {35};
subgraph cluster_6 {
subgraph cluster_8 {
color=red
32 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_7 {
36 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_9 {
color=blue
34 [label="Enter when"];
subgraph cluster_8 {
color=blue
36 [label="Enter when branch condition "];
subgraph cluster_9 {
color=blue
38 [label="Enter ||"];
39 [label="Access variable R|<local>/a|"];
40 [label="Const: Null(null)"];
41 [label="Operator !="];
42 [label="Exit left part of ||"];
43 [label="Enter right part of ||"];
44 [label="Function call: R|java/lang/Exception.Exception|()"];
45 [label="Throw: throw R|java/lang/Exception.Exception|()"];
46 [label="Stub" style="filled" fillcolor=gray];
37 [label="Exit ||"];
}
47 [label="Exit when branch condition"];
}
54 [label="Synthetic else branch"];
48 [label="Enter when branch result"];
37 [label="Enter block"];
subgraph cluster_10 {
color=blue
49 [label="Enter block"];
50 [label="Access variable R|<local>/a|"];
51 [label="Function call: R|<local>/a|.R|/A.foo|()"];
52 [label="Exit block"];
38 [label="Enter when"];
subgraph cluster_11 {
color=blue
39 [label="Enter when branch condition "];
subgraph cluster_12 {
color=blue
40 [label="Enter ||"];
41 [label="Access variable R|<local>/a|"];
42 [label="Const: Null(null)"];
43 [label="Operator !="];
44 [label="Exit left part of ||"];
45 [label="Enter right part of ||"];
46 [label="Function call: R|java/lang/Exception.Exception|()"];
47 [label="Throw: throw R|java/lang/Exception.Exception|()"];
48 [label="Stub" style="filled" fillcolor=gray];
49 [label="Exit ||"];
}
50 [label="Exit when branch condition"];
}
51 [label="Synthetic else branch"];
52 [label="Enter when branch result"];
subgraph cluster_13 {
color=blue
53 [label="Enter block"];
54 [label="Access variable R|<local>/a|"];
55 [label="Function call: R|<local>/a|.R|/A.foo|()"];
56 [label="Exit block"];
}
57 [label="Exit when branch result"];
58 [label="Exit when"];
}
53 [label="Exit when branch result"];
35 [label="Exit when"];
59 [label="Access variable R|<local>/a|"];
60 [label="Function call: R|<local>/a|.R|/A.foo|()"];
61 [label="Exit block"];
}
55 [label="Access variable R|<local>/a|"];
56 [label="Function call: R|<local>/a|.R|/A.foo|()"];
33 [label="Exit function test_3" style="filled" fillcolor=red];
62 [label="Exit function test_3" style="filled" fillcolor=red];
}
32 -> {34};
34 -> {36};
35 -> {55};
36 -> {38};
37 -> {47};
36 -> {37};
37 -> {38};
38 -> {39};
39 -> {40};
40 -> {41};
41 -> {42};
42 -> {37 43};
42 -> {43};
43 -> {44};
44 -> {45};
45 -> {33};
45 -> {46} [style=dotted];
46 -> {37} [style=dotted];
47 -> {48 54};
48 -> {49};
44 -> {49 45};
45 -> {46};
46 -> {47};
47 -> {62};
47 -> {48} [style=dotted];
48 -> {49} [style=dotted];
49 -> {50};
50 -> {51};
51 -> {52};
50 -> {52 51};
51 -> {58};
52 -> {53};
53 -> {35};
54 -> {35};
53 -> {54};
54 -> {55};
55 -> {56};
56 -> {33};
56 -> {57};
57 -> {58};
58 -> {59};
59 -> {60};
60 -> {61};
61 -> {62};
subgraph cluster_11 {
subgraph cluster_14 {
color=red
57 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_12 {
63 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_15 {
color=blue
59 [label="Enter when"];
subgraph cluster_13 {
64 [label="Enter block"];
subgraph cluster_16 {
color=blue
61 [label="Enter when branch condition "];
subgraph cluster_14 {
65 [label="Enter when"];
subgraph cluster_17 {
color=blue
63 [label="Enter &&"];
64 [label="Access variable R|<local>/a|"];
65 [label="Const: Null(null)"];
66 [label="Operator =="];
67 [label="Exit left part of &&"];
68 [label="Enter right part of &&"];
69 [label="Function call: R|java/lang/Exception.Exception|()"];
70 [label="Throw: throw R|java/lang/Exception.Exception|()"];
71 [label="Stub" style="filled" fillcolor=gray];
62 [label="Exit &&"];
66 [label="Enter when branch condition "];
subgraph cluster_18 {
color=blue
67 [label="Enter &&"];
68 [label="Access variable R|<local>/a|"];
69 [label="Const: Null(null)"];
70 [label="Operator =="];
71 [label="Exit left part of &&"];
72 [label="Enter right part of &&"];
73 [label="Function call: R|java/lang/Exception.Exception|()"];
74 [label="Throw: throw R|java/lang/Exception.Exception|()"];
75 [label="Stub" style="filled" fillcolor=gray];
76 [label="Exit &&"];
}
77 [label="Exit when branch condition"];
}
72 [label="Exit when branch condition"];
78 [label="Synthetic else branch"];
79 [label="Enter when branch result"];
subgraph cluster_19 {
color=blue
80 [label="Enter block"];
81 [label="Access variable R|<local>/a|"];
82 [label="Function call: R|<local>/a|.R|/A.foo|()"];
83 [label="Exit block"];
}
84 [label="Exit when branch result"];
85 [label="Exit when"];
}
79 [label="Synthetic else branch"];
73 [label="Enter when branch result"];
subgraph cluster_15 {
color=blue
74 [label="Enter block"];
75 [label="Access variable R|<local>/a|"];
76 [label="Function call: R|<local>/a|.R|/A.foo|()"];
77 [label="Exit block"];
}
78 [label="Exit when branch result"];
60 [label="Exit when"];
86 [label="Access variable R|<local>/a|"];
87 [label="Function call: R|<local>/a|.R|/A.foo|()"];
88 [label="Exit block"];
}
80 [label="Access variable R|<local>/a|"];
81 [label="Function call: R|<local>/a|.R|/A.foo|()"];
58 [label="Exit function test_4" style="filled" fillcolor=red];
89 [label="Exit function test_4" style="filled" fillcolor=red];
}
57 -> {59};
59 -> {61};
60 -> {80};
61 -> {63};
62 -> {72};
63 -> {64};
64 -> {65};
65 -> {66};
66 -> {67};
67 -> {62 68};
67 -> {68};
68 -> {69};
69 -> {70};
70 -> {58};
70 -> {71} [style=dotted];
71 -> {62} [style=dotted];
72 -> {73 79};
70 -> {71};
71 -> {76 72};
72 -> {73};
73 -> {74};
74 -> {75};
75 -> {76};
74 -> {89};
74 -> {75} [style=dotted];
75 -> {76} [style=dotted];
76 -> {77};
77 -> {78};
78 -> {60};
79 -> {60};
77 -> {79 78};
78 -> {85};
79 -> {80};
80 -> {81};
81 -> {58};
subgraph cluster_16 {
color=red
82 [label="Enter function test_5" style="filled" fillcolor=red];
subgraph cluster_17 {
color=blue
85 [label="Enter ||"];
86 [label="Access variable R|<local>/a|"];
87 [label="Const: Null(null)"];
88 [label="Operator =="];
89 [label="Exit left part of ||"];
90 [label="Enter right part of ||"];
91 [label="Function call: R|java/lang/Exception.Exception|()"];
92 [label="Throw: throw R|java/lang/Exception.Exception|()"];
93 [label="Stub" style="filled" fillcolor=gray];
84 [label="Exit ||"];
}
94 [label="Access variable R|<local>/a|"];
95 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
83 [label="Exit function test_5" style="filled" fillcolor=red];
}
82 -> {85};
84 -> {94};
81 -> {82};
82 -> {83};
83 -> {84};
84 -> {85};
85 -> {86};
86 -> {87};
87 -> {88};
88 -> {89};
89 -> {84 90};
90 -> {91};
91 -> {92};
92 -> {83};
92 -> {93} [style=dotted];
93 -> {84} [style=dotted];
94 -> {95};
95 -> {83};
subgraph cluster_18 {
color=red
96 [label="Enter function teat_6" style="filled" fillcolor=red];
subgraph cluster_19 {
color=blue
99 [label="Enter &&"];
100 [label="Access variable R|<local>/a|"];
101 [label="Const: Null(null)"];
102 [label="Operator !="];
103 [label="Exit left part of &&"];
104 [label="Enter right part of &&"];
105 [label="Function call: R|java/lang/Exception.Exception|()"];
106 [label="Throw: throw R|java/lang/Exception.Exception|()"];
107 [label="Stub" style="filled" fillcolor=gray];
98 [label="Exit &&"];
}
108 [label="Access variable R|<local>/a|"];
109 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
97 [label="Exit function teat_6" style="filled" fillcolor=red];
}
96 -> {99};
98 -> {108};
99 -> {100};
100 -> {101};
101 -> {102};
102 -> {103};
103 -> {98 104};
104 -> {105};
105 -> {106};
106 -> {97};
106 -> {107} [style=dotted];
107 -> {98} [style=dotted];
108 -> {109};
109 -> {97};
subgraph cluster_20 {
color=red
110 [label="Enter function test_7" style="filled" fillcolor=red];
90 [label="Enter function test_5" style="filled" fillcolor=red];
subgraph cluster_21 {
color=blue
112 [label="Enter when"];
91 [label="Enter block"];
subgraph cluster_22 {
color=blue
114 [label="Enter when branch condition "];
subgraph cluster_23 {
color=blue
116 [label="Enter ||"];
117 [label="Access variable R|<local>/a|"];
118 [label="Const: Null(null)"];
119 [label="Operator =="];
120 [label="Exit left part of ||"];
121 [label="Enter right part of ||"];
122 [label="Function call: R|java/lang/Exception.Exception|()"];
123 [label="Throw: throw R|java/lang/Exception.Exception|()"];
124 [label="Stub" style="filled" fillcolor=gray];
115 [label="Exit ||"];
}
125 [label="Exit when branch condition"];
92 [label="Enter ||"];
93 [label="Access variable R|<local>/a|"];
94 [label="Const: Null(null)"];
95 [label="Operator =="];
96 [label="Exit left part of ||"];
97 [label="Enter right part of ||"];
98 [label="Function call: R|java/lang/Exception.Exception|()"];
99 [label="Throw: throw R|java/lang/Exception.Exception|()"];
100 [label="Stub" style="filled" fillcolor=gray];
101 [label="Exit ||"];
}
132 [label="Synthetic else branch"];
126 [label="Enter when branch result"];
subgraph cluster_24 {
color=blue
127 [label="Enter block"];
128 [label="Access variable R|<local>/a|"];
129 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
130 [label="Exit block"];
}
131 [label="Exit when branch result"];
113 [label="Exit when"];
102 [label="Access variable R|<local>/a|"];
103 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
104 [label="Exit block"];
}
133 [label="Access variable R|<local>/a|"];
134 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
111 [label="Exit function test_7" style="filled" fillcolor=red];
105 [label="Exit function test_5" style="filled" fillcolor=red];
}
110 -> {112};
112 -> {114};
113 -> {133};
114 -> {116};
115 -> {125};
116 -> {117};
90 -> {91};
91 -> {92};
92 -> {93};
93 -> {94};
94 -> {95};
95 -> {96};
96 -> {101 97};
97 -> {98};
98 -> {99};
99 -> {105};
99 -> {100} [style=dotted];
100 -> {101} [style=dotted];
101 -> {102};
102 -> {103};
103 -> {104};
104 -> {105};
subgraph cluster_23 {
color=red
106 [label="Enter function teat_6" style="filled" fillcolor=red];
subgraph cluster_24 {
color=blue
107 [label="Enter block"];
subgraph cluster_25 {
color=blue
108 [label="Enter &&"];
109 [label="Access variable R|<local>/a|"];
110 [label="Const: Null(null)"];
111 [label="Operator !="];
112 [label="Exit left part of &&"];
113 [label="Enter right part of &&"];
114 [label="Function call: R|java/lang/Exception.Exception|()"];
115 [label="Throw: throw R|java/lang/Exception.Exception|()"];
116 [label="Stub" style="filled" fillcolor=gray];
117 [label="Exit &&"];
}
118 [label="Access variable R|<local>/a|"];
119 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
120 [label="Exit block"];
}
121 [label="Exit function teat_6" style="filled" fillcolor=red];
}
106 -> {107};
107 -> {108};
108 -> {109};
109 -> {110};
110 -> {111};
111 -> {112};
112 -> {117 113};
113 -> {114};
114 -> {115};
115 -> {121};
115 -> {116} [style=dotted];
116 -> {117} [style=dotted];
117 -> {118};
118 -> {119};
119 -> {120};
120 -> {115 121};
121 -> {122};
120 -> {121};
subgraph cluster_26 {
color=red
122 [label="Enter function test_7" style="filled" fillcolor=red];
subgraph cluster_27 {
color=blue
123 [label="Enter block"];
subgraph cluster_28 {
color=blue
124 [label="Enter when"];
subgraph cluster_29 {
color=blue
125 [label="Enter when branch condition "];
subgraph cluster_30 {
color=blue
126 [label="Enter ||"];
127 [label="Access variable R|<local>/a|"];
128 [label="Const: Null(null)"];
129 [label="Operator =="];
130 [label="Exit left part of ||"];
131 [label="Enter right part of ||"];
132 [label="Function call: R|java/lang/Exception.Exception|()"];
133 [label="Throw: throw R|java/lang/Exception.Exception|()"];
134 [label="Stub" style="filled" fillcolor=gray];
135 [label="Exit ||"];
}
136 [label="Exit when branch condition"];
}
137 [label="Synthetic else branch"];
138 [label="Enter when branch result"];
subgraph cluster_31 {
color=blue
139 [label="Enter block"];
140 [label="Access variable R|<local>/a|"];
141 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
142 [label="Exit block"];
}
143 [label="Exit when branch result"];
144 [label="Exit when"];
}
145 [label="Access variable R|<local>/a|"];
146 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
147 [label="Exit block"];
}
148 [label="Exit function test_7" style="filled" fillcolor=red];
}
122 -> {123};
123 -> {111};
123 -> {124} [style=dotted];
124 -> {115} [style=dotted];
125 -> {126 132};
123 -> {124};
124 -> {125};
125 -> {126};
126 -> {127};
127 -> {128};
128 -> {129};
129 -> {130};
130 -> {131};
131 -> {113};
132 -> {113};
133 -> {134};
134 -> {111};
subgraph cluster_25 {
color=red
135 [label="Enter function test_8" style="filled" fillcolor=red];
subgraph cluster_26 {
color=blue
137 [label="Enter when"];
subgraph cluster_27 {
color=blue
139 [label="Enter when branch condition "];
subgraph cluster_28 {
color=blue
141 [label="Enter &&"];
142 [label="Access variable R|<local>/a|"];
143 [label="Const: Null(null)"];
144 [label="Operator !="];
145 [label="Exit left part of &&"];
146 [label="Enter right part of &&"];
147 [label="Function call: R|java/lang/Exception.Exception|()"];
148 [label="Throw: throw R|java/lang/Exception.Exception|()"];
149 [label="Stub" style="filled" fillcolor=gray];
140 [label="Exit &&"];
}
150 [label="Exit when branch condition"];
}
157 [label="Synthetic else branch"];
151 [label="Enter when branch result"];
subgraph cluster_29 {
color=blue
152 [label="Enter block"];
153 [label="Access variable R|<local>/a|"];
154 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
155 [label="Exit block"];
}
156 [label="Exit when branch result"];
138 [label="Exit when"];
}
158 [label="Access variable R|<local>/a|"];
159 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
136 [label="Exit function test_8" style="filled" fillcolor=red];
}
135 -> {137};
137 -> {139};
138 -> {158};
139 -> {141};
140 -> {150};
130 -> {135 131};
131 -> {132};
132 -> {133};
133 -> {148};
133 -> {134} [style=dotted];
134 -> {135} [style=dotted];
135 -> {136};
136 -> {138 137};
137 -> {144};
138 -> {139};
139 -> {140};
140 -> {141};
141 -> {142};
142 -> {143};
143 -> {144};
144 -> {145};
145 -> {140 146};
145 -> {146};
146 -> {147};
147 -> {148};
148 -> {136};
148 -> {149} [style=dotted];
149 -> {140} [style=dotted];
150 -> {151 157};
subgraph cluster_32 {
color=red
149 [label="Enter function test_8" style="filled" fillcolor=red];
subgraph cluster_33 {
color=blue
150 [label="Enter block"];
subgraph cluster_34 {
color=blue
151 [label="Enter when"];
subgraph cluster_35 {
color=blue
152 [label="Enter when branch condition "];
subgraph cluster_36 {
color=blue
153 [label="Enter &&"];
154 [label="Access variable R|<local>/a|"];
155 [label="Const: Null(null)"];
156 [label="Operator !="];
157 [label="Exit left part of &&"];
158 [label="Enter right part of &&"];
159 [label="Function call: R|java/lang/Exception.Exception|()"];
160 [label="Throw: throw R|java/lang/Exception.Exception|()"];
161 [label="Stub" style="filled" fillcolor=gray];
162 [label="Exit &&"];
}
163 [label="Exit when branch condition"];
}
164 [label="Synthetic else branch"];
165 [label="Enter when branch result"];
subgraph cluster_37 {
color=blue
166 [label="Enter block"];
167 [label="Access variable R|<local>/a|"];
168 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
169 [label="Exit block"];
}
170 [label="Exit when branch result"];
171 [label="Exit when"];
}
172 [label="Access variable R|<local>/a|"];
173 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
174 [label="Exit block"];
}
175 [label="Exit function test_8" style="filled" fillcolor=red];
}
149 -> {150};
150 -> {151};
151 -> {152};
152 -> {153};
153 -> {154};
154 -> {155};
155 -> {156};
156 -> {138};
157 -> {138};
156 -> {157};
157 -> {162 158};
158 -> {159};
159 -> {136};
159 -> {160};
160 -> {175};
160 -> {161} [style=dotted];
161 -> {162} [style=dotted];
162 -> {163};
163 -> {165 164};
164 -> {171};
165 -> {166};
166 -> {167};
167 -> {168};
168 -> {169};
169 -> {170};
170 -> {171};
171 -> {172};
172 -> {173};
173 -> {174};
174 -> {175};
}

View File

@@ -5,72 +5,78 @@ digraph boundSmartcasts_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function foo" style="filled" fillcolor=red];
1 [label="Exit function foo" style="filled" fillcolor=red];
0 [label="Enter class A" style="filled" fillcolor=red];
1 [label="Exit class A" style="filled" fillcolor=red];
}
0 -> {1};
0 -> {1} [color=green];
subgraph cluster_1 {
color=red
2 [label="Enter class A" style="filled" fillcolor=red];
3 [label="Exit class A" style="filled" fillcolor=red];
2 [label="Enter function foo" style="filled" fillcolor=red];
3 [label="Exit function foo" style="filled" fillcolor=red];
}
2 -> {3} [color=green];
2 -> {3};
subgraph cluster_2 {
color=red
4 [label="Enter function bar" style="filled" fillcolor=red];
5 [label="Exit function bar" style="filled" fillcolor=red];
4 [label="Enter class B" style="filled" fillcolor=red];
5 [label="Exit class B" style="filled" fillcolor=red];
}
4 -> {5};
4 -> {5} [color=green];
subgraph cluster_3 {
color=red
6 [label="Enter class B" style="filled" fillcolor=red];
7 [label="Exit class B" style="filled" fillcolor=red];
6 [label="Enter function bar" style="filled" fillcolor=red];
7 [label="Exit function bar" style="filled" fillcolor=red];
}
6 -> {7} [color=green];
6 -> {7};
subgraph cluster_4 {
color=red
8 [label="Enter function test_1" style="filled" fillcolor=red];
10 [label="Access variable R|<local>/x|"];
11 [label="Variable declaration: lval y: R|kotlin/Any|"];
subgraph cluster_5 {
color=blue
12 [label="Enter when"];
9 [label="Enter block"];
10 [label="Access variable R|<local>/x|"];
11 [label="Variable declaration: lval y: R|kotlin/Any|"];
subgraph cluster_6 {
color=blue
14 [label="Enter when branch condition "];
15 [label="Access variable R|<local>/x|"];
16 [label="Type operator: (R|<local>/x| is R|A|)"];
17 [label="Exit when branch condition"];
12 [label="Enter when"];
subgraph cluster_7 {
color=blue
13 [label="Enter when branch condition "];
14 [label="Access variable R|<local>/x|"];
15 [label="Type operator: (R|<local>/x| is R|A|)"];
16 [label="Exit when branch condition"];
}
17 [label="Synthetic else branch"];
18 [label="Enter when branch result"];
subgraph cluster_8 {
color=blue
19 [label="Enter block"];
20 [label="Access variable R|<local>/x|"];
21 [label="Function call: R|<local>/x|.R|/A.foo|()"];
22 [label="Access variable R|<local>/y|"];
23 [label="Function call: R|<local>/y|.R|/A.foo|()"];
24 [label="Exit block"];
}
25 [label="Exit when branch result"];
26 [label="Exit when"];
}
26 [label="Synthetic else branch"];
18 [label="Enter when branch result"];
subgraph cluster_7 {
color=blue
19 [label="Enter block"];
20 [label="Access variable R|<local>/x|"];
21 [label="Function call: R|<local>/x|.R|/A.foo|()"];
22 [label="Access variable R|<local>/y|"];
23 [label="Function call: R|<local>/y|.R|/A.foo|()"];
24 [label="Exit block"];
}
25 [label="Exit when branch result"];
13 [label="Exit when"];
27 [label="Exit block"];
}
9 [label="Exit function test_1" style="filled" fillcolor=red];
28 [label="Exit function test_1" style="filled" fillcolor=red];
}
8 -> {10};
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {12};
12 -> {14};
13 -> {9};
12 -> {13};
13 -> {14};
14 -> {15};
15 -> {16};
16 -> {17};
17 -> {18 26};
16 -> {18 17};
17 -> {26};
18 -> {19};
19 -> {20};
20 -> {21};
@@ -78,358 +84,366 @@ digraph boundSmartcasts_kt {
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {13};
26 -> {13};
25 -> {26};
26 -> {27};
27 -> {28};
subgraph cluster_8 {
subgraph cluster_9 {
color=red
27 [label="Enter function test_2" style="filled" fillcolor=red];
29 [label="Access variable R|<local>/x|"];
30 [label="Variable declaration: lval y: R|kotlin/Any|"];
subgraph cluster_9 {
29 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_10 {
color=blue
31 [label="Enter when"];
subgraph cluster_10 {
color=blue
33 [label="Enter when branch condition "];
34 [label="Access variable R|<local>/y|"];
35 [label="Type operator: (R|<local>/y| is R|A|)"];
36 [label="Exit when branch condition"];
}
45 [label="Synthetic else branch"];
37 [label="Enter when branch result"];
30 [label="Enter block"];
31 [label="Access variable R|<local>/x|"];
32 [label="Variable declaration: lval y: R|kotlin/Any|"];
subgraph cluster_11 {
color=blue
38 [label="Enter block"];
39 [label="Access variable R|<local>/x|"];
40 [label="Function call: R|<local>/x|.R|/A.foo|()"];
41 [label="Access variable R|<local>/y|"];
42 [label="Function call: R|<local>/y|.R|/A.foo|()"];
43 [label="Exit block"];
33 [label="Enter when"];
subgraph cluster_12 {
color=blue
34 [label="Enter when branch condition "];
35 [label="Access variable R|<local>/y|"];
36 [label="Type operator: (R|<local>/y| is R|A|)"];
37 [label="Exit when branch condition"];
}
38 [label="Synthetic else branch"];
39 [label="Enter when branch result"];
subgraph cluster_13 {
color=blue
40 [label="Enter block"];
41 [label="Access variable R|<local>/x|"];
42 [label="Function call: R|<local>/x|.R|/A.foo|()"];
43 [label="Access variable R|<local>/y|"];
44 [label="Function call: R|<local>/y|.R|/A.foo|()"];
45 [label="Exit block"];
}
46 [label="Exit when branch result"];
47 [label="Exit when"];
}
44 [label="Exit when branch result"];
32 [label="Exit when"];
48 [label="Exit block"];
}
28 [label="Exit function test_2" style="filled" fillcolor=red];
49 [label="Exit function test_2" style="filled" fillcolor=red];
}
27 -> {29};
29 -> {30};
30 -> {31};
31 -> {33};
32 -> {28};
31 -> {32};
32 -> {33};
33 -> {34};
34 -> {35};
35 -> {36};
36 -> {37 45};
37 -> {38};
38 -> {39};
36 -> {37};
37 -> {39 38};
38 -> {47};
39 -> {40};
40 -> {41};
41 -> {42};
42 -> {43};
43 -> {44};
44 -> {32};
45 -> {32};
subgraph cluster_12 {
color=red
46 [label="Enter function test_3" style="filled" fillcolor=red];
48 [label="Access variable R|<local>/x|"];
49 [label="Variable declaration: lvar z: R|kotlin/Any|"];
subgraph cluster_13 {
color=blue
50 [label="Enter when"];
subgraph cluster_14 {
color=blue
52 [label="Enter when branch condition "];
53 [label="Access variable R|<local>/x|"];
54 [label="Type operator: (R|<local>/x| is R|A|)"];
55 [label="Exit when branch condition"];
}
62 [label="Synthetic else branch"];
56 [label="Enter when branch result"];
subgraph cluster_15 {
color=blue
57 [label="Enter block"];
58 [label="Access variable R|<local>/z|"];
59 [label="Function call: R|<local>/z|.R|/A.foo|()"];
60 [label="Exit block"];
}
61 [label="Exit when branch result"];
51 [label="Exit when"];
}
63 [label="Access variable R|<local>/y|"];
64 [label="Assignment: R|<local>/z|"];
subgraph cluster_16 {
color=blue
65 [label="Enter when"];
subgraph cluster_17 {
color=blue
67 [label="Enter when branch condition "];
68 [label="Access variable R|<local>/y|"];
69 [label="Type operator: (R|<local>/y| is R|B|)"];
70 [label="Exit when branch condition"];
}
79 [label="Synthetic else branch"];
71 [label="Enter when branch result"];
subgraph cluster_18 {
color=blue
72 [label="Enter block"];
73 [label="Access variable R|<local>/z|"];
74 [label="Function call: R|<local>/z|.<Unresolved name: foo>#()"];
75 [label="Access variable R|<local>/z|"];
76 [label="Function call: R|<local>/z|.R|/B.bar|()"];
77 [label="Exit block"];
}
78 [label="Exit when branch result"];
66 [label="Exit when"];
}
47 [label="Exit function test_3" style="filled" fillcolor=red];
}
46 -> {48};
44 -> {45};
45 -> {46};
46 -> {47};
47 -> {48};
48 -> {49};
49 -> {50};
50 -> {52};
51 -> {63};
subgraph cluster_14 {
color=red
50 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_15 {
color=blue
51 [label="Enter block"];
52 [label="Access variable R|<local>/x|"];
53 [label="Variable declaration: lvar z: R|kotlin/Any|"];
subgraph cluster_16 {
color=blue
54 [label="Enter when"];
subgraph cluster_17 {
color=blue
55 [label="Enter when branch condition "];
56 [label="Access variable R|<local>/x|"];
57 [label="Type operator: (R|<local>/x| is R|A|)"];
58 [label="Exit when branch condition"];
}
59 [label="Synthetic else branch"];
60 [label="Enter when branch result"];
subgraph cluster_18 {
color=blue
61 [label="Enter block"];
62 [label="Access variable R|<local>/z|"];
63 [label="Function call: R|<local>/z|.R|/A.foo|()"];
64 [label="Exit block"];
}
65 [label="Exit when branch result"];
66 [label="Exit when"];
}
67 [label="Access variable R|<local>/y|"];
68 [label="Assignment: R|<local>/z|"];
subgraph cluster_19 {
color=blue
69 [label="Enter when"];
subgraph cluster_20 {
color=blue
70 [label="Enter when branch condition "];
71 [label="Access variable R|<local>/y|"];
72 [label="Type operator: (R|<local>/y| is R|B|)"];
73 [label="Exit when branch condition"];
}
74 [label="Synthetic else branch"];
75 [label="Enter when branch result"];
subgraph cluster_21 {
color=blue
76 [label="Enter block"];
77 [label="Access variable R|<local>/z|"];
78 [label="Function call: R|<local>/z|.<Unresolved name: foo>#()"];
79 [label="Access variable R|<local>/z|"];
80 [label="Function call: R|<local>/z|.R|/B.bar|()"];
81 [label="Exit block"];
}
82 [label="Exit when branch result"];
83 [label="Exit when"];
}
84 [label="Exit block"];
}
85 [label="Exit function test_3" style="filled" fillcolor=red];
}
50 -> {51};
51 -> {52};
52 -> {53};
53 -> {54};
54 -> {55};
55 -> {56 62};
55 -> {56};
56 -> {57};
57 -> {58};
58 -> {59};
59 -> {60};
58 -> {60 59};
59 -> {66};
60 -> {61};
61 -> {51};
62 -> {51};
61 -> {62};
62 -> {63};
63 -> {64};
64 -> {65};
65 -> {67};
66 -> {47};
65 -> {66};
66 -> {67};
67 -> {68};
68 -> {69};
69 -> {70};
70 -> {71 79};
70 -> {71};
71 -> {72};
72 -> {73};
73 -> {74};
74 -> {75};
73 -> {75 74};
74 -> {83};
75 -> {76};
76 -> {77};
77 -> {78};
78 -> {66};
79 -> {66};
subgraph cluster_19 {
color=red
80 [label="Enter function test_4" style="filled" fillcolor=red];
82 [label="Const: Int(1)"];
83 [label="Variable declaration: lvar x: R|kotlin/Any|"];
84 [label="Access variable R|<local>/x|"];
85 [label="Type operator: (R|<local>/x| as R|kotlin/Int|)"];
86 [label="Access variable R|<local>/x|"];
87 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
88 [label="Access variable R|<local>/y|"];
89 [label="Assignment: R|<local>/x|"];
90 [label="Access variable R|<local>/x|"];
91 [label="Function call: R|<local>/x|.<Unresolved name: inc>#()"];
subgraph cluster_20 {
color=blue
92 [label="Enter when"];
subgraph cluster_21 {
color=blue
94 [label="Enter when branch condition "];
95 [label="Access variable R|<local>/y|"];
96 [label="Type operator: (R|<local>/y| is R|A|)"];
97 [label="Exit when branch condition"];
}
106 [label="Synthetic else branch"];
98 [label="Enter when branch result"];
subgraph cluster_22 {
color=blue
99 [label="Enter block"];
100 [label="Access variable R|<local>/x|"];
101 [label="Function call: R|<local>/x|.R|/A.foo|()"];
102 [label="Access variable R|<local>/y|"];
103 [label="Function call: R|<local>/y|.R|/A.foo|()"];
104 [label="Exit block"];
}
105 [label="Exit when branch result"];
93 [label="Exit when"];
}
81 [label="Exit function test_4" style="filled" fillcolor=red];
}
80 -> {82};
78 -> {79};
79 -> {80};
80 -> {81};
81 -> {82};
82 -> {83};
83 -> {84};
84 -> {85};
85 -> {86};
subgraph cluster_22 {
color=red
86 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_23 {
color=blue
87 [label="Enter block"];
88 [label="Const: Int(1)"];
89 [label="Variable declaration: lvar x: R|kotlin/Any|"];
90 [label="Access variable R|<local>/x|"];
91 [label="Type operator: (R|<local>/x| as R|kotlin/Int|)"];
92 [label="Access variable R|<local>/x|"];
93 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
94 [label="Access variable R|<local>/y|"];
95 [label="Assignment: R|<local>/x|"];
96 [label="Access variable R|<local>/x|"];
97 [label="Function call: R|<local>/x|.<Unresolved name: inc>#()"];
subgraph cluster_24 {
color=blue
98 [label="Enter when"];
subgraph cluster_25 {
color=blue
99 [label="Enter when branch condition "];
100 [label="Access variable R|<local>/y|"];
101 [label="Type operator: (R|<local>/y| is R|A|)"];
102 [label="Exit when branch condition"];
}
103 [label="Synthetic else branch"];
104 [label="Enter when branch result"];
subgraph cluster_26 {
color=blue
105 [label="Enter block"];
106 [label="Access variable R|<local>/x|"];
107 [label="Function call: R|<local>/x|.R|/A.foo|()"];
108 [label="Access variable R|<local>/y|"];
109 [label="Function call: R|<local>/y|.R|/A.foo|()"];
110 [label="Exit block"];
}
111 [label="Exit when branch result"];
112 [label="Exit when"];
}
113 [label="Exit block"];
}
114 [label="Exit function test_4" style="filled" fillcolor=red];
}
86 -> {87};
87 -> {88};
88 -> {89};
89 -> {90};
90 -> {91};
91 -> {92};
92 -> {94};
93 -> {81};
92 -> {93};
93 -> {94};
94 -> {95};
95 -> {96};
96 -> {97};
97 -> {98 106};
97 -> {98};
98 -> {99};
99 -> {100};
100 -> {101};
101 -> {102};
102 -> {103};
103 -> {104};
102 -> {104 103};
103 -> {112};
104 -> {105};
105 -> {93};
106 -> {93};
subgraph cluster_23 {
color=red
107 [label="Enter function <init>" style="filled" fillcolor=red];
109 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
108 [label="Exit function <init>" style="filled" fillcolor=red];
}
107 -> {109};
109 -> {108};
subgraph cluster_24 {
color=red
115 [label="Enter class D" style="filled" fillcolor=red];
subgraph cluster_25 {
color=blue
110 [label="Enter function getter" style="filled" fillcolor=red];
111 [label="Exit function getter" style="filled" fillcolor=red];
}
subgraph cluster_26 {
color=blue
112 [label="Enter property" style="filled" fillcolor=red];
114 [label="Access variable R|<local>/any|"];
113 [label="Exit property" style="filled" fillcolor=red];
}
116 [label="Exit class D" style="filled" fillcolor=red];
}
115 -> {112} [color=green];
112 -> {114};
113 -> {116} [color=green];
114 -> {113};
105 -> {106};
106 -> {107};
107 -> {108};
108 -> {109};
109 -> {110};
110 -> {111};
111 -> {112};
112 -> {113};
113 -> {114};
subgraph cluster_27 {
color=red
117 [label="Enter function baz" style="filled" fillcolor=red];
118 [label="Exit function baz" style="filled" fillcolor=red];
}
117 -> {118};
subgraph cluster_28 {
color=red
119 [label="Enter function test_5" style="filled" fillcolor=red];
subgraph cluster_29 {
115 [label="Enter class D" style="filled" fillcolor=red];
subgraph cluster_28 {
color=blue
121 [label="Enter when"];
123 [label="Access variable R|<local>/d|"];
124 [label="Access variable R|/D.any|"];
125 [label="Variable declaration: lval <elvis>: R|kotlin/Any?|"];
subgraph cluster_30 {
color=blue
126 [label="Enter when branch condition "];
127 [label="Const: Null(null)"];
128 [label="Operator =="];
129 [label="Exit when branch condition"];
}
subgraph cluster_31 {
color=blue
136 [label="Enter when branch condition else"];
137 [label="Exit when branch condition"];
}
138 [label="Enter when branch result"];
subgraph cluster_32 {
color=blue
139 [label="Enter block"];
140 [label="Access variable R|<local>/<elvis>|"];
141 [label="Exit block"];
}
142 [label="Exit when branch result"];
130 [label="Enter when branch result"];
subgraph cluster_33 {
color=blue
131 [label="Enter block"];
132 [label="Jump: ^test_5 Unit"];
133 [label="Stub" style="filled" fillcolor=gray];
134 [label="Exit block" style="filled" fillcolor=gray];
}
135 [label="Exit when branch result" style="filled" fillcolor=gray];
122 [label="Exit when"];
117 [label="Enter property" style="filled" fillcolor=red];
118 [label="Access variable R|<local>/any|"];
119 [label="Exit property" style="filled" fillcolor=red];
}
143 [label="Variable declaration: lval a: R|kotlin/Any|"];
144 [label="Access variable R|<local>/a|"];
145 [label="Function call: R|<local>/a|.R|/baz|()"];
146 [label="Access variable R|<local>/d|"];
147 [label="Access variable R|/D.any|"];
148 [label="Function call: R|<local>/d|.R|/D.any|.R|/baz|()"];
149 [label="Access variable R|<local>/a|"];
150 [label="Type operator: (R|<local>/a| as R|A|)"];
151 [label="Access variable R|<local>/a|"];
152 [label="Function call: R|<local>/a|.R|/A.foo|()"];
120 [label="Exit function test_5" style="filled" fillcolor=red];
116 [label="Exit class D" style="filled" fillcolor=red];
}
115 -> {117} [color=green];
117 -> {118};
118 -> {119};
119 -> {116} [color=green];
subgraph cluster_29 {
color=red
120 [label="Enter function <init>" style="filled" fillcolor=red];
121 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
122 [label="Exit function <init>" style="filled" fillcolor=red];
}
120 -> {121};
121 -> {122};
subgraph cluster_30 {
color=red
123 [label="Enter function getter" style="filled" fillcolor=red];
124 [label="Exit function getter" style="filled" fillcolor=red];
}
119 -> {121};
121 -> {123};
122 -> {143};
123 -> {124};
124 -> {125};
subgraph cluster_31 {
color=red
125 [label="Enter function baz" style="filled" fillcolor=red];
subgraph cluster_32 {
color=blue
126 [label="Enter block"];
127 [label="Exit block"];
}
128 [label="Exit function baz" style="filled" fillcolor=red];
}
125 -> {126};
126 -> {127};
127 -> {128};
128 -> {129};
129 -> {130 136};
subgraph cluster_33 {
color=red
129 [label="Enter function test_5" style="filled" fillcolor=red];
subgraph cluster_34 {
color=blue
130 [label="Enter block"];
subgraph cluster_35 {
color=blue
131 [label="Enter when"];
132 [label="Access variable R|<local>/d|"];
133 [label="Access variable R|/D.any|"];
134 [label="Variable declaration: lval <elvis>: R|kotlin/Any?|"];
subgraph cluster_36 {
color=blue
135 [label="Enter when branch condition "];
136 [label="Const: Null(null)"];
137 [label="Operator =="];
138 [label="Exit when branch condition"];
}
subgraph cluster_37 {
color=blue
139 [label="Enter when branch condition else"];
140 [label="Exit when branch condition"];
}
141 [label="Enter when branch result"];
subgraph cluster_38 {
color=blue
142 [label="Enter block"];
143 [label="Access variable R|<local>/<elvis>|"];
144 [label="Exit block"];
}
145 [label="Exit when branch result"];
146 [label="Enter when branch result"];
subgraph cluster_39 {
color=blue
147 [label="Enter block"];
148 [label="Jump: ^test_5 Unit"];
149 [label="Stub" style="filled" fillcolor=gray];
150 [label="Exit block" style="filled" fillcolor=gray];
}
151 [label="Exit when branch result" style="filled" fillcolor=gray];
152 [label="Exit when"];
}
153 [label="Variable declaration: lval a: R|kotlin/Any|"];
154 [label="Access variable R|<local>/a|"];
155 [label="Function call: R|<local>/a|.R|/baz|()"];
156 [label="Access variable R|<local>/d|"];
157 [label="Access variable R|/D.any|"];
158 [label="Function call: R|<local>/d|.R|/D.any|.R|/baz|()"];
159 [label="Access variable R|<local>/a|"];
160 [label="Type operator: (R|<local>/a| as R|A|)"];
161 [label="Access variable R|<local>/a|"];
162 [label="Function call: R|<local>/a|.R|/A.foo|()"];
163 [label="Exit block"];
}
164 [label="Exit function test_5" style="filled" fillcolor=red];
}
129 -> {130};
130 -> {131};
131 -> {132};
132 -> {120};
132 -> {133} [style=dotted];
133 -> {134} [style=dotted];
134 -> {135} [style=dotted];
135 -> {122} [style=dotted];
132 -> {133};
133 -> {134};
134 -> {135};
135 -> {136};
136 -> {137};
137 -> {138};
138 -> {139};
138 -> {146 139};
139 -> {140};
140 -> {141};
141 -> {142};
142 -> {122};
142 -> {143};
143 -> {144};
144 -> {145};
145 -> {146};
145 -> {152};
146 -> {147};
147 -> {148};
148 -> {149};
149 -> {150};
150 -> {151};
151 -> {152};
152 -> {120};
subgraph cluster_34 {
color=red
153 [label="Enter function test_6" style="filled" fillcolor=red];
155 [label="Access variable R|<local>/d1|"];
156 [label="Access variable R|/D.any|"];
157 [label="Variable declaration: lval a: R|kotlin/Any?|"];
158 [label="Access variable R|<local>/a|"];
159 [label="Type operator: (R|<local>/a| as R|A|)"];
160 [label="Access variable R|<local>/a|"];
161 [label="Function call: R|<local>/a|.R|/A.foo|()"];
162 [label="Access variable R|<local>/d1|"];
163 [label="Access variable R|/D.any|"];
164 [label="Function call: R|<local>/d1|.R|/D.any|.R|/A.foo|()"];
165 [label="Access variable R|<local>/d1|"];
166 [label="Access variable R|/D.any|"];
167 [label="Function call: R|<local>/d1|.R|/D.any|.R|/baz|()"];
154 [label="Exit function test_6" style="filled" fillcolor=red];
}
153 -> {155};
148 -> {164};
148 -> {149} [style=dotted];
149 -> {150} [style=dotted];
150 -> {151} [style=dotted];
151 -> {152} [style=dotted];
152 -> {153};
153 -> {154};
154 -> {155};
155 -> {156};
156 -> {157};
157 -> {158};
@@ -439,52 +453,95 @@ digraph boundSmartcasts_kt {
161 -> {162};
162 -> {163};
163 -> {164};
164 -> {165};
subgraph cluster_40 {
color=red
165 [label="Enter function test_6" style="filled" fillcolor=red];
subgraph cluster_41 {
color=blue
166 [label="Enter block"];
167 [label="Access variable R|<local>/d1|"];
168 [label="Access variable R|/D.any|"];
169 [label="Variable declaration: lval a: R|kotlin/Any?|"];
170 [label="Access variable R|<local>/a|"];
171 [label="Type operator: (R|<local>/a| as R|A|)"];
172 [label="Access variable R|<local>/a|"];
173 [label="Function call: R|<local>/a|.R|/A.foo|()"];
174 [label="Access variable R|<local>/d1|"];
175 [label="Access variable R|/D.any|"];
176 [label="Function call: R|<local>/d1|.R|/D.any|.R|/A.foo|()"];
177 [label="Access variable R|<local>/d1|"];
178 [label="Access variable R|/D.any|"];
179 [label="Function call: R|<local>/d1|.R|/D.any|.R|/baz|()"];
180 [label="Exit block"];
}
181 [label="Exit function test_6" style="filled" fillcolor=red];
}
165 -> {166};
166 -> {167};
167 -> {154};
subgraph cluster_35 {
color=red
168 [label="Enter function test_7" style="filled" fillcolor=red];
170 [label="Access variable R|<local>/d1|"];
171 [label="Enter safe call"];
173 [label="Access variable R|/D.any|"];
172 [label="Exit safe call"];
174 [label="Variable declaration: lval a: R|kotlin/Any?|"];
175 [label="Access variable R|<local>/d2|"];
176 [label="Enter safe call"];
178 [label="Access variable R|/D.any|"];
177 [label="Exit safe call"];
179 [label="Variable declaration: lval b: R|kotlin/Any?|"];
180 [label="Access variable R|<local>/a|"];
181 [label="Type operator: (R|<local>/a| as R|A|)"];
182 [label="Access variable R|<local>/a|"];
183 [label="Function call: R|<local>/a|.R|/A.foo|()"];
184 [label="Access variable R|<local>/b|"];
185 [label="Type operator: (R|<local>/b| as R|B|)"];
186 [label="Access variable R|<local>/b|"];
187 [label="Function call: R|<local>/b|.R|/B.bar|()"];
169 [label="Exit function test_7" style="filled" fillcolor=red];
}
168 -> {170};
170 -> {171 172};
171 -> {173};
172 -> {174};
173 -> {172};
167 -> {168};
168 -> {169};
169 -> {170};
170 -> {171};
171 -> {172};
172 -> {173};
173 -> {174};
174 -> {175};
175 -> {176 177};
176 -> {178};
177 -> {179};
178 -> {177};
175 -> {176};
176 -> {177};
177 -> {178};
178 -> {179};
179 -> {180};
180 -> {181};
181 -> {182};
subgraph cluster_42 {
color=red
182 [label="Enter function test_7" style="filled" fillcolor=red];
subgraph cluster_43 {
color=blue
183 [label="Enter block"];
184 [label="Access variable R|<local>/d1|"];
185 [label="Enter safe call"];
186 [label="Access variable R|/D.any|"];
187 [label="Exit safe call"];
188 [label="Variable declaration: lval a: R|kotlin/Any?|"];
189 [label="Access variable R|<local>/d2|"];
190 [label="Enter safe call"];
191 [label="Access variable R|/D.any|"];
192 [label="Exit safe call"];
193 [label="Variable declaration: lval b: R|kotlin/Any?|"];
194 [label="Access variable R|<local>/a|"];
195 [label="Type operator: (R|<local>/a| as R|A|)"];
196 [label="Access variable R|<local>/a|"];
197 [label="Function call: R|<local>/a|.R|/A.foo|()"];
198 [label="Access variable R|<local>/b|"];
199 [label="Type operator: (R|<local>/b| as R|B|)"];
200 [label="Access variable R|<local>/b|"];
201 [label="Function call: R|<local>/b|.R|/B.bar|()"];
202 [label="Exit block"];
}
203 [label="Exit function test_7" style="filled" fillcolor=red];
}
182 -> {183};
183 -> {184};
184 -> {185};
184 -> {185 187};
185 -> {186};
186 -> {187};
187 -> {169};
187 -> {188};
188 -> {189};
189 -> {190 192};
190 -> {191};
191 -> {192};
192 -> {193};
193 -> {194};
194 -> {195};
195 -> {196};
196 -> {197};
197 -> {198};
198 -> {199};
199 -> {200};
200 -> {201};
201 -> {202};
202 -> {203};
}

View File

@@ -5,108 +5,119 @@ digraph functionCallBound_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function <init>" style="filled" fillcolor=red];
2 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
1 [label="Exit function <init>" style="filled" fillcolor=red];
0 [label="Enter class Base" style="filled" fillcolor=red];
1 [label="Exit class Base" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {1};
0 -> {1} [color=green];
subgraph cluster_1 {
color=red
3 [label="Enter class Base" style="filled" fillcolor=red];
4 [label="Exit class Base" style="filled" fillcolor=red];
2 [label="Enter function <init>" style="filled" fillcolor=red];
3 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
4 [label="Exit function <init>" style="filled" fillcolor=red];
}
3 -> {4} [color=green];
2 -> {3};
3 -> {4};
subgraph cluster_2 {
color=red
5 [label="Enter function <init>" style="filled" fillcolor=red];
7 [label="Delegated constructor call: super<R|Base|>()"];
6 [label="Exit function <init>" style="filled" fillcolor=red];
}
5 -> {7};
7 -> {6};
subgraph cluster_3 {
color=red
13 [label="Enter class Sub" style="filled" fillcolor=red];
subgraph cluster_4 {
5 [label="Enter class Sub" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
8 [label="Enter function getter" style="filled" fillcolor=red];
9 [label="Exit function getter" style="filled" fillcolor=red];
7 [label="Enter property" style="filled" fillcolor=red];
8 [label="Access variable R|<local>/data|"];
9 [label="Exit property" style="filled" fillcolor=red];
}
subgraph cluster_5 {
color=blue
10 [label="Enter property" style="filled" fillcolor=red];
12 [label="Access variable R|<local>/data|"];
11 [label="Exit property" style="filled" fillcolor=red];
}
14 [label="Exit class Sub" style="filled" fillcolor=red];
6 [label="Exit class Sub" style="filled" fillcolor=red];
}
13 -> {10} [color=green];
10 -> {12};
11 -> {14} [color=green];
12 -> {11};
5 -> {7} [color=green];
7 -> {8};
8 -> {9};
9 -> {6} [color=green];
subgraph cluster_4 {
color=red
10 [label="Enter function <init>" style="filled" fillcolor=red];
11 [label="Delegated constructor call: super<R|Base|>()"];
12 [label="Exit function <init>" style="filled" fillcolor=red];
}
10 -> {11};
11 -> {12};
subgraph cluster_5 {
color=red
13 [label="Enter function getter" style="filled" fillcolor=red];
14 [label="Exit function getter" style="filled" fillcolor=red];
}
13 -> {14};
subgraph cluster_6 {
color=red
15 [label="Enter function isOk" style="filled" fillcolor=red];
17 [label="Const: Boolean(true)"];
18 [label="Jump: ^isOk Boolean(true)"];
19 [label="Stub" style="filled" fillcolor=gray];
16 [label="Exit function isOk" style="filled" fillcolor=red];
}
15 -> {17};
17 -> {18};
18 -> {16};
18 -> {19} [style=dotted];
19 -> {16} [style=dotted];
subgraph cluster_7 {
color=red
20 [label="Enter function check" style="filled" fillcolor=red];
subgraph cluster_8 {
subgraph cluster_7 {
color=blue
22 [label="Enter when"];
subgraph cluster_9 {
color=blue
24 [label="Enter when branch condition "];
25 [label="Access variable R|<local>/base|"];
26 [label="Type operator: (R|<local>/base| as? R|Sub|)"];
27 [label="Enter safe call"];
29 [label="Function call: $subj$.R|/isOk|()"];
28 [label="Exit safe call"];
30 [label="Const: Boolean(true)"];
31 [label="Operator =="];
32 [label="Exit when branch condition"];
}
16 [label="Enter block"];
17 [label="Const: Boolean(true)"];
18 [label="Jump: ^isOk Boolean(true)"];
19 [label="Stub" style="filled" fillcolor=gray];
20 [label="Exit block" style="filled" fillcolor=gray];
}
21 [label="Exit function isOk" style="filled" fillcolor=red];
}
15 -> {16};
16 -> {17};
17 -> {18};
18 -> {21};
18 -> {19} [style=dotted];
19 -> {20} [style=dotted];
20 -> {21} [style=dotted];
subgraph cluster_8 {
color=red
22 [label="Enter function check" style="filled" fillcolor=red];
subgraph cluster_9 {
color=blue
23 [label="Enter block"];
subgraph cluster_10 {
color=blue
39 [label="Enter when branch condition else"];
40 [label="Exit when branch condition"];
24 [label="Enter when"];
subgraph cluster_11 {
color=blue
25 [label="Enter when branch condition "];
26 [label="Access variable R|<local>/base|"];
27 [label="Type operator: (R|<local>/base| as? R|Sub|)"];
28 [label="Enter safe call"];
29 [label="Function call: $subj$.R|/isOk|()"];
30 [label="Exit safe call"];
31 [label="Const: Boolean(true)"];
32 [label="Operator =="];
33 [label="Exit when branch condition"];
}
subgraph cluster_12 {
color=blue
34 [label="Enter when branch condition else"];
35 [label="Exit when branch condition"];
}
36 [label="Enter when branch result"];
subgraph cluster_13 {
color=blue
37 [label="Enter block"];
38 [label="Access variable R|<local>/base|"];
39 [label="Exit block"];
}
40 [label="Exit when branch result"];
41 [label="Enter when branch result"];
subgraph cluster_14 {
color=blue
42 [label="Enter block"];
43 [label="Access variable R|<local>/base|"];
44 [label="Access variable R|/Sub.data|"];
45 [label="Exit block"];
}
46 [label="Exit when branch result"];
47 [label="Exit when"];
}
41 [label="Enter when branch result"];
subgraph cluster_11 {
color=blue
42 [label="Enter block"];
43 [label="Access variable R|<local>/base|"];
44 [label="Exit block"];
}
45 [label="Exit when branch result"];
33 [label="Enter when branch result"];
subgraph cluster_12 {
color=blue
34 [label="Enter block"];
35 [label="Access variable R|<local>/base|"];
36 [label="Access variable R|/Sub.data|"];
37 [label="Exit block"];
}
38 [label="Exit when branch result"];
23 [label="Exit when"];
}
46 [label="Jump: ^check when () {
48 [label="Jump: ^check when () {
==((R|<local>/base| as? R|Sub|)?.{ $subj$.R|/isOk|() }, Boolean(true)) -> {
R|<local>/base|.R|/Sub.data|
}
@@ -115,36 +126,40 @@ digraph functionCallBound_kt {
}
}
"];
47 [label="Stub" style="filled" fillcolor=gray];
21 [label="Exit function check" style="filled" fillcolor=red];
49 [label="Stub" style="filled" fillcolor=gray];
50 [label="Exit block" style="filled" fillcolor=gray];
}
51 [label="Exit function check" style="filled" fillcolor=red];
}
20 -> {22};
22 -> {24};
23 -> {46};
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {26};
26 -> {27 28};
27 -> {29};
28 -> {30};
29 -> {28};
26 -> {27};
27 -> {28 30};
28 -> {29};
29 -> {30};
30 -> {31};
31 -> {32};
32 -> {33 39};
33 -> {34};
32 -> {33};
33 -> {41 34};
34 -> {35};
35 -> {36};
36 -> {37};
37 -> {38};
38 -> {23};
38 -> {39};
39 -> {40};
40 -> {41};
40 -> {47};
41 -> {42};
42 -> {43};
43 -> {44};
44 -> {45};
45 -> {23};
46 -> {21};
46 -> {47} [style=dotted];
47 -> {21} [style=dotted];
45 -> {46};
46 -> {47};
47 -> {48};
48 -> {51};
48 -> {49} [style=dotted];
49 -> {50} [style=dotted];
50 -> {51} [style=dotted];
}

View File

@@ -6,362 +6,390 @@ digraph casts_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function test_1" style="filled" fillcolor=red];
2 [label="Access variable R|<local>/x|"];
3 [label="Type operator: (R|<local>/x| as R|kotlin/String|)"];
4 [label="Access variable R|<local>/x|"];
5 [label="Access variable R|kotlin/String.length|"];
1 [label="Exit function test_1" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
1 [label="Enter block"];
2 [label="Access variable R|<local>/x|"];
3 [label="Type operator: (R|<local>/x| as R|kotlin/String|)"];
4 [label="Access variable R|<local>/x|"];
5 [label="Access variable R|kotlin/String.length|"];
6 [label="Exit block"];
}
7 [label="Exit function test_1" style="filled" fillcolor=red];
}
0 -> {2};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
4 -> {5};
5 -> {1};
5 -> {6};
6 -> {7};
subgraph cluster_1 {
subgraph cluster_2 {
color=red
6 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_2 {
8 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
8 [label="Enter when"];
subgraph cluster_3 {
color=blue
10 [label="Enter when branch condition "];
11 [label="Access variable R|<local>/x|"];
12 [label="Type operator: (R|<local>/x| as R|kotlin/Boolean|)"];
13 [label="Exit when branch condition"];
}
20 [label="Synthetic else branch"];
14 [label="Enter when branch result"];
9 [label="Enter block"];
subgraph cluster_4 {
color=blue
15 [label="Enter block"];
16 [label="Access variable R|<local>/x|"];
17 [label="Function call: R|<local>/x|.R|kotlin/Boolean.not|()"];
18 [label="Exit block"];
10 [label="Enter when"];
subgraph cluster_5 {
color=blue
11 [label="Enter when branch condition "];
12 [label="Access variable R|<local>/x|"];
13 [label="Type operator: (R|<local>/x| as R|kotlin/Boolean|)"];
14 [label="Exit when branch condition"];
}
15 [label="Synthetic else branch"];
16 [label="Enter when branch result"];
subgraph cluster_6 {
color=blue
17 [label="Enter block"];
18 [label="Access variable R|<local>/x|"];
19 [label="Function call: R|<local>/x|.R|kotlin/Boolean.not|()"];
20 [label="Exit block"];
}
21 [label="Exit when branch result"];
22 [label="Exit when"];
}
19 [label="Exit when branch result"];
9 [label="Exit when"];
23 [label="Access variable R|<local>/x|"];
24 [label="Function call: R|<local>/x|.R|kotlin/Boolean.not|()"];
25 [label="Exit block"];
}
21 [label="Access variable R|<local>/x|"];
22 [label="Function call: R|<local>/x|.R|kotlin/Boolean.not|()"];
7 [label="Exit function test_2" style="filled" fillcolor=red];
26 [label="Exit function test_2" style="filled" fillcolor=red];
}
6 -> {8};
8 -> {10};
9 -> {21};
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {12};
12 -> {13};
13 -> {14 20};
14 -> {15};
15 -> {16};
13 -> {14};
14 -> {16 15};
15 -> {22};
16 -> {17};
17 -> {18};
18 -> {19};
19 -> {9};
20 -> {9};
19 -> {20};
20 -> {21};
21 -> {22};
22 -> {7};
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {26};
subgraph cluster_5 {
subgraph cluster_7 {
color=red
23 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_6 {
27 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_8 {
color=blue
25 [label="Enter when"];
subgraph cluster_7 {
color=blue
27 [label="Enter when branch condition "];
subgraph cluster_8 {
color=blue
29 [label="Enter &&"];
30 [label="Access variable R|<local>/b|"];
31 [label="Exit left part of &&"];
32 [label="Enter right part of &&"];
33 [label="Access variable R|<local>/x|"];
34 [label="Type operator: (R|<local>/x| as R|kotlin/Boolean|)"];
28 [label="Exit &&"];
}
35 [label="Exit when branch condition"];
}
42 [label="Synthetic else branch"];
36 [label="Enter when branch result"];
28 [label="Enter block"];
subgraph cluster_9 {
color=blue
37 [label="Enter block"];
38 [label="Access variable R|<local>/x|"];
39 [label="Function call: R|<local>/x|.R|kotlin/Boolean.not|()"];
40 [label="Exit block"];
}
41 [label="Exit when branch result"];
26 [label="Exit when"];
}
43 [label="Access variable R|<local>/x|"];
44 [label="Function call: R|<local>/x|.<Unresolved name: not>#()"];
subgraph cluster_10 {
color=blue
45 [label="Enter when"];
subgraph cluster_11 {
color=blue
47 [label="Enter when branch condition "];
29 [label="Enter when"];
subgraph cluster_10 {
color=blue
30 [label="Enter when branch condition "];
subgraph cluster_11 {
color=blue
31 [label="Enter &&"];
32 [label="Access variable R|<local>/b|"];
33 [label="Exit left part of &&"];
34 [label="Enter right part of &&"];
35 [label="Access variable R|<local>/x|"];
36 [label="Type operator: (R|<local>/x| as R|kotlin/Boolean|)"];
37 [label="Exit &&"];
}
38 [label="Exit when branch condition"];
}
39 [label="Synthetic else branch"];
40 [label="Enter when branch result"];
subgraph cluster_12 {
color=blue
49 [label="Enter &&"];
50 [label="Access variable R|<local>/b|"];
51 [label="Exit left part of &&"];
52 [label="Enter right part of &&"];
53 [label="Access variable R|<local>/x|"];
54 [label="Type operator: (R|<local>/x| as R|kotlin/Boolean|)"];
55 [label="Const: Boolean(true)"];
56 [label="Operator =="];
48 [label="Exit &&"];
41 [label="Enter block"];
42 [label="Access variable R|<local>/x|"];
43 [label="Function call: R|<local>/x|.R|kotlin/Boolean.not|()"];
44 [label="Exit block"];
}
57 [label="Exit when branch condition"];
45 [label="Exit when branch result"];
46 [label="Exit when"];
}
64 [label="Synthetic else branch"];
58 [label="Enter when branch result"];
47 [label="Access variable R|<local>/x|"];
48 [label="Function call: R|<local>/x|.<Unresolved name: not>#()"];
subgraph cluster_13 {
color=blue
59 [label="Enter block"];
60 [label="Access variable R|<local>/x|"];
61 [label="Function call: R|<local>/x|.R|kotlin/Boolean.not|()"];
62 [label="Exit block"];
}
63 [label="Exit when branch result"];
46 [label="Exit when"];
}
65 [label="Access variable R|<local>/x|"];
66 [label="Function call: R|<local>/x|.<Unresolved name: not>#()"];
subgraph cluster_14 {
color=blue
67 [label="Enter when"];
subgraph cluster_15 {
color=blue
69 [label="Enter when branch condition "];
49 [label="Enter when"];
subgraph cluster_14 {
color=blue
50 [label="Enter when branch condition "];
subgraph cluster_15 {
color=blue
51 [label="Enter &&"];
52 [label="Access variable R|<local>/b|"];
53 [label="Exit left part of &&"];
54 [label="Enter right part of &&"];
55 [label="Access variable R|<local>/x|"];
56 [label="Type operator: (R|<local>/x| as R|kotlin/Boolean|)"];
57 [label="Const: Boolean(true)"];
58 [label="Operator =="];
59 [label="Exit &&"];
}
60 [label="Exit when branch condition"];
}
61 [label="Synthetic else branch"];
62 [label="Enter when branch result"];
subgraph cluster_16 {
color=blue
71 [label="Enter ||"];
72 [label="Access variable R|<local>/b|"];
73 [label="Exit left part of ||"];
74 [label="Enter right part of ||"];
75 [label="Access variable R|<local>/x|"];
76 [label="Type operator: (R|<local>/x| as R|kotlin/Boolean|)"];
70 [label="Exit ||"];
63 [label="Enter block"];
64 [label="Access variable R|<local>/x|"];
65 [label="Function call: R|<local>/x|.R|kotlin/Boolean.not|()"];
66 [label="Exit block"];
}
77 [label="Exit when branch condition"];
67 [label="Exit when branch result"];
68 [label="Exit when"];
}
84 [label="Synthetic else branch"];
78 [label="Enter when branch result"];
69 [label="Access variable R|<local>/x|"];
70 [label="Function call: R|<local>/x|.<Unresolved name: not>#()"];
subgraph cluster_17 {
color=blue
79 [label="Enter block"];
80 [label="Access variable R|<local>/x|"];
81 [label="Function call: R|<local>/x|.<Unresolved name: not>#()"];
82 [label="Exit block"];
71 [label="Enter when"];
subgraph cluster_18 {
color=blue
72 [label="Enter when branch condition "];
subgraph cluster_19 {
color=blue
73 [label="Enter ||"];
74 [label="Access variable R|<local>/b|"];
75 [label="Exit left part of ||"];
76 [label="Enter right part of ||"];
77 [label="Access variable R|<local>/x|"];
78 [label="Type operator: (R|<local>/x| as R|kotlin/Boolean|)"];
79 [label="Exit ||"];
}
80 [label="Exit when branch condition"];
}
81 [label="Synthetic else branch"];
82 [label="Enter when branch result"];
subgraph cluster_20 {
color=blue
83 [label="Enter block"];
84 [label="Access variable R|<local>/x|"];
85 [label="Function call: R|<local>/x|.<Unresolved name: not>#()"];
86 [label="Exit block"];
}
87 [label="Exit when branch result"];
88 [label="Exit when"];
}
83 [label="Exit when branch result"];
68 [label="Exit when"];
89 [label="Access variable R|<local>/x|"];
90 [label="Function call: R|<local>/x|.<Unresolved name: not>#()"];
91 [label="Exit block"];
}
85 [label="Access variable R|<local>/x|"];
86 [label="Function call: R|<local>/x|.<Unresolved name: not>#()"];
24 [label="Exit function test_3" style="filled" fillcolor=red];
92 [label="Exit function test_3" style="filled" fillcolor=red];
}
23 -> {25};
25 -> {27};
26 -> {43};
27 -> {29};
28 -> {35};
27 -> {28};
28 -> {29};
29 -> {30};
30 -> {31};
31 -> {28 32};
31 -> {32};
32 -> {33};
33 -> {34};
34 -> {28};
35 -> {36 42};
33 -> {37 34};
34 -> {35};
35 -> {36};
36 -> {37};
37 -> {38};
38 -> {39};
39 -> {40};
38 -> {40 39};
39 -> {46};
40 -> {41};
41 -> {26};
42 -> {26};
41 -> {42};
42 -> {43};
43 -> {44};
44 -> {45};
45 -> {47};
46 -> {65};
47 -> {49};
48 -> {57};
45 -> {46};
46 -> {47};
47 -> {48};
48 -> {49};
49 -> {50};
50 -> {51};
51 -> {48 52};
51 -> {52};
52 -> {53};
53 -> {54};
53 -> {59 54};
54 -> {55};
55 -> {56};
56 -> {48};
57 -> {58 64};
56 -> {57};
57 -> {58};
58 -> {59};
59 -> {60};
60 -> {61};
61 -> {62};
60 -> {62 61};
61 -> {68};
62 -> {63};
63 -> {46};
64 -> {46};
63 -> {64};
64 -> {65};
65 -> {66};
66 -> {67};
67 -> {69};
68 -> {85};
69 -> {71};
70 -> {77};
67 -> {68};
68 -> {69};
69 -> {70};
70 -> {71};
71 -> {72};
72 -> {73};
73 -> {70 74};
73 -> {74};
74 -> {75};
75 -> {76};
76 -> {70};
77 -> {78 84};
75 -> {79 76};
76 -> {77};
77 -> {78};
78 -> {79};
79 -> {80};
80 -> {81};
81 -> {82};
80 -> {82 81};
81 -> {88};
82 -> {83};
83 -> {68};
84 -> {68};
83 -> {84};
84 -> {85};
85 -> {86};
86 -> {24};
86 -> {87};
87 -> {88};
88 -> {89};
89 -> {90};
90 -> {91};
91 -> {92};
subgraph cluster_18 {
subgraph cluster_21 {
color=red
87 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_19 {
93 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_22 {
color=blue
89 [label="Enter when"];
subgraph cluster_20 {
color=blue
91 [label="Enter when branch condition "];
92 [label="Access variable R|<local>/b|"];
93 [label="Type operator: (R|<local>/b| as? R|kotlin/Boolean|)"];
94 [label="Const: Null(null)"];
95 [label="Operator !="];
96 [label="Exit when branch condition"];
}
subgraph cluster_21 {
color=blue
103 [label="Enter when branch condition else"];
104 [label="Exit when branch condition"];
}
105 [label="Enter when branch result"];
subgraph cluster_22 {
color=blue
106 [label="Enter block"];
107 [label="Access variable R|<local>/b|"];
108 [label="Function call: R|<local>/b|.<Unresolved name: not>#()"];
109 [label="Exit block"];
}
110 [label="Exit when branch result"];
97 [label="Enter when branch result"];
94 [label="Enter block"];
subgraph cluster_23 {
color=blue
98 [label="Enter block"];
99 [label="Access variable R|<local>/b|"];
100 [label="Function call: R|<local>/b|.R|kotlin/Boolean.not|()"];
101 [label="Exit block"];
95 [label="Enter when"];
subgraph cluster_24 {
color=blue
96 [label="Enter when branch condition "];
97 [label="Access variable R|<local>/b|"];
98 [label="Type operator: (R|<local>/b| as? R|kotlin/Boolean|)"];
99 [label="Const: Null(null)"];
100 [label="Operator !="];
101 [label="Exit when branch condition"];
}
subgraph cluster_25 {
color=blue
102 [label="Enter when branch condition else"];
103 [label="Exit when branch condition"];
}
104 [label="Enter when branch result"];
subgraph cluster_26 {
color=blue
105 [label="Enter block"];
106 [label="Access variable R|<local>/b|"];
107 [label="Function call: R|<local>/b|.<Unresolved name: not>#()"];
108 [label="Exit block"];
}
109 [label="Exit when branch result"];
110 [label="Enter when branch result"];
subgraph cluster_27 {
color=blue
111 [label="Enter block"];
112 [label="Access variable R|<local>/b|"];
113 [label="Function call: R|<local>/b|.R|kotlin/Boolean.not|()"];
114 [label="Exit block"];
}
115 [label="Exit when branch result"];
116 [label="Exit when"];
}
102 [label="Exit when branch result"];
90 [label="Exit when"];
}
111 [label="Access variable R|<local>/b|"];
112 [label="Function call: R|<local>/b|.<Unresolved name: not>#()"];
subgraph cluster_24 {
color=blue
113 [label="Enter when"];
subgraph cluster_25 {
color=blue
115 [label="Enter when branch condition "];
116 [label="Access variable R|<local>/b|"];
117 [label="Type operator: (R|<local>/b| as? R|kotlin/Boolean|)"];
118 [label="Const: Null(null)"];
119 [label="Operator =="];
120 [label="Exit when branch condition"];
}
subgraph cluster_26 {
color=blue
127 [label="Enter when branch condition else"];
128 [label="Exit when branch condition"];
}
129 [label="Enter when branch result"];
subgraph cluster_27 {
color=blue
130 [label="Enter block"];
131 [label="Access variable R|<local>/b|"];
132 [label="Function call: R|<local>/b|.R|kotlin/Boolean.not|()"];
133 [label="Exit block"];
}
134 [label="Exit when branch result"];
121 [label="Enter when branch result"];
117 [label="Access variable R|<local>/b|"];
118 [label="Function call: R|<local>/b|.<Unresolved name: not>#()"];
subgraph cluster_28 {
color=blue
122 [label="Enter block"];
123 [label="Access variable R|<local>/b|"];
124 [label="Function call: R|<local>/b|.<Unresolved name: not>#()"];
125 [label="Exit block"];
119 [label="Enter when"];
subgraph cluster_29 {
color=blue
120 [label="Enter when branch condition "];
121 [label="Access variable R|<local>/b|"];
122 [label="Type operator: (R|<local>/b| as? R|kotlin/Boolean|)"];
123 [label="Const: Null(null)"];
124 [label="Operator =="];
125 [label="Exit when branch condition"];
}
subgraph cluster_30 {
color=blue
126 [label="Enter when branch condition else"];
127 [label="Exit when branch condition"];
}
128 [label="Enter when branch result"];
subgraph cluster_31 {
color=blue
129 [label="Enter block"];
130 [label="Access variable R|<local>/b|"];
131 [label="Function call: R|<local>/b|.R|kotlin/Boolean.not|()"];
132 [label="Exit block"];
}
133 [label="Exit when branch result"];
134 [label="Enter when branch result"];
subgraph cluster_32 {
color=blue
135 [label="Enter block"];
136 [label="Access variable R|<local>/b|"];
137 [label="Function call: R|<local>/b|.<Unresolved name: not>#()"];
138 [label="Exit block"];
}
139 [label="Exit when branch result"];
140 [label="Exit when"];
}
126 [label="Exit when branch result"];
114 [label="Exit when"];
141 [label="Access variable R|<local>/b|"];
142 [label="Function call: R|<local>/b|.<Unresolved name: not>#()"];
143 [label="Exit block"];
}
135 [label="Access variable R|<local>/b|"];
136 [label="Function call: R|<local>/b|.<Unresolved name: not>#()"];
88 [label="Exit function test_4" style="filled" fillcolor=red];
144 [label="Exit function test_4" style="filled" fillcolor=red];
}
87 -> {89};
89 -> {91};
90 -> {111};
91 -> {92};
92 -> {93};
93 -> {94};
94 -> {95};
95 -> {96};
96 -> {97 103};
96 -> {97};
97 -> {98};
98 -> {99};
99 -> {100};
100 -> {101};
101 -> {102};
102 -> {90};
101 -> {110 102};
102 -> {103};
103 -> {104};
104 -> {105};
105 -> {106};
106 -> {107};
107 -> {108};
108 -> {109};
109 -> {110};
110 -> {90};
109 -> {116};
110 -> {111};
111 -> {112};
112 -> {113};
113 -> {115};
114 -> {135};
113 -> {114};
114 -> {115};
115 -> {116};
116 -> {117};
117 -> {118};
118 -> {119};
119 -> {120};
120 -> {121 127};
120 -> {121};
121 -> {122};
122 -> {123};
123 -> {124};
124 -> {125};
125 -> {126};
126 -> {114};
125 -> {134 126};
126 -> {127};
127 -> {128};
128 -> {129};
129 -> {130};
130 -> {131};
131 -> {132};
132 -> {133};
133 -> {134};
134 -> {114};
133 -> {140};
134 -> {135};
135 -> {136};
136 -> {88};
136 -> {137};
137 -> {138};
138 -> {139};
139 -> {140};
140 -> {141};
141 -> {142};
142 -> {143};
143 -> {144};
}

View File

@@ -5,218 +5,222 @@ digraph elvis_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function foo" style="filled" fillcolor=red];
1 [label="Exit function foo" style="filled" fillcolor=red];
0 [label="Enter class A" style="filled" fillcolor=red];
1 [label="Exit class A" style="filled" fillcolor=red];
}
0 -> {1};
0 -> {1} [color=green];
subgraph cluster_1 {
color=red
6 [label="Enter class A" style="filled" fillcolor=red];
subgraph cluster_2 {
color=blue
2 [label="Enter function getter" style="filled" fillcolor=red];
3 [label="Exit function getter" style="filled" fillcolor=red];
}
subgraph cluster_3 {
color=blue
4 [label="Enter property" style="filled" fillcolor=red];
5 [label="Exit property" style="filled" fillcolor=red];
}
7 [label="Exit class A" style="filled" fillcolor=red];
2 [label="Enter function foo" style="filled" fillcolor=red];
3 [label="Exit function foo" style="filled" fillcolor=red];
}
6 -> {4} [color=green];
4 -> {5};
5 -> {7} [color=green];
2 -> {3};
subgraph cluster_4 {
subgraph cluster_2 {
color=red
8 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
10 [label="Enter when"];
subgraph cluster_6 {
color=blue
12 [label="Enter when branch condition "];
subgraph cluster_7 {
color=blue
13 [label="Enter when"];
15 [label="Access variable R|<local>/x|"];
16 [label="Enter safe call"];
18 [label="Access variable R|/A.b|"];
17 [label="Exit safe call"];
19 [label="Variable declaration: lval <elvis>: R|kotlin/Boolean?|"];
subgraph cluster_8 {
color=blue
20 [label="Enter when branch condition "];
21 [label="Const: Null(null)"];
22 [label="Operator =="];
23 [label="Exit when branch condition"];
}
subgraph cluster_9 {
color=blue
30 [label="Enter when branch condition else"];
31 [label="Exit when branch condition"];
}
32 [label="Enter when branch result"];
subgraph cluster_10 {
color=blue
33 [label="Enter block"];
34 [label="Access variable R|<local>/<elvis>|"];
35 [label="Exit block"];
}
36 [label="Exit when branch result"];
24 [label="Enter when branch result"];
subgraph cluster_11 {
color=blue
25 [label="Enter block"];
26 [label="Jump: ^test_1 Unit"];
27 [label="Stub" style="filled" fillcolor=gray];
28 [label="Exit block" style="filled" fillcolor=gray];
}
29 [label="Exit when branch result" style="filled" fillcolor=gray];
14 [label="Exit when"];
}
37 [label="Exit when branch condition"];
}
44 [label="Synthetic else branch"];
38 [label="Enter when branch result"];
subgraph cluster_12 {
color=blue
39 [label="Enter block"];
40 [label="Access variable R|<local>/x|"];
41 [label="Function call: R|<local>/x|.R|/A.foo|()"];
42 [label="Exit block"];
}
43 [label="Exit when branch result"];
11 [label="Exit when"];
}
9 [label="Exit function test_1" style="filled" fillcolor=red];
4 [label="Enter function getter" style="filled" fillcolor=red];
5 [label="Exit function getter" style="filled" fillcolor=red];
}
8 -> {10};
10 -> {12};
11 -> {9};
4 -> {5};
subgraph cluster_3 {
color=red
6 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_4 {
color=blue
7 [label="Enter block"];
subgraph cluster_5 {
color=blue
8 [label="Enter when"];
subgraph cluster_6 {
color=blue
9 [label="Enter when branch condition "];
subgraph cluster_7 {
color=blue
10 [label="Enter when"];
11 [label="Access variable R|<local>/x|"];
12 [label="Enter safe call"];
13 [label="Access variable R|/A.b|"];
14 [label="Exit safe call"];
15 [label="Variable declaration: lval <elvis>: R|kotlin/Boolean?|"];
subgraph cluster_8 {
color=blue
16 [label="Enter when branch condition "];
17 [label="Const: Null(null)"];
18 [label="Operator =="];
19 [label="Exit when branch condition"];
}
subgraph cluster_9 {
color=blue
20 [label="Enter when branch condition else"];
21 [label="Exit when branch condition"];
}
22 [label="Enter when branch result"];
subgraph cluster_10 {
color=blue
23 [label="Enter block"];
24 [label="Access variable R|<local>/<elvis>|"];
25 [label="Exit block"];
}
26 [label="Exit when branch result"];
27 [label="Enter when branch result"];
subgraph cluster_11 {
color=blue
28 [label="Enter block"];
29 [label="Jump: ^test_1 Unit"];
30 [label="Stub" style="filled" fillcolor=gray];
31 [label="Exit block" style="filled" fillcolor=gray];
}
32 [label="Exit when branch result" style="filled" fillcolor=gray];
33 [label="Exit when"];
}
34 [label="Exit when branch condition"];
}
35 [label="Synthetic else branch"];
36 [label="Enter when branch result"];
subgraph cluster_12 {
color=blue
37 [label="Enter block"];
38 [label="Access variable R|<local>/x|"];
39 [label="Function call: R|<local>/x|.R|/A.foo|()"];
40 [label="Exit block"];
}
41 [label="Exit when branch result"];
42 [label="Exit when"];
}
43 [label="Exit block"];
}
44 [label="Exit function test_1" style="filled" fillcolor=red];
}
6 -> {7};
7 -> {8};
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {12 14};
12 -> {13};
13 -> {15};
14 -> {37};
15 -> {16 17};
16 -> {18};
17 -> {19};
18 -> {17};
19 -> {20};
13 -> {14};
14 -> {15};
15 -> {16};
16 -> {17};
17 -> {18};
18 -> {19};
19 -> {27 20};
20 -> {21};
21 -> {22};
22 -> {23};
23 -> {24 30};
23 -> {24};
24 -> {25};
25 -> {26};
26 -> {9};
26 -> {27} [style=dotted];
27 -> {28} [style=dotted];
28 -> {29} [style=dotted];
29 -> {14} [style=dotted];
30 -> {31};
31 -> {32};
32 -> {33};
26 -> {33};
27 -> {28};
28 -> {29};
29 -> {44};
29 -> {30} [style=dotted];
30 -> {31} [style=dotted];
31 -> {32} [style=dotted];
32 -> {33} [style=dotted];
33 -> {34};
34 -> {35};
35 -> {36};
36 -> {14};
37 -> {38 44};
34 -> {36 35};
35 -> {42};
36 -> {37};
37 -> {38};
38 -> {39};
39 -> {40};
40 -> {41};
41 -> {42};
42 -> {43};
43 -> {11};
44 -> {11};
43 -> {44};
subgraph cluster_13 {
color=red
45 [label="Enter function test2" style="filled" fillcolor=red];
subgraph cluster_14 {
color=blue
47 [label="Enter when"];
46 [label="Enter block"];
subgraph cluster_15 {
color=blue
49 [label="Enter when branch condition "];
50 [label="Access variable R|<local>/b|"];
51 [label="Type operator: (R|<local>/b| !is R|kotlin/String|)"];
52 [label="Exit when branch condition"];
47 [label="Enter when"];
subgraph cluster_16 {
color=blue
48 [label="Enter when branch condition "];
49 [label="Access variable R|<local>/b|"];
50 [label="Type operator: (R|<local>/b| !is R|kotlin/String|)"];
51 [label="Exit when branch condition"];
}
52 [label="Synthetic else branch"];
53 [label="Enter when branch result"];
subgraph cluster_17 {
color=blue
54 [label="Enter block"];
55 [label="Const: String()"];
56 [label="Jump: ^test2 String()"];
57 [label="Stub" style="filled" fillcolor=gray];
58 [label="Exit block" style="filled" fillcolor=gray];
}
59 [label="Exit when branch result" style="filled" fillcolor=gray];
60 [label="Exit when"];
}
60 [label="Synthetic else branch"];
53 [label="Enter when branch result"];
subgraph cluster_16 {
color=blue
54 [label="Enter block"];
55 [label="Const: String()"];
56 [label="Jump: ^test2 String()"];
57 [label="Stub" style="filled" fillcolor=gray];
58 [label="Exit block" style="filled" fillcolor=gray];
}
59 [label="Exit when branch result" style="filled" fillcolor=gray];
48 [label="Exit when"];
}
subgraph cluster_17 {
color=blue
61 [label="Enter when"];
subgraph cluster_18 {
color=blue
63 [label="Enter when branch condition "];
64 [label="Access variable R|<local>/a|"];
65 [label="Type operator: (R|<local>/a| !is R|kotlin/String?|)"];
66 [label="Exit when branch condition"];
61 [label="Enter when"];
subgraph cluster_19 {
color=blue
62 [label="Enter when branch condition "];
63 [label="Access variable R|<local>/a|"];
64 [label="Type operator: (R|<local>/a| !is R|kotlin/String?|)"];
65 [label="Exit when branch condition"];
}
66 [label="Synthetic else branch"];
67 [label="Enter when branch result"];
subgraph cluster_20 {
color=blue
68 [label="Enter block"];
69 [label="Const: String()"];
70 [label="Jump: ^test2 String()"];
71 [label="Stub" style="filled" fillcolor=gray];
72 [label="Exit block" style="filled" fillcolor=gray];
}
73 [label="Exit when branch result" style="filled" fillcolor=gray];
74 [label="Exit when"];
}
74 [label="Synthetic else branch"];
67 [label="Enter when branch result"];
subgraph cluster_19 {
color=blue
68 [label="Enter block"];
69 [label="Const: String()"];
70 [label="Jump: ^test2 String()"];
71 [label="Stub" style="filled" fillcolor=gray];
72 [label="Exit block" style="filled" fillcolor=gray];
}
73 [label="Exit when branch result" style="filled" fillcolor=gray];
62 [label="Exit when"];
}
subgraph cluster_20 {
color=blue
75 [label="Enter when"];
77 [label="Access variable R|<local>/a|"];
78 [label="Variable declaration: lval <elvis>: R|kotlin/String?|"];
subgraph cluster_21 {
color=blue
79 [label="Enter when branch condition "];
80 [label="Const: Null(null)"];
81 [label="Operator =="];
82 [label="Exit when branch condition"];
75 [label="Enter when"];
76 [label="Access variable R|<local>/a|"];
77 [label="Variable declaration: lval <elvis>: R|kotlin/String?|"];
subgraph cluster_22 {
color=blue
78 [label="Enter when branch condition "];
79 [label="Const: Null(null)"];
80 [label="Operator =="];
81 [label="Exit when branch condition"];
}
subgraph cluster_23 {
color=blue
82 [label="Enter when branch condition else"];
83 [label="Exit when branch condition"];
}
84 [label="Enter when branch result"];
subgraph cluster_24 {
color=blue
85 [label="Enter block"];
86 [label="Access variable R|<local>/<elvis>|"];
87 [label="Exit block"];
}
88 [label="Exit when branch result"];
89 [label="Enter when branch result"];
subgraph cluster_25 {
color=blue
90 [label="Enter block"];
91 [label="Access variable R|<local>/b|"];
92 [label="Exit block"];
}
93 [label="Exit when branch result"];
94 [label="Exit when"];
}
subgraph cluster_22 {
color=blue
88 [label="Enter when branch condition else"];
89 [label="Exit when branch condition"];
}
90 [label="Enter when branch result"];
subgraph cluster_23 {
color=blue
91 [label="Enter block"];
92 [label="Access variable R|<local>/<elvis>|"];
93 [label="Exit block"];
}
94 [label="Exit when branch result"];
83 [label="Enter when branch result"];
subgraph cluster_24 {
color=blue
84 [label="Enter block"];
85 [label="Access variable R|<local>/b|"];
86 [label="Exit block"];
}
87 [label="Exit when branch result"];
76 [label="Exit when"];
}
95 [label="Jump: ^test2 when (lval <elvis>: R|kotlin/String?| = R|<local>/a|) {
95 [label="Jump: ^test2 when (lval <elvis>: R|kotlin/String?| = R|<local>/a|) {
==($subj$, Null(null)) -> {
R|<local>/b|
}
@@ -225,62 +229,66 @@ digraph elvis_kt {
}
}
"];
96 [label="Stub" style="filled" fillcolor=gray];
46 [label="Exit function test2" style="filled" fillcolor=red];
96 [label="Stub" style="filled" fillcolor=gray];
97 [label="Exit block" style="filled" fillcolor=gray];
}
98 [label="Exit function test2" style="filled" fillcolor=red];
}
45 -> {47};
47 -> {49};
48 -> {61};
45 -> {46};
46 -> {47};
47 -> {48};
48 -> {49};
49 -> {50};
50 -> {51};
51 -> {52};
52 -> {53 60};
51 -> {53 52};
52 -> {60};
53 -> {54};
54 -> {55};
55 -> {56};
56 -> {46};
56 -> {98};
56 -> {57} [style=dotted];
57 -> {58} [style=dotted];
58 -> {59} [style=dotted];
59 -> {48} [style=dotted];
60 -> {48};
61 -> {63};
62 -> {75};
59 -> {60} [style=dotted];
60 -> {61};
61 -> {62};
62 -> {63};
63 -> {64};
64 -> {65};
65 -> {66};
66 -> {67 74};
65 -> {67 66};
66 -> {74};
67 -> {68};
68 -> {69};
69 -> {70};
70 -> {46};
70 -> {98};
70 -> {71} [style=dotted];
71 -> {72} [style=dotted];
72 -> {73} [style=dotted];
73 -> {62} [style=dotted];
74 -> {62};
75 -> {77};
76 -> {95};
73 -> {74} [style=dotted];
74 -> {75};
75 -> {76};
76 -> {77};
77 -> {78};
78 -> {79};
79 -> {80};
80 -> {81};
81 -> {82};
82 -> {83 88};
81 -> {89 82};
82 -> {83};
83 -> {84};
84 -> {85};
85 -> {86};
86 -> {87};
87 -> {76};
88 -> {89};
87 -> {88};
88 -> {94};
89 -> {90};
90 -> {91};
91 -> {92};
92 -> {93};
93 -> {94};
94 -> {76};
95 -> {46};
94 -> {95};
95 -> {98};
95 -> {96} [style=dotted];
96 -> {46} [style=dotted];
96 -> {97} [style=dotted];
97 -> {98} [style=dotted];
}

View File

@@ -8,481 +8,530 @@ digraph returns_kt {
0 [label="Enter function test_0" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
2 [label="Enter when"];
1 [label="Enter block"];
subgraph cluster_2 {
color=blue
4 [label="Enter when branch condition "];
5 [label="Access variable R|<local>/x|"];
6 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
7 [label="Exit when branch condition"];
2 [label="Enter when"];
subgraph cluster_3 {
color=blue
3 [label="Enter when branch condition "];
4 [label="Access variable R|<local>/x|"];
5 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
6 [label="Exit when branch condition"];
}
subgraph cluster_4 {
color=blue
7 [label="Enter when branch condition else"];
8 [label="Exit when branch condition"];
}
9 [label="Enter when branch result"];
subgraph cluster_5 {
color=blue
10 [label="Enter block"];
11 [label="Exit block"];
}
12 [label="Exit when branch result"];
13 [label="Enter when branch result"];
subgraph cluster_6 {
color=blue
14 [label="Enter block"];
15 [label="Access variable R|<local>/x|"];
16 [label="Access variable R|kotlin/String.length|"];
17 [label="Exit block"];
}
18 [label="Exit when branch result"];
19 [label="Exit when"];
}
subgraph cluster_3 {
color=blue
14 [label="Enter when branch condition else"];
15 [label="Exit when branch condition"];
}
16 [label="Enter when branch result"];
subgraph cluster_4 {
color=blue
17 [label="Enter block"];
18 [label="Exit block"];
}
19 [label="Exit when branch result"];
8 [label="Enter when branch result"];
subgraph cluster_5 {
color=blue
9 [label="Enter block"];
10 [label="Access variable R|<local>/x|"];
11 [label="Access variable R|kotlin/String.length|"];
12 [label="Exit block"];
}
13 [label="Exit when branch result"];
3 [label="Exit when"];
20 [label="Access variable R|<local>/x|"];
21 [label="Access variable <Unresolved name: length>#"];
22 [label="Exit block"];
}
20 [label="Access variable R|<local>/x|"];
21 [label="Access variable <Unresolved name: length>#"];
1 [label="Exit function test_0" style="filled" fillcolor=red];
23 [label="Exit function test_0" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {4};
3 -> {20};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
4 -> {5};
5 -> {6};
6 -> {7};
7 -> {8 14};
6 -> {13 7};
7 -> {8};
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {12};
12 -> {13};
13 -> {3};
12 -> {19};
13 -> {14};
14 -> {15};
15 -> {16};
16 -> {17};
17 -> {18};
18 -> {19};
19 -> {3};
19 -> {20};
20 -> {21};
21 -> {1};
21 -> {22};
22 -> {23};
subgraph cluster_6 {
subgraph cluster_7 {
color=red
22 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_7 {
24 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_8 {
color=blue
24 [label="Enter when"];
subgraph cluster_8 {
color=blue
26 [label="Enter when branch condition "];
27 [label="Access variable R|<local>/x|"];
28 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
29 [label="Exit when branch condition"];
}
25 [label="Enter block"];
subgraph cluster_9 {
color=blue
36 [label="Enter when branch condition else"];
37 [label="Exit when branch condition"];
26 [label="Enter when"];
subgraph cluster_10 {
color=blue
27 [label="Enter when branch condition "];
28 [label="Access variable R|<local>/x|"];
29 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
30 [label="Exit when branch condition"];
}
subgraph cluster_11 {
color=blue
31 [label="Enter when branch condition else"];
32 [label="Exit when branch condition"];
}
33 [label="Enter when branch result"];
subgraph cluster_12 {
color=blue
34 [label="Enter block"];
35 [label="Jump: ^test_1 Unit"];
36 [label="Stub" style="filled" fillcolor=gray];
37 [label="Exit block" style="filled" fillcolor=gray];
}
38 [label="Exit when branch result" style="filled" fillcolor=gray];
39 [label="Enter when branch result"];
subgraph cluster_13 {
color=blue
40 [label="Enter block"];
41 [label="Access variable R|<local>/x|"];
42 [label="Access variable R|kotlin/String.length|"];
43 [label="Exit block"];
}
44 [label="Exit when branch result"];
45 [label="Exit when"];
}
38 [label="Enter when branch result"];
subgraph cluster_10 {
color=blue
39 [label="Enter block"];
40 [label="Jump: ^test_1 Unit"];
41 [label="Stub" style="filled" fillcolor=gray];
42 [label="Exit block" style="filled" fillcolor=gray];
}
43 [label="Exit when branch result" style="filled" fillcolor=gray];
30 [label="Enter when branch result"];
subgraph cluster_11 {
color=blue
31 [label="Enter block"];
32 [label="Access variable R|<local>/x|"];
33 [label="Access variable R|kotlin/String.length|"];
34 [label="Exit block"];
}
35 [label="Exit when branch result"];
25 [label="Exit when"];
46 [label="Access variable R|<local>/x|"];
47 [label="Access variable R|kotlin/String.length|"];
48 [label="Exit block"];
}
44 [label="Access variable R|<local>/x|"];
45 [label="Access variable R|kotlin/String.length|"];
23 [label="Exit function test_1" style="filled" fillcolor=red];
49 [label="Exit function test_1" style="filled" fillcolor=red];
}
22 -> {24};
24 -> {26};
25 -> {44};
24 -> {25};
25 -> {26};
26 -> {27};
27 -> {28};
28 -> {29};
29 -> {30 36};
30 -> {31};
29 -> {30};
30 -> {39 31};
31 -> {32};
32 -> {33};
33 -> {34};
34 -> {35};
35 -> {25};
36 -> {37};
37 -> {38};
38 -> {39};
35 -> {49};
35 -> {36} [style=dotted];
36 -> {37} [style=dotted];
37 -> {38} [style=dotted];
38 -> {45} [style=dotted];
39 -> {40};
40 -> {23};
40 -> {41} [style=dotted];
41 -> {42} [style=dotted];
42 -> {43} [style=dotted];
43 -> {25} [style=dotted];
40 -> {41};
41 -> {42};
42 -> {43};
43 -> {44};
44 -> {45};
45 -> {23};
subgraph cluster_12 {
color=red
46 [label="Enter function foo" style="filled" fillcolor=red];
47 [label="Exit function foo" style="filled" fillcolor=red];
}
45 -> {46};
46 -> {47};
subgraph cluster_13 {
color=red
48 [label="Enter class A" style="filled" fillcolor=red];
49 [label="Exit class A" style="filled" fillcolor=red];
}
48 -> {49} [color=green];
47 -> {48};
48 -> {49};
subgraph cluster_14 {
color=red
50 [label="Enter function bar" style="filled" fillcolor=red];
51 [label="Exit function bar" style="filled" fillcolor=red];
50 [label="Enter class A" style="filled" fillcolor=red];
51 [label="Exit class A" style="filled" fillcolor=red];
}
50 -> {51};
50 -> {51} [color=green];
subgraph cluster_15 {
color=red
52 [label="Enter class B" style="filled" fillcolor=red];
53 [label="Exit class B" style="filled" fillcolor=red];
52 [label="Enter function foo" style="filled" fillcolor=red];
53 [label="Exit function foo" style="filled" fillcolor=red];
}
52 -> {53} [color=green];
52 -> {53};
subgraph cluster_16 {
color=red
54 [label="Enter function baz" style="filled" fillcolor=red];
55 [label="Exit function baz" style="filled" fillcolor=red];
54 [label="Enter class B" style="filled" fillcolor=red];
55 [label="Exit class B" style="filled" fillcolor=red];
}
54 -> {55};
54 -> {55} [color=green];
subgraph cluster_17 {
color=red
56 [label="Enter class C" style="filled" fillcolor=red];
57 [label="Exit class C" style="filled" fillcolor=red];
56 [label="Enter function bar" style="filled" fillcolor=red];
57 [label="Exit function bar" style="filled" fillcolor=red];
}
56 -> {57} [color=green];
56 -> {57};
subgraph cluster_18 {
color=red
58 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_19 {
58 [label="Enter class C" style="filled" fillcolor=red];
59 [label="Exit class C" style="filled" fillcolor=red];
}
58 -> {59} [color=green];
subgraph cluster_19 {
color=red
60 [label="Enter function baz" style="filled" fillcolor=red];
61 [label="Exit function baz" style="filled" fillcolor=red];
}
60 -> {61};
subgraph cluster_20 {
color=red
62 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_21 {
color=blue
60 [label="Enter when"];
subgraph cluster_20 {
color=blue
62 [label="Enter when branch condition "];
63 [label="Access variable R|<local>/x|"];
64 [label="Type operator: (R|<local>/x| is R|B|)"];
65 [label="Exit when branch condition"];
}
subgraph cluster_21 {
color=blue
72 [label="Enter when branch condition "];
73 [label="Access variable R|<local>/x|"];
74 [label="Type operator: (R|<local>/x| is R|C|)"];
75 [label="Exit when branch condition"];
}
63 [label="Enter block"];
subgraph cluster_22 {
color=blue
82 [label="Enter when branch condition else"];
83 [label="Exit when branch condition"];
64 [label="Enter when"];
subgraph cluster_23 {
color=blue
65 [label="Enter when branch condition "];
66 [label="Access variable R|<local>/x|"];
67 [label="Type operator: (R|<local>/x| is R|B|)"];
68 [label="Exit when branch condition"];
}
subgraph cluster_24 {
color=blue
69 [label="Enter when branch condition "];
70 [label="Access variable R|<local>/x|"];
71 [label="Type operator: (R|<local>/x| is R|C|)"];
72 [label="Exit when branch condition"];
}
subgraph cluster_25 {
color=blue
73 [label="Enter when branch condition else"];
74 [label="Exit when branch condition"];
}
75 [label="Enter when branch result"];
subgraph cluster_26 {
color=blue
76 [label="Enter block"];
77 [label="Jump: ^test_2 Unit"];
78 [label="Stub" style="filled" fillcolor=gray];
79 [label="Exit block" style="filled" fillcolor=gray];
}
80 [label="Exit when branch result" style="filled" fillcolor=gray];
81 [label="Enter when branch result"];
subgraph cluster_27 {
color=blue
82 [label="Enter block"];
83 [label="Access variable R|<local>/x|"];
84 [label="Function call: R|<local>/x|.R|/C.baz|()"];
85 [label="Exit block"];
}
86 [label="Exit when branch result"];
87 [label="Enter when branch result"];
subgraph cluster_28 {
color=blue
88 [label="Enter block"];
89 [label="Access variable R|<local>/x|"];
90 [label="Function call: R|<local>/x|.R|/B.bar|()"];
91 [label="Exit block"];
}
92 [label="Exit when branch result"];
93 [label="Exit when"];
}
84 [label="Enter when branch result"];
subgraph cluster_23 {
color=blue
85 [label="Enter block"];
86 [label="Jump: ^test_2 Unit"];
87 [label="Stub" style="filled" fillcolor=gray];
88 [label="Exit block" style="filled" fillcolor=gray];
}
89 [label="Exit when branch result" style="filled" fillcolor=gray];
76 [label="Enter when branch result"];
subgraph cluster_24 {
color=blue
77 [label="Enter block"];
78 [label="Access variable R|<local>/x|"];
79 [label="Function call: R|<local>/x|.R|/C.baz|()"];
80 [label="Exit block"];
}
81 [label="Exit when branch result"];
66 [label="Enter when branch result"];
subgraph cluster_25 {
color=blue
67 [label="Enter block"];
68 [label="Access variable R|<local>/x|"];
69 [label="Function call: R|<local>/x|.R|/B.bar|()"];
70 [label="Exit block"];
}
71 [label="Exit when branch result"];
61 [label="Exit when"];
94 [label="Access variable R|<local>/x|"];
95 [label="Function call: R|<local>/x|.R|/A.foo|()"];
96 [label="Access variable R|<local>/x|"];
97 [label="Function call: R|<local>/x|.<Unresolved name: bar>#()"];
98 [label="Access variable R|<local>/x|"];
99 [label="Function call: R|<local>/x|.<Unresolved name: baz>#()"];
100 [label="Exit block"];
}
90 [label="Access variable R|<local>/x|"];
91 [label="Function call: R|<local>/x|.R|/A.foo|()"];
92 [label="Access variable R|<local>/x|"];
93 [label="Function call: R|<local>/x|.<Unresolved name: bar>#()"];
94 [label="Access variable R|<local>/x|"];
95 [label="Function call: R|<local>/x|.<Unresolved name: baz>#()"];
59 [label="Exit function test_2" style="filled" fillcolor=red];
101 [label="Exit function test_2" style="filled" fillcolor=red];
}
58 -> {60};
60 -> {62};
61 -> {90};
62 -> {63};
63 -> {64};
64 -> {65};
65 -> {66 72};
65 -> {66};
66 -> {67};
67 -> {68};
68 -> {69};
68 -> {87 69};
69 -> {70};
70 -> {71};
71 -> {61};
72 -> {73};
71 -> {72};
72 -> {81 73};
73 -> {74};
74 -> {75};
75 -> {76 82};
75 -> {76};
76 -> {77};
77 -> {78};
78 -> {79};
79 -> {80};
80 -> {81};
81 -> {61};
77 -> {101};
77 -> {78} [style=dotted];
78 -> {79} [style=dotted];
79 -> {80} [style=dotted];
80 -> {93} [style=dotted];
81 -> {82};
82 -> {83};
83 -> {84};
84 -> {85};
85 -> {86};
86 -> {59};
86 -> {87} [style=dotted];
87 -> {88} [style=dotted];
88 -> {89} [style=dotted];
89 -> {61} [style=dotted];
86 -> {93};
87 -> {88};
88 -> {89};
89 -> {90};
90 -> {91};
91 -> {92};
92 -> {93};
93 -> {94};
94 -> {95};
95 -> {59};
95 -> {96};
96 -> {97};
97 -> {98};
98 -> {99};
99 -> {100};
100 -> {101};
subgraph cluster_26 {
subgraph cluster_29 {
color=red
96 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_27 {
102 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_30 {
color=blue
98 [label="Enter when"];
subgraph cluster_28 {
color=blue
100 [label="Enter when branch condition "];
101 [label="Access variable R|<local>/x|"];
102 [label="Type operator: (R|<local>/x| is R|B|)"];
103 [label="Exit when branch condition"];
}
subgraph cluster_29 {
color=blue
110 [label="Enter when branch condition "];
111 [label="Access variable R|<local>/x|"];
112 [label="Type operator: (R|<local>/x| is R|C|)"];
113 [label="Exit when branch condition"];
}
120 [label="Synthetic else branch"];
114 [label="Enter when branch result"];
subgraph cluster_30 {
color=blue
115 [label="Enter block"];
116 [label="Access variable R|<local>/x|"];
117 [label="Function call: R|<local>/x|.R|/C.baz|()"];
118 [label="Exit block"];
}
119 [label="Exit when branch result"];
104 [label="Enter when branch result"];
103 [label="Enter block"];
subgraph cluster_31 {
color=blue
105 [label="Enter block"];
106 [label="Access variable R|<local>/x|"];
107 [label="Function call: R|<local>/x|.R|/B.bar|()"];
108 [label="Exit block"];
104 [label="Enter when"];
subgraph cluster_32 {
color=blue
105 [label="Enter when branch condition "];
106 [label="Access variable R|<local>/x|"];
107 [label="Type operator: (R|<local>/x| is R|B|)"];
108 [label="Exit when branch condition"];
}
subgraph cluster_33 {
color=blue
109 [label="Enter when branch condition "];
110 [label="Access variable R|<local>/x|"];
111 [label="Type operator: (R|<local>/x| is R|C|)"];
112 [label="Exit when branch condition"];
}
113 [label="Synthetic else branch"];
114 [label="Enter when branch result"];
subgraph cluster_34 {
color=blue
115 [label="Enter block"];
116 [label="Access variable R|<local>/x|"];
117 [label="Function call: R|<local>/x|.R|/C.baz|()"];
118 [label="Exit block"];
}
119 [label="Exit when branch result"];
120 [label="Enter when branch result"];
subgraph cluster_35 {
color=blue
121 [label="Enter block"];
122 [label="Access variable R|<local>/x|"];
123 [label="Function call: R|<local>/x|.R|/B.bar|()"];
124 [label="Exit block"];
}
125 [label="Exit when branch result"];
126 [label="Exit when"];
}
109 [label="Exit when branch result"];
99 [label="Exit when"];
127 [label="Access variable R|<local>/x|"];
128 [label="Function call: R|<local>/x|.<Unresolved name: foo>#()"];
129 [label="Access variable R|<local>/x|"];
130 [label="Function call: R|<local>/x|.<Unresolved name: bar>#()"];
131 [label="Access variable R|<local>/x|"];
132 [label="Function call: R|<local>/x|.<Unresolved name: baz>#()"];
133 [label="Exit block"];
}
121 [label="Access variable R|<local>/x|"];
122 [label="Function call: R|<local>/x|.<Unresolved name: foo>#()"];
123 [label="Access variable R|<local>/x|"];
124 [label="Function call: R|<local>/x|.<Unresolved name: bar>#()"];
125 [label="Access variable R|<local>/x|"];
126 [label="Function call: R|<local>/x|.<Unresolved name: baz>#()"];
97 [label="Exit function test_3" style="filled" fillcolor=red];
134 [label="Exit function test_3" style="filled" fillcolor=red];
}
96 -> {98};
98 -> {100};
99 -> {121};
100 -> {101};
101 -> {102};
102 -> {103};
103 -> {104 110};
103 -> {104};
104 -> {105};
105 -> {106};
106 -> {107};
107 -> {108};
108 -> {109};
109 -> {99};
108 -> {120 109};
109 -> {110};
110 -> {111};
111 -> {112};
112 -> {113};
113 -> {114 120};
112 -> {114 113};
113 -> {126};
114 -> {115};
115 -> {116};
116 -> {117};
117 -> {118};
118 -> {119};
119 -> {99};
120 -> {99};
119 -> {126};
120 -> {121};
121 -> {122};
122 -> {123};
123 -> {124};
124 -> {125};
125 -> {126};
126 -> {97};
subgraph cluster_32 {
color=red
127 [label="Enter function runHigherOrder" style="filled" fillcolor=red];
129 [label="Function call: R|<local>/f|.R|FakeOverride<kotlin/Function0.invoke: R|T|>|()"];
130 [label="Jump: ^runHigherOrder R|<local>/f|.R|FakeOverride<kotlin/Function0.invoke: R|T|>|()"];
131 [label="Stub" style="filled" fillcolor=gray];
128 [label="Exit function runHigherOrder" style="filled" fillcolor=red];
}
127 -> {129};
126 -> {127};
127 -> {128};
128 -> {129};
129 -> {130};
130 -> {128};
130 -> {131} [style=dotted];
131 -> {128} [style=dotted];
130 -> {131};
131 -> {132};
132 -> {133};
133 -> {134};
subgraph cluster_33 {
subgraph cluster_36 {
color=red
137 [label="Enter property" style="filled" fillcolor=red];
subgraph cluster_34 {
135 [label="Enter function runHigherOrder" style="filled" fillcolor=red];
subgraph cluster_37 {
color=blue
132 [label="Enter function getter" style="filled" fillcolor=red];
134 [label="Access variable R|kotlin/String.length|"];
135 [label="Jump: ^ this@R|/ext|.R|kotlin/String.length|"];
136 [label="Stub" style="filled" fillcolor=gray];
133 [label="Exit function getter" style="filled" fillcolor=red];
136 [label="Enter block"];
137 [label="Function call: R|<local>/f|.R|FakeOverride<kotlin/Function0.invoke: R|T|>|()"];
138 [label="Jump: ^runHigherOrder R|<local>/f|.R|FakeOverride<kotlin/Function0.invoke: R|T|>|()"];
139 [label="Stub" style="filled" fillcolor=gray];
140 [label="Exit block" style="filled" fillcolor=gray];
}
138 [label="Exit property" style="filled" fillcolor=red];
141 [label="Exit function runHigherOrder" style="filled" fillcolor=red];
}
135 -> {136};
136 -> {137};
137 -> {138};
132 -> {134};
134 -> {135};
135 -> {133};
135 -> {136} [style=dotted];
136 -> {133} [style=dotted];
138 -> {141};
138 -> {139} [style=dotted];
139 -> {140} [style=dotted];
140 -> {141} [style=dotted];
subgraph cluster_35 {
subgraph cluster_38 {
color=red
139 [label="Enter function test_4" style="filled" fillcolor=red];
141 [label="Access variable R|<local>/a|"];
142 [label="Type operator: (R|<local>/a| as? R|kotlin/String|)"];
143 [label="Variable declaration: lval s: R|kotlin/String?|"];
subgraph cluster_36 {
142 [label="Enter function getter" style="filled" fillcolor=red];
subgraph cluster_39 {
color=blue
144 [label="Enter when"];
146 [label="Access variable R|<local>/s|"];
147 [label="Enter safe call"];
149 [label="Access variable R|/ext|"];
148 [label="Exit safe call"];
150 [label="Variable declaration: lval <elvis>: R|kotlin/Int?|"];
subgraph cluster_37 {
color=blue
151 [label="Enter when branch condition "];
152 [label="Const: Null(null)"];
153 [label="Operator =="];
154 [label="Exit when branch condition"];
}
subgraph cluster_38 {
color=blue
161 [label="Enter when branch condition else"];
162 [label="Exit when branch condition"];
}
163 [label="Enter when branch result"];
subgraph cluster_39 {
color=blue
164 [label="Enter block"];
165 [label="Access variable R|<local>/<elvis>|"];
166 [label="Exit block"];
}
167 [label="Exit when branch result"];
155 [label="Enter when branch result"];
subgraph cluster_40 {
color=blue
156 [label="Enter block"];
157 [label="Jump: ^test_4 Unit"];
158 [label="Stub" style="filled" fillcolor=gray];
159 [label="Exit block" style="filled" fillcolor=gray];
}
160 [label="Exit when branch result" style="filled" fillcolor=gray];
145 [label="Exit when"];
143 [label="Enter block"];
144 [label="Access variable R|kotlin/String.length|"];
145 [label="Jump: ^ this@R|/ext|.R|kotlin/String.length|"];
146 [label="Stub" style="filled" fillcolor=gray];
147 [label="Exit block" style="filled" fillcolor=gray];
}
168 [label="Variable declaration: lval length: R|kotlin/Int|"];
169 [label="Postponed enter to lambda"];
subgraph cluster_41 {
color=blue
172 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
174 [label="Access variable R|<local>/s|"];
175 [label="Access variable R|kotlin/String.length|"];
173 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
170 [label="Postponed exit from lambda"];
171 [label="Function call: R|/runHigherOrder|<R|kotlin/Int|>(...)"];
140 [label="Exit function test_4" style="filled" fillcolor=red];
148 [label="Exit function getter" style="filled" fillcolor=red];
}
139 -> {141};
141 -> {142};
142 -> {143};
143 -> {144};
144 -> {146};
145 -> {168};
146 -> {147 148};
147 -> {149};
148 -> {150};
149 -> {148};
144 -> {145};
145 -> {148};
145 -> {146} [style=dotted];
146 -> {147} [style=dotted];
147 -> {148} [style=dotted];
subgraph cluster_40 {
color=red
149 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_41 {
color=blue
150 [label="Enter block"];
151 [label="Access variable R|<local>/a|"];
152 [label="Type operator: (R|<local>/a| as? R|kotlin/String|)"];
153 [label="Variable declaration: lval s: R|kotlin/String?|"];
subgraph cluster_42 {
color=blue
154 [label="Enter when"];
155 [label="Access variable R|<local>/s|"];
156 [label="Enter safe call"];
157 [label="Access variable R|/ext|"];
158 [label="Exit safe call"];
159 [label="Variable declaration: lval <elvis>: R|kotlin/Int?|"];
subgraph cluster_43 {
color=blue
160 [label="Enter when branch condition "];
161 [label="Const: Null(null)"];
162 [label="Operator =="];
163 [label="Exit when branch condition"];
}
subgraph cluster_44 {
color=blue
164 [label="Enter when branch condition else"];
165 [label="Exit when branch condition"];
}
166 [label="Enter when branch result"];
subgraph cluster_45 {
color=blue
167 [label="Enter block"];
168 [label="Access variable R|<local>/<elvis>|"];
169 [label="Exit block"];
}
170 [label="Exit when branch result"];
171 [label="Enter when branch result"];
subgraph cluster_46 {
color=blue
172 [label="Enter block"];
173 [label="Jump: ^test_4 Unit"];
174 [label="Stub" style="filled" fillcolor=gray];
175 [label="Exit block" style="filled" fillcolor=gray];
}
176 [label="Exit when branch result" style="filled" fillcolor=gray];
177 [label="Exit when"];
}
178 [label="Variable declaration: lval length: R|kotlin/Int|"];
179 [label="Postponed enter to lambda"];
subgraph cluster_47 {
color=blue
184 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_48 {
color=blue
185 [label="Enter block"];
186 [label="Access variable R|<local>/s|"];
187 [label="Access variable R|kotlin/String.length|"];
188 [label="Exit block"];
}
189 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
180 [label="Postponed exit from lambda"];
181 [label="Function call: R|/runHigherOrder|<R|kotlin/Int|>(...)"];
182 [label="Exit block"];
}
183 [label="Exit function test_4" style="filled" fillcolor=red];
}
149 -> {150};
150 -> {151};
151 -> {152};
152 -> {153};
153 -> {154};
154 -> {155 161};
155 -> {156};
154 -> {155};
155 -> {156 158};
156 -> {157};
157 -> {140};
157 -> {158} [style=dotted];
158 -> {159} [style=dotted];
159 -> {160} [style=dotted];
160 -> {145} [style=dotted];
157 -> {158};
158 -> {159};
159 -> {160};
160 -> {161};
161 -> {162};
162 -> {163};
163 -> {164};
163 -> {171 164};
164 -> {165};
165 -> {166};
166 -> {167};
167 -> {145};
167 -> {168};
168 -> {169};
169 -> {170};
169 -> {172} [color=red];
170 -> {171};
171 -> {140};
172 -> {174};
174 -> {175};
175 -> {173};
170 -> {177};
171 -> {172};
172 -> {173};
173 -> {183};
173 -> {174} [style=dotted];
174 -> {175} [style=dotted];
175 -> {176} [style=dotted];
176 -> {177} [style=dotted];
177 -> {178};
178 -> {179};
179 -> {180 184};
180 -> {181};
181 -> {182};
182 -> {183};
184 -> {185};
185 -> {186};
186 -> {187};
187 -> {188};
188 -> {189};
}

View File

@@ -8,179 +8,200 @@ digraph simpleIf_kt {
0 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
2 [label="Enter when"];
1 [label="Enter block"];
subgraph cluster_2 {
color=blue
4 [label="Enter when branch condition "];
5 [label="Access variable R|<local>/x|"];
6 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
7 [label="Exit when branch condition"];
2 [label="Enter when"];
subgraph cluster_3 {
color=blue
3 [label="Enter when branch condition "];
4 [label="Access variable R|<local>/x|"];
5 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
6 [label="Exit when branch condition"];
}
7 [label="Synthetic else branch"];
8 [label="Enter when branch result"];
subgraph cluster_4 {
color=blue
9 [label="Enter block"];
10 [label="Access variable R|<local>/x|"];
11 [label="Access variable R|kotlin/String.length|"];
12 [label="Exit block"];
}
13 [label="Exit when branch result"];
14 [label="Exit when"];
}
14 [label="Synthetic else branch"];
8 [label="Enter when branch result"];
subgraph cluster_3 {
color=blue
9 [label="Enter block"];
10 [label="Access variable R|<local>/x|"];
11 [label="Access variable R|kotlin/String.length|"];
12 [label="Exit block"];
}
13 [label="Exit when branch result"];
3 [label="Exit when"];
15 [label="Access variable R|<local>/x|"];
16 [label="Access variable <Unresolved name: length>#"];
17 [label="Exit block"];
}
15 [label="Access variable R|<local>/x|"];
16 [label="Access variable <Unresolved name: length>#"];
1 [label="Exit function test_1" style="filled" fillcolor=red];
18 [label="Exit function test_1" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {4};
3 -> {15};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
4 -> {5};
5 -> {6};
6 -> {7};
7 -> {8 14};
6 -> {8 7};
7 -> {14};
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {12};
12 -> {13};
13 -> {3};
14 -> {3};
13 -> {14};
14 -> {15};
15 -> {16};
16 -> {1};
16 -> {17};
17 -> {18};
subgraph cluster_4 {
subgraph cluster_5 {
color=red
17 [label="Enter function test_2" style="filled" fillcolor=red];
19 [label="Access variable R|<local>/x|"];
20 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
21 [label="Variable declaration: lval b: R|kotlin/Boolean|"];
subgraph cluster_5 {
19 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_6 {
color=blue
22 [label="Enter when"];
subgraph cluster_6 {
color=blue
24 [label="Enter when branch condition "];
25 [label="Access variable R|<local>/b|"];
26 [label="Exit when branch condition"];
}
33 [label="Synthetic else branch"];
27 [label="Enter when branch result"];
20 [label="Enter block"];
21 [label="Access variable R|<local>/x|"];
22 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
23 [label="Variable declaration: lval b: R|kotlin/Boolean|"];
subgraph cluster_7 {
color=blue
28 [label="Enter block"];
29 [label="Access variable R|<local>/x|"];
30 [label="Access variable R|kotlin/String.length|"];
31 [label="Exit block"];
24 [label="Enter when"];
subgraph cluster_8 {
color=blue
25 [label="Enter when branch condition "];
26 [label="Access variable R|<local>/b|"];
27 [label="Exit when branch condition"];
}
28 [label="Synthetic else branch"];
29 [label="Enter when branch result"];
subgraph cluster_9 {
color=blue
30 [label="Enter block"];
31 [label="Access variable R|<local>/x|"];
32 [label="Access variable R|kotlin/String.length|"];
33 [label="Exit block"];
}
34 [label="Exit when branch result"];
35 [label="Exit when"];
}
32 [label="Exit when branch result"];
23 [label="Exit when"];
36 [label="Access variable R|<local>/x|"];
37 [label="Access variable <Unresolved name: length>#"];
38 [label="Exit block"];
}
34 [label="Access variable R|<local>/x|"];
35 [label="Access variable <Unresolved name: length>#"];
18 [label="Exit function test_2" style="filled" fillcolor=red];
39 [label="Exit function test_2" style="filled" fillcolor=red];
}
17 -> {19};
19 -> {20};
20 -> {21};
21 -> {22};
22 -> {24};
23 -> {34};
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {26};
26 -> {27 33};
27 -> {28};
28 -> {29};
26 -> {27};
27 -> {29 28};
28 -> {35};
29 -> {30};
30 -> {31};
31 -> {32};
32 -> {23};
33 -> {23};
32 -> {33};
33 -> {34};
34 -> {35};
35 -> {18};
35 -> {36};
36 -> {37};
37 -> {38};
38 -> {39};
subgraph cluster_8 {
subgraph cluster_10 {
color=red
36 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_9 {
40 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_11 {
color=blue
38 [label="Enter when"];
subgraph cluster_10 {
color=blue
40 [label="Enter when branch condition "];
41 [label="Access variable R|<local>/x|"];
42 [label="Type operator: (R|<local>/x| !is R|kotlin/String|)"];
43 [label="Exit when branch condition"];
}
subgraph cluster_11 {
color=blue
48 [label="Enter when branch condition "];
49 [label="Access variable R|<local>/x|"];
50 [label="Type operator: (R|<local>/x| !is R|kotlin/Int|)"];
51 [label="Exit when branch condition"];
}
41 [label="Enter block"];
subgraph cluster_12 {
color=blue
56 [label="Enter when branch condition else"];
57 [label="Exit when branch condition"];
42 [label="Enter when"];
subgraph cluster_13 {
color=blue
43 [label="Enter when branch condition "];
44 [label="Access variable R|<local>/x|"];
45 [label="Type operator: (R|<local>/x| !is R|kotlin/String|)"];
46 [label="Exit when branch condition"];
}
subgraph cluster_14 {
color=blue
47 [label="Enter when branch condition "];
48 [label="Access variable R|<local>/x|"];
49 [label="Type operator: (R|<local>/x| !is R|kotlin/Int|)"];
50 [label="Exit when branch condition"];
}
subgraph cluster_15 {
color=blue
51 [label="Enter when branch condition else"];
52 [label="Exit when branch condition"];
}
53 [label="Enter when branch result"];
subgraph cluster_16 {
color=blue
54 [label="Enter block"];
55 [label="Access variable R|<local>/x|"];
56 [label="Access variable R|kotlin/String.length|"];
57 [label="Access variable R|<local>/x|"];
58 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
59 [label="Exit block"];
}
60 [label="Exit when branch result"];
61 [label="Enter when branch result"];
subgraph cluster_17 {
color=blue
62 [label="Enter block"];
63 [label="Exit block"];
}
64 [label="Exit when branch result"];
65 [label="Enter when branch result"];
subgraph cluster_18 {
color=blue
66 [label="Enter block"];
67 [label="Exit block"];
}
68 [label="Exit when branch result"];
69 [label="Exit when"];
}
58 [label="Enter when branch result"];
subgraph cluster_13 {
color=blue
59 [label="Enter block"];
60 [label="Access variable R|<local>/x|"];
61 [label="Access variable R|kotlin/String.length|"];
62 [label="Access variable R|<local>/x|"];
63 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
64 [label="Exit block"];
}
65 [label="Exit when branch result"];
52 [label="Enter when branch result"];
subgraph cluster_14 {
color=blue
53 [label="Enter block"];
54 [label="Exit block"];
}
55 [label="Exit when branch result"];
44 [label="Enter when branch result"];
subgraph cluster_15 {
color=blue
45 [label="Enter block"];
46 [label="Exit block"];
}
47 [label="Exit when branch result"];
39 [label="Exit when"];
70 [label="Exit block"];
}
37 [label="Exit function test_3" style="filled" fillcolor=red];
71 [label="Exit function test_3" style="filled" fillcolor=red];
}
36 -> {38};
38 -> {40};
39 -> {37};
40 -> {41};
41 -> {42};
42 -> {43};
43 -> {44 48};
43 -> {44};
44 -> {45};
45 -> {46};
46 -> {47};
47 -> {39};
46 -> {65 47};
47 -> {48};
48 -> {49};
49 -> {50};
50 -> {51};
51 -> {52 56};
50 -> {61 51};
51 -> {52};
52 -> {53};
53 -> {54};
54 -> {55};
55 -> {39};
55 -> {56};
56 -> {57};
57 -> {58};
58 -> {59};
59 -> {60};
60 -> {61};
60 -> {69};
61 -> {62};
62 -> {63};
63 -> {64};
64 -> {65};
65 -> {39};
64 -> {69};
65 -> {66};
66 -> {67};
67 -> {68};
68 -> {69};
69 -> {70};
70 -> {71};
}

View File

@@ -5,130 +5,144 @@ digraph smartcastFromArgument_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function foo" style="filled" fillcolor=red];
1 [label="Exit function foo" style="filled" fillcolor=red];
0 [label="Enter class A" style="filled" fillcolor=red];
1 [label="Exit class A" style="filled" fillcolor=red];
}
0 -> {1};
0 -> {1} [color=green];
subgraph cluster_1 {
color=red
2 [label="Enter class A" style="filled" fillcolor=red];
3 [label="Exit class A" style="filled" fillcolor=red];
2 [label="Enter function foo" style="filled" fillcolor=red];
3 [label="Exit function foo" style="filled" fillcolor=red];
}
2 -> {3} [color=green];
2 -> {3};
subgraph cluster_2 {
color=red
4 [label="Enter function takeA" style="filled" fillcolor=red];
6 [label="Const: Boolean(true)"];
7 [label="Jump: ^takeA Boolean(true)"];
8 [label="Stub" style="filled" fillcolor=gray];
5 [label="Exit function takeA" style="filled" fillcolor=red];
}
4 -> {6};
6 -> {7};
7 -> {5};
7 -> {8} [style=dotted];
8 -> {5} [style=dotted];
subgraph cluster_3 {
color=red
9 [label="Enter function test" style="filled" fillcolor=red];
subgraph cluster_4 {
subgraph cluster_3 {
color=blue
11 [label="Enter when"];
subgraph cluster_5 {
5 [label="Enter block"];
6 [label="Const: Boolean(true)"];
7 [label="Jump: ^takeA Boolean(true)"];
8 [label="Stub" style="filled" fillcolor=gray];
9 [label="Exit block" style="filled" fillcolor=gray];
}
10 [label="Exit function takeA" style="filled" fillcolor=red];
}
4 -> {5};
5 -> {6};
6 -> {7};
7 -> {10};
7 -> {8} [style=dotted];
8 -> {9} [style=dotted];
9 -> {10} [style=dotted];
subgraph cluster_4 {
color=red
11 [label="Enter function test" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
12 [label="Enter block"];
subgraph cluster_6 {
color=blue
13 [label="Enter when branch condition "];
subgraph cluster_6 {
13 [label="Enter when"];
subgraph cluster_7 {
color=blue
14 [label="Enter when"];
16 [label="Access variable R|<local>/a|"];
17 [label="Type operator: (R|<local>/a| as? R|A|)"];
18 [label="Variable declaration: lval <elvis>: R|A?|"];
subgraph cluster_7 {
color=blue
19 [label="Enter when branch condition "];
20 [label="Const: Null(null)"];
21 [label="Operator =="];
22 [label="Exit when branch condition"];
}
14 [label="Enter when branch condition "];
subgraph cluster_8 {
color=blue
29 [label="Enter when branch condition else"];
30 [label="Exit when branch condition"];
15 [label="Enter when"];
16 [label="Access variable R|<local>/a|"];
17 [label="Type operator: (R|<local>/a| as? R|A|)"];
18 [label="Variable declaration: lval <elvis>: R|A?|"];
subgraph cluster_9 {
color=blue
19 [label="Enter when branch condition "];
20 [label="Const: Null(null)"];
21 [label="Operator =="];
22 [label="Exit when branch condition"];
}
subgraph cluster_10 {
color=blue
23 [label="Enter when branch condition else"];
24 [label="Exit when branch condition"];
}
25 [label="Enter when branch result"];
subgraph cluster_11 {
color=blue
26 [label="Enter block"];
27 [label="Access variable R|<local>/<elvis>|"];
28 [label="Exit block"];
}
29 [label="Exit when branch result"];
30 [label="Enter when branch result"];
subgraph cluster_12 {
color=blue
31 [label="Enter block"];
32 [label="Jump: ^test Unit"];
33 [label="Stub" style="filled" fillcolor=gray];
34 [label="Exit block" style="filled" fillcolor=gray];
}
35 [label="Exit when branch result" style="filled" fillcolor=gray];
36 [label="Exit when"];
}
31 [label="Enter when branch result"];
subgraph cluster_9 {
color=blue
32 [label="Enter block"];
33 [label="Access variable R|<local>/<elvis>|"];
34 [label="Exit block"];
}
35 [label="Exit when branch result"];
23 [label="Enter when branch result"];
subgraph cluster_10 {
color=blue
24 [label="Enter block"];
25 [label="Jump: ^test Unit"];
26 [label="Stub" style="filled" fillcolor=gray];
27 [label="Exit block" style="filled" fillcolor=gray];
}
28 [label="Exit when branch result" style="filled" fillcolor=gray];
15 [label="Exit when"];
37 [label="Function call: R|/takeA|(...)"];
38 [label="Exit when branch condition"];
}
36 [label="Function call: R|/takeA|(...)"];
37 [label="Exit when branch condition"];
39 [label="Synthetic else branch"];
40 [label="Enter when branch result"];
subgraph cluster_13 {
color=blue
41 [label="Enter block"];
42 [label="Access variable R|<local>/a|"];
43 [label="Function call: R|<local>/a|.R|/A.foo|()"];
44 [label="Exit block"];
}
45 [label="Exit when branch result"];
46 [label="Exit when"];
}
44 [label="Synthetic else branch"];
38 [label="Enter when branch result"];
subgraph cluster_11 {
color=blue
39 [label="Enter block"];
40 [label="Access variable R|<local>/a|"];
41 [label="Function call: R|<local>/a|.R|/A.foo|()"];
42 [label="Exit block"];
}
43 [label="Exit when branch result"];
12 [label="Exit when"];
47 [label="Exit block"];
}
10 [label="Exit function test" style="filled" fillcolor=red];
48 [label="Exit function test" style="filled" fillcolor=red];
}
9 -> {11};
11 -> {13};
12 -> {10};
11 -> {12};
12 -> {13};
13 -> {14};
14 -> {16};
15 -> {36};
14 -> {15};
15 -> {16};
16 -> {17};
17 -> {18};
18 -> {19};
19 -> {20};
20 -> {21};
21 -> {22};
22 -> {23 29};
22 -> {30 23};
23 -> {24};
24 -> {25};
25 -> {10};
25 -> {26} [style=dotted];
26 -> {27} [style=dotted];
27 -> {28} [style=dotted];
28 -> {15} [style=dotted];
29 -> {30};
25 -> {26};
26 -> {27};
27 -> {28};
28 -> {29};
29 -> {36};
30 -> {31};
31 -> {32};
32 -> {33};
33 -> {34};
34 -> {35};
35 -> {15};
32 -> {48};
32 -> {33} [style=dotted];
33 -> {34} [style=dotted];
34 -> {35} [style=dotted];
35 -> {36} [style=dotted];
36 -> {37};
37 -> {38 44};
38 -> {39};
39 -> {40};
37 -> {38};
38 -> {40 39};
39 -> {46};
40 -> {41};
41 -> {42};
42 -> {43};
43 -> {12};
44 -> {12};
43 -> {44};
44 -> {45};
45 -> {46};
46 -> {47};
47 -> {48};
}

View File

@@ -5,81 +5,87 @@ digraph equalsAndIdentity_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function foo" style="filled" fillcolor=red];
1 [label="Exit function foo" style="filled" fillcolor=red];
0 [label="Enter class A" style="filled" fillcolor=red];
1 [label="Exit class A" style="filled" fillcolor=red];
}
0 -> {1};
0 -> {1} [color=green];
subgraph cluster_1 {
color=red
2 [label="Enter class A" style="filled" fillcolor=red];
3 [label="Exit class A" style="filled" fillcolor=red];
2 [label="Enter function foo" style="filled" fillcolor=red];
3 [label="Exit function foo" style="filled" fillcolor=red];
}
2 -> {3} [color=green];
2 -> {3};
subgraph cluster_2 {
color=red
4 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
6 [label="Enter when"];
5 [label="Enter block"];
subgraph cluster_4 {
color=blue
8 [label="Enter when branch condition "];
9 [label="Access variable R|<local>/x|"];
10 [label="Access variable R|<local>/y|"];
11 [label="Operator =="];
12 [label="Exit when branch condition"];
6 [label="Enter when"];
subgraph cluster_5 {
color=blue
7 [label="Enter when branch condition "];
8 [label="Access variable R|<local>/x|"];
9 [label="Access variable R|<local>/y|"];
10 [label="Operator =="];
11 [label="Exit when branch condition"];
}
12 [label="Synthetic else branch"];
13 [label="Enter when branch result"];
subgraph cluster_6 {
color=blue
14 [label="Enter block"];
15 [label="Access variable R|<local>/x|"];
16 [label="Function call: R|<local>/x|.R|/A.foo|()"];
17 [label="Access variable R|<local>/y|"];
18 [label="Function call: R|<local>/y|.R|/A.foo|()"];
19 [label="Exit block"];
}
20 [label="Exit when branch result"];
21 [label="Exit when"];
}
21 [label="Synthetic else branch"];
13 [label="Enter when branch result"];
subgraph cluster_5 {
color=blue
14 [label="Enter block"];
15 [label="Access variable R|<local>/x|"];
16 [label="Function call: R|<local>/x|.R|/A.foo|()"];
17 [label="Access variable R|<local>/y|"];
18 [label="Function call: R|<local>/y|.R|/A.foo|()"];
19 [label="Exit block"];
}
20 [label="Exit when branch result"];
7 [label="Exit when"];
}
subgraph cluster_6 {
color=blue
22 [label="Enter when"];
subgraph cluster_7 {
color=blue
24 [label="Enter when branch condition "];
25 [label="Access variable R|<local>/x|"];
26 [label="Access variable R|<local>/y|"];
27 [label="Operator ==="];
28 [label="Exit when branch condition"];
22 [label="Enter when"];
subgraph cluster_8 {
color=blue
23 [label="Enter when branch condition "];
24 [label="Access variable R|<local>/x|"];
25 [label="Access variable R|<local>/y|"];
26 [label="Operator ==="];
27 [label="Exit when branch condition"];
}
28 [label="Synthetic else branch"];
29 [label="Enter when branch result"];
subgraph cluster_9 {
color=blue
30 [label="Enter block"];
31 [label="Access variable R|<local>/x|"];
32 [label="Function call: R|<local>/x|.R|/A.foo|()"];
33 [label="Access variable R|<local>/y|"];
34 [label="Function call: R|<local>/y|.R|/A.foo|()"];
35 [label="Exit block"];
}
36 [label="Exit when branch result"];
37 [label="Exit when"];
}
37 [label="Synthetic else branch"];
29 [label="Enter when branch result"];
subgraph cluster_8 {
color=blue
30 [label="Enter block"];
31 [label="Access variable R|<local>/x|"];
32 [label="Function call: R|<local>/x|.R|/A.foo|()"];
33 [label="Access variable R|<local>/y|"];
34 [label="Function call: R|<local>/y|.R|/A.foo|()"];
35 [label="Exit block"];
}
36 [label="Exit when branch result"];
23 [label="Exit when"];
38 [label="Exit block"];
}
5 [label="Exit function test_1" style="filled" fillcolor=red];
39 [label="Exit function test_1" style="filled" fillcolor=red];
}
4 -> {6};
6 -> {8};
7 -> {22};
4 -> {5};
5 -> {6};
6 -> {7};
7 -> {8};
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {12};
12 -> {13 21};
11 -> {13 12};
12 -> {21};
13 -> {14};
14 -> {15};
15 -> {16};
@@ -87,15 +93,15 @@ digraph equalsAndIdentity_kt {
17 -> {18};
18 -> {19};
19 -> {20};
20 -> {7};
21 -> {7};
22 -> {24};
23 -> {5};
20 -> {21};
21 -> {22};
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {26};
26 -> {27};
27 -> {28};
28 -> {29 37};
27 -> {29 28};
28 -> {37};
29 -> {30};
30 -> {31};
31 -> {32};
@@ -103,223 +109,238 @@ digraph equalsAndIdentity_kt {
33 -> {34};
34 -> {35};
35 -> {36};
36 -> {23};
37 -> {23};
36 -> {37};
37 -> {38};
38 -> {39};
subgraph cluster_9 {
subgraph cluster_10 {
color=red
38 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_10 {
40 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_11 {
color=blue
40 [label="Enter when"];
subgraph cluster_11 {
color=blue
42 [label="Enter when branch condition "];
43 [label="Access variable R|<local>/x|"];
44 [label="Access variable R|<local>/y|"];
45 [label="Operator =="];
46 [label="Exit when branch condition"];
}
55 [label="Synthetic else branch"];
47 [label="Enter when branch result"];
41 [label="Enter block"];
subgraph cluster_12 {
color=blue
48 [label="Enter block"];
49 [label="Access variable R|<local>/x|"];
50 [label="Function call: R|<local>/x|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
51 [label="Access variable R|<local>/y|"];
52 [label="Function call: R|<local>/y|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
53 [label="Exit block"];
42 [label="Enter when"];
subgraph cluster_13 {
color=blue
43 [label="Enter when branch condition "];
44 [label="Access variable R|<local>/x|"];
45 [label="Access variable R|<local>/y|"];
46 [label="Operator =="];
47 [label="Exit when branch condition"];
}
48 [label="Synthetic else branch"];
49 [label="Enter when branch result"];
subgraph cluster_14 {
color=blue
50 [label="Enter block"];
51 [label="Access variable R|<local>/x|"];
52 [label="Function call: R|<local>/x|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
53 [label="Access variable R|<local>/y|"];
54 [label="Function call: R|<local>/y|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
55 [label="Exit block"];
}
56 [label="Exit when branch result"];
57 [label="Exit when"];
}
54 [label="Exit when branch result"];
41 [label="Exit when"];
}
subgraph cluster_13 {
color=blue
56 [label="Enter when"];
subgraph cluster_14 {
color=blue
58 [label="Enter when branch condition "];
59 [label="Access variable R|<local>/x|"];
60 [label="Access variable R|<local>/y|"];
61 [label="Operator ==="];
62 [label="Exit when branch condition"];
}
71 [label="Synthetic else branch"];
63 [label="Enter when branch result"];
subgraph cluster_15 {
color=blue
64 [label="Enter block"];
65 [label="Access variable R|<local>/x|"];
66 [label="Function call: R|<local>/x|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
67 [label="Access variable R|<local>/y|"];
68 [label="Function call: R|<local>/y|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
69 [label="Exit block"];
58 [label="Enter when"];
subgraph cluster_16 {
color=blue
59 [label="Enter when branch condition "];
60 [label="Access variable R|<local>/x|"];
61 [label="Access variable R|<local>/y|"];
62 [label="Operator ==="];
63 [label="Exit when branch condition"];
}
64 [label="Synthetic else branch"];
65 [label="Enter when branch result"];
subgraph cluster_17 {
color=blue
66 [label="Enter block"];
67 [label="Access variable R|<local>/x|"];
68 [label="Function call: R|<local>/x|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
69 [label="Access variable R|<local>/y|"];
70 [label="Function call: R|<local>/y|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
71 [label="Exit block"];
}
72 [label="Exit when branch result"];
73 [label="Exit when"];
}
70 [label="Exit when branch result"];
57 [label="Exit when"];
74 [label="Exit block"];
}
39 [label="Exit function test_2" style="filled" fillcolor=red];
75 [label="Exit function test_2" style="filled" fillcolor=red];
}
38 -> {40};
40 -> {42};
41 -> {56};
40 -> {41};
41 -> {42};
42 -> {43};
43 -> {44};
44 -> {45};
45 -> {46};
46 -> {47 55};
47 -> {48};
48 -> {49};
46 -> {47};
47 -> {49 48};
48 -> {57};
49 -> {50};
50 -> {51};
51 -> {52};
52 -> {53};
53 -> {54};
54 -> {41};
55 -> {41};
56 -> {58};
57 -> {39};
54 -> {55};
55 -> {56};
56 -> {57};
57 -> {58};
58 -> {59};
59 -> {60};
60 -> {61};
61 -> {62};
62 -> {63 71};
63 -> {64};
64 -> {65};
62 -> {63};
63 -> {65 64};
64 -> {73};
65 -> {66};
66 -> {67};
67 -> {68};
68 -> {69};
69 -> {70};
70 -> {57};
71 -> {57};
70 -> {71};
71 -> {72};
72 -> {73};
73 -> {74};
74 -> {75};
subgraph cluster_16 {
subgraph cluster_18 {
color=red
72 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_17 {
76 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_19 {
color=blue
74 [label="Enter when"];
subgraph cluster_18 {
77 [label="Enter block"];
subgraph cluster_20 {
color=blue
76 [label="Enter when branch condition "];
77 [label="Access variable R|<local>/y|"];
78 [label="Const: Null(null)"];
79 [label="Operator =="];
80 [label="Exit when branch condition"];
78 [label="Enter when"];
subgraph cluster_21 {
color=blue
79 [label="Enter when branch condition "];
80 [label="Access variable R|<local>/y|"];
81 [label="Const: Null(null)"];
82 [label="Operator =="];
83 [label="Exit when branch condition"];
}
84 [label="Synthetic else branch"];
85 [label="Enter when branch result"];
subgraph cluster_22 {
color=blue
86 [label="Enter block"];
87 [label="Jump: ^test_3 Unit"];
88 [label="Stub" style="filled" fillcolor=gray];
89 [label="Exit block" style="filled" fillcolor=gray];
}
90 [label="Exit when branch result" style="filled" fillcolor=gray];
91 [label="Exit when"];
}
87 [label="Synthetic else branch"];
81 [label="Enter when branch result"];
subgraph cluster_19 {
subgraph cluster_23 {
color=blue
82 [label="Enter block"];
83 [label="Jump: ^test_3 Unit"];
84 [label="Stub" style="filled" fillcolor=gray];
85 [label="Exit block" style="filled" fillcolor=gray];
92 [label="Enter when"];
subgraph cluster_24 {
color=blue
93 [label="Enter when branch condition "];
94 [label="Access variable R|<local>/x|"];
95 [label="Access variable R|<local>/y|"];
96 [label="Operator =="];
97 [label="Exit when branch condition"];
}
98 [label="Synthetic else branch"];
99 [label="Enter when branch result"];
subgraph cluster_25 {
color=blue
100 [label="Enter block"];
101 [label="Access variable R|<local>/x|"];
102 [label="Function call: R|<local>/x|.R|/A.foo|()"];
103 [label="Access variable R|<local>/y|"];
104 [label="Function call: R|<local>/y|.R|/A.foo|()"];
105 [label="Exit block"];
}
106 [label="Exit when branch result"];
107 [label="Exit when"];
}
86 [label="Exit when branch result" style="filled" fillcolor=gray];
75 [label="Exit when"];
subgraph cluster_26 {
color=blue
108 [label="Enter when"];
subgraph cluster_27 {
color=blue
109 [label="Enter when branch condition "];
110 [label="Access variable R|<local>/x|"];
111 [label="Access variable R|<local>/y|"];
112 [label="Operator ==="];
113 [label="Exit when branch condition"];
}
114 [label="Synthetic else branch"];
115 [label="Enter when branch result"];
subgraph cluster_28 {
color=blue
116 [label="Enter block"];
117 [label="Access variable R|<local>/x|"];
118 [label="Function call: R|<local>/x|.R|/A.foo|()"];
119 [label="Access variable R|<local>/y|"];
120 [label="Function call: R|<local>/y|.R|/A.foo|()"];
121 [label="Exit block"];
}
122 [label="Exit when branch result"];
123 [label="Exit when"];
}
124 [label="Exit block"];
}
subgraph cluster_20 {
color=blue
88 [label="Enter when"];
subgraph cluster_21 {
color=blue
90 [label="Enter when branch condition "];
91 [label="Access variable R|<local>/x|"];
92 [label="Access variable R|<local>/y|"];
93 [label="Operator =="];
94 [label="Exit when branch condition"];
}
103 [label="Synthetic else branch"];
95 [label="Enter when branch result"];
subgraph cluster_22 {
color=blue
96 [label="Enter block"];
97 [label="Access variable R|<local>/x|"];
98 [label="Function call: R|<local>/x|.R|/A.foo|()"];
99 [label="Access variable R|<local>/y|"];
100 [label="Function call: R|<local>/y|.R|/A.foo|()"];
101 [label="Exit block"];
}
102 [label="Exit when branch result"];
89 [label="Exit when"];
}
subgraph cluster_23 {
color=blue
104 [label="Enter when"];
subgraph cluster_24 {
color=blue
106 [label="Enter when branch condition "];
107 [label="Access variable R|<local>/x|"];
108 [label="Access variable R|<local>/y|"];
109 [label="Operator ==="];
110 [label="Exit when branch condition"];
}
119 [label="Synthetic else branch"];
111 [label="Enter when branch result"];
subgraph cluster_25 {
color=blue
112 [label="Enter block"];
113 [label="Access variable R|<local>/x|"];
114 [label="Function call: R|<local>/x|.R|/A.foo|()"];
115 [label="Access variable R|<local>/y|"];
116 [label="Function call: R|<local>/y|.R|/A.foo|()"];
117 [label="Exit block"];
}
118 [label="Exit when branch result"];
105 [label="Exit when"];
}
73 [label="Exit function test_3" style="filled" fillcolor=red];
125 [label="Exit function test_3" style="filled" fillcolor=red];
}
72 -> {74};
74 -> {76};
75 -> {88};
76 -> {77};
77 -> {78};
78 -> {79};
79 -> {80};
80 -> {81 87};
80 -> {81};
81 -> {82};
82 -> {83};
83 -> {73};
83 -> {84} [style=dotted];
84 -> {85} [style=dotted];
85 -> {86} [style=dotted];
86 -> {75} [style=dotted];
87 -> {75};
88 -> {90};
89 -> {104};
90 -> {91};
83 -> {85 84};
84 -> {91};
85 -> {86};
86 -> {87};
87 -> {125};
87 -> {88} [style=dotted];
88 -> {89} [style=dotted];
89 -> {90} [style=dotted];
90 -> {91} [style=dotted];
91 -> {92};
92 -> {93};
93 -> {94};
94 -> {95 103};
94 -> {95};
95 -> {96};
96 -> {97};
97 -> {98};
98 -> {99};
97 -> {99 98};
98 -> {107};
99 -> {100};
100 -> {101};
101 -> {102};
102 -> {89};
103 -> {89};
104 -> {106};
105 -> {73};
102 -> {103};
103 -> {104};
104 -> {105};
105 -> {106};
106 -> {107};
107 -> {108};
108 -> {109};
109 -> {110};
110 -> {111 119};
110 -> {111};
111 -> {112};
112 -> {113};
113 -> {114};
114 -> {115};
113 -> {115 114};
114 -> {123};
115 -> {116};
116 -> {117};
117 -> {118};
118 -> {105};
119 -> {105};
118 -> {119};
119 -> {120};
120 -> {121};
121 -> {122};
122 -> {123};
123 -> {124};
124 -> {125};
}

View File

@@ -5,188 +5,230 @@ digraph inPlaceLambdas_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function foo" style="filled" fillcolor=red];
1 [label="Exit function foo" style="filled" fillcolor=red];
0 [label="Enter class A" style="filled" fillcolor=red];
1 [label="Exit class A" style="filled" fillcolor=red];
}
0 -> {1};
0 -> {1} [color=green];
subgraph cluster_1 {
color=red
2 [label="Enter class A" style="filled" fillcolor=red];
3 [label="Exit class A" style="filled" fillcolor=red];
2 [label="Enter function foo" style="filled" fillcolor=red];
3 [label="Exit function foo" style="filled" fillcolor=red];
}
2 -> {3} [color=green];
2 -> {3};
subgraph cluster_2 {
color=red
4 [label="Enter function bar" style="filled" fillcolor=red];
5 [label="Exit function bar" style="filled" fillcolor=red];
4 [label="Enter class B" style="filled" fillcolor=red];
5 [label="Exit class B" style="filled" fillcolor=red];
}
4 -> {5};
4 -> {5} [color=green];
subgraph cluster_3 {
color=red
6 [label="Enter class B" style="filled" fillcolor=red];
7 [label="Exit class B" style="filled" fillcolor=red];
6 [label="Enter function bar" style="filled" fillcolor=red];
7 [label="Exit function bar" style="filled" fillcolor=red];
}
6 -> {7} [color=green];
6 -> {7};
subgraph cluster_4 {
color=red
8 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
10 [label="Enter when"];
9 [label="Enter block"];
subgraph cluster_6 {
color=blue
12 [label="Enter when branch condition "];
13 [label="Access variable R|<local>/x|"];
14 [label="Type operator: (R|<local>/x| is R|A|)"];
15 [label="Exit when branch condition"];
}
24 [label="Synthetic else branch"];
16 [label="Enter when branch result"];
subgraph cluster_7 {
color=blue
17 [label="Enter block"];
18 [label="Postponed enter to lambda"];
10 [label="Enter when"];
subgraph cluster_7 {
color=blue
11 [label="Enter when branch condition "];
12 [label="Access variable R|<local>/x|"];
13 [label="Type operator: (R|<local>/x| is R|A|)"];
14 [label="Exit when branch condition"];
}
15 [label="Synthetic else branch"];
16 [label="Enter when branch result"];
subgraph cluster_8 {
color=blue
25 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
27 [label="Access variable R|<local>/x|"];
28 [label="Function call: R|<local>/x|.R|/A.foo|()"];
26 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
17 [label="Enter block"];
18 [label="Postponed enter to lambda"];
subgraph cluster_9 {
color=blue
27 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_10 {
color=blue
28 [label="Enter block"];
29 [label="Access variable R|<local>/x|"];
30 [label="Function call: R|<local>/x|.R|/A.foo|()"];
31 [label="Exit block"];
}
32 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
19 [label="Call arguments union" style="filled" fillcolor=yellow];
20 [label="Postponed exit from lambda"];
21 [label="Function call: R|kotlin/run|<R|kotlin/Unit|>(...)"];
22 [label="Exit block"];
}
21 [label="Call arguments union" style="filled" fillcolor=yellow];
19 [label="Postponed exit from lambda"];
20 [label="Function call: R|kotlin/run|<R|kotlin/Unit|>(...)"];
22 [label="Exit block"];
23 [label="Exit when branch result"];
24 [label="Exit when"];
}
23 [label="Exit when branch result"];
11 [label="Exit when"];
25 [label="Exit block"];
}
9 [label="Exit function test_1" style="filled" fillcolor=red];
26 [label="Exit function test_1" style="filled" fillcolor=red];
}
8 -> {10};
10 -> {12};
11 -> {9};
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {12};
12 -> {13};
13 -> {14};
14 -> {15};
15 -> {16 24};
14 -> {16 15};
15 -> {24};
16 -> {17};
17 -> {18};
18 -> {25};
18 -> {19} [color=red];
19 -> {20} [color=green];
20 -> {22};
21 -> {20} [color=red];
18 -> {27};
18 -> {20} [color=red];
19 -> {21} [color=red];
20 -> {21} [color=green];
21 -> {22};
22 -> {23};
23 -> {11};
24 -> {11};
25 -> {27};
26 -> {19} [color=green];
26 -> {21} [color=red];
23 -> {24};
24 -> {25};
25 -> {26};
27 -> {28};
28 -> {26};
subgraph cluster_9 {
color=red
29 [label="Enter function test_2" style="filled" fillcolor=red];
31 [label="Postponed enter to lambda"];
subgraph cluster_10 {
color=blue
37 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
39 [label="Access variable R|<local>/x|"];
40 [label="Type operator: (R|<local>/x| as R|B|)"];
38 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
34 [label="Call arguments union" style="filled" fillcolor=yellow];
32 [label="Postponed exit from lambda"];
33 [label="Function call: R|kotlin/run|<R|B|>(...)"];
35 [label="Access variable R|<local>/x|"];
36 [label="Function call: R|<local>/x|.R|/B.bar|()"];
30 [label="Exit function test_2" style="filled" fillcolor=red];
}
29 -> {31};
31 -> {37};
31 -> {32} [color=red];
32 -> {33} [color=green];
33 -> {35};
34 -> {33} [color=red];
35 -> {36};
36 -> {30};
37 -> {39};
38 -> {32} [color=green];
38 -> {34} [color=red];
39 -> {40};
40 -> {38};
28 -> {29};
29 -> {30};
30 -> {31};
31 -> {32};
32 -> {19} [color=red];
32 -> {20} [color=green];
subgraph cluster_11 {
color=red
41 [label="Enter function test_3" style="filled" fillcolor=red];
33 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_12 {
color=blue
43 [label="Enter when"];
34 [label="Enter block"];
35 [label="Postponed enter to lambda"];
subgraph cluster_13 {
color=blue
45 [label="Enter when branch condition "];
46 [label="Access variable R|<local>/x|"];
47 [label="Type operator: (R|<local>/x| is R|A|)"];
48 [label="Exit when branch condition"];
}
59 [label="Synthetic else branch"];
49 [label="Enter when branch result"];
subgraph cluster_14 {
color=blue
50 [label="Enter block"];
51 [label="Postponed enter to lambda"];
subgraph cluster_15 {
43 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_14 {
color=blue
60 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
62 [label="Access variable R|<local>/x|"];
63 [label="Function call: R|<local>/x|.R|/A.foo|()"];
64 [label="Access variable R|<local>/x|"];
65 [label="Type operator: (R|<local>/x| as R|B|)"];
61 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
44 [label="Enter block"];
45 [label="Access variable R|<local>/x|"];
46 [label="Type operator: (R|<local>/x| as R|B|)"];
47 [label="Exit block"];
}
54 [label="Call arguments union" style="filled" fillcolor=yellow];
52 [label="Postponed exit from lambda"];
53 [label="Function call: R|kotlin/run|<R|B|>(...)"];
55 [label="Access variable R|<local>/x|"];
56 [label="Function call: R|<local>/x|.R|/B.bar|()"];
57 [label="Exit block"];
48 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
58 [label="Exit when branch result"];
44 [label="Exit when"];
36 [label="Call arguments union" style="filled" fillcolor=yellow];
37 [label="Postponed exit from lambda"];
38 [label="Function call: R|kotlin/run|<R|B|>(...)"];
39 [label="Access variable R|<local>/x|"];
40 [label="Function call: R|<local>/x|.R|/B.bar|()"];
41 [label="Exit block"];
}
42 [label="Exit function test_3" style="filled" fillcolor=red];
42 [label="Exit function test_2" style="filled" fillcolor=red];
}
41 -> {43};
43 -> {45};
44 -> {42};
33 -> {34};
34 -> {35};
35 -> {43};
35 -> {37} [color=red];
36 -> {38} [color=red];
37 -> {38} [color=green];
38 -> {39};
39 -> {40};
40 -> {41};
41 -> {42};
43 -> {44};
44 -> {45};
45 -> {46};
46 -> {47};
47 -> {48};
48 -> {49 59};
48 -> {36} [color=red];
48 -> {37} [color=green];
subgraph cluster_15 {
color=red
49 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_16 {
color=blue
50 [label="Enter block"];
subgraph cluster_17 {
color=blue
51 [label="Enter when"];
subgraph cluster_18 {
color=blue
52 [label="Enter when branch condition "];
53 [label="Access variable R|<local>/x|"];
54 [label="Type operator: (R|<local>/x| is R|A|)"];
55 [label="Exit when branch condition"];
}
56 [label="Synthetic else branch"];
57 [label="Enter when branch result"];
subgraph cluster_19 {
color=blue
58 [label="Enter block"];
59 [label="Postponed enter to lambda"];
subgraph cluster_20 {
color=blue
70 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_21 {
color=blue
71 [label="Enter block"];
72 [label="Access variable R|<local>/x|"];
73 [label="Function call: R|<local>/x|.R|/A.foo|()"];
74 [label="Access variable R|<local>/x|"];
75 [label="Type operator: (R|<local>/x| as R|B|)"];
76 [label="Exit block"];
}
77 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
60 [label="Call arguments union" style="filled" fillcolor=yellow];
61 [label="Postponed exit from lambda"];
62 [label="Function call: R|kotlin/run|<R|B|>(...)"];
63 [label="Access variable R|<local>/x|"];
64 [label="Function call: R|<local>/x|.R|/B.bar|()"];
65 [label="Exit block"];
}
66 [label="Exit when branch result"];
67 [label="Exit when"];
}
68 [label="Exit block"];
}
69 [label="Exit function test_3" style="filled" fillcolor=red];
}
49 -> {50};
50 -> {51};
51 -> {60};
51 -> {52} [color=red];
52 -> {53} [color=green];
53 -> {55};
54 -> {53} [color=red];
55 -> {56};
56 -> {57};
51 -> {52};
52 -> {53};
53 -> {54};
54 -> {55};
55 -> {57 56};
56 -> {67};
57 -> {58};
58 -> {44};
59 -> {44};
60 -> {62};
61 -> {52} [color=green];
61 -> {54} [color=red];
58 -> {59};
59 -> {70};
59 -> {61} [color=red];
60 -> {62} [color=red];
61 -> {62} [color=green];
62 -> {63};
63 -> {64};
64 -> {65};
65 -> {61};
65 -> {66};
66 -> {67};
67 -> {68};
68 -> {69};
70 -> {71};
71 -> {72};
72 -> {73};
73 -> {74};
74 -> {75};
75 -> {76};
76 -> {77};
77 -> {60} [color=red];
77 -> {61} [color=green];
}

View File

@@ -8,41 +8,48 @@ digraph smartcastOnLambda_kt {
0 [label="Enter function test" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
2 [label="Enter when"];
1 [label="Enter block"];
subgraph cluster_2 {
color=blue
4 [label="Enter when branch condition "];
5 [label="Access variable R|<local>/func|"];
6 [label="Const: Null(null)"];
7 [label="Operator !="];
8 [label="Exit when branch condition"];
2 [label="Enter when"];
subgraph cluster_3 {
color=blue
3 [label="Enter when branch condition "];
4 [label="Access variable R|<local>/func|"];
5 [label="Const: Null(null)"];
6 [label="Operator !="];
7 [label="Exit when branch condition"];
}
8 [label="Synthetic else branch"];
9 [label="Enter when branch result"];
subgraph cluster_4 {
color=blue
10 [label="Enter block"];
11 [label="Function call: R|<local>/func|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
12 [label="Exit block"];
}
13 [label="Exit when branch result"];
14 [label="Exit when"];
}
14 [label="Synthetic else branch"];
9 [label="Enter when branch result"];
subgraph cluster_3 {
color=blue
10 [label="Enter block"];
11 [label="Function call: R|<local>/func|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
12 [label="Exit block"];
}
13 [label="Exit when branch result"];
3 [label="Exit when"];
15 [label="Exit block"];
}
1 [label="Exit function test" style="filled" fillcolor=red];
16 [label="Exit function test" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {4};
3 -> {1};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
4 -> {5};
5 -> {6};
6 -> {7};
7 -> {8};
8 -> {9 14};
7 -> {9 8};
8 -> {14};
9 -> {10};
10 -> {11};
11 -> {12};
12 -> {13};
13 -> {3};
14 -> {3};
13 -> {14};
14 -> {15};
15 -> {16};
}

View File

@@ -5,17 +5,17 @@ digraph dataFlowInfoFromWhileCondition_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function foo" style="filled" fillcolor=red];
1 [label="Exit function foo" style="filled" fillcolor=red];
0 [label="Enter class A" style="filled" fillcolor=red];
1 [label="Exit class A" style="filled" fillcolor=red];
}
0 -> {1};
0 -> {1} [color=green];
subgraph cluster_1 {
color=red
2 [label="Enter class A" style="filled" fillcolor=red];
3 [label="Exit class A" style="filled" fillcolor=red];
2 [label="Enter function foo" style="filled" fillcolor=red];
3 [label="Exit function foo" style="filled" fillcolor=red];
}
2 -> {3} [color=green];
2 -> {3};
subgraph cluster_2 {
color=red
@@ -34,63 +34,70 @@ digraph dataFlowInfoFromWhileCondition_kt {
subgraph cluster_4 {
color=red
8 [label="Enter function test" style="filled" fillcolor=red];
10 [label="Const: Null(null)"];
11 [label="Variable declaration: lvar a: R|A?|"];
subgraph cluster_5 {
color=blue
12 [label="Enter while loop"];
9 [label="Enter block"];
10 [label="Const: Null(null)"];
11 [label="Variable declaration: lvar a: R|A?|"];
subgraph cluster_6 {
color=blue
14 [label="Enter loop condition"];
12 [label="Enter while loop"];
subgraph cluster_7 {
color=blue
16 [label="Enter ||"];
17 [label="Access variable R|<local>/a|"];
18 [label="Type operator: (R|<local>/a| is R|B|)"];
19 [label="Exit left part of ||"];
20 [label="Enter right part of ||"];
21 [label="Access variable R|<local>/a|"];
22 [label="Type operator: (R|<local>/a| is R|C|)"];
15 [label="Exit ||"];
13 [label="Enter loop condition"];
subgraph cluster_8 {
color=blue
14 [label="Enter ||"];
15 [label="Access variable R|<local>/a|"];
16 [label="Type operator: (R|<local>/a| is R|B|)"];
17 [label="Exit left part of ||"];
18 [label="Enter right part of ||"];
19 [label="Access variable R|<local>/a|"];
20 [label="Type operator: (R|<local>/a| is R|C|)"];
21 [label="Exit ||"];
}
22 [label="Exit loop condition"];
}
23 [label="Exit loop condition"];
}
subgraph cluster_8 {
color=blue
24 [label="Enter loop block"];
subgraph cluster_9 {
color=blue
25 [label="Enter block"];
26 [label="Access variable R|<local>/a|"];
27 [label="Function call: R|<local>/a|.R|/A.foo|()"];
28 [label="Exit block"];
23 [label="Enter loop block"];
subgraph cluster_10 {
color=blue
24 [label="Enter block"];
25 [label="Access variable R|<local>/a|"];
26 [label="Function call: R|<local>/a|.R|/A.foo|()"];
27 [label="Exit block"];
}
28 [label="Exit loop block"];
}
29 [label="Exit loop block"];
29 [label="Exit whileloop"];
}
13 [label="Exit whileloop"];
30 [label="Exit block"];
}
9 [label="Exit function test" style="filled" fillcolor=red];
31 [label="Exit function test" style="filled" fillcolor=red];
}
8 -> {10};
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {12};
12 -> {14};
13 -> {9};
14 -> {16};
15 -> {23};
12 -> {13};
13 -> {14};
14 -> {15};
15 -> {16};
16 -> {17};
17 -> {18};
17 -> {21 18};
18 -> {19};
19 -> {15 20};
19 -> {20};
20 -> {21};
21 -> {22};
22 -> {15};
23 -> {13 24};
22 -> {29 23};
23 -> {24};
24 -> {25};
25 -> {26};
26 -> {27};
27 -> {28};
28 -> {29};
29 -> {14};
28 -> {13} [color=green style=dashed];
29 -> {30};
30 -> {31};
}

View File

@@ -5,64 +5,75 @@ digraph multipleCasts_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function foo" style="filled" fillcolor=red];
1 [label="Exit function foo" style="filled" fillcolor=red];
0 [label="Enter class A" style="filled" fillcolor=red];
1 [label="Exit class A" style="filled" fillcolor=red];
}
0 -> {1};
0 -> {1} [color=green];
subgraph cluster_1 {
color=red
2 [label="Enter class A" style="filled" fillcolor=red];
3 [label="Exit class A" style="filled" fillcolor=red];
2 [label="Enter function foo" style="filled" fillcolor=red];
3 [label="Exit function foo" style="filled" fillcolor=red];
}
2 -> {3} [color=green];
2 -> {3};
subgraph cluster_2 {
color=red
4 [label="Enter function foo" style="filled" fillcolor=red];
5 [label="Exit function foo" style="filled" fillcolor=red];
4 [label="Enter class B" style="filled" fillcolor=red];
5 [label="Exit class B" style="filled" fillcolor=red];
}
4 -> {5};
4 -> {5} [color=green];
subgraph cluster_3 {
color=red
6 [label="Enter class B" style="filled" fillcolor=red];
7 [label="Exit class B" style="filled" fillcolor=red];
6 [label="Enter function foo" style="filled" fillcolor=red];
7 [label="Exit function foo" style="filled" fillcolor=red];
}
6 -> {7} [color=green];
6 -> {7};
subgraph cluster_4 {
color=red
8 [label="Enter function getAny" style="filled" fillcolor=red];
10 [label="Const: Null(null)"];
11 [label="Jump: ^getAny Null(null)"];
12 [label="Stub" style="filled" fillcolor=gray];
9 [label="Exit function getAny" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
9 [label="Enter block"];
10 [label="Const: Null(null)"];
11 [label="Jump: ^getAny Null(null)"];
12 [label="Stub" style="filled" fillcolor=gray];
13 [label="Exit block" style="filled" fillcolor=gray];
}
14 [label="Exit function getAny" style="filled" fillcolor=red];
}
8 -> {10};
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {9};
11 -> {14};
11 -> {12} [style=dotted];
12 -> {9} [style=dotted];
12 -> {13} [style=dotted];
13 -> {14} [style=dotted];
subgraph cluster_5 {
subgraph cluster_6 {
color=red
13 [label="Enter function test_0" style="filled" fillcolor=red];
15 [label="Function call: R|/getAny|()"];
16 [label="Variable declaration: lval a: R|kotlin/Any?|"];
17 [label="Function call: R|/getAny|()"];
18 [label="Variable declaration: lval b: R|kotlin/Any?|"];
19 [label="Access variable R|<local>/a|"];
20 [label="Type operator: (R|<local>/a| as R|A|)"];
21 [label="Access variable R|<local>/a|"];
22 [label="Function call: R|<local>/a|.R|/A.foo|()"];
23 [label="Access variable R|<local>/b|"];
24 [label="Type operator: (R|<local>/b| as R|B|)"];
25 [label="Access variable R|<local>/b|"];
26 [label="Function call: R|<local>/b|.R|/B.foo|()"];
14 [label="Exit function test_0" style="filled" fillcolor=red];
15 [label="Enter function test_0" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
16 [label="Enter block"];
17 [label="Function call: R|/getAny|()"];
18 [label="Variable declaration: lval a: R|kotlin/Any?|"];
19 [label="Function call: R|/getAny|()"];
20 [label="Variable declaration: lval b: R|kotlin/Any?|"];
21 [label="Access variable R|<local>/a|"];
22 [label="Type operator: (R|<local>/a| as R|A|)"];
23 [label="Access variable R|<local>/a|"];
24 [label="Function call: R|<local>/a|.R|/A.foo|()"];
25 [label="Access variable R|<local>/b|"];
26 [label="Type operator: (R|<local>/b| as R|B|)"];
27 [label="Access variable R|<local>/b|"];
28 [label="Function call: R|<local>/b|.R|/B.foo|()"];
29 [label="Exit block"];
}
30 [label="Exit function test_0" style="filled" fillcolor=red];
}
13 -> {15};
15 -> {16};
16 -> {17};
17 -> {18};
@@ -74,75 +85,85 @@ digraph multipleCasts_kt {
23 -> {24};
24 -> {25};
25 -> {26};
26 -> {14};
26 -> {27};
27 -> {28};
28 -> {29};
29 -> {30};
subgraph cluster_6 {
subgraph cluster_8 {
color=red
27 [label="Enter function test_1" style="filled" fillcolor=red];
29 [label="Function call: R|/getAny|()"];
30 [label="Variable declaration: lval a: R|kotlin/Any?|"];
31 [label="Function call: R|/getAny|()"];
32 [label="Variable declaration: lval b: R|kotlin/Any?|"];
subgraph cluster_7 {
31 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_9 {
color=blue
33 [label="Enter when"];
subgraph cluster_8 {
color=blue
35 [label="Enter when branch condition "];
subgraph cluster_9 {
color=blue
37 [label="Enter &&"];
38 [label="Access variable R|<local>/a|"];
39 [label="Type operator: (R|<local>/a| is R|A|)"];
40 [label="Exit left part of &&"];
41 [label="Enter right part of &&"];
42 [label="Access variable R|<local>/b|"];
43 [label="Type operator: (R|<local>/b| is R|B|)"];
36 [label="Exit &&"];
}
44 [label="Exit when branch condition"];
}
53 [label="Synthetic else branch"];
45 [label="Enter when branch result"];
32 [label="Enter block"];
33 [label="Function call: R|/getAny|()"];
34 [label="Variable declaration: lval a: R|kotlin/Any?|"];
35 [label="Function call: R|/getAny|()"];
36 [label="Variable declaration: lval b: R|kotlin/Any?|"];
subgraph cluster_10 {
color=blue
46 [label="Enter block"];
47 [label="Access variable R|<local>/a|"];
48 [label="Function call: R|<local>/a|.R|/A.foo|()"];
49 [label="Access variable R|<local>/b|"];
50 [label="Function call: R|<local>/b|.R|/B.foo|()"];
51 [label="Exit block"];
37 [label="Enter when"];
subgraph cluster_11 {
color=blue
38 [label="Enter when branch condition "];
subgraph cluster_12 {
color=blue
39 [label="Enter &&"];
40 [label="Access variable R|<local>/a|"];
41 [label="Type operator: (R|<local>/a| is R|A|)"];
42 [label="Exit left part of &&"];
43 [label="Enter right part of &&"];
44 [label="Access variable R|<local>/b|"];
45 [label="Type operator: (R|<local>/b| is R|B|)"];
46 [label="Exit &&"];
}
47 [label="Exit when branch condition"];
}
48 [label="Synthetic else branch"];
49 [label="Enter when branch result"];
subgraph cluster_13 {
color=blue
50 [label="Enter block"];
51 [label="Access variable R|<local>/a|"];
52 [label="Function call: R|<local>/a|.R|/A.foo|()"];
53 [label="Access variable R|<local>/b|"];
54 [label="Function call: R|<local>/b|.R|/B.foo|()"];
55 [label="Exit block"];
}
56 [label="Exit when branch result"];
57 [label="Exit when"];
}
52 [label="Exit when branch result"];
34 [label="Exit when"];
58 [label="Exit block"];
}
28 [label="Exit function test_1" style="filled" fillcolor=red];
59 [label="Exit function test_1" style="filled" fillcolor=red];
}
27 -> {29};
29 -> {30};
30 -> {31};
31 -> {32};
32 -> {33};
33 -> {35};
34 -> {28};
35 -> {37};
36 -> {44};
33 -> {34};
34 -> {35};
35 -> {36};
36 -> {37};
37 -> {38};
38 -> {39};
39 -> {40};
40 -> {36 41};
40 -> {41};
41 -> {42};
42 -> {43};
43 -> {36};
44 -> {45 53};
42 -> {46 43};
43 -> {44};
44 -> {45};
45 -> {46};
46 -> {47};
47 -> {48};
48 -> {49};
47 -> {49 48};
48 -> {57};
49 -> {50};
50 -> {51};
51 -> {52};
52 -> {34};
53 -> {34};
52 -> {53};
53 -> {54};
54 -> {55};
55 -> {56};
56 -> {57};
57 -> {58};
58 -> {59};
}

File diff suppressed because it is too large Load Diff

View File

@@ -8,53 +8,56 @@ digraph implicitReceiverAsWhenSubject_kt {
0 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
2 [label="Enter when"];
4 [label="Access variable this@R|/test_1|"];
1 [label="Enter block"];
subgraph cluster_2 {
color=blue
5 [label="Enter when branch condition "];
6 [label="Type operator: ($subj$ is R|kotlin/collections/List<*>|)"];
7 [label="Exit when branch condition"];
2 [label="Enter when"];
3 [label="Access variable this@R|/test_1|"];
subgraph cluster_3 {
color=blue
4 [label="Enter when branch condition "];
5 [label="Type operator: ($subj$ is R|kotlin/collections/List<*>|)"];
6 [label="Exit when branch condition"];
}
subgraph cluster_4 {
color=blue
7 [label="Enter when branch condition "];
8 [label="Type operator: ($subj$ is R|kotlin/String|)"];
9 [label="Exit when branch condition"];
}
subgraph cluster_5 {
color=blue
10 [label="Enter when branch condition else"];
11 [label="Exit when branch condition"];
}
12 [label="Enter when branch result"];
subgraph cluster_6 {
color=blue
13 [label="Enter block"];
14 [label="Const: Int(0)"];
15 [label="Exit block"];
}
16 [label="Exit when branch result"];
17 [label="Enter when branch result"];
subgraph cluster_7 {
color=blue
18 [label="Enter block"];
19 [label="Access variable R|kotlin/String.length|"];
20 [label="Exit block"];
}
21 [label="Exit when branch result"];
22 [label="Enter when branch result"];
subgraph cluster_8 {
color=blue
23 [label="Enter block"];
24 [label="Access variable this@R|/test_1|"];
25 [label="Access variable R|kotlin/collections/List.size|"];
26 [label="Exit block"];
}
27 [label="Exit when branch result"];
28 [label="Exit when"];
}
subgraph cluster_3 {
color=blue
14 [label="Enter when branch condition "];
15 [label="Type operator: ($subj$ is R|kotlin/String|)"];
16 [label="Exit when branch condition"];
}
subgraph cluster_4 {
color=blue
22 [label="Enter when branch condition else"];
23 [label="Exit when branch condition"];
}
24 [label="Enter when branch result"];
subgraph cluster_5 {
color=blue
25 [label="Enter block"];
26 [label="Const: Int(0)"];
27 [label="Exit block"];
}
28 [label="Exit when branch result"];
17 [label="Enter when branch result"];
subgraph cluster_6 {
color=blue
18 [label="Enter block"];
19 [label="Access variable R|kotlin/String.length|"];
20 [label="Exit block"];
}
21 [label="Exit when branch result"];
8 [label="Enter when branch result"];
subgraph cluster_7 {
color=blue
9 [label="Enter block"];
10 [label="Access variable this@R|/test_1|"];
11 [label="Access variable R|kotlin/collections/List.size|"];
12 [label="Exit block"];
}
13 [label="Exit when branch result"];
3 [label="Exit when"];
}
29 [label="Jump: ^test_1 when (this@R|/test_1|) {
29 [label="Jump: ^test_1 when (this@R|/test_1|) {
($subj$ is R|kotlin/collections/List<*>|) -> {
this@R|/test_1|.R|kotlin/collections/List.size|
}
@@ -66,98 +69,105 @@ digraph implicitReceiverAsWhenSubject_kt {
}
}
"];
30 [label="Stub" style="filled" fillcolor=gray];
1 [label="Exit function test_1" style="filled" fillcolor=red];
30 [label="Stub" style="filled" fillcolor=gray];
31 [label="Exit block" style="filled" fillcolor=gray];
}
32 [label="Exit function test_1" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {4};
3 -> {29};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
4 -> {5};
5 -> {6};
6 -> {7};
7 -> {8 14};
6 -> {22 7};
7 -> {8};
8 -> {9};
9 -> {10};
9 -> {17 10};
10 -> {11};
11 -> {12};
12 -> {13};
13 -> {3};
13 -> {14};
14 -> {15};
15 -> {16};
16 -> {17 22};
16 -> {28};
17 -> {18};
18 -> {19};
19 -> {20};
20 -> {21};
21 -> {3};
21 -> {28};
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {26};
26 -> {27};
27 -> {28};
28 -> {3};
29 -> {1};
28 -> {29};
29 -> {32};
29 -> {30} [style=dotted];
30 -> {1} [style=dotted];
30 -> {31} [style=dotted];
31 -> {32} [style=dotted];
subgraph cluster_8 {
subgraph cluster_9 {
color=red
31 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_9 {
33 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_10 {
color=blue
33 [label="Enter when"];
35 [label="Access variable this@R|/test_2|"];
36 [label="Variable declaration: lval x: R|kotlin/Any|"];
subgraph cluster_10 {
color=blue
37 [label="Enter when branch condition "];
38 [label="Type operator: ($subj$ is R|kotlin/collections/List<*>|)"];
39 [label="Exit when branch condition"];
}
34 [label="Enter block"];
subgraph cluster_11 {
color=blue
48 [label="Enter when branch condition "];
49 [label="Type operator: ($subj$ is R|kotlin/String|)"];
50 [label="Exit when branch condition"];
35 [label="Enter when"];
36 [label="Access variable this@R|/test_2|"];
37 [label="Variable declaration: lval x: R|kotlin/Any|"];
subgraph cluster_12 {
color=blue
38 [label="Enter when branch condition "];
39 [label="Type operator: ($subj$ is R|kotlin/collections/List<*>|)"];
40 [label="Exit when branch condition"];
}
subgraph cluster_13 {
color=blue
41 [label="Enter when branch condition "];
42 [label="Type operator: ($subj$ is R|kotlin/String|)"];
43 [label="Exit when branch condition"];
}
subgraph cluster_14 {
color=blue
44 [label="Enter when branch condition else"];
45 [label="Exit when branch condition"];
}
46 [label="Enter when branch result"];
subgraph cluster_15 {
color=blue
47 [label="Enter block"];
48 [label="Const: Int(0)"];
49 [label="Exit block"];
}
50 [label="Exit when branch result"];
51 [label="Enter when branch result"];
subgraph cluster_16 {
color=blue
52 [label="Enter block"];
53 [label="Access variable R|<local>/x|"];
54 [label="Access variable R|kotlin/String.length|"];
55 [label="Access variable R|kotlin/String.length|"];
56 [label="Exit block"];
}
57 [label="Exit when branch result"];
58 [label="Enter when branch result"];
subgraph cluster_17 {
color=blue
59 [label="Enter block"];
60 [label="Access variable R|<local>/x|"];
61 [label="Access variable R|kotlin/collections/List.size|"];
62 [label="Access variable this@R|/test_2|"];
63 [label="Access variable R|kotlin/collections/List.size|"];
64 [label="Exit block"];
}
65 [label="Exit when branch result"];
66 [label="Exit when"];
}
subgraph cluster_12 {
color=blue
58 [label="Enter when branch condition else"];
59 [label="Exit when branch condition"];
}
60 [label="Enter when branch result"];
subgraph cluster_13 {
color=blue
61 [label="Enter block"];
62 [label="Const: Int(0)"];
63 [label="Exit block"];
}
64 [label="Exit when branch result"];
51 [label="Enter when branch result"];
subgraph cluster_14 {
color=blue
52 [label="Enter block"];
53 [label="Access variable R|<local>/x|"];
54 [label="Access variable R|kotlin/String.length|"];
55 [label="Access variable R|kotlin/String.length|"];
56 [label="Exit block"];
}
57 [label="Exit when branch result"];
40 [label="Enter when branch result"];
subgraph cluster_15 {
color=blue
41 [label="Enter block"];
42 [label="Access variable R|<local>/x|"];
43 [label="Access variable R|kotlin/collections/List.size|"];
44 [label="Access variable this@R|/test_2|"];
45 [label="Access variable R|kotlin/collections/List.size|"];
46 [label="Exit block"];
}
47 [label="Exit when branch result"];
34 [label="Exit when"];
}
65 [label="Jump: ^test_2 when (lval x: R|kotlin/Any| = this@R|/test_2|) {
67 [label="Jump: ^test_2 when (lval x: R|kotlin/Any| = this@R|/test_2|) {
($subj$ is R|kotlin/collections/List<*>|) -> {
R|<local>/x|.R|kotlin/collections/List.size|
this@R|/test_2|.R|kotlin/collections/List.size|
@@ -171,44 +181,48 @@ digraph implicitReceiverAsWhenSubject_kt {
}
}
"];
66 [label="Stub" style="filled" fillcolor=gray];
32 [label="Exit function test_2" style="filled" fillcolor=red];
68 [label="Stub" style="filled" fillcolor=gray];
69 [label="Exit block" style="filled" fillcolor=gray];
}
70 [label="Exit function test_2" style="filled" fillcolor=red];
}
31 -> {33};
33 -> {35};
34 -> {65};
33 -> {34};
34 -> {35};
35 -> {36};
36 -> {37};
37 -> {38};
38 -> {39};
39 -> {40 48};
40 -> {41};
39 -> {40};
40 -> {58 41};
41 -> {42};
42 -> {43};
43 -> {44};
43 -> {51 44};
44 -> {45};
45 -> {46};
46 -> {47};
47 -> {34};
47 -> {48};
48 -> {49};
49 -> {50};
50 -> {51 58};
50 -> {66};
51 -> {52};
52 -> {53};
53 -> {54};
54 -> {55};
55 -> {56};
56 -> {57};
57 -> {34};
57 -> {66};
58 -> {59};
59 -> {60};
60 -> {61};
61 -> {62};
62 -> {63};
63 -> {64};
64 -> {34};
65 -> {32};
65 -> {66} [style=dotted];
66 -> {32} [style=dotted];
64 -> {65};
65 -> {66};
66 -> {67};
67 -> {70};
67 -> {68} [style=dotted];
68 -> {69} [style=dotted];
69 -> {70} [style=dotted];
}

View File

@@ -12,94 +12,90 @@ digraph thisOfExtensionProperty_kt {
subgraph cluster_1 {
color=red
6 [label="Enter class B" style="filled" fillcolor=red];
subgraph cluster_2 {
color=blue
2 [label="Enter function getter" style="filled" fillcolor=red];
3 [label="Exit function getter" style="filled" fillcolor=red];
}
subgraph cluster_3 {
color=blue
4 [label="Enter property" style="filled" fillcolor=red];
5 [label="Exit property" style="filled" fillcolor=red];
}
7 [label="Exit class B" style="filled" fillcolor=red];
2 [label="Enter class B" style="filled" fillcolor=red];
3 [label="Exit class B" style="filled" fillcolor=red];
}
6 -> {4} [color=green];
4 -> {5};
5 -> {7} [color=green];
2 -> {3};
2 -> {3} [color=green];
subgraph cluster_4 {
subgraph cluster_2 {
color=red
19 [label="Enter property" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
8 [label="Enter function getter" style="filled" fillcolor=red];
subgraph cluster_6 {
color=blue
11 [label="Enter &&"];
12 [label="Access variable this@R|/check_1|"];
13 [label="Type operator: (this@R|/check_1| is R|B|)"];
14 [label="Exit left part of &&"];
15 [label="Enter right part of &&"];
16 [label="Access variable R|/B.b|"];
10 [label="Exit &&"];
}
17 [label="Jump: ^ (this@R|/check_1| is R|B|) && this@R|/check_1|.R|/B.b|"];
18 [label="Stub" style="filled" fillcolor=gray];
9 [label="Exit function getter" style="filled" fillcolor=red];
}
20 [label="Exit property" style="filled" fillcolor=red];
4 [label="Enter function getter" style="filled" fillcolor=red];
5 [label="Exit function getter" style="filled" fillcolor=red];
}
19 -> {20};
8 -> {11};
10 -> {17};
11 -> {12};
4 -> {5};
subgraph cluster_3 {
color=red
6 [label="Enter function getter" style="filled" fillcolor=red];
subgraph cluster_4 {
color=blue
7 [label="Enter block"];
subgraph cluster_5 {
color=blue
8 [label="Enter &&"];
9 [label="Access variable this@R|/check_1|"];
10 [label="Type operator: (this@R|/check_1| is R|B|)"];
11 [label="Exit left part of &&"];
12 [label="Enter right part of &&"];
13 [label="Access variable R|/B.b|"];
14 [label="Exit &&"];
}
15 [label="Jump: ^ (this@R|/check_1| is R|B|) && this@R|/check_1|.R|/B.b|"];
16 [label="Stub" style="filled" fillcolor=gray];
17 [label="Exit block" style="filled" fillcolor=gray];
}
18 [label="Exit function getter" style="filled" fillcolor=red];
}
6 -> {7};
7 -> {8};
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {14 12};
12 -> {13};
13 -> {14};
14 -> {10 15};
15 -> {16};
16 -> {10};
17 -> {9};
14 -> {15};
15 -> {18};
15 -> {16} [style=dotted];
16 -> {17} [style=dotted];
17 -> {18} [style=dotted];
18 -> {9} [style=dotted];
subgraph cluster_7 {
subgraph cluster_6 {
color=red
33 [label="Enter property" style="filled" fillcolor=red];
subgraph cluster_8 {
19 [label="Enter function getter" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
21 [label="Enter function getter" style="filled" fillcolor=red];
subgraph cluster_9 {
20 [label="Enter block"];
subgraph cluster_8 {
color=blue
24 [label="Enter &&"];
25 [label="Access variable this@R|/check_2|"];
26 [label="Type operator: (this@R|/check_2| is R|B|)"];
27 [label="Exit left part of &&"];
28 [label="Enter right part of &&"];
29 [label="Access variable this@R|/check_2|"];
30 [label="Access variable R|/B.b|"];
23 [label="Exit &&"];
21 [label="Enter &&"];
22 [label="Access variable this@R|/check_2|"];
23 [label="Type operator: (this@R|/check_2| is R|B|)"];
24 [label="Exit left part of &&"];
25 [label="Enter right part of &&"];
26 [label="Access variable this@R|/check_2|"];
27 [label="Access variable R|/B.b|"];
28 [label="Exit &&"];
}
31 [label="Jump: ^ (this@R|/check_2| is R|B|) && this@R|/check_2|.R|/B.b|"];
32 [label="Stub" style="filled" fillcolor=gray];
22 [label="Exit function getter" style="filled" fillcolor=red];
29 [label="Jump: ^ (this@R|/check_2| is R|B|) && this@R|/check_2|.R|/B.b|"];
30 [label="Stub" style="filled" fillcolor=gray];
31 [label="Exit block" style="filled" fillcolor=gray];
}
34 [label="Exit property" style="filled" fillcolor=red];
32 [label="Exit function getter" style="filled" fillcolor=red];
}
33 -> {34};
21 -> {24};
23 -> {31};
24 -> {25};
19 -> {20};
20 -> {21};
21 -> {22};
22 -> {23};
23 -> {24};
24 -> {28 25};
25 -> {26};
26 -> {27};
27 -> {23 28};
27 -> {28};
28 -> {29};
29 -> {30};
30 -> {23};
31 -> {22};
29 -> {32};
29 -> {30} [style=dotted];
30 -> {31} [style=dotted];
31 -> {32} [style=dotted];
32 -> {22} [style=dotted];
}

View File

@@ -5,458 +5,509 @@ digraph assignSafeCall_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function <init>" style="filled" fillcolor=red];
2 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
1 [label="Exit function <init>" style="filled" fillcolor=red];
0 [label="Enter class A" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
2 [label="Enter property" style="filled" fillcolor=red];
3 [label="Const: Int(1)"];
4 [label="Exit property" style="filled" fillcolor=red];
}
1 [label="Exit class A" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {1};
subgraph cluster_1 {
color=red
3 [label="Enter function foo" style="filled" fillcolor=red];
5 [label="Const: Int(1)"];
6 [label="Jump: ^foo Int(1)"];
7 [label="Stub" style="filled" fillcolor=gray];
4 [label="Exit function foo" style="filled" fillcolor=red];
}
3 -> {5};
5 -> {6};
6 -> {4};
6 -> {7} [style=dotted];
7 -> {4} [style=dotted];
0 -> {2} [color=green];
2 -> {3};
3 -> {4};
4 -> {1} [color=green];
subgraph cluster_2 {
color=red
13 [label="Enter function bar" style="filled" fillcolor=red];
14 [label="Exit function bar" style="filled" fillcolor=red];
5 [label="Enter function <init>" style="filled" fillcolor=red];
6 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
7 [label="Exit function <init>" style="filled" fillcolor=red];
}
13 -> {14};
5 -> {6};
6 -> {7};
subgraph cluster_3 {
color=red
15 [label="Enter class A" style="filled" fillcolor=red];
8 [label="Enter function foo" style="filled" fillcolor=red];
subgraph cluster_4 {
color=blue
8 [label="Enter function getter" style="filled" fillcolor=red];
9 [label="Exit function getter" style="filled" fillcolor=red];
9 [label="Enter block"];
10 [label="Const: Int(1)"];
11 [label="Jump: ^foo Int(1)"];
12 [label="Stub" style="filled" fillcolor=gray];
13 [label="Exit block" style="filled" fillcolor=gray];
}
subgraph cluster_5 {
color=blue
10 [label="Enter property" style="filled" fillcolor=red];
12 [label="Const: Int(1)"];
11 [label="Exit property" style="filled" fillcolor=red];
}
16 [label="Exit class A" style="filled" fillcolor=red];
14 [label="Exit function foo" style="filled" fillcolor=red];
}
15 -> {10} [color=green];
10 -> {12};
11 -> {16} [color=green];
12 -> {11};
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {14};
11 -> {12} [style=dotted];
12 -> {13} [style=dotted];
13 -> {14} [style=dotted];
subgraph cluster_5 {
color=red
15 [label="Enter function getter" style="filled" fillcolor=red];
16 [label="Exit function getter" style="filled" fillcolor=red];
}
15 -> {16};
subgraph cluster_6 {
color=red
17 [label="Enter function test_1" style="filled" fillcolor=red];
19 [label="Access variable R|<local>/a|"];
20 [label="Enter safe call"];
22 [label="Access variable R|/A.x|"];
21 [label="Exit safe call"];
23 [label="Variable declaration: lval x: R|kotlin/Int?|"];
17 [label="Enter function bar" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
24 [label="Enter when"];
subgraph cluster_8 {
color=blue
26 [label="Enter when branch condition "];
27 [label="Access variable R|<local>/x|"];
28 [label="Const: Null(null)"];
29 [label="Operator !="];
30 [label="Exit when branch condition"];
}
37 [label="Synthetic else branch"];
31 [label="Enter when branch result"];
subgraph cluster_9 {
color=blue
32 [label="Enter block"];
33 [label="Access variable R|<local>/a|"];
34 [label="Function call: R|<local>/a|.R|/A.bar|()"];
35 [label="Exit block"];
}
36 [label="Exit when branch result"];
25 [label="Exit when"];
18 [label="Enter block"];
19 [label="Exit block"];
}
18 [label="Exit function test_1" style="filled" fillcolor=red];
20 [label="Exit function bar" style="filled" fillcolor=red];
}
17 -> {19};
19 -> {20 21};
20 -> {22};
21 -> {23};
22 -> {21};
23 -> {24};
24 -> {26};
25 -> {18};
17 -> {18};
18 -> {19};
19 -> {20};
subgraph cluster_8 {
color=red
21 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_9 {
color=blue
22 [label="Enter block"];
23 [label="Access variable R|<local>/a|"];
24 [label="Enter safe call"];
25 [label="Access variable R|/A.x|"];
26 [label="Exit safe call"];
27 [label="Variable declaration: lval x: R|kotlin/Int?|"];
subgraph cluster_10 {
color=blue
28 [label="Enter when"];
subgraph cluster_11 {
color=blue
29 [label="Enter when branch condition "];
30 [label="Access variable R|<local>/x|"];
31 [label="Const: Null(null)"];
32 [label="Operator !="];
33 [label="Exit when branch condition"];
}
34 [label="Synthetic else branch"];
35 [label="Enter when branch result"];
subgraph cluster_12 {
color=blue
36 [label="Enter block"];
37 [label="Access variable R|<local>/a|"];
38 [label="Function call: R|<local>/a|.R|/A.bar|()"];
39 [label="Exit block"];
}
40 [label="Exit when branch result"];
41 [label="Exit when"];
}
42 [label="Exit block"];
}
43 [label="Exit function test_1" style="filled" fillcolor=red];
}
21 -> {22};
22 -> {23};
23 -> {24 26};
24 -> {25};
25 -> {26};
26 -> {27};
27 -> {28};
28 -> {29};
29 -> {30};
30 -> {31 37};
30 -> {31};
31 -> {32};
32 -> {33};
33 -> {34};
34 -> {35};
33 -> {35 34};
34 -> {41};
35 -> {36};
36 -> {25};
37 -> {25};
36 -> {37};
37 -> {38};
38 -> {39};
39 -> {40};
40 -> {41};
41 -> {42};
42 -> {43};
subgraph cluster_10 {
subgraph cluster_13 {
color=red
38 [label="Enter function test_2" style="filled" fillcolor=red];
40 [label="Access variable R|<local>/a|"];
41 [label="Enter safe call"];
43 [label="Function call: $subj$.R|/A.foo|()"];
42 [label="Exit safe call"];
44 [label="Variable declaration: lval x: R|kotlin/Int?|"];
subgraph cluster_11 {
44 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_14 {
color=blue
45 [label="Enter when"];
subgraph cluster_12 {
45 [label="Enter block"];
46 [label="Access variable R|<local>/a|"];
47 [label="Enter safe call"];
48 [label="Function call: $subj$.R|/A.foo|()"];
49 [label="Exit safe call"];
50 [label="Variable declaration: lval x: R|kotlin/Int?|"];
subgraph cluster_15 {
color=blue
47 [label="Enter when branch condition "];
48 [label="Access variable R|<local>/x|"];
49 [label="Const: Null(null)"];
50 [label="Operator !="];
51 [label="Exit when branch condition"];
51 [label="Enter when"];
subgraph cluster_16 {
color=blue
52 [label="Enter when branch condition "];
53 [label="Access variable R|<local>/x|"];
54 [label="Const: Null(null)"];
55 [label="Operator !="];
56 [label="Exit when branch condition"];
}
57 [label="Synthetic else branch"];
58 [label="Enter when branch result"];
subgraph cluster_17 {
color=blue
59 [label="Enter block"];
60 [label="Access variable R|<local>/a|"];
61 [label="Function call: R|<local>/a|.R|/A.bar|()"];
62 [label="Exit block"];
}
63 [label="Exit when branch result"];
64 [label="Exit when"];
}
58 [label="Synthetic else branch"];
52 [label="Enter when branch result"];
subgraph cluster_13 {
color=blue
53 [label="Enter block"];
54 [label="Access variable R|<local>/a|"];
55 [label="Function call: R|<local>/a|.R|/A.bar|()"];
56 [label="Exit block"];
}
57 [label="Exit when branch result"];
46 [label="Exit when"];
65 [label="Exit block"];
}
39 [label="Exit function test_2" style="filled" fillcolor=red];
66 [label="Exit function test_2" style="filled" fillcolor=red];
}
38 -> {40};
40 -> {41 42};
41 -> {43};
42 -> {44};
43 -> {42};
44 -> {45};
45 -> {47};
46 -> {39};
45 -> {46};
46 -> {47 49};
47 -> {48};
48 -> {49};
49 -> {50};
50 -> {51};
51 -> {52 58};
51 -> {52};
52 -> {53};
53 -> {54};
54 -> {55};
55 -> {56};
56 -> {57};
57 -> {46};
58 -> {46};
subgraph cluster_14 {
color=red
59 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_15 {
color=blue
61 [label="Enter when"];
63 [label="Access variable R|<local>/x|"];
64 [label="Type operator: (R|<local>/x| as? R|A|)"];
65 [label="Variable declaration: lval <elvis>: R|A?|"];
subgraph cluster_16 {
color=blue
66 [label="Enter when branch condition "];
67 [label="Const: Null(null)"];
68 [label="Operator =="];
69 [label="Exit when branch condition"];
}
subgraph cluster_17 {
color=blue
76 [label="Enter when branch condition else"];
77 [label="Exit when branch condition"];
}
78 [label="Enter when branch result"];
subgraph cluster_18 {
color=blue
79 [label="Enter block"];
80 [label="Access variable R|<local>/<elvis>|"];
81 [label="Exit block"];
}
82 [label="Exit when branch result"];
70 [label="Enter when branch result"];
subgraph cluster_19 {
color=blue
71 [label="Enter block"];
72 [label="Jump: ^test_3 Unit"];
73 [label="Stub" style="filled" fillcolor=gray];
74 [label="Exit block" style="filled" fillcolor=gray];
}
75 [label="Exit when branch result" style="filled" fillcolor=gray];
62 [label="Exit when"];
}
83 [label="Variable declaration: lval a: R|A|"];
84 [label="Access variable R|<local>/a|"];
85 [label="Function call: R|<local>/a|.R|/A.foo|()"];
86 [label="Access variable R|<local>/x|"];
87 [label="Function call: R|<local>/x|.R|/A.foo|()"];
60 [label="Exit function test_3" style="filled" fillcolor=red];
}
59 -> {61};
61 -> {63};
62 -> {83};
56 -> {58 57};
57 -> {64};
58 -> {59};
59 -> {60};
60 -> {61};
61 -> {62};
62 -> {63};
63 -> {64};
64 -> {65};
65 -> {66};
66 -> {67};
subgraph cluster_18 {
color=red
67 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_19 {
color=blue
68 [label="Enter block"];
subgraph cluster_20 {
color=blue
69 [label="Enter when"];
70 [label="Access variable R|<local>/x|"];
71 [label="Type operator: (R|<local>/x| as? R|A|)"];
72 [label="Variable declaration: lval <elvis>: R|A?|"];
subgraph cluster_21 {
color=blue
73 [label="Enter when branch condition "];
74 [label="Const: Null(null)"];
75 [label="Operator =="];
76 [label="Exit when branch condition"];
}
subgraph cluster_22 {
color=blue
77 [label="Enter when branch condition else"];
78 [label="Exit when branch condition"];
}
79 [label="Enter when branch result"];
subgraph cluster_23 {
color=blue
80 [label="Enter block"];
81 [label="Access variable R|<local>/<elvis>|"];
82 [label="Exit block"];
}
83 [label="Exit when branch result"];
84 [label="Enter when branch result"];
subgraph cluster_24 {
color=blue
85 [label="Enter block"];
86 [label="Jump: ^test_3 Unit"];
87 [label="Stub" style="filled" fillcolor=gray];
88 [label="Exit block" style="filled" fillcolor=gray];
}
89 [label="Exit when branch result" style="filled" fillcolor=gray];
90 [label="Exit when"];
}
91 [label="Variable declaration: lval a: R|A|"];
92 [label="Access variable R|<local>/a|"];
93 [label="Function call: R|<local>/a|.R|/A.foo|()"];
94 [label="Access variable R|<local>/x|"];
95 [label="Function call: R|<local>/x|.R|/A.foo|()"];
96 [label="Exit block"];
}
97 [label="Exit function test_3" style="filled" fillcolor=red];
}
67 -> {68};
68 -> {69};
69 -> {70 76};
69 -> {70};
70 -> {71};
71 -> {72};
72 -> {60};
72 -> {73} [style=dotted];
73 -> {74} [style=dotted];
74 -> {75} [style=dotted];
75 -> {62} [style=dotted];
76 -> {77};
72 -> {73};
73 -> {74};
74 -> {75};
75 -> {76};
76 -> {84 77};
77 -> {78};
78 -> {79};
79 -> {80};
80 -> {81};
81 -> {82};
82 -> {62};
83 -> {84};
82 -> {83};
83 -> {90};
84 -> {85};
85 -> {86};
86 -> {87};
87 -> {60};
subgraph cluster_20 {
color=red
88 [label="Enter function foo" style="filled" fillcolor=red];
89 [label="Exit function foo" style="filled" fillcolor=red];
}
88 -> {89};
subgraph cluster_21 {
color=red
94 [label="Enter function bar" style="filled" fillcolor=red];
95 [label="Exit function bar" style="filled" fillcolor=red];
}
94 -> {95};
subgraph cluster_22 {
color=red
96 [label="Enter class B" style="filled" fillcolor=red];
subgraph cluster_23 {
color=blue
90 [label="Enter function getter" style="filled" fillcolor=red];
91 [label="Exit function getter" style="filled" fillcolor=red];
}
subgraph cluster_24 {
color=blue
92 [label="Enter property" style="filled" fillcolor=red];
93 [label="Exit property" style="filled" fillcolor=red];
}
97 [label="Exit class B" style="filled" fillcolor=red];
}
96 -> {92} [color=green];
92 -> {93};
93 -> {97} [color=green];
86 -> {97};
86 -> {87} [style=dotted];
87 -> {88} [style=dotted];
88 -> {89} [style=dotted];
89 -> {90} [style=dotted];
90 -> {91};
91 -> {92};
92 -> {93};
93 -> {94};
94 -> {95};
95 -> {96};
96 -> {97};
subgraph cluster_25 {
color=red
98 [label="Enter function test_1" style="filled" fillcolor=red];
100 [label="Access variable R|<local>/a|"];
101 [label="Enter safe call"];
103 [label="Access variable R|/B.x|"];
102 [label="Exit safe call"];
104 [label="Variable declaration: lval x: R|kotlin/Int?|"];
subgraph cluster_26 {
color=blue
105 [label="Enter when"];
subgraph cluster_27 {
color=blue
107 [label="Enter when branch condition "];
108 [label="Access variable R|<local>/x|"];
109 [label="Const: Null(null)"];
110 [label="Operator !="];
111 [label="Exit when branch condition"];
}
118 [label="Synthetic else branch"];
112 [label="Enter when branch result"];
subgraph cluster_28 {
color=blue
113 [label="Enter block"];
114 [label="Access variable R|<local>/a|"];
115 [label="Function call: R|<local>/a|.R|/B.bar|()"];
116 [label="Exit block"];
}
117 [label="Exit when branch result"];
106 [label="Exit when"];
}
99 [label="Exit function test_1" style="filled" fillcolor=red];
98 [label="Enter class B" style="filled" fillcolor=red];
99 [label="Exit class B" style="filled" fillcolor=red];
}
98 -> {99} [color=green];
subgraph cluster_26 {
color=red
100 [label="Enter function foo" style="filled" fillcolor=red];
101 [label="Exit function foo" style="filled" fillcolor=red];
}
100 -> {101};
subgraph cluster_27 {
color=red
102 [label="Enter function getter" style="filled" fillcolor=red];
103 [label="Exit function getter" style="filled" fillcolor=red];
}
102 -> {103};
subgraph cluster_28 {
color=red
104 [label="Enter function bar" style="filled" fillcolor=red];
105 [label="Exit function bar" style="filled" fillcolor=red];
}
98 -> {100};
100 -> {101 102};
101 -> {103};
102 -> {104};
103 -> {102};
104 -> {105};
105 -> {107};
106 -> {99};
subgraph cluster_29 {
color=red
106 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_30 {
color=blue
107 [label="Enter block"];
108 [label="Access variable R|<local>/a|"];
109 [label="Enter safe call"];
110 [label="Access variable R|/B.x|"];
111 [label="Exit safe call"];
112 [label="Variable declaration: lval x: R|kotlin/Int?|"];
subgraph cluster_31 {
color=blue
113 [label="Enter when"];
subgraph cluster_32 {
color=blue
114 [label="Enter when branch condition "];
115 [label="Access variable R|<local>/x|"];
116 [label="Const: Null(null)"];
117 [label="Operator !="];
118 [label="Exit when branch condition"];
}
119 [label="Synthetic else branch"];
120 [label="Enter when branch result"];
subgraph cluster_33 {
color=blue
121 [label="Enter block"];
122 [label="Access variable R|<local>/a|"];
123 [label="Function call: R|<local>/a|.R|/B.bar|()"];
124 [label="Exit block"];
}
125 [label="Exit when branch result"];
126 [label="Exit when"];
}
127 [label="Exit block"];
}
128 [label="Exit function test_1" style="filled" fillcolor=red];
}
106 -> {107};
107 -> {108};
108 -> {109};
108 -> {109 111};
109 -> {110};
110 -> {111};
111 -> {112 118};
111 -> {112};
112 -> {113};
113 -> {114};
114 -> {115};
115 -> {116};
116 -> {117};
117 -> {106};
118 -> {106};
subgraph cluster_29 {
color=red
119 [label="Enter function test_2" style="filled" fillcolor=red];
121 [label="Access variable R|<local>/a|"];
122 [label="Enter safe call"];
124 [label="Function call: $subj$.R|/B.foo|()"];
123 [label="Exit safe call"];
125 [label="Variable declaration: lval x: R|kotlin/Int?|"];
subgraph cluster_30 {
color=blue
126 [label="Enter when"];
subgraph cluster_31 {
color=blue
128 [label="Enter when branch condition "];
129 [label="Access variable R|<local>/x|"];
130 [label="Const: Null(null)"];
131 [label="Operator !="];
132 [label="Exit when branch condition"];
}
139 [label="Synthetic else branch"];
133 [label="Enter when branch result"];
subgraph cluster_32 {
color=blue
134 [label="Enter block"];
135 [label="Access variable R|<local>/a|"];
136 [label="Function call: R|<local>/a|.R|/B.bar|()"];
137 [label="Exit block"];
}
138 [label="Exit when branch result"];
127 [label="Exit when"];
}
120 [label="Exit function test_2" style="filled" fillcolor=red];
}
119 -> {121};
121 -> {122 123};
122 -> {124};
123 -> {125};
124 -> {123};
117 -> {118};
118 -> {120 119};
119 -> {126};
120 -> {121};
121 -> {122};
122 -> {123};
123 -> {124};
124 -> {125};
125 -> {126};
126 -> {128};
127 -> {120};
128 -> {129};
126 -> {127};
127 -> {128};
subgraph cluster_34 {
color=red
129 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_35 {
color=blue
130 [label="Enter block"];
131 [label="Access variable R|<local>/a|"];
132 [label="Enter safe call"];
133 [label="Function call: $subj$.R|/B.foo|()"];
134 [label="Exit safe call"];
135 [label="Variable declaration: lval x: R|kotlin/Int?|"];
subgraph cluster_36 {
color=blue
136 [label="Enter when"];
subgraph cluster_37 {
color=blue
137 [label="Enter when branch condition "];
138 [label="Access variable R|<local>/x|"];
139 [label="Const: Null(null)"];
140 [label="Operator !="];
141 [label="Exit when branch condition"];
}
142 [label="Synthetic else branch"];
143 [label="Enter when branch result"];
subgraph cluster_38 {
color=blue
144 [label="Enter block"];
145 [label="Access variable R|<local>/a|"];
146 [label="Function call: R|<local>/a|.R|/B.bar|()"];
147 [label="Exit block"];
}
148 [label="Exit when branch result"];
149 [label="Exit when"];
}
150 [label="Exit block"];
}
151 [label="Exit function test_2" style="filled" fillcolor=red];
}
129 -> {130};
130 -> {131};
131 -> {132};
132 -> {133 139};
131 -> {132 134};
132 -> {133};
133 -> {134};
134 -> {135};
135 -> {136};
136 -> {137};
137 -> {138};
138 -> {127};
139 -> {127};
subgraph cluster_33 {
color=red
140 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_34 {
color=blue
142 [label="Enter when"];
144 [label="Access variable R|<local>/x|"];
145 [label="Type operator: (R|<local>/x| as? R|B|)"];
146 [label="Variable declaration: lval <elvis>: R|B?|"];
subgraph cluster_35 {
color=blue
147 [label="Enter when branch condition "];
148 [label="Const: Null(null)"];
149 [label="Operator =="];
150 [label="Exit when branch condition"];
}
subgraph cluster_36 {
color=blue
157 [label="Enter when branch condition else"];
158 [label="Exit when branch condition"];
}
159 [label="Enter when branch result"];
subgraph cluster_37 {
color=blue
160 [label="Enter block"];
161 [label="Access variable R|<local>/<elvis>|"];
162 [label="Exit block"];
}
163 [label="Exit when branch result"];
151 [label="Enter when branch result"];
subgraph cluster_38 {
color=blue
152 [label="Enter block"];
153 [label="Jump: ^test_3 Unit"];
154 [label="Stub" style="filled" fillcolor=gray];
155 [label="Exit block" style="filled" fillcolor=gray];
}
156 [label="Exit when branch result" style="filled" fillcolor=gray];
143 [label="Exit when"];
}
164 [label="Variable declaration: lval a: R|B|"];
165 [label="Access variable R|<local>/a|"];
166 [label="Function call: R|<local>/a|.R|/B.foo|()"];
167 [label="Access variable R|<local>/x|"];
168 [label="Function call: R|<local>/x|.R|/B.foo|()"];
141 [label="Exit function test_3" style="filled" fillcolor=red];
}
140 -> {142};
142 -> {144};
143 -> {164};
138 -> {139};
139 -> {140};
140 -> {141};
141 -> {143 142};
142 -> {149};
143 -> {144};
144 -> {145};
145 -> {146};
146 -> {147};
147 -> {148};
148 -> {149};
149 -> {150};
150 -> {151 157};
151 -> {152};
150 -> {151};
subgraph cluster_39 {
color=red
152 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_40 {
color=blue
153 [label="Enter block"];
subgraph cluster_41 {
color=blue
154 [label="Enter when"];
155 [label="Access variable R|<local>/x|"];
156 [label="Type operator: (R|<local>/x| as? R|B|)"];
157 [label="Variable declaration: lval <elvis>: R|B?|"];
subgraph cluster_42 {
color=blue
158 [label="Enter when branch condition "];
159 [label="Const: Null(null)"];
160 [label="Operator =="];
161 [label="Exit when branch condition"];
}
subgraph cluster_43 {
color=blue
162 [label="Enter when branch condition else"];
163 [label="Exit when branch condition"];
}
164 [label="Enter when branch result"];
subgraph cluster_44 {
color=blue
165 [label="Enter block"];
166 [label="Access variable R|<local>/<elvis>|"];
167 [label="Exit block"];
}
168 [label="Exit when branch result"];
169 [label="Enter when branch result"];
subgraph cluster_45 {
color=blue
170 [label="Enter block"];
171 [label="Jump: ^test_3 Unit"];
172 [label="Stub" style="filled" fillcolor=gray];
173 [label="Exit block" style="filled" fillcolor=gray];
}
174 [label="Exit when branch result" style="filled" fillcolor=gray];
175 [label="Exit when"];
}
176 [label="Variable declaration: lval a: R|B|"];
177 [label="Access variable R|<local>/a|"];
178 [label="Function call: R|<local>/a|.R|/B.foo|()"];
179 [label="Access variable R|<local>/x|"];
180 [label="Function call: R|<local>/x|.R|/B.foo|()"];
181 [label="Exit block"];
}
182 [label="Exit function test_3" style="filled" fillcolor=red];
}
152 -> {153};
153 -> {141};
153 -> {154} [style=dotted];
154 -> {155} [style=dotted];
155 -> {156} [style=dotted];
156 -> {143} [style=dotted];
153 -> {154};
154 -> {155};
155 -> {156};
156 -> {157};
157 -> {158};
158 -> {159};
159 -> {160};
160 -> {161};
161 -> {162};
161 -> {169 162};
162 -> {163};
163 -> {143};
163 -> {164};
164 -> {165};
165 -> {166};
166 -> {167};
167 -> {168};
168 -> {141};
168 -> {175};
169 -> {170};
170 -> {171};
171 -> {182};
171 -> {172} [style=dotted];
172 -> {173} [style=dotted];
173 -> {174} [style=dotted];
174 -> {175} [style=dotted];
175 -> {176};
176 -> {177};
177 -> {178};
178 -> {179};
179 -> {180};
180 -> {181};
181 -> {182};
}

View File

@@ -6,295 +6,330 @@ digraph safeCallAndEqualityToBool_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function check" style="filled" fillcolor=red];
2 [label="Const: Boolean(true)"];
3 [label="Jump: ^check Boolean(true)"];
4 [label="Stub" style="filled" fillcolor=gray];
1 [label="Exit function check" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {3};
3 -> {1};
3 -> {4} [style=dotted];
4 -> {1} [style=dotted];
subgraph cluster_1 {
color=red
5 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_2 {
subgraph cluster_1 {
color=blue
7 [label="Enter when"];
subgraph cluster_3 {
color=blue
9 [label="Enter when branch condition "];
10 [label="Access variable R|<local>/s|"];
11 [label="Enter safe call"];
13 [label="Function call: $subj$.R|/check|()"];
12 [label="Exit safe call"];
14 [label="Const: Boolean(true)"];
15 [label="Operator =="];
16 [label="Exit when branch condition"];
}
1 [label="Enter block"];
2 [label="Const: Boolean(true)"];
3 [label="Jump: ^check Boolean(true)"];
4 [label="Stub" style="filled" fillcolor=gray];
5 [label="Exit block" style="filled" fillcolor=gray];
}
6 [label="Exit function check" style="filled" fillcolor=red];
}
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {6};
3 -> {4} [style=dotted];
4 -> {5} [style=dotted];
5 -> {6} [style=dotted];
subgraph cluster_2 {
color=red
7 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
8 [label="Enter block"];
subgraph cluster_4 {
color=blue
23 [label="Enter when branch condition else"];
24 [label="Exit when branch condition"];
9 [label="Enter when"];
subgraph cluster_5 {
color=blue
10 [label="Enter when branch condition "];
11 [label="Access variable R|<local>/s|"];
12 [label="Enter safe call"];
13 [label="Function call: $subj$.R|/check|()"];
14 [label="Exit safe call"];
15 [label="Const: Boolean(true)"];
16 [label="Operator =="];
17 [label="Exit when branch condition"];
}
subgraph cluster_6 {
color=blue
18 [label="Enter when branch condition else"];
19 [label="Exit when branch condition"];
}
20 [label="Enter when branch result"];
subgraph cluster_7 {
color=blue
21 [label="Enter block"];
22 [label="Access variable R|<local>/s|"];
23 [label="Access variable <Inapplicable(WRONG_RECEIVER): [kotlin/String.length]>#"];
24 [label="Exit block"];
}
25 [label="Exit when branch result"];
26 [label="Enter when branch result"];
subgraph cluster_8 {
color=blue
27 [label="Enter block"];
28 [label="Access variable R|<local>/s|"];
29 [label="Access variable R|kotlin/String.length|"];
30 [label="Exit block"];
}
31 [label="Exit when branch result"];
32 [label="Exit when"];
}
25 [label="Enter when branch result"];
subgraph cluster_5 {
color=blue
26 [label="Enter block"];
27 [label="Access variable R|<local>/s|"];
28 [label="Access variable <Inapplicable(WRONG_RECEIVER): [kotlin/String.length]>#"];
29 [label="Exit block"];
}
30 [label="Exit when branch result"];
17 [label="Enter when branch result"];
subgraph cluster_6 {
color=blue
18 [label="Enter block"];
19 [label="Access variable R|<local>/s|"];
20 [label="Access variable R|kotlin/String.length|"];
21 [label="Exit block"];
}
22 [label="Exit when branch result"];
8 [label="Exit when"];
33 [label="Exit block"];
}
6 [label="Exit function test_1" style="filled" fillcolor=red];
34 [label="Exit function test_1" style="filled" fillcolor=red];
}
5 -> {7};
7 -> {9};
8 -> {6};
7 -> {8};
8 -> {9};
9 -> {10};
10 -> {11 12};
11 -> {13};
12 -> {14};
13 -> {12};
10 -> {11};
11 -> {12 14};
12 -> {13};
13 -> {14};
14 -> {15};
15 -> {16};
16 -> {17 23};
17 -> {18};
16 -> {17};
17 -> {26 18};
18 -> {19};
19 -> {20};
20 -> {21};
21 -> {22};
22 -> {8};
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {26};
25 -> {32};
26 -> {27};
27 -> {28};
28 -> {29};
29 -> {30};
30 -> {8};
30 -> {31};
31 -> {32};
32 -> {33};
33 -> {34};
subgraph cluster_7 {
subgraph cluster_9 {
color=red
31 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_8 {
35 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_10 {
color=blue
33 [label="Enter when"];
subgraph cluster_9 {
color=blue
35 [label="Enter when branch condition "];
36 [label="Access variable R|<local>/s|"];
37 [label="Enter safe call"];
39 [label="Function call: $subj$.R|/check|()"];
38 [label="Exit safe call"];
40 [label="Const: Boolean(false)"];
41 [label="Operator =="];
42 [label="Exit when branch condition"];
}
subgraph cluster_10 {
color=blue
49 [label="Enter when branch condition else"];
50 [label="Exit when branch condition"];
}
51 [label="Enter when branch result"];
36 [label="Enter block"];
subgraph cluster_11 {
color=blue
52 [label="Enter block"];
53 [label="Access variable R|<local>/s|"];
54 [label="Access variable <Inapplicable(WRONG_RECEIVER): [kotlin/String.length]>#"];
55 [label="Exit block"];
37 [label="Enter when"];
subgraph cluster_12 {
color=blue
38 [label="Enter when branch condition "];
39 [label="Access variable R|<local>/s|"];
40 [label="Enter safe call"];
41 [label="Function call: $subj$.R|/check|()"];
42 [label="Exit safe call"];
43 [label="Const: Boolean(false)"];
44 [label="Operator =="];
45 [label="Exit when branch condition"];
}
subgraph cluster_13 {
color=blue
46 [label="Enter when branch condition else"];
47 [label="Exit when branch condition"];
}
48 [label="Enter when branch result"];
subgraph cluster_14 {
color=blue
49 [label="Enter block"];
50 [label="Access variable R|<local>/s|"];
51 [label="Access variable <Inapplicable(WRONG_RECEIVER): [kotlin/String.length]>#"];
52 [label="Exit block"];
}
53 [label="Exit when branch result"];
54 [label="Enter when branch result"];
subgraph cluster_15 {
color=blue
55 [label="Enter block"];
56 [label="Access variable R|<local>/s|"];
57 [label="Access variable R|kotlin/String.length|"];
58 [label="Exit block"];
}
59 [label="Exit when branch result"];
60 [label="Exit when"];
}
56 [label="Exit when branch result"];
43 [label="Enter when branch result"];
subgraph cluster_12 {
color=blue
44 [label="Enter block"];
45 [label="Access variable R|<local>/s|"];
46 [label="Access variable R|kotlin/String.length|"];
47 [label="Exit block"];
}
48 [label="Exit when branch result"];
34 [label="Exit when"];
61 [label="Exit block"];
}
32 [label="Exit function test_2" style="filled" fillcolor=red];
62 [label="Exit function test_2" style="filled" fillcolor=red];
}
31 -> {33};
33 -> {35};
34 -> {32};
35 -> {36};
36 -> {37 38};
37 -> {39};
38 -> {40};
39 -> {38};
36 -> {37};
37 -> {38};
38 -> {39};
39 -> {40 42};
40 -> {41};
41 -> {42};
42 -> {43 49};
42 -> {43};
43 -> {44};
44 -> {45};
45 -> {46};
45 -> {54 46};
46 -> {47};
47 -> {48};
48 -> {34};
48 -> {49};
49 -> {50};
50 -> {51};
51 -> {52};
52 -> {53};
53 -> {54};
53 -> {60};
54 -> {55};
55 -> {56};
56 -> {34};
56 -> {57};
57 -> {58};
58 -> {59};
59 -> {60};
60 -> {61};
61 -> {62};
subgraph cluster_13 {
subgraph cluster_16 {
color=red
57 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_14 {
63 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_17 {
color=blue
59 [label="Enter when"];
subgraph cluster_15 {
color=blue
61 [label="Enter when branch condition "];
62 [label="Access variable R|<local>/s|"];
63 [label="Enter safe call"];
65 [label="Function call: $subj$.R|/check|()"];
64 [label="Exit safe call"];
66 [label="Const: Boolean(true)"];
67 [label="Operator !="];
68 [label="Exit when branch condition"];
}
subgraph cluster_16 {
color=blue
75 [label="Enter when branch condition else"];
76 [label="Exit when branch condition"];
}
77 [label="Enter when branch result"];
subgraph cluster_17 {
color=blue
78 [label="Enter block"];
79 [label="Access variable R|<local>/s|"];
80 [label="Access variable R|kotlin/String.length|"];
81 [label="Exit block"];
}
82 [label="Exit when branch result"];
69 [label="Enter when branch result"];
64 [label="Enter block"];
subgraph cluster_18 {
color=blue
70 [label="Enter block"];
71 [label="Access variable R|<local>/s|"];
72 [label="Access variable <Inapplicable(WRONG_RECEIVER): [kotlin/String.length]>#"];
73 [label="Exit block"];
65 [label="Enter when"];
subgraph cluster_19 {
color=blue
66 [label="Enter when branch condition "];
67 [label="Access variable R|<local>/s|"];
68 [label="Enter safe call"];
69 [label="Function call: $subj$.R|/check|()"];
70 [label="Exit safe call"];
71 [label="Const: Boolean(true)"];
72 [label="Operator !="];
73 [label="Exit when branch condition"];
}
subgraph cluster_20 {
color=blue
74 [label="Enter when branch condition else"];
75 [label="Exit when branch condition"];
}
76 [label="Enter when branch result"];
subgraph cluster_21 {
color=blue
77 [label="Enter block"];
78 [label="Access variable R|<local>/s|"];
79 [label="Access variable R|kotlin/String.length|"];
80 [label="Exit block"];
}
81 [label="Exit when branch result"];
82 [label="Enter when branch result"];
subgraph cluster_22 {
color=blue
83 [label="Enter block"];
84 [label="Access variable R|<local>/s|"];
85 [label="Access variable <Inapplicable(WRONG_RECEIVER): [kotlin/String.length]>#"];
86 [label="Exit block"];
}
87 [label="Exit when branch result"];
88 [label="Exit when"];
}
74 [label="Exit when branch result"];
60 [label="Exit when"];
89 [label="Exit block"];
}
58 [label="Exit function test_3" style="filled" fillcolor=red];
90 [label="Exit function test_3" style="filled" fillcolor=red];
}
57 -> {59};
59 -> {61};
60 -> {58};
61 -> {62};
62 -> {63 64};
63 -> {65};
64 -> {66};
65 -> {64};
63 -> {64};
64 -> {65};
65 -> {66};
66 -> {67};
67 -> {68};
68 -> {69 75};
67 -> {68 70};
68 -> {69};
69 -> {70};
70 -> {71};
71 -> {72};
72 -> {73};
73 -> {74};
74 -> {60};
73 -> {82 74};
74 -> {75};
75 -> {76};
76 -> {77};
77 -> {78};
78 -> {79};
79 -> {80};
80 -> {81};
81 -> {82};
82 -> {60};
subgraph cluster_19 {
color=red
83 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_20 {
color=blue
85 [label="Enter when"];
subgraph cluster_21 {
color=blue
87 [label="Enter when branch condition "];
88 [label="Access variable R|<local>/s|"];
89 [label="Enter safe call"];
91 [label="Function call: $subj$.R|/check|()"];
90 [label="Exit safe call"];
92 [label="Const: Boolean(false)"];
93 [label="Operator !="];
94 [label="Exit when branch condition"];
}
subgraph cluster_22 {
color=blue
101 [label="Enter when branch condition else"];
102 [label="Exit when branch condition"];
}
103 [label="Enter when branch result"];
subgraph cluster_23 {
color=blue
104 [label="Enter block"];
105 [label="Access variable R|<local>/s|"];
106 [label="Access variable R|kotlin/String.length|"];
107 [label="Exit block"];
}
108 [label="Exit when branch result"];
95 [label="Enter when branch result"];
subgraph cluster_24 {
color=blue
96 [label="Enter block"];
97 [label="Access variable R|<local>/s|"];
98 [label="Access variable <Inapplicable(WRONG_RECEIVER): [kotlin/String.length]>#"];
99 [label="Exit block"];
}
100 [label="Exit when branch result"];
86 [label="Exit when"];
}
84 [label="Exit function test_4" style="filled" fillcolor=red];
}
83 -> {85};
85 -> {87};
86 -> {84};
81 -> {88};
82 -> {83};
83 -> {84};
84 -> {85};
85 -> {86};
86 -> {87};
87 -> {88};
88 -> {89 90};
89 -> {91};
90 -> {92};
91 -> {90};
88 -> {89};
89 -> {90};
subgraph cluster_23 {
color=red
91 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_24 {
color=blue
92 [label="Enter block"];
subgraph cluster_25 {
color=blue
93 [label="Enter when"];
subgraph cluster_26 {
color=blue
94 [label="Enter when branch condition "];
95 [label="Access variable R|<local>/s|"];
96 [label="Enter safe call"];
97 [label="Function call: $subj$.R|/check|()"];
98 [label="Exit safe call"];
99 [label="Const: Boolean(false)"];
100 [label="Operator !="];
101 [label="Exit when branch condition"];
}
subgraph cluster_27 {
color=blue
102 [label="Enter when branch condition else"];
103 [label="Exit when branch condition"];
}
104 [label="Enter when branch result"];
subgraph cluster_28 {
color=blue
105 [label="Enter block"];
106 [label="Access variable R|<local>/s|"];
107 [label="Access variable R|kotlin/String.length|"];
108 [label="Exit block"];
}
109 [label="Exit when branch result"];
110 [label="Enter when branch result"];
subgraph cluster_29 {
color=blue
111 [label="Enter block"];
112 [label="Access variable R|<local>/s|"];
113 [label="Access variable <Inapplicable(WRONG_RECEIVER): [kotlin/String.length]>#"];
114 [label="Exit block"];
}
115 [label="Exit when branch result"];
116 [label="Exit when"];
}
117 [label="Exit block"];
}
118 [label="Exit function test_4" style="filled" fillcolor=red];
}
91 -> {92};
92 -> {93};
93 -> {94};
94 -> {95 101};
95 -> {96};
94 -> {95};
95 -> {96 98};
96 -> {97};
97 -> {98};
98 -> {99};
99 -> {100};
100 -> {86};
101 -> {102};
100 -> {101};
101 -> {110 102};
102 -> {103};
103 -> {104};
104 -> {105};
105 -> {106};
106 -> {107};
107 -> {108};
108 -> {86};
108 -> {109};
109 -> {116};
110 -> {111};
111 -> {112};
112 -> {113};
113 -> {114};
114 -> {115};
115 -> {116};
116 -> {117};
117 -> {118};
}

View File

@@ -6,70 +6,70 @@ digraph safeCalls_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function foo" style="filled" fillcolor=red];
2 [label="Const: String()"];
3 [label="Jump: ^foo String()"];
4 [label="Stub" style="filled" fillcolor=gray];
1 [label="Exit function foo" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
1 [label="Enter block"];
2 [label="Const: String()"];
3 [label="Jump: ^foo String()"];
4 [label="Stub" style="filled" fillcolor=gray];
5 [label="Exit block" style="filled" fillcolor=gray];
}
6 [label="Exit function foo" style="filled" fillcolor=red];
}
0 -> {2};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {1};
3 -> {6};
3 -> {4} [style=dotted];
4 -> {1} [style=dotted];
subgraph cluster_1 {
color=red
5 [label="Enter function let" style="filled" fillcolor=red];
6 [label="Exit function let" style="filled" fillcolor=red];
}
5 -> {6};
4 -> {5} [style=dotted];
5 -> {6} [style=dotted];
subgraph cluster_2 {
color=red
7 [label="Enter function test" style="filled" fillcolor=red];
9 [label="Access variable R|<local>/x|"];
10 [label="Enter safe call"];
12 [label="Access variable R|<local>/x|"];
13 [label="Access variable R|kotlin/String.length|"];
14 [label="Const: Int(1)"];
15 [label="Operator =="];
16 [label="Function call: $subj$.R|/foo|(...)"];
11 [label="Exit safe call"];
17 [label="Access variable R|<local>/x|"];
18 [label="Access variable <Inapplicable(WRONG_RECEIVER): [kotlin/String.length]>#"];
8 [label="Exit function test" style="filled" fillcolor=red];
7 [label="Enter function let" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
8 [label="Enter block"];
9 [label="Exit block"];
}
10 [label="Exit function let" style="filled" fillcolor=red];
}
7 -> {9};
9 -> {10 11};
10 -> {12};
11 -> {17};
12 -> {13};
13 -> {14};
14 -> {15};
15 -> {16};
16 -> {11};
17 -> {18};
18 -> {8};
subgraph cluster_3 {
color=red
19 [label="Enter function bar" style="filled" fillcolor=red];
20 [label="Exit function bar" style="filled" fillcolor=red];
}
19 -> {20};
7 -> {8};
8 -> {9};
9 -> {10};
subgraph cluster_4 {
color=red
21 [label="Enter function bool" style="filled" fillcolor=red];
22 [label="Exit function bool" style="filled" fillcolor=red];
11 [label="Enter function test" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
12 [label="Enter block"];
13 [label="Access variable R|<local>/x|"];
14 [label="Enter safe call"];
15 [label="Access variable R|<local>/x|"];
16 [label="Access variable R|kotlin/String.length|"];
17 [label="Const: Int(1)"];
18 [label="Operator =="];
19 [label="Function call: $subj$.R|/foo|(...)"];
20 [label="Exit safe call"];
21 [label="Access variable R|<local>/x|"];
22 [label="Access variable <Inapplicable(WRONG_RECEIVER): [kotlin/String.length]>#"];
23 [label="Exit block"];
}
24 [label="Exit function test" style="filled" fillcolor=red];
}
11 -> {12};
12 -> {13};
13 -> {14 20};
14 -> {15};
15 -> {16};
16 -> {17};
17 -> {18};
18 -> {19};
19 -> {20};
20 -> {21};
21 -> {22};
subgraph cluster_5 {
color=red
23 [label="Enter function id" style="filled" fillcolor=red];
24 [label="Exit function id" style="filled" fillcolor=red];
}
22 -> {23};
23 -> {24};
subgraph cluster_6 {
@@ -81,158 +81,226 @@ digraph safeCalls_kt {
subgraph cluster_7 {
color=red
27 [label="Enter function test_2" style="filled" fillcolor=red];
29 [label="Access variable R|<local>/x|"];
30 [label="Type operator: (R|<local>/x| as? R|A|)"];
31 [label="Enter safe call"];
33 [label="Access variable R|<local>/x|"];
34 [label="Function call: $subj$.R|/A.bar|(...)"];
32 [label="Exit safe call"];
28 [label="Exit function test_2" style="filled" fillcolor=red];
27 [label="Enter function bar" style="filled" fillcolor=red];
28 [label="Exit function bar" style="filled" fillcolor=red];
}
27 -> {29};
29 -> {30};
30 -> {31 32};
31 -> {33};
32 -> {28};
33 -> {34};
34 -> {32};
27 -> {28};
subgraph cluster_8 {
color=red
35 [label="Enter function test_3" style="filled" fillcolor=red];
37 [label="Access variable R|<local>/x|"];
38 [label="Type operator: (R|<local>/x| as? R|A|)"];
39 [label="Enter safe call"];
41 [label="Access variable R|<local>/x|"];
42 [label="Function call: $subj$.R|/A.bar|(...)"];
40 [label="Exit safe call"];
43 [label="Enter safe call"];
45 [label="Access variable R|<local>/x|"];
46 [label="Function call: R|<local>/x|.R|/A.bool|()"];
47 [label="Function call: $subj$.R|/foo|(...)"];
44 [label="Exit safe call"];
48 [label="Enter safe call"];
50 [label="Postponed enter to lambda"];
subgraph cluster_9 {
color=blue
55 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
57 [label="Access variable R|<local>/x|"];
58 [label="Function call: R|<local>/x|.R|/A.bool|()"];
56 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
51 [label="Postponed exit from lambda"];
52 [label="Function call: $subj$.R|/let|(...)"];
49 [label="Exit safe call"];
53 [label="Access variable R|<local>/x|"];
54 [label="Function call: R|<local>/x|.<Unresolved name: bool>#()"];
36 [label="Exit function test_3" style="filled" fillcolor=red];
29 [label="Enter function bool" style="filled" fillcolor=red];
30 [label="Exit function bool" style="filled" fillcolor=red];
}
35 -> {37};
37 -> {38};
38 -> {39 40};
39 -> {41};
40 -> {43 44};
41 -> {42};
42 -> {40};
43 -> {45};
44 -> {48 49};
45 -> {46};
46 -> {47};
47 -> {44};
48 -> {50};
49 -> {53};
50 -> {51};
50 -> {55} [color=red];
51 -> {52};
52 -> {49};
53 -> {54};
54 -> {36};
55 -> {57};
57 -> {58};
58 -> {56};
29 -> {30};
subgraph cluster_9 {
color=red
31 [label="Enter function id" style="filled" fillcolor=red];
32 [label="Exit function id" style="filled" fillcolor=red];
}
31 -> {32};
subgraph cluster_10 {
color=red
59 [label="Enter function test_4" style="filled" fillcolor=red];
61 [label="Access variable R|<local>/x|"];
62 [label="Enter safe call"];
64 [label="Function call: $subj$.R|/A.id|()"];
63 [label="Exit safe call"];
65 [label="Enter safe call"];
67 [label="Function call: $subj$.R|/A.bool|()"];
66 [label="Exit safe call"];
68 [label="Access variable R|<local>/x|"];
69 [label="Function call: R|<local>/x|.<Inapplicable(WRONG_RECEIVER): [/A.id]>#()"];
60 [label="Exit function test_4" style="filled" fillcolor=red];
33 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_11 {
color=blue
34 [label="Enter block"];
35 [label="Access variable R|<local>/x|"];
36 [label="Type operator: (R|<local>/x| as? R|A|)"];
37 [label="Enter safe call"];
38 [label="Access variable R|<local>/x|"];
39 [label="Function call: $subj$.R|/A.bar|(...)"];
40 [label="Exit safe call"];
41 [label="Exit block"];
}
42 [label="Exit function test_2" style="filled" fillcolor=red];
}
59 -> {61};
61 -> {62 63};
62 -> {64};
63 -> {65 66};
64 -> {63};
65 -> {67};
66 -> {68};
67 -> {66};
68 -> {69};
69 -> {60};
subgraph cluster_11 {
color=red
70 [label="Enter function boo" style="filled" fillcolor=red];
71 [label="Exit function boo" style="filled" fillcolor=red];
}
70 -> {71};
33 -> {34};
34 -> {35};
35 -> {36};
36 -> {37 40};
37 -> {38};
38 -> {39};
39 -> {40};
40 -> {41};
41 -> {42};
subgraph cluster_12 {
color=red
72 [label="Enter function test_5" style="filled" fillcolor=red];
74 [label="Access variable R|<local>/x|"];
75 [label="Enter safe call"];
77 [label="Postponed enter to lambda"];
43 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_13 {
color=blue
89 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
91 [label="Jump: ^test_5 Unit"];
92 [label="Stub" style="filled" fillcolor=gray];
90 [label="Exit function anonymousFunction" style="filled" fillcolor=red style="filled" fillcolor=gray];
44 [label="Enter block"];
45 [label="Access variable R|<local>/x|"];
46 [label="Type operator: (R|<local>/x| as? R|A|)"];
47 [label="Enter safe call"];
48 [label="Access variable R|<local>/x|"];
49 [label="Function call: $subj$.R|/A.bar|(...)"];
50 [label="Exit safe call"];
51 [label="Enter safe call"];
52 [label="Access variable R|<local>/x|"];
53 [label="Function call: R|<local>/x|.R|/A.bool|()"];
54 [label="Function call: $subj$.R|/foo|(...)"];
55 [label="Exit safe call"];
56 [label="Enter safe call"];
57 [label="Postponed enter to lambda"];
subgraph cluster_14 {
color=blue
65 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_15 {
color=blue
66 [label="Enter block"];
67 [label="Access variable R|<local>/x|"];
68 [label="Function call: R|<local>/x|.R|/A.bool|()"];
69 [label="Exit block"];
}
70 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
58 [label="Postponed exit from lambda"];
59 [label="Function call: $subj$.R|/let|(...)"];
60 [label="Exit safe call"];
61 [label="Access variable R|<local>/x|"];
62 [label="Function call: R|<local>/x|.<Unresolved name: bool>#()"];
63 [label="Exit block"];
}
80 [label="Call arguments union" style="filled" fillcolor=gray];
78 [label="Postponed exit from lambda"];
79 [label="Function call: $subj$.R|kotlin/let|<R|A|, R|kotlin/Nothing|>(...)" style="filled" fillcolor=gray];
81 [label="Stub" style="filled" fillcolor=gray];
76 [label="Exit safe call"];
82 [label="Enter safe call"];
84 [label="Access variable R|<local>/x|"];
85 [label="Function call: R|<local>/x|.R|/A.bool|()"];
86 [label="Function call: $subj$.R|/boo|(...)"];
83 [label="Exit safe call"];
87 [label="Access variable R|<local>/x|"];
88 [label="Function call: R|<local>/x|.<Inapplicable(WRONG_RECEIVER): [/A.id]>#()"];
73 [label="Exit function test_5" style="filled" fillcolor=red];
64 [label="Exit function test_3" style="filled" fillcolor=red];
}
43 -> {44};
44 -> {45};
45 -> {46};
46 -> {47 50};
47 -> {48};
48 -> {49};
49 -> {50};
50 -> {51 55};
51 -> {52};
52 -> {53};
53 -> {54};
54 -> {55};
55 -> {56 60};
56 -> {57};
57 -> {58 65};
58 -> {59};
59 -> {60};
60 -> {61};
61 -> {62};
62 -> {63};
63 -> {64};
65 -> {66};
66 -> {67};
67 -> {68};
68 -> {69};
69 -> {70};
subgraph cluster_16 {
color=red
71 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_17 {
color=blue
72 [label="Enter block"];
73 [label="Access variable R|<local>/x|"];
74 [label="Enter safe call"];
75 [label="Function call: $subj$.R|/A.id|()"];
76 [label="Exit safe call"];
77 [label="Enter safe call"];
78 [label="Function call: $subj$.R|/A.bool|()"];
79 [label="Exit safe call"];
80 [label="Access variable R|<local>/x|"];
81 [label="Function call: R|<local>/x|.<Inapplicable(WRONG_RECEIVER): [/A.id]>#()"];
82 [label="Exit block"];
}
83 [label="Exit function test_4" style="filled" fillcolor=red];
}
71 -> {72};
72 -> {73};
73 -> {74 76};
74 -> {75};
75 -> {76};
76 -> {77 79};
77 -> {78};
78 -> {79};
79 -> {80};
80 -> {81};
81 -> {82};
82 -> {83};
subgraph cluster_18 {
color=red
84 [label="Enter function boo" style="filled" fillcolor=red];
subgraph cluster_19 {
color=blue
85 [label="Enter block"];
86 [label="Exit block"];
}
87 [label="Exit function boo" style="filled" fillcolor=red];
}
72 -> {74};
74 -> {75 76};
75 -> {77};
76 -> {82 83};
77 -> {89};
77 -> {78} [color=red];
78 -> {79} [color=green];
79 -> {73 81} [style=dotted];
80 -> {79} [style=dotted];
81 -> {76} [style=dotted];
82 -> {84};
83 -> {87};
84 -> {85};
85 -> {86};
86 -> {83};
87 -> {88};
88 -> {73} [style=dotted];
89 -> {91};
90 -> {80} [style=dotted];
90 -> {78} [color=green];
91 -> {73};
91 -> {92} [style=dotted];
92 -> {90} [style=dotted];
86 -> {87};
subgraph cluster_20 {
color=red
88 [label="Enter function test_5" style="filled" fillcolor=red];
subgraph cluster_21 {
color=blue
89 [label="Enter block"];
90 [label="Access variable R|<local>/x|"];
91 [label="Enter safe call"];
92 [label="Postponed enter to lambda"];
subgraph cluster_22 {
color=blue
107 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_23 {
color=blue
108 [label="Enter block"];
109 [label="Jump: ^test_5 Unit"];
110 [label="Stub" style="filled" fillcolor=gray];
111 [label="Exit block" style="filled" fillcolor=gray];
}
112 [label="Exit function anonymousFunction" style="filled" fillcolor=red style="filled" fillcolor=gray];
}
93 [label="Call arguments union" style="filled" fillcolor=gray];
94 [label="Postponed exit from lambda" style="filled" fillcolor=gray];
95 [label="Function call: $subj$.R|kotlin/let|<R|A|, R|kotlin/Nothing|>(...)" style="filled" fillcolor=gray];
96 [label="Stub" style="filled" fillcolor=gray];
97 [label="Exit safe call"];
98 [label="Enter safe call"];
99 [label="Access variable R|<local>/x|"];
100 [label="Function call: R|<local>/x|.R|/A.bool|()"];
101 [label="Function call: $subj$.R|/boo|(...)"];
102 [label="Exit safe call"];
103 [label="Access variable R|<local>/x|"];
104 [label="Function call: R|<local>/x|.<Inapplicable(WRONG_RECEIVER): [/A.id]>#()"];
105 [label="Exit block"];
}
106 [label="Exit function test_5" style="filled" fillcolor=red];
}
88 -> {89};
89 -> {90};
90 -> {91 97};
91 -> {92};
92 -> {107};
92 -> {94} [color=red];
93 -> {95} [style=dotted];
94 -> {95} [style=dotted];
95 -> {106 96} [style=dotted];
96 -> {97} [style=dotted];
97 -> {98 102};
98 -> {99};
99 -> {100};
100 -> {101};
101 -> {102};
102 -> {103};
103 -> {104};
104 -> {105};
105 -> {106};
107 -> {108};
108 -> {109};
109 -> {106};
109 -> {110} [style=dotted];
110 -> {111} [style=dotted];
111 -> {112} [style=dotted];
112 -> {94 93} [style=dotted];
}

View File

@@ -30,7 +30,7 @@ fun test_4(x: A?) {
x.<!INAPPLICABLE_CANDIDATE!>id<!>()
}
fun Any?.boo(b: Boolean)
fun Any?.boo(b: Boolean) {}
fun test_5(x: A?) {
x?.let { return }?.boo(x.bool())

View File

@@ -30,7 +30,8 @@ FILE: safeCalls.kt
R|<local>/x|?.{ $subj$.R|/A.id|() }?.{ $subj$.R|/A.bool|() }
R|<local>/x|.<Inapplicable(WRONG_RECEIVER): [/A.id]>#()
}
public final fun R|kotlin/Any?|.boo(b: R|kotlin/Boolean|): R|kotlin/Unit|
public final fun R|kotlin/Any?|.boo(b: R|kotlin/Boolean|): R|kotlin/Unit| {
}
public final fun test_5(x: R|A?|): R|kotlin/Unit| {
R|<local>/x|?.{ $subj$.R|kotlin/let|<R|A|, R|kotlin/Nothing|>(<L> = let@fun <anonymous>(it: R|A|): R|kotlin/Nothing| <kind=EXACTLY_ONCE> {
^test_5 Unit

View File

@@ -12,83 +12,84 @@ digraph smartCastInInit_kt {
subgraph cluster_1 {
color=red
2 [label="Enter function foo" style="filled" fillcolor=red];
3 [label="Exit function foo" style="filled" fillcolor=red];
2 [label="Enter class S" style="filled" fillcolor=red];
3 [label="Exit class S" style="filled" fillcolor=red];
}
2 -> {3};
2 -> {3} [color=green];
subgraph cluster_2 {
color=red
4 [label="Enter class S" style="filled" fillcolor=red];
5 [label="Exit class S" style="filled" fillcolor=red];
4 [label="Enter function foo" style="filled" fillcolor=red];
5 [label="Exit function foo" style="filled" fillcolor=red];
}
4 -> {5} [color=green];
4 -> {5};
subgraph cluster_3 {
color=red
6 [label="Enter function s" style="filled" fillcolor=red];
8 [label="Function call: R|kotlin/TODO|()"];
9 [label="Stub" style="filled" fillcolor=gray];
10 [label="Jump: ^s R|kotlin/TODO|()" style="filled" fillcolor=gray];
11 [label="Stub" style="filled" fillcolor=gray];
7 [label="Exit function s" style="filled" fillcolor=red];
subgraph cluster_4 {
color=blue
7 [label="Enter block"];
8 [label="Function call: R|kotlin/TODO|()"];
9 [label="Stub" style="filled" fillcolor=gray];
10 [label="Jump: ^s R|kotlin/TODO|()" style="filled" fillcolor=gray];
11 [label="Stub" style="filled" fillcolor=gray];
12 [label="Exit block" style="filled" fillcolor=gray];
}
13 [label="Exit function s" style="filled" fillcolor=red];
}
6 -> {8};
8 -> {7};
6 -> {7};
7 -> {8};
8 -> {13};
8 -> {9} [style=dotted];
9 -> {10} [style=dotted];
10 -> {7 11} [style=dotted];
11 -> {7} [style=dotted];
subgraph cluster_4 {
color=red
12 [label="Enter function <init>" style="filled" fillcolor=red];
14 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
13 [label="Exit function <init>" style="filled" fillcolor=red];
}
12 -> {14};
14 -> {13};
10 -> {13 11} [style=dotted];
11 -> {12} [style=dotted];
12 -> {13} [style=dotted];
subgraph cluster_5 {
color=red
27 [label="Enter class Main" style="filled" fillcolor=red];
14 [label="Enter class Main" style="filled" fillcolor=red];
subgraph cluster_6 {
color=blue
15 [label="Enter function getter" style="filled" fillcolor=red];
16 [label="Exit function getter" style="filled" fillcolor=red];
}
subgraph cluster_7 {
color=blue
17 [label="Enter property" style="filled" fillcolor=red];
18 [label="Exit property" style="filled" fillcolor=red];
}
subgraph cluster_8 {
color=blue
19 [label="Enter init block" style="filled" fillcolor=red];
subgraph cluster_9 {
16 [label="Enter init block" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
21 [label="Enter block"];
22 [label="Function call: R|/s|()"];
23 [label="Assignment: R|/Main.x|"];
24 [label="Access variable R|/Main.x|"];
25 [label="Function call: this@R|/Main|.R|/Main.x|.R|/S.foo|()"];
26 [label="Exit block"];
17 [label="Enter block"];
18 [label="Function call: R|/s|()"];
19 [label="Assignment: R|/Main.x|"];
20 [label="Access variable R|/Main.x|"];
21 [label="Function call: this@R|/Main|.R|/Main.x|.R|/S.foo|()"];
22 [label="Exit block"];
}
20 [label="Exit init block" style="filled" fillcolor=red];
23 [label="Exit init block" style="filled" fillcolor=red];
}
28 [label="Exit class Main" style="filled" fillcolor=red];
15 [label="Exit class Main" style="filled" fillcolor=red];
}
27 -> {17} [color=green];
14 -> {16} [color=green];
16 -> {17};
17 -> {18};
18 -> {19} [color=green];
15 -> {16};
19 -> {21};
20 -> {28} [color=green];
18 -> {19};
19 -> {20};
20 -> {21};
21 -> {22};
22 -> {23};
23 -> {24};
23 -> {15} [color=green];
subgraph cluster_8 {
color=red
24 [label="Enter function <init>" style="filled" fillcolor=red];
25 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
26 [label="Exit function <init>" style="filled" fillcolor=red];
}
24 -> {25};
25 -> {26};
26 -> {20};
subgraph cluster_9 {
color=red
27 [label="Enter function getter" style="filled" fillcolor=red];
28 [label="Exit function getter" style="filled" fillcolor=red];
}
27 -> {28};
}

View File

@@ -6,263 +6,302 @@ digraph smartcastToNothing_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function getNothing" style="filled" fillcolor=red];
2 [label="Function call: R|java/lang/Exception.Exception|()"];
3 [label="Throw: throw R|java/lang/Exception.Exception|()"];
4 [label="Stub" style="filled" fillcolor=gray];
5 [label="Jump: ^getNothing throw R|java/lang/Exception.Exception|()" style="filled" fillcolor=gray];
6 [label="Stub" style="filled" fillcolor=gray];
1 [label="Exit function getNothing" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
1 [label="Enter block"];
2 [label="Function call: R|java/lang/Exception.Exception|()"];
3 [label="Throw: throw R|java/lang/Exception.Exception|()"];
4 [label="Stub" style="filled" fillcolor=gray];
5 [label="Jump: ^getNothing throw R|java/lang/Exception.Exception|()" style="filled" fillcolor=gray];
6 [label="Stub" style="filled" fillcolor=gray];
7 [label="Exit block" style="filled" fillcolor=gray];
}
8 [label="Exit function getNothing" style="filled" fillcolor=red];
}
0 -> {2};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {1};
3 -> {8};
3 -> {4} [style=dotted];
4 -> {5} [style=dotted];
5 -> {1 6} [style=dotted];
6 -> {1} [style=dotted];
subgraph cluster_1 {
color=red
7 [label="Enter function getNullableNothing" style="filled" fillcolor=red];
9 [label="Const: Null(null)"];
10 [label="Jump: ^getNullableNothing Null(null)"];
11 [label="Stub" style="filled" fillcolor=gray];
8 [label="Exit function getNullableNothing" style="filled" fillcolor=red];
}
7 -> {9};
9 -> {10};
10 -> {8};
10 -> {11} [style=dotted];
11 -> {8} [style=dotted];
5 -> {8 6} [style=dotted];
6 -> {7} [style=dotted];
7 -> {8} [style=dotted];
subgraph cluster_2 {
color=red
17 [label="Enter property" style="filled" fillcolor=red];
9 [label="Enter function getNullableNothing" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
12 [label="Enter function getter" style="filled" fillcolor=red];
14 [label="Const: Int(1)"];
15 [label="Jump: ^ Int(1)"];
16 [label="Stub" style="filled" fillcolor=gray];
13 [label="Exit function getter" style="filled" fillcolor=red];
10 [label="Enter block"];
11 [label="Const: Null(null)"];
12 [label="Jump: ^getNullableNothing Null(null)"];
13 [label="Stub" style="filled" fillcolor=gray];
14 [label="Exit block" style="filled" fillcolor=gray];
}
18 [label="Exit property" style="filled" fillcolor=red];
15 [label="Exit function getNullableNothing" style="filled" fillcolor=red];
}
17 -> {18};
12 -> {14};
14 -> {15};
15 -> {13};
15 -> {16} [style=dotted];
16 -> {13} [style=dotted];
9 -> {10};
10 -> {11};
11 -> {12};
12 -> {15};
12 -> {13} [style=dotted];
13 -> {14} [style=dotted];
14 -> {15} [style=dotted];
subgraph cluster_4 {
color=red
24 [label="Enter property" style="filled" fillcolor=red];
16 [label="Enter function getter" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
19 [label="Enter function getter" style="filled" fillcolor=red];
21 [label="Const: Int(2)"];
22 [label="Jump: ^ Int(2)"];
23 [label="Stub" style="filled" fillcolor=gray];
20 [label="Exit function getter" style="filled" fillcolor=red];
17 [label="Enter block"];
18 [label="Const: Int(1)"];
19 [label="Jump: ^ Int(1)"];
20 [label="Stub" style="filled" fillcolor=gray];
21 [label="Exit block" style="filled" fillcolor=gray];
}
25 [label="Exit property" style="filled" fillcolor=red];
22 [label="Exit function getter" style="filled" fillcolor=red];
}
24 -> {25};
19 -> {21};
21 -> {22};
22 -> {20};
22 -> {23} [style=dotted];
23 -> {20} [style=dotted];
16 -> {17};
17 -> {18};
18 -> {19};
19 -> {22};
19 -> {20} [style=dotted];
20 -> {21} [style=dotted];
21 -> {22} [style=dotted];
subgraph cluster_6 {
color=red
26 [label="Enter function myListOf" style="filled" fillcolor=red];
28 [label="Const: Null(null)"];
29 [label="Check not null: Null(null)!!"];
30 [label="Jump: ^myListOf Null(null)!!"];
31 [label="Stub" style="filled" fillcolor=gray];
27 [label="Exit function myListOf" style="filled" fillcolor=red];
23 [label="Enter function getter" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
24 [label="Enter block"];
25 [label="Const: Int(2)"];
26 [label="Jump: ^ Int(2)"];
27 [label="Stub" style="filled" fillcolor=gray];
28 [label="Exit block" style="filled" fillcolor=gray];
}
29 [label="Exit function getter" style="filled" fillcolor=red];
}
26 -> {28};
28 -> {29};
29 -> {30};
30 -> {27};
30 -> {31} [style=dotted];
31 -> {27} [style=dotted];
subgraph cluster_7 {
color=red
32 [label="Enter function <init>" style="filled" fillcolor=red];
34 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
33 [label="Exit function <init>" style="filled" fillcolor=red];
}
32 -> {34};
34 -> {33};
23 -> {24};
24 -> {25};
25 -> {26};
26 -> {29};
26 -> {27} [style=dotted];
27 -> {28} [style=dotted];
28 -> {29} [style=dotted];
subgraph cluster_8 {
color=red
45 [label="Enter class A" style="filled" fillcolor=red];
30 [label="Enter function myListOf" style="filled" fillcolor=red];
subgraph cluster_9 {
color=blue
40 [label="Enter function getter" style="filled" fillcolor=red];
41 [label="Exit function getter" style="filled" fillcolor=red];
}
subgraph cluster_10 {
color=blue
35 [label="Enter function getter" style="filled" fillcolor=red];
36 [label="Exit function getter" style="filled" fillcolor=red];
31 [label="Enter block"];
32 [label="Const: Null(null)"];
33 [label="Check not null: Null(null)!!"];
34 [label="Jump: ^myListOf Null(null)!!"];
35 [label="Stub" style="filled" fillcolor=gray];
36 [label="Exit block" style="filled" fillcolor=gray];
}
37 [label="Exit function myListOf" style="filled" fillcolor=red];
}
30 -> {31};
31 -> {32};
32 -> {33};
33 -> {34};
34 -> {37};
34 -> {35} [style=dotted];
35 -> {36} [style=dotted];
36 -> {37} [style=dotted];
subgraph cluster_10 {
color=red
38 [label="Enter class A" style="filled" fillcolor=red];
subgraph cluster_11 {
color=blue
37 [label="Enter property" style="filled" fillcolor=red];
39 [label="Const: Int(1)"];
38 [label="Exit property" style="filled" fillcolor=red];
40 [label="Enter property" style="filled" fillcolor=red];
41 [label="Const: Int(1)"];
42 [label="Exit property" style="filled" fillcolor=red];
}
subgraph cluster_12 {
color=blue
42 [label="Enter property" style="filled" fillcolor=red];
43 [label="Enter property" style="filled" fillcolor=red];
44 [label="Const: Boolean(true)"];
43 [label="Exit property" style="filled" fillcolor=red];
45 [label="Exit property" style="filled" fillcolor=red];
}
46 [label="Exit class A" style="filled" fillcolor=red];
39 [label="Exit class A" style="filled" fillcolor=red];
}
45 -> {37} [color=green];
37 -> {39};
38 -> {42} [color=green];
39 -> {38};
35 -> {36};
42 -> {44};
43 -> {46} [color=green];
44 -> {43};
38 -> {40} [color=green];
40 -> {41};
41 -> {42};
42 -> {43} [color=green];
43 -> {44};
44 -> {45};
45 -> {39} [color=green];
subgraph cluster_13 {
color=red
47 [label="Enter function test_0" style="filled" fillcolor=red];
49 [label="Const: Null(null)"];
50 [label="Variable declaration: lvar s: R|A?|"];
51 [label="Access variable R|<local>/results|"];
52 [label="Function call: R|<local>/results|.R|FakeOverride<kotlin/collections/List.iterator: R|kotlin/collections/Iterator<kotlin/Nothing>|>|()"];
53 [label="Variable declaration: lval <iterator>: R|kotlin/collections/Iterator<kotlin/Nothing>|"];
subgraph cluster_14 {
color=blue
54 [label="Enter while loop"];
subgraph cluster_15 {
color=blue
56 [label="Enter loop condition"];
57 [label="Access variable R|<local>/<iterator>|"];
58 [label="Function call: R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()"];
59 [label="Exit loop condition"];
}
subgraph cluster_16 {
color=blue
60 [label="Enter loop block"];
subgraph cluster_17 {
color=blue
61 [label="Enter block"];
62 [label="Access variable R|<local>/<iterator>|"];
63 [label="Function call: R|<local>/<iterator>|.R|FakeOverride<kotlin/collections/Iterator.next: R|kotlin/Nothing|>|()"];
64 [label="Stub" style="filled" fillcolor=gray];
65 [label="Variable declaration: lval result: R|kotlin/Nothing|" style="filled" fillcolor=gray];
66 [label="Access variable R|<local>/result|" style="filled" fillcolor=gray];
67 [label="Stub" style="filled" fillcolor=gray];
68 [label="Assignment: R|<local>/s|" style="filled" fillcolor=gray];
subgraph cluster_18 {
color=blue
69 [label="Enter when" style="filled" fillcolor=gray];
subgraph cluster_19 {
color=blue
71 [label="Enter when branch condition " style="filled" fillcolor=gray];
72 [label="Access variable R|<local>/result|" style="filled" fillcolor=gray];
73 [label="Stub" style="filled" fillcolor=gray];
74 [label="Access variable <Unresolved name: b>#" style="filled" fillcolor=gray];
75 [label="Exit when branch condition" style="filled" fillcolor=gray];
}
82 [label="Synthetic else branch" style="filled" fillcolor=gray];
76 [label="Enter when branch result" style="filled" fillcolor=gray];
subgraph cluster_20 {
color=blue
77 [label="Enter block" style="filled" fillcolor=gray];
78 [label="Jump: break@@@[R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()] " style="filled" fillcolor=gray];
79 [label="Stub" style="filled" fillcolor=gray];
80 [label="Exit block" style="filled" fillcolor=gray];
}
81 [label="Exit when branch result" style="filled" fillcolor=gray];
70 [label="Exit when" style="filled" fillcolor=gray];
}
83 [label="Exit block" style="filled" fillcolor=gray];
}
84 [label="Exit loop block" style="filled" fillcolor=gray];
}
55 [label="Exit whileloop"];
}
85 [label="Access variable R|<local>/s|"];
86 [label="Enter safe call"];
88 [label="Postponed enter to lambda"];
subgraph cluster_21 {
color=blue
92 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
94 [label="Access variable R|<local>/it|"];
95 [label="Access variable R|/A.a|"];
93 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
91 [label="Call arguments union" style="filled" fillcolor=yellow];
89 [label="Postponed exit from lambda"];
90 [label="Function call: $subj$.R|kotlin/let|<R|A|, R|kotlin/Int|>(...)"];
87 [label="Exit safe call"];
48 [label="Exit function test_0" style="filled" fillcolor=red];
46 [label="Enter function <init>" style="filled" fillcolor=red];
47 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
48 [label="Exit function <init>" style="filled" fillcolor=red];
}
46 -> {47};
47 -> {48};
subgraph cluster_14 {
color=red
49 [label="Enter function getter" style="filled" fillcolor=red];
50 [label="Exit function getter" style="filled" fillcolor=red];
}
47 -> {49};
49 -> {50};
50 -> {51};
subgraph cluster_15 {
color=red
51 [label="Enter function getter" style="filled" fillcolor=red];
52 [label="Exit function getter" style="filled" fillcolor=red];
}
51 -> {52};
52 -> {53};
subgraph cluster_16 {
color=red
53 [label="Enter function test_0" style="filled" fillcolor=red];
subgraph cluster_17 {
color=blue
54 [label="Enter block"];
55 [label="Const: Null(null)"];
56 [label="Variable declaration: lvar s: R|A?|"];
57 [label="Access variable R|<local>/results|"];
58 [label="Function call: R|<local>/results|.R|FakeOverride<kotlin/collections/List.iterator: R|kotlin/collections/Iterator<kotlin/Nothing>|>|()"];
59 [label="Variable declaration: lval <iterator>: R|kotlin/collections/Iterator<kotlin/Nothing>|"];
subgraph cluster_18 {
color=blue
60 [label="Enter while loop"];
subgraph cluster_19 {
color=blue
61 [label="Enter loop condition"];
62 [label="Access variable R|<local>/<iterator>|"];
63 [label="Function call: R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()"];
64 [label="Exit loop condition"];
}
subgraph cluster_20 {
color=blue
65 [label="Enter loop block"];
subgraph cluster_21 {
color=blue
66 [label="Enter block"];
67 [label="Access variable R|<local>/<iterator>|"];
68 [label="Function call: R|<local>/<iterator>|.R|FakeOverride<kotlin/collections/Iterator.next: R|kotlin/Nothing|>|()"];
69 [label="Stub" style="filled" fillcolor=gray];
70 [label="Variable declaration: lval result: R|kotlin/Nothing|" style="filled" fillcolor=gray];
71 [label="Access variable R|<local>/result|" style="filled" fillcolor=gray];
72 [label="Stub" style="filled" fillcolor=gray];
73 [label="Assignment: R|<local>/s|" style="filled" fillcolor=gray];
subgraph cluster_22 {
color=blue
74 [label="Enter when" style="filled" fillcolor=gray];
subgraph cluster_23 {
color=blue
75 [label="Enter when branch condition " style="filled" fillcolor=gray];
76 [label="Access variable R|<local>/result|" style="filled" fillcolor=gray];
77 [label="Stub" style="filled" fillcolor=gray];
78 [label="Access variable <Unresolved name: b>#" style="filled" fillcolor=gray];
79 [label="Exit when branch condition" style="filled" fillcolor=gray];
}
80 [label="Synthetic else branch" style="filled" fillcolor=gray];
81 [label="Enter when branch result" style="filled" fillcolor=gray];
subgraph cluster_24 {
color=blue
82 [label="Enter block" style="filled" fillcolor=gray];
83 [label="Jump: break@@@[R|<local>/<iterator>|.R|kotlin/collections/Iterator.hasNext|()] " style="filled" fillcolor=gray];
84 [label="Stub" style="filled" fillcolor=gray];
85 [label="Exit block" style="filled" fillcolor=gray];
}
86 [label="Exit when branch result" style="filled" fillcolor=gray];
87 [label="Exit when" style="filled" fillcolor=gray];
}
88 [label="Exit block" style="filled" fillcolor=gray];
}
89 [label="Exit loop block" style="filled" fillcolor=gray];
}
90 [label="Exit whileloop"];
}
91 [label="Access variable R|<local>/s|"];
92 [label="Enter safe call"];
93 [label="Postponed enter to lambda"];
subgraph cluster_25 {
color=blue
100 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_26 {
color=blue
101 [label="Enter block"];
102 [label="Access variable R|<local>/it|"];
103 [label="Access variable R|/A.a|"];
104 [label="Exit block"];
}
105 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
94 [label="Call arguments union" style="filled" fillcolor=yellow];
95 [label="Postponed exit from lambda"];
96 [label="Function call: $subj$.R|kotlin/let|<R|A|, R|kotlin/Int|>(...)"];
97 [label="Exit safe call"];
98 [label="Exit block"];
}
99 [label="Exit function test_0" style="filled" fillcolor=red];
}
53 -> {54};
54 -> {56};
55 -> {85};
54 -> {55};
55 -> {56};
56 -> {57};
57 -> {58};
58 -> {59};
59 -> {55 60};
59 -> {60};
60 -> {61};
61 -> {62};
62 -> {63};
63 -> {48};
63 -> {64} [style=dotted];
64 -> {65} [style=dotted];
65 -> {66} [style=dotted];
66 -> {48 67} [style=dotted];
67 -> {68} [style=dotted];
63 -> {64};
64 -> {90 65};
65 -> {66};
66 -> {67};
67 -> {68};
68 -> {99};
68 -> {69} [style=dotted];
69 -> {71} [style=dotted];
70 -> {83} [style=dotted];
71 -> {72} [style=dotted];
72 -> {48 73} [style=dotted];
69 -> {70} [style=dotted];
70 -> {71} [style=dotted];
71 -> {99 72} [style=dotted];
72 -> {73} [style=dotted];
73 -> {74} [style=dotted];
74 -> {75} [style=dotted];
75 -> {76 82} [style=dotted];
76 -> {77} [style=dotted];
75 -> {76} [style=dotted];
76 -> {99 77} [style=dotted];
77 -> {78} [style=dotted];
78 -> {55 79} [style=dotted];
79 -> {80} [style=dotted];
80 -> {81} [style=dotted];
81 -> {70} [style=dotted];
82 -> {70} [style=dotted];
83 -> {84} [style=dotted];
84 -> {56} [style=dotted];
85 -> {86 87};
86 -> {88};
87 -> {48} [style=dotted];
88 -> {92};
88 -> {89} [color=red];
89 -> {90} [color=green];
90 -> {87};
91 -> {90} [color=red];
92 -> {94};
93 -> {89} [color=green];
93 -> {91} [color=red];
94 -> {95};
95 -> {93};
78 -> {79} [style=dotted];
79 -> {81 80} [style=dotted];
80 -> {87} [style=dotted];
81 -> {82} [style=dotted];
82 -> {83} [style=dotted];
83 -> {90 84} [style=dotted];
84 -> {85} [style=dotted];
85 -> {86} [style=dotted];
86 -> {87} [style=dotted];
87 -> {88} [style=dotted];
88 -> {89} [style=dotted];
89 -> {61} [color=green style=dotted];
90 -> {91};
91 -> {92 97};
92 -> {93};
93 -> {100};
93 -> {95} [color=red];
94 -> {96} [color=red];
95 -> {96} [color=green];
96 -> {97};
97 -> {98};
98 -> {99};
100 -> {101};
101 -> {102};
102 -> {103};
103 -> {104};
104 -> {105};
105 -> {94} [color=red];
105 -> {95} [color=green];
}

View File

@@ -5,139 +5,154 @@ digraph overridenOpenVal_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function <init>" style="filled" fillcolor=red];
2 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
1 [label="Exit function <init>" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {1};
subgraph cluster_1 {
color=red
8 [label="Enter class A" style="filled" fillcolor=red];
subgraph cluster_2 {
0 [label="Enter class A" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
3 [label="Enter function getter" style="filled" fillcolor=red];
4 [label="Exit function getter" style="filled" fillcolor=red];
2 [label="Enter property" style="filled" fillcolor=red];
3 [label="Access variable R|<local>/x|"];
4 [label="Exit property" style="filled" fillcolor=red];
}
subgraph cluster_3 {
color=blue
5 [label="Enter property" style="filled" fillcolor=red];
7 [label="Access variable R|<local>/x|"];
6 [label="Exit property" style="filled" fillcolor=red];
}
9 [label="Exit class A" style="filled" fillcolor=red];
1 [label="Exit class A" style="filled" fillcolor=red];
}
8 -> {5} [color=green];
5 -> {7};
6 -> {9} [color=green];
7 -> {6};
0 -> {2} [color=green];
2 -> {3};
3 -> {4};
4 -> {1} [color=green];
subgraph cluster_2 {
color=red
5 [label="Enter function <init>" style="filled" fillcolor=red];
6 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
7 [label="Exit function <init>" style="filled" fillcolor=red];
}
5 -> {6};
6 -> {7};
subgraph cluster_3 {
color=red
8 [label="Enter function getter" style="filled" fillcolor=red];
9 [label="Exit function getter" style="filled" fillcolor=red];
}
8 -> {9};
subgraph cluster_4 {
color=red
10 [label="Enter function <init>" style="filled" fillcolor=red];
12 [label="Access variable R|<local>/x|"];
13 [label="Delegated constructor call: super<R|A|>(...)"];
11 [label="Exit function <init>" style="filled" fillcolor=red];
10 [label="Enter class B" style="filled" fillcolor=red];
11 [label="Exit class B" style="filled" fillcolor=red];
}
10 -> {12};
12 -> {13};
13 -> {11};
10 -> {11} [color=green];
subgraph cluster_5 {
color=red
14 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_6 {
12 [label="Enter function <init>" style="filled" fillcolor=red];
13 [label="Access variable R|<local>/x|"];
14 [label="Delegated constructor call: super<R|A|>(...)"];
15 [label="Exit function <init>" style="filled" fillcolor=red];
}
12 -> {13};
13 -> {14};
14 -> {15};
subgraph cluster_6 {
color=red
16 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
16 [label="Enter when"];
subgraph cluster_7 {
color=blue
18 [label="Enter when branch condition "];
19 [label="Access variable R|/A.x|"];
20 [label="Type operator: (this@R|/B|.R|/A.x| is R|kotlin/String|)"];
21 [label="Exit when branch condition"];
}
28 [label="Synthetic else branch"];
22 [label="Enter when branch result"];
17 [label="Enter block"];
subgraph cluster_8 {
color=blue
23 [label="Enter block"];
24 [label="Access variable R|/A.x|"];
25 [label="Access variable R|kotlin/String.length|"];
26 [label="Exit block"];
18 [label="Enter when"];
subgraph cluster_9 {
color=blue
19 [label="Enter when branch condition "];
20 [label="Access variable R|/A.x|"];
21 [label="Type operator: (this@R|/B|.R|/A.x| is R|kotlin/String|)"];
22 [label="Exit when branch condition"];
}
23 [label="Synthetic else branch"];
24 [label="Enter when branch result"];
subgraph cluster_10 {
color=blue
25 [label="Enter block"];
26 [label="Access variable R|/A.x|"];
27 [label="Access variable R|kotlin/String.length|"];
28 [label="Exit block"];
}
29 [label="Exit when branch result"];
30 [label="Exit when"];
}
27 [label="Exit when branch result"];
17 [label="Exit when"];
31 [label="Exit block"];
}
15 [label="Exit function test_1" style="filled" fillcolor=red];
32 [label="Exit function test_1" style="filled" fillcolor=red];
}
14 -> {16};
16 -> {18};
17 -> {15};
16 -> {17};
17 -> {18};
18 -> {19};
19 -> {20};
20 -> {21};
21 -> {22 28};
22 -> {23};
23 -> {24};
21 -> {22};
22 -> {24 23};
23 -> {30};
24 -> {25};
25 -> {26};
26 -> {27};
27 -> {17};
28 -> {17};
27 -> {28};
28 -> {29};
29 -> {30};
30 -> {31};
31 -> {32};
subgraph cluster_9 {
subgraph cluster_11 {
color=red
29 [label="Enter class B" style="filled" fillcolor=red];
30 [label="Exit class B" style="filled" fillcolor=red];
}
29 -> {30} [color=green];
subgraph cluster_10 {
color=red
31 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_11 {
33 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_12 {
color=blue
33 [label="Enter when"];
subgraph cluster_12 {
color=blue
35 [label="Enter when branch condition "];
36 [label="Access variable R|<local>/b|"];
37 [label="Access variable R|/A.x|"];
38 [label="Type operator: (R|<local>/b|.R|/A.x| is R|kotlin/String|)"];
39 [label="Exit when branch condition"];
}
47 [label="Synthetic else branch"];
40 [label="Enter when branch result"];
34 [label="Enter block"];
subgraph cluster_13 {
color=blue
41 [label="Enter block"];
42 [label="Access variable R|<local>/b|"];
43 [label="Access variable R|/A.x|"];
44 [label="Access variable R|kotlin/String.length|"];
45 [label="Exit block"];
35 [label="Enter when"];
subgraph cluster_14 {
color=blue
36 [label="Enter when branch condition "];
37 [label="Access variable R|<local>/b|"];
38 [label="Access variable R|/A.x|"];
39 [label="Type operator: (R|<local>/b|.R|/A.x| is R|kotlin/String|)"];
40 [label="Exit when branch condition"];
}
41 [label="Synthetic else branch"];
42 [label="Enter when branch result"];
subgraph cluster_15 {
color=blue
43 [label="Enter block"];
44 [label="Access variable R|<local>/b|"];
45 [label="Access variable R|/A.x|"];
46 [label="Access variable R|kotlin/String.length|"];
47 [label="Exit block"];
}
48 [label="Exit when branch result"];
49 [label="Exit when"];
}
46 [label="Exit when branch result"];
34 [label="Exit when"];
50 [label="Exit block"];
}
32 [label="Exit function test_2" style="filled" fillcolor=red];
51 [label="Exit function test_2" style="filled" fillcolor=red];
}
31 -> {33};
33 -> {35};
34 -> {32};
33 -> {34};
34 -> {35};
35 -> {36};
36 -> {37};
37 -> {38};
38 -> {39};
39 -> {40 47};
40 -> {41};
41 -> {42};
39 -> {40};
40 -> {42 41};
41 -> {49};
42 -> {43};
43 -> {44};
44 -> {45};
45 -> {46};
46 -> {34};
47 -> {34};
46 -> {47};
47 -> {48};
48 -> {49};
49 -> {50};
50 -> {51};
}

View File

@@ -5,95 +5,109 @@ digraph delayedAssignment_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function <init>" style="filled" fillcolor=red];
2 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
1 [label="Exit function <init>" style="filled" fillcolor=red];
0 [label="Enter class A" style="filled" fillcolor=red];
1 [label="Exit class A" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {1};
0 -> {1} [color=green];
subgraph cluster_1 {
color=red
3 [label="Enter function foo" style="filled" fillcolor=red];
4 [label="Exit function foo" style="filled" fillcolor=red];
2 [label="Enter function <init>" style="filled" fillcolor=red];
3 [label="Delegated constructor call: super<R|kotlin/Any|>()"];
4 [label="Exit function <init>" style="filled" fillcolor=red];
}
2 -> {3};
3 -> {4};
subgraph cluster_2 {
color=red
5 [label="Enter class A" style="filled" fillcolor=red];
6 [label="Exit class A" style="filled" fillcolor=red];
}
5 -> {6} [color=green];
subgraph cluster_3 {
color=red
7 [label="Enter function test" style="filled" fillcolor=red];
9 [label="Variable declaration: lval a: R|A?|"];
subgraph cluster_4 {
5 [label="Enter function foo" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
10 [label="Enter when"];
subgraph cluster_5 {
color=blue
12 [label="Enter when branch condition "];
13 [label="Access variable R|<local>/b|"];
14 [label="Exit when branch condition"];
}
6 [label="Enter block"];
7 [label="Exit block"];
}
8 [label="Exit function foo" style="filled" fillcolor=red];
}
5 -> {6};
6 -> {7};
7 -> {8};
subgraph cluster_4 {
color=red
9 [label="Enter function test" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
10 [label="Enter block"];
11 [label="Variable declaration: lval a: R|A?|"];
subgraph cluster_6 {
color=blue
23 [label="Enter when branch condition else"];
24 [label="Exit when branch condition"];
12 [label="Enter when"];
subgraph cluster_7 {
color=blue
13 [label="Enter when branch condition "];
14 [label="Access variable R|<local>/b|"];
15 [label="Exit when branch condition"];
}
subgraph cluster_8 {
color=blue
16 [label="Enter when branch condition else"];
17 [label="Exit when branch condition"];
}
18 [label="Enter when branch result"];
subgraph cluster_9 {
color=blue
19 [label="Enter block"];
20 [label="Const: Null(null)"];
21 [label="Assignment: R|<local>/a|"];
22 [label="Exit block"];
}
23 [label="Exit when branch result"];
24 [label="Enter when branch result"];
subgraph cluster_10 {
color=blue
25 [label="Enter block"];
26 [label="Function call: R|/A.A|()"];
27 [label="Assignment: R|<local>/a|"];
28 [label="Access variable R|<local>/a|"];
29 [label="Function call: R|<local>/a|.R|/A.foo|()"];
30 [label="Exit block"];
}
31 [label="Exit when branch result"];
32 [label="Exit when"];
}
25 [label="Enter when branch result"];
subgraph cluster_7 {
color=blue
26 [label="Enter block"];
27 [label="Const: Null(null)"];
28 [label="Assignment: R|<local>/a|"];
29 [label="Exit block"];
}
30 [label="Exit when branch result"];
15 [label="Enter when branch result"];
subgraph cluster_8 {
color=blue
16 [label="Enter block"];
17 [label="Function call: R|/A.A|()"];
18 [label="Assignment: R|<local>/a|"];
19 [label="Access variable R|<local>/a|"];
20 [label="Function call: R|<local>/a|.R|/A.foo|()"];
21 [label="Exit block"];
}
22 [label="Exit when branch result"];
11 [label="Exit when"];
33 [label="Access variable R|<local>/a|"];
34 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
35 [label="Exit block"];
}
31 [label="Access variable R|<local>/a|"];
32 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
8 [label="Exit function test" style="filled" fillcolor=red];
36 [label="Exit function test" style="filled" fillcolor=red];
}
7 -> {9};
9 -> {10};
10 -> {12};
11 -> {31};
10 -> {11};
11 -> {12};
12 -> {13};
13 -> {14};
14 -> {15 23};
15 -> {16};
14 -> {15};
15 -> {24 16};
16 -> {17};
17 -> {18};
18 -> {19};
19 -> {20};
20 -> {21};
21 -> {22};
22 -> {11};
23 -> {24};
22 -> {23};
23 -> {32};
24 -> {25};
25 -> {26};
26 -> {27};
27 -> {28};
28 -> {29};
29 -> {30};
30 -> {11};
30 -> {31};
31 -> {32};
32 -> {8};
32 -> {33};
33 -> {34};
34 -> {35};
35 -> {36};
}

View File

@@ -6,92 +6,108 @@ digraph smartcastAfterReassignment_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function test_1" style="filled" fillcolor=red];
2 [label="Const: Int(1)"];
3 [label="Variable declaration: lvar x: R|kotlin/Any|"];
4 [label="Const: String()"];
5 [label="Assignment: R|<local>/x|"];
6 [label="Access variable R|<local>/x|"];
7 [label="Access variable R|kotlin/String.length|"];
1 [label="Exit function test_1" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
1 [label="Enter block"];
2 [label="Const: Int(1)"];
3 [label="Variable declaration: lvar x: R|kotlin/Any|"];
4 [label="Const: String()"];
5 [label="Assignment: R|<local>/x|"];
6 [label="Access variable R|<local>/x|"];
7 [label="Access variable R|kotlin/String.length|"];
8 [label="Exit block"];
}
9 [label="Exit function test_1" style="filled" fillcolor=red];
}
0 -> {2};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
4 -> {5};
5 -> {6};
6 -> {7};
7 -> {1};
7 -> {8};
8 -> {9};
subgraph cluster_1 {
subgraph cluster_2 {
color=red
8 [label="Enter function test_2" style="filled" fillcolor=red];
10 [label="Const: Null(null)"];
11 [label="Variable declaration: lvar x: R|kotlin/String?|"];
subgraph cluster_2 {
10 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
12 [label="Enter when"];
subgraph cluster_3 {
color=blue
14 [label="Enter when branch condition "];
15 [label="Access variable R|<local>/x|"];
16 [label="Const: Null(null)"];
17 [label="Operator =="];
18 [label="Exit when branch condition"];
}
25 [label="Synthetic else branch"];
19 [label="Enter when branch result"];
11 [label="Enter block"];
12 [label="Const: Null(null)"];
13 [label="Variable declaration: lvar x: R|kotlin/String?|"];
subgraph cluster_4 {
color=blue
20 [label="Enter block"];
21 [label="Const: String()"];
22 [label="Assignment: R|<local>/x|"];
23 [label="Exit block"];
14 [label="Enter when"];
subgraph cluster_5 {
color=blue
15 [label="Enter when branch condition "];
16 [label="Access variable R|<local>/x|"];
17 [label="Const: Null(null)"];
18 [label="Operator =="];
19 [label="Exit when branch condition"];
}
20 [label="Synthetic else branch"];
21 [label="Enter when branch result"];
subgraph cluster_6 {
color=blue
22 [label="Enter block"];
23 [label="Const: String()"];
24 [label="Assignment: R|<local>/x|"];
25 [label="Exit block"];
}
26 [label="Exit when branch result"];
27 [label="Exit when"];
}
24 [label="Exit when branch result"];
13 [label="Exit when"];
28 [label="Access variable R|<local>/x|"];
29 [label="Access variable R|kotlin/String.length|"];
30 [label="Exit block"];
}
26 [label="Access variable R|<local>/x|"];
27 [label="Access variable R|kotlin/String.length|"];
9 [label="Exit function test_2" style="filled" fillcolor=red];
31 [label="Exit function test_2" style="filled" fillcolor=red];
}
8 -> {10};
10 -> {11};
11 -> {12};
12 -> {14};
13 -> {26};
12 -> {13};
13 -> {14};
14 -> {15};
15 -> {16};
16 -> {17};
17 -> {18};
18 -> {19 25};
19 -> {20};
20 -> {21};
18 -> {19};
19 -> {21 20};
20 -> {27};
21 -> {22};
22 -> {23};
23 -> {24};
24 -> {13};
25 -> {13};
24 -> {25};
25 -> {26};
26 -> {27};
27 -> {9};
subgraph cluster_5 {
color=red
28 [label="Enter function test_3" style="filled" fillcolor=red];
30 [label="Const: Null(null)"];
31 [label="Variable declaration: lvar x: R|kotlin/String?|"];
32 [label="Const: String()"];
33 [label="Assignment: R|<local>/x|"];
34 [label="Access variable R|<local>/x|"];
35 [label="Access variable R|kotlin/String.length|"];
36 [label="Const: Null(null)"];
37 [label="Assignment: R|<local>/x|"];
38 [label="Access variable R|<local>/x|"];
39 [label="Access variable <Inapplicable(WRONG_RECEIVER): [kotlin/String.length]>#"];
29 [label="Exit function test_3" style="filled" fillcolor=red];
}
28 -> {30};
27 -> {28};
28 -> {29};
29 -> {30};
30 -> {31};
31 -> {32};
subgraph cluster_7 {
color=red
32 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_8 {
color=blue
33 [label="Enter block"];
34 [label="Const: Null(null)"];
35 [label="Variable declaration: lvar x: R|kotlin/String?|"];
36 [label="Const: String()"];
37 [label="Assignment: R|<local>/x|"];
38 [label="Access variable R|<local>/x|"];
39 [label="Access variable R|kotlin/String.length|"];
40 [label="Const: Null(null)"];
41 [label="Assignment: R|<local>/x|"];
42 [label="Access variable R|<local>/x|"];
43 [label="Access variable <Inapplicable(WRONG_RECEIVER): [kotlin/String.length]>#"];
44 [label="Exit block"];
}
45 [label="Exit function test_3" style="filled" fillcolor=red];
}
32 -> {33};
33 -> {34};
34 -> {35};
@@ -99,6 +115,11 @@ digraph smartcastAfterReassignment_kt {
36 -> {37};
37 -> {38};
38 -> {39};
39 -> {29};
39 -> {40};
40 -> {41};
41 -> {42};
42 -> {43};
43 -> {44};
44 -> {45};
}

View File

@@ -20,96 +20,124 @@ digraph complexPostponedCfg_kt {
subgraph cluster_2 {
color=red
4 [label="Enter function foo" style="filled" fillcolor=red];
6 [label="Access variable R|<local>/statements|"];
7 [label="Function call: R|<local>/statements|.R|kotlin/collections/last|<R|FirBase|>()"];
8 [label="Type operator: (R|<local>/statements|.R|kotlin/collections/last|<R|FirBase|>() as R|FirFunctionCall|)"];
9 [label="Postponed enter to lambda"];
subgraph cluster_3 {
color=blue
19 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
21 [label="Postponed enter to lambda"];
5 [label="Enter block"];
6 [label="Access variable R|<local>/statements|"];
7 [label="Function call: R|<local>/statements|.R|kotlin/collections/last|<R|FirBase|>()"];
8 [label="Type operator: (R|<local>/statements|.R|kotlin/collections/last|<R|FirBase|>() as R|FirFunctionCall|)"];
9 [label="Postponed enter to lambda"];
subgraph cluster_4 {
color=blue
24 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
26 [label="Access variable this@R|special/anonymous|"];
27 [label="Function call: this@R|special/anonymous|.R|FakeOverride<kotlin/collections/MutableList.add: R|kotlin/Boolean|>|(...)"];
28 [label="Access variable R|<local>/arguments|"];
29 [label="Function call: R|<local>/arguments|.R|kotlin/collections/last|<R|FirBase|>()"];
30 [label="Type operator: (R|<local>/arguments|.R|kotlin/collections/last|<R|FirBase|>() as R|FirFunctionCall|)"];
31 [label="Postponed enter to lambda"];
21 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
35 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
37 [label="Access variable this@R|special/anonymous|"];
38 [label="Function call: this@R|special/anonymous|.R|FakeOverride<kotlin/collections/MutableList.add: R|kotlin/Boolean|>|(...)"];
39 [label="Access variable R|<local>/explicitReceiver|"];
40 [label="Type operator: (R|<local>/explicitReceiver| as R|FirFunctionCall|)"];
41 [label="Function call: this@R|special/anonymous|.R|FakeOverride<kotlin/collections/MutableList.add: R|kotlin/Boolean|>|(...)"];
36 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
22 [label="Enter block"];
23 [label="Postponed enter to lambda"];
subgraph cluster_6 {
color=blue
28 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
29 [label="Enter block"];
30 [label="Access variable this@R|special/anonymous|"];
31 [label="Function call: this@R|special/anonymous|.R|FakeOverride<kotlin/collections/MutableList.add: R|kotlin/Boolean|>|(...)"];
32 [label="Access variable R|<local>/arguments|"];
33 [label="Function call: R|<local>/arguments|.R|kotlin/collections/last|<R|FirBase|>()"];
34 [label="Type operator: (R|<local>/arguments|.R|kotlin/collections/last|<R|FirBase|>() as R|FirFunctionCall|)"];
35 [label="Postponed enter to lambda"];
subgraph cluster_8 {
color=blue
41 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_9 {
color=blue
42 [label="Enter block"];
43 [label="Access variable this@R|special/anonymous|"];
44 [label="Function call: this@R|special/anonymous|.R|FakeOverride<kotlin/collections/MutableList.add: R|kotlin/Boolean|>|(...)"];
45 [label="Access variable R|<local>/explicitReceiver|"];
46 [label="Type operator: (R|<local>/explicitReceiver| as R|FirFunctionCall|)"];
47 [label="Function call: this@R|special/anonymous|.R|FakeOverride<kotlin/collections/MutableList.add: R|kotlin/Boolean|>|(...)"];
48 [label="Exit block"];
}
49 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
36 [label="Call arguments union" style="filled" fillcolor=yellow];
37 [label="Postponed exit from lambda"];
38 [label="Function call: R|kotlin/with|<R|FirFunctionCall|, R|kotlin/Boolean|>(...)"];
39 [label="Exit block"];
}
40 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
24 [label="Postponed exit from lambda"];
25 [label="Function call: R|kotlin/collections/buildList|<R|kotlin/Any?|>(...)"];
26 [label="Exit block"];
}
34 [label="Call arguments union" style="filled" fillcolor=yellow];
32 [label="Postponed exit from lambda"];
33 [label="Function call: R|kotlin/with|<R|FirFunctionCall|, R|kotlin/Boolean|>(...)"];
25 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
27 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
22 [label="Postponed exit from lambda"];
23 [label="Function call: R|kotlin/collections/buildList|<R|kotlin/Any?|>(...)"];
20 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
10 [label="Call arguments union" style="filled" fillcolor=yellow];
11 [label="Postponed exit from lambda"];
12 [label="Function call: R|kotlin/with|<R|FirFunctionCall|, R|kotlin/Nothing|>(...)"];
13 [label="Stub" style="filled" fillcolor=gray];
14 [label="Variable declaration: lval firstCalls: R|kotlin/Nothing|" style="filled" fillcolor=gray];
15 [label="Access variable R|<local>/firstCalls|" style="filled" fillcolor=gray];
16 [label="Stub" style="filled" fillcolor=gray];
17 [label="Jump: ^foo R|<local>/firstCalls|" style="filled" fillcolor=gray];
18 [label="Stub" style="filled" fillcolor=gray];
19 [label="Exit block" style="filled" fillcolor=gray];
}
12 [label="Call arguments union" style="filled" fillcolor=yellow];
10 [label="Postponed exit from lambda"];
11 [label="Function call: R|kotlin/with|<R|FirFunctionCall|, R|kotlin/Nothing|>(...)"];
13 [label="Stub" style="filled" fillcolor=gray];
14 [label="Variable declaration: lval firstCalls: R|kotlin/Nothing|" style="filled" fillcolor=gray];
15 [label="Access variable R|<local>/firstCalls|" style="filled" fillcolor=gray];
16 [label="Stub" style="filled" fillcolor=gray];
17 [label="Jump: ^foo R|<local>/firstCalls|" style="filled" fillcolor=gray];
18 [label="Stub" style="filled" fillcolor=gray];
5 [label="Exit function foo" style="filled" fillcolor=red];
20 [label="Exit function foo" style="filled" fillcolor=red];
}
4 -> {6};
4 -> {5};
5 -> {6};
6 -> {7};
7 -> {8};
8 -> {9};
9 -> {19};
9 -> {10} [color=red];
10 -> {11} [color=green];
11 -> {5};
11 -> {13} [style=dotted];
12 -> {11};
9 -> {21};
9 -> {11} [color=red];
10 -> {12} [color=red];
11 -> {12} [color=green];
12 -> {20};
12 -> {13} [style=dotted];
13 -> {14} [style=dotted];
14 -> {15} [style=dotted];
15 -> {5 16} [style=dotted];
15 -> {20 16} [style=dotted];
16 -> {17} [style=dotted];
17 -> {5 18} [style=dotted];
18 -> {5} [style=dotted];
19 -> {21};
20 -> {10} [color=green];
20 -> {12} [color=red];
21 -> {24};
21 -> {22} [color=red];
17 -> {20 18} [style=dotted];
18 -> {19} [style=dotted];
19 -> {20} [style=dotted];
21 -> {22};
22 -> {23};
23 -> {20};
24 -> {26};
25 -> {22} [color=green];
25 -> {12} [color=red];
23 -> {28};
23 -> {24} [color=red];
24 -> {25};
25 -> {26};
26 -> {27};
27 -> {28};
27 -> {10} [color=red];
27 -> {11} [color=green];
28 -> {29};
29 -> {30};
30 -> {31};
31 -> {35};
31 -> {32} [color=red];
32 -> {33} [color=green];
33 -> {25};
34 -> {33} [color=red];
35 -> {37};
36 -> {32} [color=green];
36 -> {34} [color=red];
37 -> {38};
31 -> {32};
32 -> {33};
33 -> {34};
34 -> {35};
35 -> {41};
35 -> {37} [color=red];
36 -> {38} [color=red];
37 -> {38} [color=green];
38 -> {39};
39 -> {40};
40 -> {41};
41 -> {36};
40 -> {10} [color=red];
40 -> {24} [color=green];
41 -> {42};
42 -> {43};
43 -> {44};
44 -> {45};
45 -> {46};
46 -> {47};
47 -> {48};
48 -> {49};
49 -> {36} [color=red];
49 -> {37} [color=green];
}

View File

@@ -6,279 +6,418 @@ digraph callsInPlace_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function test" style="filled" fillcolor=red];
2 [label="Variable declaration: lval x: R|kotlin/Int|"];
3 [label="Postponed enter to lambda"];
subgraph cluster_1 {
color=blue
9 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
11 [label="Const: Int(1)"];
12 [label="Assignment: R|<local>/x|"];
10 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
1 [label="Enter block"];
2 [label="Variable declaration: lval x: R|kotlin/Int|"];
3 [label="Postponed enter to lambda"];
subgraph cluster_2 {
color=blue
11 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
12 [label="Enter block"];
13 [label="Const: Int(1)"];
14 [label="Assignment: R|<local>/x|"];
15 [label="Exit block"];
}
16 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
4 [label="Call arguments union" style="filled" fillcolor=yellow];
5 [label="Postponed exit from lambda"];
6 [label="Function call: R|kotlin/run|<R|kotlin/Unit|>(...)"];
7 [label="Access variable R|<local>/x|"];
8 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
9 [label="Exit block"];
}
6 [label="Call arguments union" style="filled" fillcolor=yellow];
4 [label="Postponed exit from lambda"];
5 [label="Function call: R|kotlin/run|<R|kotlin/Unit|>(...)"];
7 [label="Access variable R|<local>/x|"];
8 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
1 [label="Exit function test" style="filled" fillcolor=red];
10 [label="Exit function test" style="filled" fillcolor=red];
}
0 -> {2};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {9};
3 -> {4} [color=red];
4 -> {5} [color=green];
5 -> {7};
6 -> {5} [color=red];
3 -> {11};
3 -> {5} [color=red];
4 -> {6} [color=red];
5 -> {6} [color=green];
6 -> {7};
7 -> {8};
8 -> {1};
9 -> {11};
10 -> {4} [color=green];
10 -> {6} [color=red];
8 -> {9};
9 -> {10};
11 -> {12};
12 -> {10};
subgraph cluster_2 {
color=red
13 [label="Enter function test_2" style="filled" fillcolor=red];
15 [label="Const: Int(10)"];
16 [label="Postponed enter to lambda"];
subgraph cluster_3 {
color=blue
19 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
21 [label="Const: String(test_2)"];
20 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
17 [label="Postponed exit from lambda"];
18 [label="Function call: R|kotlin/repeat|(...)"];
14 [label="Exit function test_2" style="filled" fillcolor=red];
}
13 -> {15};
12 -> {13};
13 -> {14};
14 -> {15};
15 -> {16};
16 -> {19};
16 -> {17} [color=red];
17 -> {18};
18 -> {14};
19 -> {20 21};
20 -> {19};
20 -> {17} [color=green];
21 -> {20};
16 -> {4} [color=red];
16 -> {5} [color=green];
subgraph cluster_4 {
color=red
22 [label="Enter function test_3" style="filled" fillcolor=red];
24 [label="Postponed enter to lambda"];
17 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
28 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
30 [label="Const: String(test_3)"];
29 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
18 [label="Enter block"];
19 [label="Const: Int(10)"];
20 [label="Postponed enter to lambda"];
subgraph cluster_6 {
color=blue
25 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
26 [label="Enter block"];
27 [label="Const: String(test_2)"];
28 [label="Exit block"];
}
29 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
21 [label="Postponed exit from lambda"];
22 [label="Function call: R|kotlin/repeat|(...)"];
23 [label="Exit block"];
}
25 [label="Postponed exit from lambda"];
26 [label="Const: Int(10)"];
27 [label="Function call: R|kotlin/repeat|(...)"];
23 [label="Exit function test_3" style="filled" fillcolor=red];
24 [label="Exit function test_2" style="filled" fillcolor=red];
}
22 -> {24};
24 -> {28};
24 -> {25} [color=red];
25 -> {26};
17 -> {18};
18 -> {19};
19 -> {20};
20 -> {25};
20 -> {21} [color=red];
21 -> {22};
22 -> {23};
23 -> {24};
25 -> {29 26};
26 -> {27};
27 -> {23};
28 -> {29 30};
29 -> {28};
29 -> {25} [color=green];
30 -> {29};
subgraph cluster_6 {
color=red
31 [label="Enter function test_4" style="filled" fillcolor=red];
33 [label="Const: Int(1)"];
34 [label="Postponed enter to lambda"];
subgraph cluster_7 {
color=blue
38 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
40 [label="Const: String(test_4)"];
41 [label="Access variable R|<local>/it|"];
42 [label="Const: Int(0)"];
43 [label="Function call: R|<local>/it|.R|kotlin/Int.compareTo|(...)"];
44 [label="Comparison >"];
39 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
37 [label="Call arguments union" style="filled" fillcolor=yellow];
35 [label="Postponed exit from lambda"];
36 [label="Function call: Int(1).R|kotlin/takeUnless|<R|kotlin/Int|>(...)"];
32 [label="Exit function test_4" style="filled" fillcolor=red];
}
31 -> {33};
33 -> {34};
34 -> {38};
34 -> {35} [color=red];
35 -> {36} [color=green];
36 -> {32};
37 -> {36} [color=red];
38 -> {40};
39 -> {35} [color=green];
39 -> {37} [color=red];
40 -> {41};
41 -> {42};
42 -> {43};
43 -> {44};
44 -> {39};
27 -> {28};
28 -> {29};
29 -> {21} [color=green];
29 -> {25} [color=green style=dashed];
subgraph cluster_8 {
color=red
45 [label="Enter function test_5" style="filled" fillcolor=red];
47 [label="Const: Int(1)"];
48 [label="Postponed enter to lambda"];
30 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_9 {
color=blue
52 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
54 [label="Const: String(test_5)"];
55 [label="Access variable R|<local>/it|"];
56 [label="Const: Int(0)"];
57 [label="Function call: R|<local>/it|.R|kotlin/Int.compareTo|(...)"];
58 [label="Comparison >"];
53 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
31 [label="Enter block"];
32 [label="Postponed enter to lambda"];
subgraph cluster_10 {
color=blue
38 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_11 {
color=blue
39 [label="Enter block"];
40 [label="Const: String(test_3)"];
41 [label="Exit block"];
}
42 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
33 [label="Postponed exit from lambda"];
34 [label="Const: Int(10)"];
35 [label="Function call: R|kotlin/repeat|(...)"];
36 [label="Exit block"];
}
51 [label="Call arguments union" style="filled" fillcolor=yellow];
49 [label="Postponed exit from lambda"];
50 [label="Function call: Int(1).R|kotlin/takeUnless|<R|kotlin/Int|>(...)"];
46 [label="Exit function test_5" style="filled" fillcolor=red];
37 [label="Exit function test_3" style="filled" fillcolor=red];
}
45 -> {47};
47 -> {48};
48 -> {52};
48 -> {49} [color=red];
49 -> {50} [color=green];
50 -> {46};
51 -> {50} [color=red];
52 -> {54};
53 -> {49} [color=green];
53 -> {51} [color=red];
30 -> {31};
31 -> {32};
32 -> {38};
32 -> {33} [color=red];
33 -> {34};
34 -> {35};
35 -> {36};
36 -> {37};
38 -> {42 39};
39 -> {40};
40 -> {41};
41 -> {42};
42 -> {33} [color=green];
42 -> {38} [color=green style=dashed];
subgraph cluster_12 {
color=red
43 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_13 {
color=blue
44 [label="Enter block"];
45 [label="Const: Int(1)"];
46 [label="Postponed enter to lambda"];
subgraph cluster_14 {
color=blue
52 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_15 {
color=blue
53 [label="Enter block"];
54 [label="Const: String(test_4)"];
55 [label="Access variable R|<local>/it|"];
56 [label="Const: Int(0)"];
57 [label="Function call: R|<local>/it|.R|kotlin/Int.compareTo|(...)"];
58 [label="Comparison >"];
59 [label="Exit block"];
}
60 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
47 [label="Call arguments union" style="filled" fillcolor=yellow];
48 [label="Postponed exit from lambda"];
49 [label="Function call: Int(1).R|kotlin/takeUnless|<R|kotlin/Int|>(...)"];
50 [label="Exit block"];
}
51 [label="Exit function test_4" style="filled" fillcolor=red];
}
43 -> {44};
44 -> {45};
45 -> {46};
46 -> {52};
46 -> {48} [color=red];
47 -> {49} [color=red];
48 -> {49} [color=green];
49 -> {50};
50 -> {51};
52 -> {53};
53 -> {54};
54 -> {55};
55 -> {56};
56 -> {57};
57 -> {58};
58 -> {53};
58 -> {59};
59 -> {60};
60 -> {47} [color=red];
60 -> {48} [color=green];
subgraph cluster_10 {
subgraph cluster_16 {
color=red
59 [label="Enter function myRun" style="filled" fillcolor=red];
61 [label="Function call: R|<local>/block1|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
62 [label="Function call: R|<local>/block2|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
60 [label="Exit function myRun" style="filled" fillcolor=red];
61 [label="Enter function test_5" style="filled" fillcolor=red];
subgraph cluster_17 {
color=blue
62 [label="Enter block"];
63 [label="Const: Int(1)"];
64 [label="Postponed enter to lambda"];
subgraph cluster_18 {
color=blue
70 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_19 {
color=blue
71 [label="Enter block"];
72 [label="Const: String(test_5)"];
73 [label="Access variable R|<local>/it|"];
74 [label="Const: Int(0)"];
75 [label="Function call: R|<local>/it|.R|kotlin/Int.compareTo|(...)"];
76 [label="Comparison >"];
77 [label="Exit block"];
}
78 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
65 [label="Call arguments union" style="filled" fillcolor=yellow];
66 [label="Postponed exit from lambda"];
67 [label="Function call: Int(1).R|kotlin/takeUnless|<R|kotlin/Int|>(...)"];
68 [label="Exit block"];
}
69 [label="Exit function test_5" style="filled" fillcolor=red];
}
59 -> {61};
61 -> {62};
62 -> {60};
subgraph cluster_11 {
color=red
63 [label="Enter function test_6" style="filled" fillcolor=red];
65 [label="Postponed enter to lambda"];
subgraph cluster_12 {
color=blue
70 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
72 [label="Const: String(test_6_1)"];
71 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
66 [label="Postponed exit from lambda"];
67 [label="Postponed enter to lambda"];
subgraph cluster_13 {
color=blue
73 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
75 [label="Const: String(test_6_2)"];
74 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
68 [label="Postponed exit from lambda"];
69 [label="Function call: R|/myRun|(...)"];
64 [label="Exit function test_6" style="filled" fillcolor=red];
}
63 -> {65};
65 -> {70};
65 -> {66} [color=red];
66 -> {67};
67 -> {73};
67 -> {68} [color=red];
62 -> {63};
63 -> {64};
64 -> {70};
64 -> {66} [color=red];
65 -> {67} [color=red];
66 -> {67} [color=green];
67 -> {68};
68 -> {69};
69 -> {64};
70 -> {71 72};
71 -> {70};
71 -> {66} [color=green];
72 -> {71};
73 -> {74 75};
74 -> {73};
74 -> {68} [color=green];
75 -> {74};
70 -> {71};
71 -> {72};
72 -> {73};
73 -> {74};
74 -> {75};
75 -> {76};
76 -> {77};
77 -> {78};
78 -> {65} [color=red];
78 -> {66} [color=green];
subgraph cluster_14 {
subgraph cluster_20 {
color=red
76 [label="Enter function test_7" style="filled" fillcolor=red];
78 [label="Postponed enter to lambda"];
subgraph cluster_15 {
79 [label="Enter function myRun" style="filled" fillcolor=red];
subgraph cluster_21 {
color=blue
83 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
85 [label="Const: String(test_7_2)"];
84 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
80 [label="Enter block"];
81 [label="Function call: R|<local>/block1|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
82 [label="Function call: R|<local>/block2|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
83 [label="Exit block"];
}
79 [label="Postponed exit from lambda"];
80 [label="Postponed enter to lambda"];
subgraph cluster_16 {
color=blue
86 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
88 [label="Const: String(test_7_1)"];
87 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
81 [label="Postponed exit from lambda"];
82 [label="Function call: R|/myRun|(...)"];
77 [label="Exit function test_7" style="filled" fillcolor=red];
84 [label="Exit function myRun" style="filled" fillcolor=red];
}
76 -> {78};
78 -> {83};
78 -> {79} [color=red];
79 -> {80};
80 -> {86};
80 -> {81} [color=red];
80 -> {81};
81 -> {82};
82 -> {77};
83 -> {84 85};
84 -> {83};
84 -> {79} [color=green];
85 -> {84};
86 -> {87 88};
87 -> {86};
87 -> {81} [color=green];
88 -> {87};
82 -> {83};
83 -> {84};
subgraph cluster_17 {
subgraph cluster_22 {
color=red
89 [label="Enter function myDummyRun" style="filled" fillcolor=red];
91 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
90 [label="Exit function myDummyRun" style="filled" fillcolor=red];
}
89 -> {91};
91 -> {90};
subgraph cluster_18 {
color=red
92 [label="Enter function test_8" style="filled" fillcolor=red];
94 [label="Postponed enter to lambda"];
subgraph cluster_19 {
85 [label="Enter function test_6" style="filled" fillcolor=red];
subgraph cluster_23 {
color=blue
97 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
99 [label="Const: String(test_8)"];
98 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
86 [label="Enter block"];
87 [label="Postponed enter to lambda"];
subgraph cluster_24 {
color=blue
94 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_25 {
color=blue
95 [label="Enter block"];
96 [label="Const: String(test_6_1)"];
97 [label="Exit block"];
}
98 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
88 [label="Postponed exit from lambda"];
89 [label="Postponed enter to lambda"];
subgraph cluster_26 {
color=blue
99 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_27 {
color=blue
100 [label="Enter block"];
101 [label="Const: String(test_6_2)"];
102 [label="Exit block"];
}
103 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
90 [label="Postponed exit from lambda"];
91 [label="Function call: R|/myRun|(...)"];
92 [label="Exit block"];
}
95 [label="Postponed exit from lambda"];
96 [label="Function call: R|/myDummyRun|(...)"];
93 [label="Exit function test_8" style="filled" fillcolor=red];
93 [label="Exit function test_6" style="filled" fillcolor=red];
}
92 -> {94};
94 -> {95};
94 -> {97} [color=red];
85 -> {86};
86 -> {87};
87 -> {94};
87 -> {88} [color=red];
88 -> {89};
89 -> {99};
89 -> {90} [color=red];
90 -> {91};
91 -> {92};
92 -> {93};
94 -> {98 95};
95 -> {96};
96 -> {93};
97 -> {99};
99 -> {98};
96 -> {97};
97 -> {98};
98 -> {88} [color=green];
98 -> {94} [color=green style=dashed];
99 -> {103 100};
100 -> {101};
101 -> {102};
102 -> {103};
103 -> {90} [color=green];
103 -> {99} [color=green style=dashed];
subgraph cluster_28 {
color=red
104 [label="Enter function test_7" style="filled" fillcolor=red];
subgraph cluster_29 {
color=blue
105 [label="Enter block"];
106 [label="Postponed enter to lambda"];
subgraph cluster_30 {
color=blue
113 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_31 {
color=blue
114 [label="Enter block"];
115 [label="Const: String(test_7_2)"];
116 [label="Exit block"];
}
117 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
107 [label="Postponed exit from lambda"];
108 [label="Postponed enter to lambda"];
subgraph cluster_32 {
color=blue
118 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_33 {
color=blue
119 [label="Enter block"];
120 [label="Const: String(test_7_1)"];
121 [label="Exit block"];
}
122 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
109 [label="Postponed exit from lambda"];
110 [label="Function call: R|/myRun|(...)"];
111 [label="Exit block"];
}
112 [label="Exit function test_7" style="filled" fillcolor=red];
}
104 -> {105};
105 -> {106};
106 -> {113};
106 -> {107} [color=red];
107 -> {108};
108 -> {118};
108 -> {109} [color=red];
109 -> {110};
110 -> {111};
111 -> {112};
113 -> {117 114};
114 -> {115};
115 -> {116};
116 -> {117};
117 -> {107} [color=green];
117 -> {113} [color=green style=dashed];
118 -> {122 119};
119 -> {120};
120 -> {121};
121 -> {122};
122 -> {109} [color=green];
122 -> {118} [color=green style=dashed];
subgraph cluster_34 {
color=red
123 [label="Enter function myDummyRun" style="filled" fillcolor=red];
subgraph cluster_35 {
color=blue
124 [label="Enter block"];
125 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
126 [label="Exit block"];
}
127 [label="Exit function myDummyRun" style="filled" fillcolor=red];
}
123 -> {124};
124 -> {125};
125 -> {126};
126 -> {127};
subgraph cluster_36 {
color=red
128 [label="Enter function test_8" style="filled" fillcolor=red];
subgraph cluster_37 {
color=blue
129 [label="Enter block"];
130 [label="Postponed enter to lambda"];
subgraph cluster_38 {
color=blue
135 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_39 {
color=blue
136 [label="Enter block"];
137 [label="Const: String(test_8)"];
138 [label="Exit block"];
}
139 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
131 [label="Postponed exit from lambda"];
132 [label="Function call: R|/myDummyRun|(...)"];
133 [label="Exit block"];
}
134 [label="Exit function test_8" style="filled" fillcolor=red];
}
128 -> {129};
129 -> {130};
130 -> {131 135};
131 -> {132};
132 -> {133};
133 -> {134};
135 -> {136};
136 -> {137};
137 -> {138};
138 -> {139};
}

View File

@@ -6,21 +6,27 @@ digraph conditionalEffects_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function test_1" style="filled" fillcolor=red];
2 [label="Access variable R|<local>/x|"];
3 [label="Type operator: (R|<local>/x| is R|kotlin/Int|)"];
4 [label="Function call: R|kotlin/require|(...)"];
subgraph cluster_1 {
color=blue
5 [label="Enter contract"];
6 [label="Access variable R|<local>/x|"];
7 [label="Type operator: (R|<local>/x| is R|kotlin/Int|)"];
8 [label="Exit contract"];
1 [label="Enter block"];
2 [label="Access variable R|<local>/x|"];
3 [label="Type operator: (R|<local>/x| is R|kotlin/Int|)"];
4 [label="Function call: R|kotlin/require|(...)"];
subgraph cluster_2 {
color=blue
5 [label="Enter contract"];
6 [label="Access variable R|<local>/x|"];
7 [label="Type operator: (R|<local>/x| is R|kotlin/Int|)"];
8 [label="Exit contract"];
}
9 [label="Access variable R|<local>/x|"];
10 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
11 [label="Exit block"];
}
9 [label="Access variable R|<local>/x|"];
10 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
1 [label="Exit function test_1" style="filled" fillcolor=red];
12 [label="Exit function test_1" style="filled" fillcolor=red];
}
0 -> {2};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
4 -> {5};
@@ -29,26 +35,31 @@ digraph conditionalEffects_kt {
7 -> {8};
8 -> {9};
9 -> {10};
10 -> {1};
10 -> {11};
11 -> {12};
subgraph cluster_2 {
subgraph cluster_3 {
color=red
11 [label="Enter function test_2" style="filled" fillcolor=red];
13 [label="Access variable R|<local>/x|"];
14 [label="Function call: R|kotlin/requireNotNull|<R|kotlin/String|>(...)"];
subgraph cluster_3 {
13 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_4 {
color=blue
15 [label="Enter contract"];
16 [label="Access variable R|<local>/x|"];
17 [label="Const: Null(null)"];
18 [label="Operator !="];
19 [label="Exit contract"];
14 [label="Enter block"];
15 [label="Access variable R|<local>/x|"];
16 [label="Function call: R|kotlin/requireNotNull|<R|kotlin/String|>(...)"];
subgraph cluster_5 {
color=blue
17 [label="Enter contract"];
18 [label="Access variable R|<local>/x|"];
19 [label="Const: Null(null)"];
20 [label="Operator !="];
21 [label="Exit contract"];
}
22 [label="Access variable R|<local>/x|"];
23 [label="Access variable R|kotlin/String.length|"];
24 [label="Exit block"];
}
20 [label="Access variable R|<local>/x|"];
21 [label="Access variable R|kotlin/String.length|"];
12 [label="Exit function test_2" style="filled" fillcolor=red];
25 [label="Exit function test_2" style="filled" fillcolor=red];
}
11 -> {13};
13 -> {14};
14 -> {15};
15 -> {16};
@@ -57,30 +68,35 @@ digraph conditionalEffects_kt {
18 -> {19};
19 -> {20};
20 -> {21};
21 -> {12};
subgraph cluster_4 {
color=red
22 [label="Enter function test_3" style="filled" fillcolor=red];
24 [label="Access variable R|<local>/x|"];
25 [label="Const: Null(null)"];
26 [label="Operator !="];
27 [label="Function call: R|kotlin/require|(...)"];
subgraph cluster_5 {
color=blue
28 [label="Enter contract"];
29 [label="Access variable R|<local>/x|"];
30 [label="Const: Null(null)"];
31 [label="Operator !="];
32 [label="Exit contract"];
}
33 [label="Access variable R|<local>/x|"];
34 [label="Access variable R|kotlin/String.length|"];
23 [label="Exit function test_3" style="filled" fillcolor=red];
}
22 -> {24};
21 -> {22};
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {26};
subgraph cluster_6 {
color=red
26 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
27 [label="Enter block"];
28 [label="Access variable R|<local>/x|"];
29 [label="Const: Null(null)"];
30 [label="Operator !="];
31 [label="Function call: R|kotlin/require|(...)"];
subgraph cluster_8 {
color=blue
32 [label="Enter contract"];
33 [label="Access variable R|<local>/x|"];
34 [label="Const: Null(null)"];
35 [label="Operator !="];
36 [label="Exit contract"];
}
37 [label="Access variable R|<local>/x|"];
38 [label="Access variable R|kotlin/String.length|"];
39 [label="Exit block"];
}
40 [label="Exit function test_3" style="filled" fillcolor=red];
}
26 -> {27};
27 -> {28};
28 -> {29};
@@ -89,235 +105,250 @@ digraph conditionalEffects_kt {
31 -> {32};
32 -> {33};
33 -> {34};
34 -> {23};
subgraph cluster_6 {
color=red
35 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
38 [label="Enter &&"];
39 [label="Access variable R|<local>/x|"];
40 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
41 [label="Exit left part of &&"];
42 [label="Enter right part of &&"];
43 [label="Access variable R|<local>/y|"];
44 [label="Const: Null(null)"];
45 [label="Operator !="];
37 [label="Exit &&"];
}
46 [label="Function call: R|kotlin/require|(...)"];
subgraph cluster_8 {
color=blue
47 [label="Enter contract"];
subgraph cluster_9 {
color=blue
49 [label="Enter &&"];
50 [label="Access variable R|<local>/x|"];
51 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
52 [label="Exit left part of &&"];
53 [label="Enter right part of &&"];
54 [label="Access variable R|<local>/y|"];
55 [label="Const: Null(null)"];
56 [label="Operator !="];
48 [label="Exit &&"];
}
57 [label="Exit contract"];
}
58 [label="Access variable R|<local>/x|"];
59 [label="Access variable R|kotlin/String.length|"];
60 [label="Access variable R|<local>/y|"];
61 [label="Access variable R|kotlin/String.length|"];
36 [label="Exit function test_4" style="filled" fillcolor=red];
}
35 -> {38};
37 -> {46};
34 -> {35};
35 -> {36};
36 -> {37};
37 -> {38};
38 -> {39};
39 -> {40};
40 -> {41};
41 -> {37 42};
subgraph cluster_9 {
color=red
41 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_10 {
color=blue
42 [label="Enter block"];
subgraph cluster_11 {
color=blue
43 [label="Enter &&"];
44 [label="Access variable R|<local>/x|"];
45 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
46 [label="Exit left part of &&"];
47 [label="Enter right part of &&"];
48 [label="Access variable R|<local>/y|"];
49 [label="Const: Null(null)"];
50 [label="Operator !="];
51 [label="Exit &&"];
}
52 [label="Function call: R|kotlin/require|(...)"];
subgraph cluster_12 {
color=blue
53 [label="Enter contract"];
subgraph cluster_13 {
color=blue
54 [label="Enter &&"];
55 [label="Access variable R|<local>/x|"];
56 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
57 [label="Exit left part of &&"];
58 [label="Enter right part of &&"];
59 [label="Access variable R|<local>/y|"];
60 [label="Const: Null(null)"];
61 [label="Operator !="];
62 [label="Exit &&"];
}
63 [label="Exit contract"];
}
64 [label="Access variable R|<local>/x|"];
65 [label="Access variable R|kotlin/String.length|"];
66 [label="Access variable R|<local>/y|"];
67 [label="Access variable R|kotlin/String.length|"];
68 [label="Exit block"];
}
69 [label="Exit function test_4" style="filled" fillcolor=red];
}
41 -> {42};
42 -> {43};
43 -> {44};
44 -> {45};
45 -> {37};
46 -> {47};
47 -> {49};
48 -> {57};
45 -> {46};
46 -> {51 47};
47 -> {48};
48 -> {49};
49 -> {50};
50 -> {51};
51 -> {52};
52 -> {48 53};
52 -> {53};
53 -> {54};
54 -> {55};
55 -> {56};
56 -> {48};
57 -> {58};
56 -> {57};
57 -> {62 58};
58 -> {59};
59 -> {60};
60 -> {61};
61 -> {36};
subgraph cluster_10 {
color=red
62 [label="Enter function test_5" style="filled" fillcolor=red];
subgraph cluster_11 {
color=blue
64 [label="Enter when"];
subgraph cluster_12 {
color=blue
66 [label="Enter when branch condition "];
67 [label="Access variable R|<local>/b|"];
68 [label="Exit when branch condition"];
}
subgraph cluster_13 {
color=blue
82 [label="Enter when branch condition else"];
83 [label="Exit when branch condition"];
}
84 [label="Enter when branch result"];
subgraph cluster_14 {
color=blue
85 [label="Enter block"];
86 [label="Access variable R|<local>/x|"];
87 [label="Access variable <Unresolved name: length>#"];
88 [label="Exit block"];
}
89 [label="Exit when branch result"];
69 [label="Enter when branch result"];
subgraph cluster_15 {
color=blue
70 [label="Enter block"];
71 [label="Access variable R|<local>/x|"];
72 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
73 [label="Function call: R|kotlin/require|(...)"];
subgraph cluster_16 {
color=blue
74 [label="Enter contract"];
75 [label="Access variable R|<local>/x|"];
76 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
77 [label="Exit contract"];
}
78 [label="Access variable R|<local>/x|"];
79 [label="Access variable R|kotlin/String.length|"];
80 [label="Exit block"];
}
81 [label="Exit when branch result"];
65 [label="Exit when"];
}
90 [label="Access variable R|<local>/x|"];
91 [label="Access variable <Unresolved name: length>#"];
63 [label="Exit function test_5" style="filled" fillcolor=red];
}
62 -> {64};
64 -> {66};
65 -> {90};
61 -> {62};
62 -> {63};
63 -> {64};
64 -> {65};
65 -> {66};
66 -> {67};
67 -> {68};
68 -> {69 82};
69 -> {70};
68 -> {69};
subgraph cluster_14 {
color=red
70 [label="Enter function test_5" style="filled" fillcolor=red];
subgraph cluster_15 {
color=blue
71 [label="Enter block"];
subgraph cluster_16 {
color=blue
72 [label="Enter when"];
subgraph cluster_17 {
color=blue
73 [label="Enter when branch condition "];
74 [label="Access variable R|<local>/b|"];
75 [label="Exit when branch condition"];
}
subgraph cluster_18 {
color=blue
76 [label="Enter when branch condition else"];
77 [label="Exit when branch condition"];
}
78 [label="Enter when branch result"];
subgraph cluster_19 {
color=blue
79 [label="Enter block"];
80 [label="Access variable R|<local>/x|"];
81 [label="Access variable <Unresolved name: length>#"];
82 [label="Exit block"];
}
83 [label="Exit when branch result"];
84 [label="Enter when branch result"];
subgraph cluster_20 {
color=blue
85 [label="Enter block"];
86 [label="Access variable R|<local>/x|"];
87 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
88 [label="Function call: R|kotlin/require|(...)"];
subgraph cluster_21 {
color=blue
89 [label="Enter contract"];
90 [label="Access variable R|<local>/x|"];
91 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
92 [label="Exit contract"];
}
93 [label="Access variable R|<local>/x|"];
94 [label="Access variable R|kotlin/String.length|"];
95 [label="Exit block"];
}
96 [label="Exit when branch result"];
97 [label="Exit when"];
}
98 [label="Access variable R|<local>/x|"];
99 [label="Access variable <Unresolved name: length>#"];
100 [label="Exit block"];
}
101 [label="Exit function test_5" style="filled" fillcolor=red];
}
70 -> {71};
71 -> {72};
72 -> {73};
73 -> {74};
74 -> {75};
75 -> {76};
75 -> {84 76};
76 -> {77};
77 -> {78};
78 -> {79};
79 -> {80};
80 -> {81};
81 -> {65};
81 -> {82};
82 -> {83};
83 -> {84};
83 -> {97};
84 -> {85};
85 -> {86};
86 -> {87};
87 -> {88};
88 -> {89};
89 -> {65};
89 -> {90};
90 -> {91};
91 -> {63};
subgraph cluster_17 {
color=red
92 [label="Enter function test_6" style="filled" fillcolor=red];
subgraph cluster_18 {
color=blue
94 [label="Enter when"];
subgraph cluster_19 {
color=blue
96 [label="Enter when branch condition "];
97 [label="Access variable R|<local>/b|"];
98 [label="Exit when branch condition"];
}
subgraph cluster_20 {
color=blue
112 [label="Enter when branch condition else"];
113 [label="Exit when branch condition"];
}
114 [label="Enter when branch result"];
subgraph cluster_21 {
color=blue
115 [label="Enter block"];
116 [label="Access variable R|<local>/x|"];
117 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
118 [label="Function call: R|kotlin/require|(...)"];
subgraph cluster_22 {
color=blue
119 [label="Enter contract"];
120 [label="Access variable R|<local>/x|"];
121 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
122 [label="Exit contract"];
}
123 [label="Access variable R|<local>/x|"];
124 [label="Access variable R|kotlin/String.length|"];
125 [label="Exit block"];
}
126 [label="Exit when branch result"];
99 [label="Enter when branch result"];
subgraph cluster_23 {
color=blue
100 [label="Enter block"];
101 [label="Access variable R|<local>/x|"];
102 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
103 [label="Function call: R|kotlin/require|(...)"];
subgraph cluster_24 {
color=blue
104 [label="Enter contract"];
105 [label="Access variable R|<local>/x|"];
106 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
107 [label="Exit contract"];
}
108 [label="Access variable R|<local>/x|"];
109 [label="Access variable R|kotlin/String.length|"];
110 [label="Exit block"];
}
111 [label="Exit when branch result"];
95 [label="Exit when"];
}
127 [label="Access variable R|<local>/x|"];
128 [label="Access variable R|kotlin/String.length|"];
93 [label="Exit function test_6" style="filled" fillcolor=red];
}
92 -> {94};
94 -> {96};
95 -> {127};
91 -> {92};
92 -> {93};
93 -> {94};
94 -> {95};
95 -> {96};
96 -> {97};
97 -> {98};
98 -> {99 112};
98 -> {99};
99 -> {100};
100 -> {101};
101 -> {102};
subgraph cluster_22 {
color=red
102 [label="Enter function test_6" style="filled" fillcolor=red];
subgraph cluster_23 {
color=blue
103 [label="Enter block"];
subgraph cluster_24 {
color=blue
104 [label="Enter when"];
subgraph cluster_25 {
color=blue
105 [label="Enter when branch condition "];
106 [label="Access variable R|<local>/b|"];
107 [label="Exit when branch condition"];
}
subgraph cluster_26 {
color=blue
108 [label="Enter when branch condition else"];
109 [label="Exit when branch condition"];
}
110 [label="Enter when branch result"];
subgraph cluster_27 {
color=blue
111 [label="Enter block"];
112 [label="Access variable R|<local>/x|"];
113 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
114 [label="Function call: R|kotlin/require|(...)"];
subgraph cluster_28 {
color=blue
115 [label="Enter contract"];
116 [label="Access variable R|<local>/x|"];
117 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
118 [label="Exit contract"];
}
119 [label="Access variable R|<local>/x|"];
120 [label="Access variable R|kotlin/String.length|"];
121 [label="Exit block"];
}
122 [label="Exit when branch result"];
123 [label="Enter when branch result"];
subgraph cluster_29 {
color=blue
124 [label="Enter block"];
125 [label="Access variable R|<local>/x|"];
126 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
127 [label="Function call: R|kotlin/require|(...)"];
subgraph cluster_30 {
color=blue
128 [label="Enter contract"];
129 [label="Access variable R|<local>/x|"];
130 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
131 [label="Exit contract"];
}
132 [label="Access variable R|<local>/x|"];
133 [label="Access variable R|kotlin/String.length|"];
134 [label="Exit block"];
}
135 [label="Exit when branch result"];
136 [label="Exit when"];
}
137 [label="Access variable R|<local>/x|"];
138 [label="Access variable R|kotlin/String.length|"];
139 [label="Exit block"];
}
140 [label="Exit function test_6" style="filled" fillcolor=red];
}
102 -> {103};
103 -> {104};
104 -> {105};
105 -> {106};
106 -> {107};
107 -> {108};
107 -> {123 108};
108 -> {109};
109 -> {110};
110 -> {111};
111 -> {95};
111 -> {112};
112 -> {113};
113 -> {114};
114 -> {115};
@@ -328,12 +359,23 @@ digraph conditionalEffects_kt {
119 -> {120};
120 -> {121};
121 -> {122};
122 -> {123};
122 -> {136};
123 -> {124};
124 -> {125};
125 -> {126};
126 -> {95};
126 -> {127};
127 -> {128};
128 -> {93};
128 -> {129};
129 -> {130};
130 -> {131};
131 -> {132};
132 -> {133};
133 -> {134};
134 -> {135};
135 -> {136};
136 -> {137};
137 -> {138};
138 -> {139};
139 -> {140};
}

View File

@@ -6,83 +6,125 @@ digraph atLeastOnce_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function inlineRun" style="filled" fillcolor=red];
2 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
1 [label="Exit function inlineRun" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
1 [label="Enter block"];
2 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
3 [label="Exit block"];
}
4 [label="Exit function inlineRun" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {1};
subgraph cluster_1 {
color=red
3 [label="Enter function myRun" style="filled" fillcolor=red];
5 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
4 [label="Exit function myRun" style="filled" fillcolor=red];
}
3 -> {5};
5 -> {4};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
subgraph cluster_2 {
color=red
6 [label="Enter function test_1" style="filled" fillcolor=red];
8 [label="Variable declaration: lval x: R|kotlin/Int|"];
9 [label="Postponed enter to lambda"];
5 [label="Enter function myRun" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
14 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
16 [label="Const: Int(1)"];
17 [label="Assignment: R|<local>/x|"];
15 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
6 [label="Enter block"];
7 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
8 [label="Exit block"];
}
10 [label="Postponed exit from lambda"];
11 [label="Function call: R|/inlineRun|(...)"];
12 [label="Access variable R|<local>/x|"];
13 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
7 [label="Exit function test_1" style="filled" fillcolor=red];
9 [label="Exit function myRun" style="filled" fillcolor=red];
}
6 -> {8};
5 -> {6};
6 -> {7};
7 -> {8};
8 -> {9};
9 -> {14};
9 -> {10} [color=red];
10 -> {11};
11 -> {12};
12 -> {13};
13 -> {7};
14 -> {16};
15 -> {14};
15 -> {10} [color=green];
16 -> {17};
17 -> {15};
subgraph cluster_4 {
color=red
18 [label="Enter function test_2" style="filled" fillcolor=red];
20 [label="Variable declaration: lval x: R|kotlin/Int|"];
21 [label="Postponed enter to lambda"];
10 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
26 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
28 [label="Const: Int(1)"];
29 [label="Assignment: R|<local>/x|"];
27 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
11 [label="Enter block"];
12 [label="Variable declaration: lval x: R|kotlin/Int|"];
13 [label="Postponed enter to lambda"];
subgraph cluster_6 {
color=blue
20 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
21 [label="Enter block"];
22 [label="Const: Int(1)"];
23 [label="Assignment: R|<local>/x|"];
24 [label="Exit block"];
}
25 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
14 [label="Postponed exit from lambda"];
15 [label="Function call: R|/inlineRun|(...)"];
16 [label="Access variable R|<local>/x|"];
17 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
18 [label="Exit block"];
}
22 [label="Postponed exit from lambda"];
23 [label="Function call: R|/myRun|(...)"];
24 [label="Access variable R|<local>/x|"];
25 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
19 [label="Exit function test_2" style="filled" fillcolor=red];
19 [label="Exit function test_1" style="filled" fillcolor=red];
}
18 -> {20};
10 -> {11};
11 -> {12};
12 -> {13};
13 -> {20};
13 -> {14} [color=red];
14 -> {15};
15 -> {16};
16 -> {17};
17 -> {18};
18 -> {19};
20 -> {21};
21 -> {26};
21 -> {22} [color=red];
21 -> {22};
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {19};
26 -> {28};
27 -> {26};
27 -> {22} [color=green];
25 -> {14} [color=green];
25 -> {20} [color=green style=dashed];
subgraph cluster_8 {
color=red
26 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_9 {
color=blue
27 [label="Enter block"];
28 [label="Variable declaration: lval x: R|kotlin/Int|"];
29 [label="Postponed enter to lambda"];
subgraph cluster_10 {
color=blue
36 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_11 {
color=blue
37 [label="Enter block"];
38 [label="Const: Int(1)"];
39 [label="Assignment: R|<local>/x|"];
40 [label="Exit block"];
}
41 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
30 [label="Postponed exit from lambda"];
31 [label="Function call: R|/myRun|(...)"];
32 [label="Access variable R|<local>/x|"];
33 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
34 [label="Exit block"];
}
35 [label="Exit function test_2" style="filled" fillcolor=red];
}
26 -> {27};
27 -> {28};
28 -> {29};
29 -> {27};
29 -> {36};
29 -> {30} [color=red];
30 -> {31};
31 -> {32};
32 -> {33};
33 -> {34};
34 -> {35};
36 -> {37};
37 -> {38};
38 -> {39};
39 -> {40};
40 -> {41};
41 -> {30} [color=green];
41 -> {36} [color=green style=dashed];
}

View File

@@ -6,81 +6,123 @@ digraph atMostOnce_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function inlineRun" style="filled" fillcolor=red];
2 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
1 [label="Exit function inlineRun" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
1 [label="Enter block"];
2 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
3 [label="Exit block"];
}
4 [label="Exit function inlineRun" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {1};
subgraph cluster_1 {
color=red
3 [label="Enter function myRun" style="filled" fillcolor=red];
5 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
4 [label="Exit function myRun" style="filled" fillcolor=red];
}
3 -> {5};
5 -> {4};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
subgraph cluster_2 {
color=red
6 [label="Enter function test_1" style="filled" fillcolor=red];
8 [label="Variable declaration: lval x: R|kotlin/Int|"];
9 [label="Postponed enter to lambda"];
5 [label="Enter function myRun" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
14 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
16 [label="Const: Int(1)"];
17 [label="Assignment: R|<local>/x|"];
15 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
6 [label="Enter block"];
7 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
8 [label="Exit block"];
}
10 [label="Postponed exit from lambda"];
11 [label="Function call: R|/inlineRun|(...)"];
12 [label="Access variable R|<local>/x|"];
13 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
7 [label="Exit function test_1" style="filled" fillcolor=red];
9 [label="Exit function myRun" style="filled" fillcolor=red];
}
6 -> {8};
5 -> {6};
6 -> {7};
7 -> {8};
8 -> {9};
9 -> {14};
9 -> {10} [color=red];
10 -> {11};
11 -> {12};
12 -> {13};
13 -> {7};
14 -> {15 16};
15 -> {10} [color=green];
16 -> {17};
17 -> {15};
subgraph cluster_4 {
color=red
18 [label="Enter function test_2" style="filled" fillcolor=red];
20 [label="Variable declaration: lval x: R|kotlin/Int|"];
21 [label="Postponed enter to lambda"];
10 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
26 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
28 [label="Const: Int(1)"];
29 [label="Assignment: R|<local>/x|"];
27 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
11 [label="Enter block"];
12 [label="Variable declaration: lval x: R|kotlin/Int|"];
13 [label="Postponed enter to lambda"];
subgraph cluster_6 {
color=blue
20 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
21 [label="Enter block"];
22 [label="Const: Int(1)"];
23 [label="Assignment: R|<local>/x|"];
24 [label="Exit block"];
}
25 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
14 [label="Postponed exit from lambda"];
15 [label="Function call: R|/inlineRun|(...)"];
16 [label="Access variable R|<local>/x|"];
17 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
18 [label="Exit block"];
}
22 [label="Postponed exit from lambda"];
23 [label="Function call: R|/myRun|(...)"];
24 [label="Access variable R|<local>/x|"];
25 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
19 [label="Exit function test_2" style="filled" fillcolor=red];
19 [label="Exit function test_1" style="filled" fillcolor=red];
}
18 -> {20};
20 -> {21};
21 -> {26};
21 -> {22} [color=red];
10 -> {11};
11 -> {12};
12 -> {13};
13 -> {20};
13 -> {14} [color=red];
14 -> {15};
15 -> {16};
16 -> {17};
17 -> {18};
18 -> {19};
20 -> {25 21};
21 -> {22};
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {19};
26 -> {27 28};
27 -> {22} [color=green];
25 -> {14} [color=green];
subgraph cluster_8 {
color=red
26 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_9 {
color=blue
27 [label="Enter block"];
28 [label="Variable declaration: lval x: R|kotlin/Int|"];
29 [label="Postponed enter to lambda"];
subgraph cluster_10 {
color=blue
36 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_11 {
color=blue
37 [label="Enter block"];
38 [label="Const: Int(1)"];
39 [label="Assignment: R|<local>/x|"];
40 [label="Exit block"];
}
41 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
30 [label="Postponed exit from lambda"];
31 [label="Function call: R|/myRun|(...)"];
32 [label="Access variable R|<local>/x|"];
33 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
34 [label="Exit block"];
}
35 [label="Exit function test_2" style="filled" fillcolor=red];
}
26 -> {27};
27 -> {28};
28 -> {29};
29 -> {27};
29 -> {36};
29 -> {30} [color=red];
30 -> {31};
31 -> {32};
32 -> {33};
33 -> {34};
34 -> {35};
36 -> {41 37};
37 -> {38};
38 -> {39};
39 -> {40};
40 -> {41};
41 -> {30} [color=green];
}

View File

@@ -21,7 +21,7 @@ fun test_1() {
inlineRun {
x = 1
}
x.inc()
<!UNINITIALIZED_VARIABLE!>x<!>.inc()
}
fun test_2() {
@@ -29,5 +29,5 @@ fun test_2() {
myRun {
x = 1
}
x.inc()
<!UNINITIALIZED_VARIABLE!>x<!>.inc()
}

View File

@@ -6,87 +6,129 @@ digraph exactlyOnce_kt {
subgraph cluster_0 {
color=red
0 [label="Enter function inlineRun" style="filled" fillcolor=red];
2 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
1 [label="Exit function inlineRun" style="filled" fillcolor=red];
subgraph cluster_1 {
color=blue
1 [label="Enter block"];
2 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
3 [label="Exit block"];
}
4 [label="Exit function inlineRun" style="filled" fillcolor=red];
}
0 -> {2};
2 -> {1};
subgraph cluster_1 {
color=red
3 [label="Enter function myRun" style="filled" fillcolor=red];
5 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
4 [label="Exit function myRun" style="filled" fillcolor=red];
}
3 -> {5};
5 -> {4};
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
subgraph cluster_2 {
color=red
6 [label="Enter function test_1" style="filled" fillcolor=red];
8 [label="Variable declaration: lval x: R|kotlin/Int|"];
9 [label="Postponed enter to lambda"];
5 [label="Enter function myRun" style="filled" fillcolor=red];
subgraph cluster_3 {
color=blue
15 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
17 [label="Const: Int(1)"];
18 [label="Assignment: R|<local>/x|"];
16 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
6 [label="Enter block"];
7 [label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
8 [label="Exit block"];
}
12 [label="Call arguments union" style="filled" fillcolor=yellow];
10 [label="Postponed exit from lambda"];
11 [label="Function call: R|/inlineRun|(...)"];
13 [label="Access variable R|<local>/x|"];
14 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
7 [label="Exit function test_1" style="filled" fillcolor=red];
9 [label="Exit function myRun" style="filled" fillcolor=red];
}
6 -> {8};
5 -> {6};
6 -> {7};
7 -> {8};
8 -> {9};
9 -> {15};
9 -> {10} [color=red];
10 -> {11} [color=green];
11 -> {13};
12 -> {11} [color=red];
13 -> {14};
14 -> {7};
15 -> {17};
16 -> {10} [color=green];
16 -> {12} [color=red];
17 -> {18};
18 -> {16};
subgraph cluster_4 {
color=red
19 [label="Enter function test_2" style="filled" fillcolor=red];
21 [label="Variable declaration: lval x: R|kotlin/Int|"];
22 [label="Postponed enter to lambda"];
10 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_5 {
color=blue
28 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
30 [label="Const: Int(1)"];
31 [label="Assignment: R|<local>/x|"];
29 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
11 [label="Enter block"];
12 [label="Variable declaration: lval x: R|kotlin/Int|"];
13 [label="Postponed enter to lambda"];
subgraph cluster_6 {
color=blue
21 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_7 {
color=blue
22 [label="Enter block"];
23 [label="Const: Int(1)"];
24 [label="Assignment: R|<local>/x|"];
25 [label="Exit block"];
}
26 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
14 [label="Call arguments union" style="filled" fillcolor=yellow];
15 [label="Postponed exit from lambda"];
16 [label="Function call: R|/inlineRun|(...)"];
17 [label="Access variable R|<local>/x|"];
18 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
19 [label="Exit block"];
}
25 [label="Call arguments union" style="filled" fillcolor=yellow];
23 [label="Postponed exit from lambda"];
24 [label="Function call: R|/myRun|(...)"];
26 [label="Access variable R|<local>/x|"];
27 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
20 [label="Exit function test_2" style="filled" fillcolor=red];
20 [label="Exit function test_1" style="filled" fillcolor=red];
}
19 -> {21};
10 -> {11};
11 -> {12};
12 -> {13};
13 -> {21};
13 -> {15} [color=red];
14 -> {16} [color=red];
15 -> {16} [color=green];
16 -> {17};
17 -> {18};
18 -> {19};
19 -> {20};
21 -> {22};
22 -> {28};
22 -> {23} [color=red];
23 -> {24} [color=green];
24 -> {26};
25 -> {24} [color=red];
26 -> {27};
27 -> {20};
28 -> {30};
29 -> {23} [color=green];
29 -> {25} [color=red];
30 -> {31};
31 -> {29};
22 -> {23};
23 -> {24};
24 -> {25};
25 -> {26};
26 -> {14} [color=red];
26 -> {15} [color=green];
subgraph cluster_8 {
color=red
27 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_9 {
color=blue
28 [label="Enter block"];
29 [label="Variable declaration: lval x: R|kotlin/Int|"];
30 [label="Postponed enter to lambda"];
subgraph cluster_10 {
color=blue
38 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
subgraph cluster_11 {
color=blue
39 [label="Enter block"];
40 [label="Const: Int(1)"];
41 [label="Assignment: R|<local>/x|"];
42 [label="Exit block"];
}
43 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
31 [label="Call arguments union" style="filled" fillcolor=yellow];
32 [label="Postponed exit from lambda"];
33 [label="Function call: R|/myRun|(...)"];
34 [label="Access variable R|<local>/x|"];
35 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
36 [label="Exit block"];
}
37 [label="Exit function test_2" style="filled" fillcolor=red];
}
27 -> {28};
28 -> {29};
29 -> {30};
30 -> {38};
30 -> {32} [color=red];
31 -> {33} [color=red];
32 -> {33} [color=green];
33 -> {34};
34 -> {35};
35 -> {36};
36 -> {37};
38 -> {39};
39 -> {40};
40 -> {41};
41 -> {42};
42 -> {43};
43 -> {31} [color=red];
43 -> {32} [color=green];
}

Some files were not shown because too many files have changed in this diff Show More