Commit Graph

2169 Commits

Author SHA1 Message Date
Alexander Udalov a4eceb3e3a kotlin-compiler:1.1-20170417.154352-466
- Fix usage of new Kotlin command line arguments API
(cherry picked from commit fb8534d05d2f69902fd1add631754f7cdfb75c89)
2017-04-18 19:36:00 +03:00
Alexander Gorshenev e60754474a Preserve origin LAMBDA. The inliner seems to be looking at it. 2017-04-18 13:54:37 +03:00
Alexander Gorshenev d79875ac7c A couple of functions in stdlib are marked with @InlineExposed. 2017-04-18 13:54:37 +03:00
Alexander Gorshenev f959c4e43c a little warning cleanup 2017-04-18 13:54:37 +03:00
Alexander Gorshenev ce85975fac Slightly lighter weight when constructs. 2017-04-18 13:54:37 +03:00
Alexander Gorshenev 2ad0be6182 Substitute real rootFunction type parametrs instead of deserialized ones.
More direct acquisition of type serializer from the descriptor serializer.
2017-04-18 13:54:37 +03:00
Alexander Gorshenev 3139ae279c Don't share descriptor table between runs. 2017-04-18 13:54:37 +03:00
Alexander Gorshenev 2403f874a6 Somewaht better diagnostics. 2017-04-18 13:54:37 +03:00
Alexander Gorshenev 5654f78cae Enable deserializer phase. 2017-04-18 13:54:37 +03:00
Alexander Gorshenev 6a23af0f04 Update extension receivers on deep IR copy. 2017-04-18 13:54:37 +03:00
Alexander Gorshenev 8d2c6e4878 Separated native and jvm staticCFunction() because for native it needs not be inline now. 2017-04-18 13:54:37 +03:00
Alexander Gorshenev a434e039b2 Don't lose KonanLinkData extensions to ProtoBuf even when parsing KonanIr. 2017-04-18 13:54:37 +03:00
Alexander Gorshenev e3a253f508 Treat internal names with @PublishedApi annotation as exported. 2017-04-18 13:54:37 +03:00
Alexander Gorshenev f14716dfc0 Moved from int32 indices to message UniqId { int64 index; }. 2017-04-18 13:54:37 +03:00
Alexander Gorshenev a703647b79 Type parameters for accessors should be taken from their property. 2017-04-18 13:54:37 +03:00
Alexander Gorshenev c944ea78c1 account for the receiver in property mangling 2017-04-18 13:54:37 +03:00
Alexander Gorshenev ff27066502 Use a hash of public name as descriptor deserialization id. 2017-04-18 13:54:37 +03:00
Alexander Gorshenev 9b4a1f1569 Assume deserialization failure if we could not deserialize a KotlinType.
Various exceptions for IR deserialization.
2017-04-18 13:54:37 +03:00
Alexander Gorshenev a7b6d1e8ea invoke() with extension receiver is not present in the member scope,
so it needs to be resynthsized.
2017-04-18 13:54:37 +03:00
Konstantin Anisimov 6d1a9b2420 Print more accurate warning message 2017-04-18 15:26:13 +07:00
Konstantin Anisimov 8db33dd530 Callable reference type does not coincides with descriptor return type
Callable reference should be excluded from parameter evaluation procedure
2017-04-18 15:26:13 +07:00
Ilya Matveev 7bf9669f57 stdlib: Add clear and remove methods in AbstractMutableCollection 2017-04-18 12:48:07 +07:00
Ilya Matveev 16f3dcde8a stdlib: Uncomment linkedMapOf and linkedSetOf methods 2017-04-18 12:48:07 +07:00
Ilya Matveev 325210ae52 stdlib: Remove TODO comment in ArrayUtil.kt
We don't need to handle cases when a count of objects provided
by the iterator isn't equal to the size of the collection.
2017-04-18 12:48:07 +07:00
Ilya Matveev 321386d95e stdlib: Improve ArrayList.removeAll implementation.
This patch replaces ArrayList.removeAll implementation with a
faster one. It also adds the AbstractMutableCollection class
containing default implementations for addAll, removeAll and
retainAll methods and fixes tests to check if removeAll removes
all occurrences found or not.
2017-04-18 12:48:07 +07:00
Ilya Matveev 69a49f987c stdlib: Add first() extension for CharSequence 2017-04-18 12:48:07 +07:00
Ilya Matveev 64f1cea134 tests: Do not rely on Kotlin JVM impl in sort tests
Some sort tests had an order of equal objects in a sorted list
hardcoded. It caused failures because an approach to placing
equal objects differs in Kotlin JVM and Kotlin Native sort
implementations. With this patch we check if all objects in a list
are sorted istead of checking an exact order of them.
2017-04-18 12:48:07 +07:00
Ilya Matveev 7dd27dd16d stdlib: Provide Collection.toArray() implementation
It also modifies the test for this method to make it to not rely on
Kotlin JVM implementation.
2017-04-18 12:48:07 +07:00
Ilya Matveev 51191a5911 stdlib: Remove commented copyOf in CharArray 2017-04-18 12:48:07 +07:00
Ilya Matveev ad25d3ca7c stdlib: Return a RandomAccess object from Array.toList() and emptyList() 2017-04-18 12:48:07 +07:00
Ilya Matveev 26c227ab3e stdlib: Remove all occurrences in Collection.removeAll method 2017-04-18 12:48:07 +07:00
Ilya Matveev 6549dda5fb stdlib: Uncomment extensions with reified parameters 2017-04-18 12:48:07 +07:00
Ilya Matveev 6fc7c3495a stdlib: Add List and MutableList functions 2017-04-18 12:48:07 +07:00
Ilya Matveev 569fb7e013 stdlib: Don't suppress internal call error for mapCapacity
This patch removes @Suppress("NON_PUBLIC_CALL_FROM_PUBLIC_INLINE")
annotation from mapCapacity() calls since it is annotated with
@PublishedApi
2017-04-18 12:48:07 +07:00
Ilya Matveev 78d6611a46 stdlib: Return NaN from average() if the collection is empty 2017-04-18 12:48:07 +07:00
Ilya Matveev 286e81992a stdlib: Add missing extensions for collections 2017-04-18 12:48:07 +07:00
Svyatoslav Scherbina 20d95ae4c8 Implement methods for conversions between Long and CPointer 2017-04-17 18:02:05 +03:00
Svyatoslav Scherbina 11ecf0c179 Adjust C interop stub names to prevent some symbol name clashes
Use `pkg_kni_name` instead of `kni_pkg_name`
2017-04-17 18:02:05 +03:00
Svyatoslav Scherbina 2b98f9bce6 Use more correct paths in interop stubs generator
*   Use absolute paths to C sources and artifacts because stub generator
    changes working directory when running clang.
