Commit Graph

17381 Commits

Author SHA1 Message Date
Roman Elizarov 8d6a913cee CoroutineContext and ContinuationInterceptor (instead of dispatcher) 2017-01-14 13:24:53 +03:00
Denis Zharkov f56d9cfb26 Ignore failing coroutine related tests on JS 2017-01-14 13:24:53 +03:00
Denis Zharkov 10e67a9b4e Minor. Run Generate tests 2017-01-14 13:24:53 +03:00
Denis Zharkov c479aa7d65 JS: simplify how suspend functions inlined 2017-01-14 13:24:53 +03:00
Denis Zharkov 1f0d0028b2 Minor. Simplify coroutine related code in ExpressionCodegen
After previous change (treating suspend function as they return j/l/Object)
most of existing hacks concerning suspend functions' return type
became unnecessary
2017-01-14 13:24:53 +03:00
Denis Zharkov 2286027bed Fix verify error with 'return when/if/try' in suspend function
The problem appears for tail-optimized suspend functions,
we erroneously assumed that when/if/try expressions in tail-call
position have simple types like `I` while actually, they can return SUSPENDED
object, i.e. must have `java/lang/Object` as return type.

But this only concerns branching operations in tail-call position,
so we have to make an additional analysis for remembering whether
a given expression is in a tail-call position.

Also, it's important here that we now assume
the return type of the current function  as `java/lang/Object`
that is necessary to avoid wrong checkcasts.

 #KT-15364 Fixed
2017-01-14 13:24:53 +03:00
Denis Zharkov de9c41c412 Fix overridability rules for suspend functions
Treat suspend and non-suspend functions as conflicting

 #KT-15413 Fixed
2017-01-14 13:24:53 +03:00
Denis Zharkov 978f53414f Prohibit local suspend functions
#KT-15392 Fixed
2017-01-14 13:24:53 +03:00
Denis Zharkov d43a4199f8 Prohibit suspend function type in supertype list
#KT-15391 Fixed
2017-01-14 13:24:53 +03:00
Denis Zharkov f12409504f Prohibit callable references to suspend functions
#KT-15662 Fixed
2017-01-14 13:24:53 +03:00
Denis Zharkov 695b6d9e67 Minor. Add test on local vars of suspend function type 2017-01-14 13:24:53 +03:00
Denis Zharkov 7837d736f7 Merge RestrictedCoroutineImpl into CoroutineImpl 2017-01-14 13:24:53 +03:00
Denis Zharkov d487c1ef0f Refine dispatching convention
Dispatching happens only via `suspendWithCurrentContinuation` calls
instead of each `resume` call

 #KT-15657 Fixed
2017-01-14 13:24:53 +03:00
Denis Zharkov 0240ab0738 Support non-tail suspend calls in JVM back-end
#KT-15597 In Progress
2017-01-14 13:24:53 +03:00
Denis Zharkov a048dde7a5 Support non-tail suspend calls in front-end
#KT-15597 In Progress
2017-01-14 13:24:53 +03:00
Denis Zharkov 2cb9d3a8ad Move coroutine intrinsics to kotlin.coroutine.intrinsics package
Also rename val SUSPENDED to SUSPENDED_MARKER

 #KT-15698 Fixed
