Commit Graph

2452 Commits

Author SHA1 Message Date
Dmitry Petrov 8ef79f932c JVM_IR: Implement some BE diagnostics
TODO proper diagnostics tests with BE diagnostics
2020-02-04 00:04:22 +03:00
Georgy Bronnikov c9df17f2f1 Handle type arguments in IrType.eraseTypeParameters 2020-02-03 19:14:22 +03:00
Dmitriy Dolovov ef199f8e45 Mark obsolete createKotlinLibrary() call as @Deprecated 2020-02-01 17:07:18 +07:00
Juan Chen 188abc243a [FIR] add vararg arguments support, improve vararg parameters support 2020-01-31 16:41:25 +03:00
pyos bda5b0d5a9 JVM_IR: further refine synthetic accessor generation
References to protected members from crossinline lambdas in the same
package do not need accessors.
2020-01-31 13:20:30 +01:00
Mikhael Bogdanov cd0c45c832 JVM_IR. Generate proper suffix for companion backing field accessor and parameter name 2020-01-31 11:39:53 +01:00
Mark Punzalan 3ee344b836 ForLoopsLowering: Fix issue with break/continue in loop over withIndex. 2020-01-31 10:37:03 +01:00
Mads Ager e8a640851a FIR: Change the Fir2Ir handling of smart casts.
Generate the expression with the original type and then insert
an implicit conversion. That matches the behavior of psi2ir
better and therefore avoids breaking backend assumptions.

In particular, IrGetValue expects the type of the underlying
symbol and the type of the IrGetValue to be the same.
2020-01-31 09:31:52 +01:00
Mads Ager d68a1898d0 JVM_IR: Use direct field access instead of calling certain accessors.
Final default properties accessors that access a backing field
on the same class can be replaced by direct field use.

Perform the optimization late in the pipeline to allow lowerings
to expose more opportunities for optimizations.
2020-01-31 09:31:52 +01:00
Steven Schäfer cf3e4608f3 JVM IR: Support -Xno-call-assertions 2020-01-30 14:43:23 +03:00
Kristoffer Andersen 61e6d346aa [JVM IR] Interface Delegation by Property should use existing field
When a property backed by a final field is the delegate for interface
implementation by delegation, the backend should reuse the backing
field rather than introduce a new, extraneous `$$delegate_n` field.
2020-01-30 14:42:24 +03:00
Mikhael Bogdanov 10900e0d90 JVM_IR. Don't copy synthetic method for property annotations if @JvmStatic presented 2020-01-30 12:31:38 +01:00
Dmitry Petrov 53f66e9509 PSI2IR: SAM conversion in varargs 2020-01-30 10:27:01 +03:00
Alexander Udalov 186a456e01 JVM IR: fix condition in Documented annotation generation 2020-01-30 00:06:03 +01:00
Alexander Udalov f4912ed433 Minor, simplify JS-related build files a bit
* remove test roots in modules which have no tests
* 1.8 is already the default JVM target in the project
* replace compilation dependency on kotlin-reflect with runtime
2020-01-29 18:03:22 +01:00
Alexander Udalov d27bb76fd0 Remove dependency of serialization.js on cli
To break up compilation dependency of JS IR/WASM backends on JVM
backend.

 #KT-35854 Fixed
2020-01-29 18:03:22 +01:00
Alexander Udalov dcf6a2199a Generate JvmOverloads methods as final
#KT-33240 Fixed
2020-01-29 18:01:57 +01:00
Alexander Udalov 953b461c53 Add new compiler errors and flags when JVM compiles against JVM IR
From now on, the old JVM backend will report an error by default when
compiling against class files produced by the JVM IR backend. This is
needed because we're not yet sure that the ABI generated by JVM IR is
fully correct and do not want to land in a 2-dimensional compatibility
situation where we'll need to consider twice more scenarios when
introducing any breaking change in the language. This is generally OK
since the JVM IR backend is still going to be experimental in 1.4.

However, for purposes of users which _do_ need to compile something with
the old backend against JVM IR, we provide two new compiler flags:
* -Xallow-jvm-ir-dependencies -- allows to suppress the error when
  compiling with the old backend against JVM IR.
* -Xir-binary-with-stable-api -- allows to mark the generated binaries
  as stable, when compiling anything with JVM IR, so that dependent
  modules will compile even with the old backend automatically. In this
  case, the author usually does not care for the generated ABI, or s/he
  ensures that it's consistent with the one expected by the old compiler
  with some external tools.

Internally, this is implemented by storing two new flags in
kotlin.Metadata: one tells if the class file was compiled with the JVM
IR, and another tells if the class file is stable (in case it's compiled
with JVM IR). Implementation is similar to the diagnostic reported by
the pre-release dependency checker.
2020-01-29 17:20:41 +01:00
Mark Punzalan e226561150 [JVM IR] Copy metadata in IrFieldBuilder.
This fixes an issue with lateinit properties where the metadata from
the original field was not copied to the nullable field in
LateinitLowering. Also consolidated related tests.
2020-01-29 17:12:16 +01:00
Mikhael Bogdanov 1ecf9d407f JVM_IR. Align order of JvmOverload functions between backends 2020-01-29 16:59:58 +01:00
Mikhael Bogdanov 17e89fbbdb JVM_IR. Align synthetic parameter name generation across backends 2020-01-29 16:59:57 +01:00
Mikhael Bogdanov c42984ca33 Generate proper flags for <clinit> 2020-01-29 16:59:56 +01:00
Mikhael Bogdanov 6c07dbf351 JVM_IR. Support type annotations 2020-01-29 16:59:55 +01:00
Dmitry Petrov bf9673a0a2 PSI2IR: SAM conversion should be performed once for index variables
Given esoteric code as in 'caoWithAdaptationForSam.kt', we should make
sure that we pass same objects to 'get' and 'set'.
2020-01-29 15:30:07 +03:00
max-kammerer f256547cc8 Revert "JVM_IR: Use direct field access instead of calling certain accessors."
This reverts commit 62f9e7a810.
2020-01-28 14:55:56 +01:00
Mads Ager 62f9e7a810 JVM_IR: Use direct field access instead of calling certain accessors.
Final default properties accessors that access a backing field
on the same class can be replaced by direct field use.