*   Do not change working directory when running without def file.
2017-04-17 18:02:05 +03:00
enbandari bb8f04ab87 pkgName is from interop config "pkg" and in a format of "x.y.z", so we should replace "." with "_" instead of "/". Related Issue: https://github.com/JetBrains/kotlin-native/issues/490 2017-04-17 13:42:31 +03:00
enbandari a0e0644998 Use absoluteFile to avoid parentFile of defFile being null while the defFile is something like "-def interop.def". The parent of interop.def should be a existed dir. 2017-04-17 13:42:31 +03:00
Konstantin Anisimov 0f24850f3c Descriptor return type must coincide with expression return type 2017-04-17 16:01:02 +07:00
Konstantin Anisimov 5920e0d8ba Do not create new descriptors for "call" instructions. Calls for functions declared in inlineBody will be substituted in second pass 2017-04-17 16:01:02 +07:00
Konstantin Anisimov 42955526bf Use original DeepCopyIrTree algorithm in visitCall 2017-04-17 16:01:02 +07:00
Vasily Levchenko fa86ef5399 kotlin-compiler: 1.1-20170414.151645-464 2017-04-17 06:19:05 +03:00
Vasily Levchenko 89ebbaeb6c DEBUGINFO: initial C bindings to debug info llvm
- support DICompileUnit
- support DIFIle
- support DISubroutine
- support DIBasicType
- support DILocation
- added gradle build
- debug info bindings are involved in kotlin build
- added binding to DIGetSubprogramLinkName
- added binding to LLVMBuilderGetCurrentFunction
- added reset location
- simple demo added (buildable with gradle)
  produces folowing output:
    Following pseudo code in sources.
     0:123456789012345678901
     1: fun main():Int {
     2:   {foo()}()
     3:   return 0
     4: }
     5  fun foo() {}

    0:b-backend-dwarf:minamoto@unit-703(0)# ./demo
    ; ModuleID = 'test'
    source_filename = "test"

    define i32 @foo(i32) !dbg !3 {
    entry:
      ret i32 %0, !dbg !7
    }

    !llvm.dbg.cu = !{!0}

    !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "konanc", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
    !1 = !DIFile(filename: "1.kt", directory: "src")
    !2 = !{}
    !3 = distinct !DISubprogram(name: "foo", linkageName: "foo:link", scope: null, file: !1, line: 66, type: !4, isLocal: false, isDefinition: true, isOptimized: false, unit: !0, variables: !2)
    !4 = !DISubroutineType(types: !5)
    !5 = !{!6}
    !6 = !DIBasicType(name: "int", size: 32, align: 4)
    !7 = !DILocation(line: 42, column: 15, scope: !3)