2017-01-14 13:24:53 +03:00
Mikhael Bogdanov e5b8943d41 Added 'languageVersion' parameter to DiagnosticTestLanguageVersionSettings 2017-01-13 18:01:05 +01:00
Mikhael Bogdanov b88a9025e0 Don't check DELEGATED_MEMBER_HIDES_SUPERTYPE_OVERRIDE when compiling to 1.0 2017-01-13 18:01:05 +01:00
Ilya Gorbunov cdfb72ab76 Provide protected toArray implementation in AbstractCollection.
Relates to #KT-13898
2017-01-13 19:38:28 +03:00
Mikhael Bogdanov 09eeb414fe New test for jvm8 nondefaults target 2017-01-13 13:52:57 +01:00
Mikhael Bogdanov d278a5c6d5 Move java 8+defaults tests to separate folder 2017-01-13 13:52:57 +01:00
Mikhael Bogdanov 0a363fd1a5 Introduced test flag: JVM8_TARGET_WITH_DEFAULTS 2017-01-13 13:52:56 +01:00
Mikhael Bogdanov 7f8acbb759 Use proper flag for interface method invocation 2017-01-13 13:52:55 +01:00
Mikhael Bogdanov 0f2139f27d InstructionAdapter.invokeX updated to non-deprecated ones 2017-01-13 13:52:55 +01:00
Mikhael Bogdanov 62514e126d Enable jvm 1.8 platform in cli 2017-01-13 13:52:54 +01:00
Alexey Tsvetkov 3d07c40887 Minor: rename CompilationResultSink->CompilationResults 2017-01-13 15:08:12 +03:00
Alexey Tsvetkov bdae0b5efb Fix the build 2017-01-13 15:08:12 +03:00
Alexey Tsvetkov 41c5568b74 Minor: add comment 2017-01-13 15:08:12 +03:00
Alexey Tsvetkov 7a29c00ec3 Minor: fix typo EventManger->EventManager 2017-01-13 15:08:12 +03:00
Alexey Tsvetkov 39b37b85e3 Minor: rename Storage->Sink 2017-01-13 15:08:12 +03:00
Alexey Tsvetkov f027860ac0 Minor: rename CompilationResult->CompilationResultCategory 2017-01-13 15:08:12 +03:00
Alexey Tsvetkov a3415d8d0e Minor: move CompilerMode 2017-01-13 15:08:12 +03:00
Alexey Tsvetkov 072edf4b5a Minor: introduce EXCEPTION report category 2017-01-13 15:08:12 +03:00
Alexey Tsvetkov a56c92f28d Minor rename parameters to match parent constructor 2017-01-13 15:08:12 +03:00
Alexey Tsvetkov 2ec9773e15 Minor: fix CompilerMessageSeverity order 2017-01-13 15:08:12 +03:00
Alexey Tsvetkov 16352ff2e5 Refactor messages sending 2017-01-13 15:08:12 +03:00
Alexey Tsvetkov e44cc43ada Move CompilerMode and TargetPlatform to CompilationOptions 2017-01-13 15:08:12 +03:00
Alexey Tsvetkov c5a5463f50 Rename AdditionalCompilerArguments->CompilationOptions 2017-01-13 15:08:12 +03:00
Alexey Tsvetkov bf50a23221 Remove operations tracer from compile() interface 2017-01-13 15:08:12 +03:00
Alexey Tsvetkov 99c72b6dff Refactor JPS daemon client 2017-01-13 15:08:12 +03:00
Alexey Tsvetkov c9a874cba9 Refactor gradle daemon client 2017-01-13 15:08:12 +03:00
Alexey Tsvetkov d4d1d5ad0f Refactor daemon interface 2017-01-13 15:08:12 +03:00
Alexey Tsvetkov d19a92bab5 Make ICReporter interface 2017-01-13 15:08:12 +03:00
Alexey Tsvetkov d80c1ad10d Add integer value to compiler message severity 2017-01-13 15:08:12 +03:00
Alexey Tsvetkov 1fcd7d07e2 Make compiler arguments serializable 2017-01-13 15:08:12 +03:00
Ilya Chernikov 1e68b2436f Relocate non-native/jni part of net.rubygrapefruit.platform in attempt to fix #KT-15570 2017-01-13 10:48:29 +01:00
Alexander Udalov 2ba18beb89 Report JVM runtime version inconsistency as errors instead of warnings
(cherry picked from commit f8fc7e94ac07d80f332149529b34297b7f0db82e)
2017-01-13 11:53:52 +03:00
Alexander Udalov e3f4b6e77e Do not allow to use suspend functions in 1.0.6+ 2017-01-13 11:53:52 +03:00
Dmitry Petrov 4dd100122b Explicitly remove NOPs inserted for bytecode analysis in post-conditional loops.
Remove redundant NOPs during bytecode optimization.

NOP instruction is required iff one of the following is true:
(a) it is a first bytecode instruction in a try-catch block (JVM BE assumption);
(b) it is a sole bytecode instruction in a source code line (breakpoints on that line will not work).
All other NOP instructions can be removed.

Note that it doesn't really affect the performance for mature JVM implementations.
However, the perceived quality of the generated code is somewhat improved :).

Related: KT-15609
2017-01-13 10:31:07 +03:00
Dmitry Petrov ba933fa887 KT-15112, KT-15631
Revert changes for "tolerant to uninitialized values" in OptimizationBasicInterpreter:
this approach doesn't converge for some specific cases where local variable is reused
(e.g., in several inlined functions - see https://youtrack.jetbrains.com/issue/KT-15112).

Instead, treat fake always-false conditional jump in the beginning of the post-condition loop as a "reference point" for stack on loop break / continue.
This requires an extra abstraction layer in FixStackAnalyzer, since we can't perform fine-grain manipulations on Frames
(such as "combine frame C from local variables of frame A and stack of frame B").

NB additional NOPs will be generated for post-condition loops.
Should make a separate bytecode postprocessing pass to get rid of unnecessary NOPs
(several YT issues for perceived quality of the generated bytecode are about such NOPs).
2017-01-13 10:31:07 +03:00