Perform the optimization late in the pipeline to allow lowerings
to expose more opportunities for optimizations.
2020-01-28 10:42:15 +01:00
Georgy Bronnikov e351d560d6 IR: remove KotlinIrLinker.checkAccessibility
This sanity check conflicted with cases where visibility test is
suppressed in the frontend.
2020-01-28 12:19:44 +03:00
Georgy Bronnikov 97abc872b2 IR: deal with corresponding classes for enum entries in JvmDescriptorUniqIdAware 2020-01-28 12:19:44 +03:00
Georgy Bronnikov f75400cc1a IR: avoid some calls of getUniqId() 2020-01-28 12:19:44 +03:00
Georgy Bronnikov f1b5198b86 Avoid calling ExternalDependenciesGenerator twice 2020-01-28 12:19:43 +03:00
Georgy Bronnikov 5ede65c525 JVM_IR: read Klib 2020-01-28 12:19:43 +03:00
Georgy Bronnikov ed4be36484 JVM_IR, minor: change package for JvmMangler 2020-01-28 12:19:43 +03:00
Dmitry Petrov 2d3a142786 Commonize 'fun interface' handling as much as possible
TODO decide something about SamType.createByValueParameter in case of
out-projected types.
2020-01-28 11:40:14 +03:00
pyos f1669e2230 IR: mark interface delegate fields as synthetic
This requires separating them origin-wise from property delegates.
2020-01-28 10:35:22 +03:00
Alexander Gorshenev 8b036ace26 Moved several more components to resolveSingleFileKlib 2020-01-27 20:21:32 +03:00
Alexander Gorshenev 7390e74bbd Initial implementation of klib components 2020-01-27 20:21:32 +03:00
Dmitry Petrov c939fb7b05 PSI2IR: Fix argument adaptation for unbound references
NB front-end "lies".
2020-01-27 17:03:48 +03:00
Dmitry Petrov 0152f19d5f PSI2IR: Use substituted value parameter in function reference adaptation 2020-01-27 17:03:48 +03:00
Mikhael Bogdanov 6e94eddb71 JVM_IR. Fix bridge generation 2020-01-27 14:53:36 +01:00
Alexander Gorshenev dfa509ec5b This reverts commits
afb2e9f38d.
    8c4fa6446d.
    f3bc533073.
    ccf084b1a5.
2020-01-27 15:30:16 +03:00
Mads Ager e327b174a2 IR: Use name \$\$delegate_n for the field for interface delegation.
Without this change, these fields could have names such as
`<no name provided>$SuperClass$delegate` for something like
`object SuperClass by I { }`.
2020-01-27 15:28:27 +03:00
Dmitry Petrov dc4d453879 PsiErrorBuilder - error reporting abstraction for JVM_IR 2020-01-27 15:17:39 +03:00
Alexander Gorshenev 8c4fa6446d Moved several more components to resolveSingleFileKlib 2020-01-27 14:24:14 +03:00
Alexander Gorshenev ccf084b1a5 Initial implementation of klib components 2020-01-27 14:24:14 +03:00
Mikhail Zarechenskiy b75ab5c832 Refactoring: SingleAbstractMethodUtils -> JavaSingleAbstractMethodUtils 2020-01-27 11:03:58 +03:00
Mikhael Bogdanov 7e85674c61 Minor. Allow IR compilation of FIR and IR.TREE module 2020-01-27 08:49:15 +01:00
Dmitry Petrov 90b250d241 PSI2IR: Fix bound inner class constructor callable reference generation 2020-01-24 16:32:07 +03:00
Dmitry Petrov c540116b71 IR: additional callable reference adapter stuff in IR
- IrFunctionReference.reflectionTarget: IrFunctionSymbol?
- add separate declaration origin for callable reference adapters
- bump IR ABI version
2020-01-24 11:21:26 +03:00
Dmitry Petrov 57bbfbbfcc PSI2IR: capture adapted reference receiver to a local val if required 2020-01-24 11:21:25 +03:00
Dmitry Petrov c5f14a29a4 PSI2IR: Generate adapted callable references
Callable reference is "adapted" if it requires some adaptation to an
expected function type - e.g., when a reference to
```
  fun foo(vararg xs: Int): Int
```
is used where `(Int, Int, Int) -> Int` is expected.

For such callable references we generate the following IR (in
pseudo-Kotlin):
```
  {
    fun foo'(p0: Int, p1: Int, p2: Int): Int {
      return [| foo(p0, p1, p2) |]
    }
    ::foo'
  }
```

where `[| foo(p0, p1, p2) |]` is calling function `foo` with arguments
`p0`, `p1`, and `p2`, as they were mapped by callable reference
resolution.
2020-01-24 11:21:25 +03:00