Dmitry Petrov
05daa21657
Fix inline class secondary constructor call generation
...
Don't generate NEW+DUP for inline class constructor calls.
2018-09-05 12:20:57 +03:00
Dmitry Petrov
3080b65f7d
Inline (wrapper) class IC extends erased inline class IC$Erased
2018-09-05 12:20:57 +03:00
Roman Artemev
8a871b3f0c
Update tests
2018-08-31 15:34:18 +03:00
Ilmir Usmanov
2d04acba42
Update test data of compiler tests, except IR tests
2018-08-30 16:24:41 +03:00
Dmitry Petrov
a205019156
Additional tests and fixes for function name mangling
2018-08-30 14:58:54 +03:00
Dmitry Petrov
99498eb7b8
Use 'name-hash' mangling scheme
...
'-' is allowed as a name character both in JVM and in Dalvik, but can't
be a part of a Java identifier.
2018-08-30 14:58:52 +03:00
Dmitry Petrov
a56d1d3ce8
Mangle function names with inline class parameters
...
Avoid name clashes in cases such as
inline class Login(val login: String)
inline class Password(val password: String)
fun validate(login: Login) { ... }
fun validate(password: Password) { ... }
2018-08-30 14:58:50 +03:00
Anton Bannykh
a83baee67b
review fixes + DCE data update + test (un)muting
2018-08-30 14:57:27 +03:00
Anton Bannykh
944c5b6044
JS: modify a test to work around Kotlin/JS Double.toString problems
2018-08-30 14:57:18 +03:00
Anton Bannykh
a11c4871ea
JS: equals, hashCode, toString support in inline classes
2018-08-30 14:57:16 +03:00
Dmitry Petrov
2a524920a5
Don't remap inline function args requiring inline class boxing/unboxing
...
Same as for primitives: inline lambda expects to see a boxed value,
so, even if an argument is a local variable, it can't be remapped,
because it contains unboxed representation.
2018-08-24 14:52:29 +03:00
Dmitry Petrov
6e2d05cd94
Fix argument original type order in InlineCodegen
...
Arguments are put on stack in the direct order, and then stored into
local variables for inlining in the reversed order:
<arg0>
<arg1>
<arg2>
store <param2>
store <param1>
store <param0>
Original value parameter types were taken in direct order, though.
2018-08-24 14:52:29 +03:00
Dmitry Petrov
7d4dfc87b1
Use proper KotlinType in get/set methods for property reference
2018-08-21 08:43:12 +03:00
Dmitry Petrov
b6e3218ca2
Use mapping mode for inline class underlying type without wrapping
2018-08-16 15:03:50 +03:00
Dmitry Petrov
8e95ecb821
Use underlying type when computing type mapping mode for inline classes
2018-08-15 15:37:46 +03:00
Svyatoslav Kuzmich
392ad521fd
[JS IR BE] Reflection support
2018-08-15 13:35:14 +03:00
Dmitry Petrov
ebf8ec455d
Box/unbox nullable inline class values with null check
...
When we have a nullable inline class value with non-null underlying
type, corresponding value in unboxed representation is nullable. E.g.:
inline class Str(val value: String)
fun test(s: Str?) = listOf(s)
Here 'test(s: Str?)' accepts nullable 'java.lang.String' as a parameter.
When boxing/unboxing nullable values of such inline classes, take care
of nulls.
#KT-26052 Fixed Target versions 1.3-M2
2018-08-14 10:22:07 +03:00
Dmitry Petrov
4f6aa50417
Fix == for inline classes with boxes
...
TODO generalize code generating object vs primitive equality
#KT-25914 Fixed
#KT-25981 Fixed
#KT-25983 Fixed
2018-08-10 10:34:57 +03:00
Mikhail Zarechenskiy
55e7def3c1
Fix coercion for stack value property in case of inline classes
...
#KT-25771 Fixed
2018-08-06 17:45:20 +03:00
Mikhail Zarechenskiy
6d4d244c28
Generate function from Any for inline classes same as for data classes
...
#KT-24873 Fixed
#KT-25293 Fixed
#KT-25299 Fixed
2018-08-06 10:56:01 +03:00
Mikhail Zarechenskiy
043ce1cb27
Support secondary constructors for inline classes
...
#KT-25614 Fixed
#KT-25246 Fixed
KT-25599 Will be fixed after recompilation of unsigned classes
2018-08-06 10:55:57 +03:00
Mikhael Bogdanov
2884d728fd
Mute/unmute jvm_ir tests
2018-08-01 12:29:24 +02:00
Mikhail Zarechenskiy
045058c29a
Support inline class values inside string templates through boxing
...
#KT-25626 Fixed
#KT-25613 Open
2018-07-20 13:58:31 +03:00
Mikhail Zarechenskiy
ec9d8e580e
Leave boxing for compareTo/areEqual methods for inline classes
...
Inline classes can override methods and thus introduce side effects
2018-07-20 11:51:34 +03:00
Mikhail Zarechenskiy
bb575866cb
Pass actual invoke parameters for inline functions with inline classes
...
#KT-25511 Fixed
2018-07-17 23:39:38 +03:00
Mikhail Zarechenskiy
77959247d2
Fix bridge generation for inline classes over Any type
2018-07-17 23:39:34 +03:00
Mikhail Zarechenskiy
820d168607
First, check for inline class type before boxing
...
The problem was that if `type` is of primitive type, but `KotlinType` is
actually an inline class type, then anyway we boxed this type as primitive
2018-07-13 15:48:21 +03:00
Mikhail Zarechenskiy
4e3674b330
Fix for-in iterator over list of boxed inline class values
...
#KT-25325 Fixed
2018-07-12 18:53:30 +03:00
Mikhail Zarechenskiy
0308e10c11
Fix for-in iterator over array of boxed inline class values
...
#KT-25324 Fixed
2018-07-12 18:53:24 +03:00
Anton Bannykh
9c6452778f
JS IR: unmute tests
2018-07-11 15:25:41 +03:00
Anton Bannykh
ac1a97ad83
JS IR: unmute tests
2018-07-11 14:49:36 +03:00
Mikhail Zarechenskiy
6b73e528ce
Ignore test for JS IR because of TODO() function
2018-07-11 11:41:24 +03:00
Mikhail Zarechenskiy
8d24ca65a3
Propagate KotlinType into when expression codegen
...
This commit removes unneeded boxing when result expression of `when` is
value of inline class type
2018-07-10 23:10:57 +03:00
Anton Bannykh
07b3b66fd9
JS IR: unmute tests
2018-07-10 13:34:19 +03:00
Mikhail Zarechenskiy
2939d9c8c6
Use correct lhs KotlinType & AsmType for is check generation
...
There were two problems:
- For asm type `OBJECT_TYPE` was used, which can be wrong in case of
inline classes, because it can be an underlying value of some inline class
- For KotlinType, type from rhs was used
2018-07-05 12:55:43 +03:00
Mikhail Zarechenskiy
4f490ac264
Fix generation of checkcast instructions for inline classes
...
Normalize LHS and RHS types to use only boxed ones and then let bytecode
optmizer reduce redundant boxing
2018-07-05 12:55:39 +03:00
Mikhael Bogdanov
e149cbe852
Mute failed jvm ir tests
2018-06-28 12:26:41 +02:00
Mikhail Zarechenskiy
fcacdc1fc5
Fix bridge methods generation when inline class types are used
2018-06-19 20:09:35 +03:00
Mikhail Zarechenskiy
f326fd66be
Propagate KotlinType into if expression codegen for inline classes
2018-06-19 19:54:22 +03:00
Mikhail Zarechenskiy
6431934c13
Fix signature mapping for built-in methods inside erased inline class
2018-06-18 18:55:18 +03:00
Mikhail Zarechenskiy
8503194e0d
Temporarily mute test for JS target
2018-06-18 18:36:36 +03:00
Anton Bannykh
43e3314255
JS IR: Remove inline functions with reified type parameters
...
Otherwise we cannot handle type casts
2018-06-18 13:15:19 +03:00
Mikhail Zarechenskiy
c5160a6a95
Don't use methods from super interface if call was on inline class type
...
Some methods (like `size` from kotlin.collections.Collection) have
special rules for mapping and overriding. For example, when we call
`size`, normally there will be `INVOKEVIRTUAL size()` in the bytecode,
but for inline classes it should be `INVOKESTATIC ...$Erased.getSize()`
2018-06-18 12:35:31 +03:00
Roman Artemev
6ac4fd2e5f
[JS IR BE] Update test data
2018-06-14 19:54:30 +03:00
Anton Bannykh
675d02093d
mute new test + regenerate tests
2018-06-09 19:59:19 +03:00
Anton Bannykh
96355e2732
JS IR: mute codegen box tests automatically
2018-06-09 19:15:38 +03:00
Mikhail Zarechenskiy
d29f3fc3c5
Add test to check work of inline classes with callable references
2018-06-08 19:14:41 +03:00
Mikhail Zarechenskiy
cc19e4cd73
Refactoring: Move blackbox tests about unsigned types to new directory
2018-06-04 18:37:44 +03:00
Mikhail Zarechenskiy
5b5d9dd5a0
Allow unsigned integers overflow values of corresponding signed numbers
2018-06-04 18:37:40 +03:00
Mikhail Zarechenskiy
7d5fdb660d
Treat number with unsigned literal as UByte & UShort & UInt & ULong
2018-06-04 18:37:36 +03:00