- demo sharing debug information between several bitcode artifacts
    0:b-backend-dwarf:minamoto@unit-703(0)# llvmDebugInfoC/build/exe/demogenerated/demogenerated
    ; ModuleID = 'test'
    source_filename = "test"

    define void @foo() !dbg !3 {
    entry:
      ret void, !dbg !5
    }

    define void @"main$caller$foo"() !dbg !6 {
    entry:
      call void @foo(), !dbg !7
      ret void
    }

    define void @main() !dbg !8 {
    entry:
      call void @"main$caller$foo"(), !dbg !9
      ret void, !dbg !10
    }

    !llvm.dbg.cu = !{!0}

    !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "konanc", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
    !1 = !DIFile(filename: "<stdin>", directory: "")
    !2 = !{}
    !3 = distinct !DISubprogram(name: "foo", linkageName: "foo", scope: null, file: !1, line: 5, type: !4, isLocal: false, isDefinition: true, isOptimized: false, unit: !0, variables: !2)
    !4 = !DISubroutineType(types: !2)
    !5 = !DILocation(line: 5, column: 14, scope: !3)
    !6 = distinct !DISubprogram(name: "main$caller$foo", linkageName: "main$caller$foo", scope: null, file: !1, line: 2, type: !4, isLocal: false, isDefinition: true, isOptimized: false, unit: !0, variables: !2)
    !7 = !DILocation(line: 5, column: 2, scope: !6)
    !8 = distinct !DISubprogram(name: "main", linkageName: "main", scope: null, file: !1, line: 1, type: !4, isLocal: false, isDefinition: true, isOptimized: false, unit: !0, variables: !2)
    !9 = !DILocation(line: 2, column: 12, scope: !8)
    !10 = !DILocation(line: 3, column: 4, scope: !8)
- local variables support
- demo for local variable suppor (TBD some out put here).
    ; ModuleID = 'test'
    source_filename = "test"

    define i32 @main() !dbg !3 {
    entry:
    %0 = alloca i32
    call void @llvm.dbg.declare(metadata i32* %0, metadata !5, metadata !7), !dbg !8
    store i32 42, i32* %0, !dbg !8
    %1 = load i32, i32* %0, !dbg !8
    ret i32 %1, !dbg !8
    }

    ; Function Attrs: nounwind readnone
    declare void @llvm.dbg.declare(metadata, metadata, metadata) #0

    attributes #0 = { nounwind readnone }

    !llvm.dbg.cu = !{!0}

    !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "konanc", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
    !1 = !DIFile(filename: "<stdin>", directory: "")
    !2 = !{}
    !3 = distinct !DISubprogram(name: "main", linkageName: "main", scope: null, file: !1, line: 1, type: !4, isLocal: false, isDefinition: true, isOptimized: false, unit: !0, variables: !2)
    !4 = !DISubroutineType(types: !2)
    !5 = !DILocalVariable(name: "a", scope: !3, file: !1, line: 2, type: !6)
    !6 = !DIBasicType(name: "int", size: 32, align: 4)
    !7 = !DIExpression()
    !8 = !DILocation(line: 2, column: 1, scope: !3)
2017-04-14 11:39:51 +03:00
Konstantin Anisimov 6e7eff4c03 No visitor with context needed to lookup for descriptors. Containing declaration must already be in descriptorSubstituteMap or to be left unchanged 2017-04-13 19:38:34 +07:00
Konstantin Anisimov 00a3dfc4b7 Get rid of warnings in inliner code
Fix problem with "Duplicate IR node" warning
2017-04-13 19:38:34 +07:00
Konstantin Anisimov 9830454b58 Associate copyIrElement with inlining target context 2017-04-13 19:38:34 +07:00
Konstantin Anisimov 90a43a4c62 Code refactoring 2017-04-13 19:38:34 +07:00