Dmitry Petrov
0ce6bac7eb
Generate proper 'compareTo' calls for non-primitive 'a in x .. y'
...
When we have some custom implementation of Comparable, it's important
that we compare values exactly as 'lowBound <= a && a <= highBound'.
Make sure that evaluation order and compareTo calls match for
optimized and non-optimized case.
2017-07-10 10:51:26 +03:00
Dmitry Petrov
dd5bb78178
Minor: don't use StringBuilder#setLength(0) - absent in JS
2017-07-10 10:51:26 +03:00
Dmitry Petrov
0962aec456
Minor: don't use java.lang.Integer in common test
2017-07-10 10:51:26 +03:00
Dmitry Petrov
aa7db727ba
Fold I2L with ICONST_n when beneficial
...
ICONST_0; I2L -> LCONST_0
ICONST_1; I2L -> LCONST_1
2017-07-10 10:51:26 +03:00
Dmitry Petrov
ad80c3cd7f
If at least one of the range bounds is "pure", order doesn't matter
2017-07-10 10:51:26 +03:00
Dmitry Petrov
22e12dc139
Minor: use method names in bytecode text tests
2017-07-10 10:51:26 +03:00
Dmitry Petrov
905a16e1df
Maintain proper evaluation order for 'a in x .. y'
...
As of Kotlin 1.0 and 1.1, expression 'a in x .. y' is considered
equivalent to 'x.rangeTo(y).a', and should be evaluated in the following
order:
1. x
2. y
3. a
4. compare x with a
5. compare y with a (if needed)
2017-07-10 10:51:26 +03:00
Dmitry Petrov
fc3e9318d9
Handle DUPnXm instructions in PopBackwardPropagationTransformer
2017-07-10 10:51:26 +03:00
Dmitry Petrov
6a3ff5ca46
Add tests for intrinsified in/!in and mismatching range types
2017-07-10 10:51:26 +03:00
Dmitry Petrov
850e1b11fc
Minor: test modification after review
2017-07-10 10:51:26 +03:00
Dmitry Petrov
64f880ba71
Add test for in/!in in a custom object range
2017-07-10 10:51:26 +03:00
Dmitry Petrov
9d1901fc7c
Intrinsify some mismatching range/element combinations for in/in!
...
It's safe to upcast integer types to Long,
floating-point types to Double.
So we don't have to create a range instance for cases such as
fun testLongInInt(x: Long, a: Int, b: Int) =
x in a .. b
which is equivalent to
fun testLongInInt(x: Long, a: Int, b: Int) =
x in a.toLong() .. b.toLong()
2017-07-10 10:51:26 +03:00
Dmitry Petrov
d137b04b0a
Pull up logic for ComparisonGenerator selection
2017-07-10 10:51:26 +03:00
Dmitry Petrov
ea95f31f99
Simplify some basic instructions using peephole optimization
...
DUP_X1; POP = SWAP
p1_a; p1_b; SWAP = p1_b; p1_a
where p1_a, p1_b are instructions without side effects pushing value of
size 1 on stack.
E.g.: ACONST_NULL; ALOAD 0; SWAP = ALOAD 0; ACONST_NULL
NOP; NOP = NOP
2017-07-10 10:51:26 +03:00
Dmitry Petrov
224848163d
Use InContinuousRangeExpressionGenerator for primitive range intrinsics
2017-07-10 10:51:26 +03:00
Dmitry Petrov
c855b5c889
Extract SimpleBoundedValue class
2017-07-10 10:51:26 +03:00
Dmitry Petrov
a3409b46b0
Primitive number range literal as BoundedValue
2017-07-10 10:51:26 +03:00
Dmitry Petrov
b693b54a2c
Fix DUPn_Xm handling in PopBackwardPropagationTransformer
...
DUPn_Xm instructions implicitly depend on elements directly under stack
top (which are not "copied", but still required). We can't analyze them
precisely now, and should skip methods containing these instructions.
Fortunately, we didn't generate these instructions under POP before,
but with new range check code generation and constant conditions
elimination such combination of instructions becomes possible.
2017-07-10 10:51:26 +03:00
Dmitry Petrov
4480a9bdfb
Introduce BoundedValue as a generalization of (low..high) range
...
Provide BoundedValue-based implementation of InExpressionGenerator,
test it on range of comparable values.
Drop unneeded test (range of comparables is already tested by
ranges/contains/inComparableRanges.kt).
2017-07-10 10:51:26 +03:00
Dmitry Petrov
f4ea1a2f41
Minor: move RangeValue-related classes to proper packages
2017-07-10 10:51:26 +03:00
Dmitry Petrov
d19eb05382
Introduce AbstractForInProgressionLoopGenerator
...
AbstractForInProgressionLoopGenerator is a base class for
progression-based 'for' loop generators with progression step unknown
at compile time.
2017-07-10 10:51:26 +03:00
Dmitry Petrov
83ff1a2ef3
Minor: refactor ForInProgressionExpressionLoopGenerator initialization
2017-07-10 10:51:26 +03:00
Dmitry Petrov
6551fdc695
Add test for nullable primitive in range
2017-07-10 10:51:26 +03:00
Dmitry Petrov
db1dcc68ff
Minor: cleanup in ExpressionCodegen
2017-07-10 10:51:26 +03:00
Dmitry Petrov
614d90d6ef
Skip NOP instructions in fast pop backward propagation
2017-07-10 10:51:26 +03:00
Dmitry Petrov
36cbc0defd
Ensure that {Collection, CharSequence}.indices intrinsic works with 'in'
2017-07-10 10:51:26 +03:00
Dmitry Petrov
ec99fa2142
Ensure that 'in/!in x until y' intrinsic works
2017-07-10 10:51:26 +03:00
Dmitry Petrov
05cad83c79
Fix tests for in/in! with primitive range literals
...
- ClosedFloatingPointRange<T>
- IntRange, etc
- extensions in kotlin.ranges for ranges of Byte/Int/Short
2017-07-10 10:51:26 +03:00
Dmitry Petrov
5decf65d6a
Ensure that no range instance is created for 'x in array.indices'
2017-07-10 10:51:26 +03:00
Dmitry Petrov
4320b63922
Ensure that no boolean negation is generated for !in expression
...
#KT-18777 Fixed Target versions 1.1.4
2017-07-10 10:51:26 +03:00
Dmitry Petrov
b9c0ecf2b1
Ensure that ranges are not created for in-Comparable-range-literal
...
#KT-6247 Fixed Target versions 1.1.4
2017-07-10 10:51:26 +03:00
Dmitry Petrov
7175361c97
Ensure that BranchedValue for in/!in work well with boolean operations
2017-07-10 10:51:26 +03:00
Dmitry Petrov
a3cd4f415a
Add test for comparison used for primitives and Comparable
...
There's a subtle difference in behavior between comparing
primitive Float/Double (comparison follows IEEE standard)
and boxed Float/Double (comparison is a total order).
Make sure this corner case is preserved.
2017-07-10 10:51:26 +03:00
Dmitry Petrov
fd402cb76c
Provide intrinsic for in/in! expression with range of Comparable
2017-07-10 10:51:26 +03:00
Dmitry Petrov
bd2021411c
Don't use intrinsic 'in' generator for non-intrinsified 'in' expressions
2017-07-10 10:51:26 +03:00
Dmitry Petrov
a7071ae7af
Provide intrinsic generators for in/!in expression
...
TODO some tests should fail because range of comparables
(e.g., '"Alpha" .. "Omega"') is currently not implemented
2017-07-10 10:51:26 +03:00
Dmitry Petrov
e3320c53f5
Minor: AbstractForInRangeWithGivenBoundsLoopGenerator
2017-07-10 10:51:26 +03:00
Dmitry Petrov
e261b8edf8
Minor: extract high-level interface for ForLoopGenerator
2017-07-10 10:51:26 +03:00
Dmitry Petrov
c870eeac2e
RangeCodegenUtil: convert to Kotlin + cleanup
2017-07-10 10:51:26 +03:00
Dmitry Petrov
304e4e8dce
RangeCodegenUtil: .java -> .kt
2017-07-10 10:51:26 +03:00
Dmitry Petrov
6140f29818
Ranges: introduce RangeValue class
...
The overall idea is to unify intrinsics for 'for-in' loop generation
and for 'in'/'!in' expression generation.
2017-07-10 10:51:26 +03:00
Alexey Andreev
811da2e285
Compile stdlib-js with source map
2017-07-09 14:22:08 +03:00
Ilya Chernikov
25c731241b
Fix parallel daemon start test reporting
2017-07-08 18:16:29 +02:00
Ilya Chernikov
21eed9ee78
Get rid of kotlin.Unit usage in RMI interfaces
...
attempt to fight mysterous "Cannot instantiate kotlin.Unit" exception.
2017-07-08 18:16:29 +02:00
Ilya Chernikov
06d27a9efa
Fix failing tests on TC on Windows by falling back to standard launcher
...
...in one more case
Plus some minor test tweaks, diagnostics improvement and important comments
2017-07-08 18:16:28 +02:00
Ilya Chernikov
e4ed217a3b
Add missing explicit serialVersionUID to the REPL API classes
2017-07-08 18:16:27 +02:00
Ilya Chernikov
8542e878f7
Refactor daemon periodic check and shutdown logic
...
Cleaner logic and logging, improved stability during shutdown, reduced
overhead of the periodic checks, and regular calls, should also eliminate
dying daemons scenario on parallel execution (another attempt to do it).
2017-07-08 18:16:26 +02:00
Ilya Chernikov
2c35675fd6
Refactor daemon parallel start test to improve diagnostics
...
also add daemon info to the RPC
and remove redundant daemon stopping calls, that should speed up
tests execution
2017-07-08 18:16:26 +02:00
Ilya Chernikov
e2d2c5ff42
Refactor daemon startup for better logging and cleaner code
2017-07-08 18:16:25 +02:00
Ilya Chernikov
2ec2a08753
Implement advanced gradle script template selection in the provider, improve diagnostics
2017-07-08 18:16:24 +02:00