Improve interop enums (#341)

* Update build to Kotlin 1.1.0

* Add heuristics and options for selecting C enum interop binding style

Also do some refactoring.

* Add ':Interop:Indexer:updatePrebuilt' Gradle task

* Update Interop/Indexer/prebuilt
This commit is contained in:
SvyatoslavScherbina
2017-03-14 22:52:37 +07:00
committed by Nikolay Igotti
parent ec68a3a24e
commit 2882e6fab7
22 changed files with 630 additions and 505 deletions
+29 -3
View File
@@ -1,9 +1,6 @@
buildscript { buildscript {
repositories { repositories {
mavenCentral() mavenCentral()
maven {
url "http://dl.bintray.com/kotlin/kotlin-eap-1.1"
}
} }
dependencies { dependencies {
@@ -12,6 +9,7 @@ buildscript {
} }
apply plugin: 'kotlin' apply plugin: 'kotlin'
apply plugin: org.jetbrains.kotlin.NativeInteropPlugin
apply plugin: 'c' apply plugin: 'c'
@@ -59,3 +57,31 @@ task nativelibs(type: Copy) {
} }
classes.dependsOn nativelibs classes.dependsOn nativelibs
kotlinNativeInterop {
clang {
defFile 'clang.def'
compilerOpts "-I$llvmDir/include"
linkerOpts "-L$llvmDir/lib"
}
}
task updatePrebuilt {
dependsOn genClangInteropStubs
doLast {
copy {
from("$buildDir/nativeInteropStubs/clang/kotlin") {
include 'clang/clang.kt'
}
into 'prebuilt/nativeInteropStubs/kotlin'
}
copy {
from("$buildDir/nativelibs") {
include 'clangstubs.c'
}
into 'prebuilt/nativeInteropStubs/c'
}
}
}
+15
View File
@@ -0,0 +1,15 @@
headers = clang-c/Index.h
compiler = clang
compilerOpts = -std=c99 -fPIC
linkerOpts.linux = -Wl,-z,noexecstack
linker = clang
linkerOpts = -fPIC \
-lclang
strictEnums = CXErrorCode CXCursorKind CXTypeKind CXDiagnosticSeverity CXLoadDiag_Error CXSaveError \
CXTUResourceUsageKind CXLinkageKind CXVisibilityKind CXLanguageKind CXCallingConv CXChildVisitResult \
CXTokenKind CXEvalResultKind CXVisitorResult CXResult CXIdxEntityKind
@@ -153,27 +153,27 @@ fun nanosleep(__rqtp: CPointer<timespec>?, __rmtp: CPointer<timespec>?): Int {
} }
fun clock_getres(__clock_id: clockid_t, __res: CPointer<timespec>?): Int { fun clock_getres(__clock_id: clockid_t, __res: CPointer<timespec>?): Int {
val ___clock_id = __clock_id.value val ___clock_id = __clock_id
val ___res = __res.rawValue val ___res = __res.rawValue
val res = externals.clock_getres(___clock_id, ___res) val res = externals.clock_getres(___clock_id, ___res)
return res return res
} }
fun clock_gettime(__clock_id: clockid_t, __tp: CPointer<timespec>?): Int { fun clock_gettime(__clock_id: clockid_t, __tp: CPointer<timespec>?): Int {
val ___clock_id = __clock_id.value val ___clock_id = __clock_id
val ___tp = __tp.rawValue val ___tp = __tp.rawValue
val res = externals.clock_gettime(___clock_id, ___tp) val res = externals.clock_gettime(___clock_id, ___tp)
return res return res
} }
fun clock_gettime_nsec_np(__clock_id: clockid_t): __uint64_t { fun clock_gettime_nsec_np(__clock_id: clockid_t): __uint64_t {
val ___clock_id = __clock_id.value val ___clock_id = __clock_id
val res = externals.clock_gettime_nsec_np(___clock_id) val res = externals.clock_gettime_nsec_np(___clock_id)
return res return res
} }
fun clock_settime(__clock_id: clockid_t, __tp: CPointer<timespec>?): Int { fun clock_settime(__clock_id: clockid_t, __tp: CPointer<timespec>?): Int {
val ___clock_id = __clock_id.value val ___clock_id = __clock_id
val ___tp = __tp.rawValue val ___tp = __tp.rawValue
val res = externals.clock_settime(___clock_id, ___tp) val res = externals.clock_settime(___clock_id, ___tp)
return res return res
@@ -1338,7 +1338,7 @@ fun clang_Type_getTemplateArgumentAsType(T: CXType, i: Int, retValPlacement: Nat
fun clang_Type_getCXXRefQualifier(T: CXType): CXRefQualifierKind { fun clang_Type_getCXXRefQualifier(T: CXType): CXRefQualifierKind {
val _T = T.rawPtr val _T = T.rawPtr
val res = externals.clang_Type_getCXXRefQualifier(_T) val res = externals.clang_Type_getCXXRefQualifier(_T)
return CXRefQualifierKind.byValue(res) return res
} }
fun clang_Cursor_isBitField(C: CXCursor): Int { fun clang_Cursor_isBitField(C: CXCursor): Int {
@@ -2234,6 +2234,276 @@ fun clang_Type_visitFields(T: CXType, visitor: CXFieldVisitor?, client_data: CXC
return res return res
} }
val __llvm__: Int = 1
val __clang__: Int = 1
val __clang_major__: Int = 3
val __clang_minor__: Int = 9
val __clang_patchlevel__: Int = 0
val __GNUC_MINOR__: Int = 2
val __GNUC_PATCHLEVEL__: Int = 1
val __GNUC__: Int = 4
val __GXX_ABI_VERSION: Int = 1002
val __ATOMIC_RELAXED: Int = 0
val __ATOMIC_CONSUME: Int = 1
val __ATOMIC_ACQUIRE: Int = 2
val __ATOMIC_RELEASE: Int = 3
val __ATOMIC_ACQ_REL: Int = 4
val __ATOMIC_SEQ_CST: Int = 5
val __PRAGMA_REDEFINE_EXTNAME: Int = 1
val __STRICT_ANSI__: Int = 1
val __CONSTANT_CFSTRINGS__: Int = 1
val __BLOCKS__: Int = 1
val __ORDER_LITTLE_ENDIAN__: Int = 1234
val __ORDER_BIG_ENDIAN__: Int = 4321
val __ORDER_PDP_ENDIAN__: Int = 3412
val __BYTE_ORDER__: Int = 1234
val __LITTLE_ENDIAN__: Int = 1
val _LP64: Int = 1
val __LP64__: Int = 1
val __CHAR_BIT__: Int = 8
val __SCHAR_MAX__: Int = 127
val __SHRT_MAX__: Int = 32767
val __INT_MAX__: Int = 2147483647
val __LONG_MAX__: Long = 9223372036854775807
val __LONG_LONG_MAX__: Long = 9223372036854775807
val __WCHAR_MAX__: Int = 2147483647
val __INTMAX_MAX__: Long = 9223372036854775807
val __SIZE_MAX__: Long = -1
val __UINTMAX_MAX__: Long = -1
val __PTRDIFF_MAX__: Long = 9223372036854775807
val __INTPTR_MAX__: Long = 9223372036854775807
val __UINTPTR_MAX__: Long = -1
val __SIZEOF_DOUBLE__: Int = 8
val __SIZEOF_FLOAT__: Int = 4
val __SIZEOF_INT__: Int = 4
val __SIZEOF_LONG__: Int = 8
val __SIZEOF_LONG_DOUBLE__: Int = 16
val __SIZEOF_LONG_LONG__: Int = 8
val __SIZEOF_POINTER__: Int = 8
val __SIZEOF_SHORT__: Int = 2
val __SIZEOF_PTRDIFF_T__: Int = 8
val __SIZEOF_SIZE_T__: Int = 8
val __SIZEOF_WCHAR_T__: Int = 4
val __SIZEOF_WINT_T__: Int = 4
val __SIZEOF_INT128__: Int = 16
val __INTMAX_WIDTH__: Int = 64
val __PTRDIFF_WIDTH__: Int = 64
val __INTPTR_WIDTH__: Int = 64
val __SIZE_WIDTH__: Int = 64
val __WCHAR_WIDTH__: Int = 32
val __WINT_WIDTH__: Int = 32
val __SIG_ATOMIC_WIDTH__: Int = 32
val __SIG_ATOMIC_MAX__: Int = 2147483647
val __UINTMAX_WIDTH__: Int = 64
val __UINTPTR_WIDTH__: Int = 64
val __FLT_DENORM_MIN__: Float = bitsToFloat(1) /* == 1.4E-45 */
val __FLT_HAS_DENORM__: Int = 1
val __FLT_DIG__: Int = 6
val __FLT_DECIMAL_DIG__: Int = 9
val __FLT_EPSILON__: Float = bitsToFloat(872415232) /* == 1.1920929E-7 */
val __FLT_HAS_INFINITY__: Int = 1
val __FLT_HAS_QUIET_NAN__: Int = 1
val __FLT_MANT_DIG__: Int = 24
val __FLT_MAX_10_EXP__: Int = 38
val __FLT_MAX_EXP__: Int = 128
val __FLT_MAX__: Float = bitsToFloat(2139095039) /* == 3.4028235E38 */
val __FLT_MIN_10_EXP__: Int = -37
val __FLT_MIN_EXP__: Int = -125
val __FLT_MIN__: Float = bitsToFloat(8388608) /* == 1.17549435E-38 */
val __DBL_DENORM_MIN__: Double = bitsToDouble(1) /* == 4.9E-324 */
val __DBL_HAS_DENORM__: Int = 1
val __DBL_DIG__: Int = 15
val __DBL_DECIMAL_DIG__: Int = 17
val __DBL_EPSILON__: Double = bitsToDouble(4372995238176751616) /* == 2.220446049250313E-16 */
val __DBL_HAS_INFINITY__: Int = 1
val __DBL_HAS_QUIET_NAN__: Int = 1
val __DBL_MANT_DIG__: Int = 53
val __DBL_MAX_10_EXP__: Int = 308
val __DBL_MAX_EXP__: Int = 1024
val __DBL_MAX__: Double = bitsToDouble(9218868437227405311) /* == 1.7976931348623157E308 */
val __DBL_MIN_10_EXP__: Int = -307
val __DBL_MIN_EXP__: Int = -1021
val __DBL_MIN__: Double = bitsToDouble(4503599627370496) /* == 2.2250738585072014E-308 */
val __LDBL_HAS_DENORM__: Int = 1
val __LDBL_DIG__: Int = 18
val __LDBL_DECIMAL_DIG__: Int = 21
val __LDBL_HAS_INFINITY__: Int = 1
val __LDBL_HAS_QUIET_NAN__: Int = 1
val __LDBL_MANT_DIG__: Int = 64
val __LDBL_MAX_10_EXP__: Int = 4932
val __LDBL_MAX_EXP__: Int = 16384
val __LDBL_MIN_10_EXP__: Int = -4931
val __LDBL_MIN_EXP__: Int = -16381
val __POINTER_WIDTH__: Int = 64
val __BIGGEST_ALIGNMENT__: Int = 16
val __UINT8_MAX__: Int = 255
val __INT8_MAX__: Int = 127
val __UINT16_MAX__: Int = 65535
val __INT16_MAX__: Int = 32767
val __UINT32_MAX__: Int = -1
val __INT32_MAX__: Int = 2147483647
val __UINT64_MAX__: Long = -1
val __INT64_MAX__: Long = 9223372036854775807
val __INT_LEAST8_MAX__: Int = 127
val __UINT_LEAST8_MAX__: Int = 255
val __INT_LEAST16_MAX__: Int = 32767
val __UINT_LEAST16_MAX__: Int = 65535
val __INT_LEAST32_MAX__: Int = 2147483647
val __UINT_LEAST32_MAX__: Int = -1
val __INT_LEAST64_MAX__: Long = 9223372036854775807
val __UINT_LEAST64_MAX__: Long = -1
val __INT_FAST8_MAX__: Int = 127
val __UINT_FAST8_MAX__: Int = 255
val __INT_FAST16_MAX__: Int = 32767
val __UINT_FAST16_MAX__: Int = 65535
val __INT_FAST32_MAX__: Int = 2147483647
val __UINT_FAST32_MAX__: Int = -1
val __INT_FAST64_MAX__: Long = 9223372036854775807
val __UINT_FAST64_MAX__: Long = -1
val __FINITE_MATH_ONLY__: Int = 0
val __GNUC_STDC_INLINE__: Int = 1
val __GCC_ATOMIC_TEST_AND_SET_TRUEVAL: Int = 1
val __GCC_ATOMIC_BOOL_LOCK_FREE: Int = 2
val __GCC_ATOMIC_CHAR_LOCK_FREE: Int = 2
val __GCC_ATOMIC_CHAR16_T_LOCK_FREE: Int = 2
val __GCC_ATOMIC_CHAR32_T_LOCK_FREE: Int = 2
val __GCC_ATOMIC_WCHAR_T_LOCK_FREE: Int = 2
val __GCC_ATOMIC_SHORT_LOCK_FREE: Int = 2
val __GCC_ATOMIC_INT_LOCK_FREE: Int = 2
val __GCC_ATOMIC_LONG_LOCK_FREE: Int = 2
val __GCC_ATOMIC_LLONG_LOCK_FREE: Int = 2
val __GCC_ATOMIC_POINTER_LOCK_FREE: Int = 2
val __NO_INLINE__: Int = 1
val __PIC__: Int = 2
val __pic__: Int = 2
val __FLT_EVAL_METHOD__: Int = 0
val __FLT_RADIX__: Int = 2
val __DECIMAL_DIG__: Int = 21
val __SSP__: Int = 1
val __amd64__: Int = 1
val __amd64: Int = 1
val __x86_64: Int = 1
val __x86_64__: Int = 1
val __core2: Int = 1
val __core2__: Int = 1
val __tune_core2__: Int = 1
val __NO_MATH_INLINES: Int = 1
val __FXSR__: Int = 1
val __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16: Int = 1
val __SSSE3__: Int = 1
val __SSE3__: Int = 1
val __SSE2__: Int = 1
val __SSE2_MATH__: Int = 1
val __SSE__: Int = 1
val __SSE_MATH__: Int = 1
val __MMX__: Int = 1
val __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1: Int = 1
val __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2: Int = 1
val __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4: Int = 1
val __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8: Int = 1
val __APPLE_CC__: Int = 6000
val __APPLE__: Int = 1
val OBJC_NEW_PROPERTIES: Int = 1
val __DYNAMIC__: Int = 1
val __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__: Int = 101000
val __MACH__: Int = 1
val __STDC__: Int = 1
val __STDC_HOSTED__: Int = 1
val __STDC_VERSION__: Long = 199901
val __STDC_UTF_16__: Int = 1
val __STDC_UTF_32__: Int = 1
val __DARWIN_ONLY_64_BIT_INO_T: Int = 0
val __DARWIN_ONLY_VERS_1050: Int = 0
val __DARWIN_ONLY_UNIX_CONFORMANCE: Int = 1
val __DARWIN_UNIX03: Int = 1
val __DARWIN_64_BIT_INO_T: Int = 1
val __DARWIN_VERS_1050: Int = 1
val __DARWIN_NON_CANCELABLE: Int = 0
val __DARWIN_C_ANSI: Long = 4096
val __DARWIN_C_FULL: Long = 900000
val __DARWIN_C_LEVEL: Long = 900000
val _DARWIN_FEATURE_64_BIT_INODE: Int = 1
val _DARWIN_FEATURE_ONLY_UNIX_CONFORMANCE: Int = 1
val _DARWIN_FEATURE_UNIX_CONFORMANCE: Int = 3
val __PTHREAD_SIZE__: Int = 8176
val __PTHREAD_ATTR_SIZE__: Int = 56
val __PTHREAD_MUTEXATTR_SIZE__: Int = 8
val __PTHREAD_MUTEX_SIZE__: Int = 56
val __PTHREAD_CONDATTR_SIZE__: Int = 8
val __PTHREAD_COND_SIZE__: Int = 40
val __PTHREAD_ONCE_SIZE__: Int = 8
val __PTHREAD_RWLOCK_SIZE__: Int = 192
val __PTHREAD_RWLOCKATTR_SIZE__: Int = 16
val __DARWIN_WCHAR_MAX: Int = 2147483647
val __DARWIN_WCHAR_MIN: Int = -2147483648
val __DARWIN_WEOF: __darwin_wint_t = -1
val _FORTIFY_SOURCE: Int = 2
val __MAC_10_0: Int = 1000
val __MAC_10_1: Int = 1010
val __MAC_10_2: Int = 1020
val __MAC_10_3: Int = 1030
val __MAC_10_4: Int = 1040
val __MAC_10_5: Int = 1050
val __MAC_10_6: Int = 1060
val __MAC_10_7: Int = 1070
val __MAC_10_8: Int = 1080
val __MAC_10_9: Int = 1090
val __MAC_10_10: Int = 101000
val __MAC_10_10_2: Int = 101002
val __MAC_10_10_3: Int = 101003
val __MAC_10_11: Int = 101100
val __MAC_10_11_2: Int = 101102
val __MAC_10_11_3: Int = 101103
val __MAC_10_11_4: Int = 101104
val __MAC_10_12: Int = 101200
val __IPHONE_2_0: Int = 20000
val __IPHONE_2_1: Int = 20100
val __IPHONE_2_2: Int = 20200
val __IPHONE_3_0: Int = 30000
val __IPHONE_3_1: Int = 30100
val __IPHONE_3_2: Int = 30200
val __IPHONE_4_0: Int = 40000
val __IPHONE_4_1: Int = 40100
val __IPHONE_4_2: Int = 40200
val __IPHONE_4_3: Int = 40300
val __IPHONE_5_0: Int = 50000
val __IPHONE_5_1: Int = 50100
val __IPHONE_6_0: Int = 60000
val __IPHONE_6_1: Int = 60100
val __IPHONE_7_0: Int = 70000
val __IPHONE_7_1: Int = 70100
val __IPHONE_8_0: Int = 80000
val __IPHONE_8_1: Int = 80100
val __IPHONE_8_2: Int = 80200
val __IPHONE_8_3: Int = 80300
val __IPHONE_8_4: Int = 80400
val __IPHONE_9_0: Int = 90000
val __IPHONE_9_1: Int = 90100
val __IPHONE_9_2: Int = 90200
val __IPHONE_9_3: Int = 90300
val __IPHONE_10_0: Int = 100000
val __TVOS_9_0: Int = 90000
val __TVOS_9_1: Int = 90100
val __TVOS_9_2: Int = 90200
val __TVOS_10_0: Int = 100000
val __WATCHOS_1_0: Int = 10000
val __WATCHOS_2_0: Int = 20000
val __WATCHOS_3_0: Int = 30000
val __MAC_OS_X_VERSION_MIN_REQUIRED: Int = 101000
val __MAC_OS_X_VERSION_MAX_ALLOWED: Int = 101200
val CLOCKS_PER_SEC: Int = 1000000
val CLOCK_REALTIME: Int = 0
val CLOCK_MONOTONIC: Int = 6
val CLOCK_MONOTONIC_RAW: Int = 4
val CLOCK_MONOTONIC_RAW_APPROX: Int = 5
val CLOCK_UPTIME_RAW: Int = 8
val CLOCK_UPTIME_RAW_APPROX: Int = 9
val CLOCK_PROCESS_CPUTIME_ID: Int = 12
val CLOCK_THREAD_CPUTIME_ID: Int = 16
val CINDEX_VERSION_MAJOR: Int = 0
val CINDEX_VERSION_MINOR: Int = 35
val CINDEX_VERSION: Int = 35
class __mbstate_t(override val rawPtr: NativePtr) : CStructVar() { class __mbstate_t(override val rawPtr: NativePtr) : CStructVar() {
companion object : Type(128, 8) companion object : Type(128, 8)
@@ -2717,7 +2987,7 @@ class CXIdxAttrInfo(override val rawPtr: NativePtr) : CStructVar() {
companion object : Type(64, 8) companion object : Type(64, 8)
val kind: CXIdxAttrKind.Var val kind: CXIdxAttrKindVar
get() = memberAt(0) get() = memberAt(0)
val cursor: CXCursor val cursor: CXCursor
@@ -2735,10 +3005,10 @@ class CXIdxEntityInfo(override val rawPtr: NativePtr) : CStructVar() {
val kind: CXIdxEntityKind.Var val kind: CXIdxEntityKind.Var
get() = memberAt(0) get() = memberAt(0)
val templateKind: CXIdxEntityCXXTemplateKind.Var val templateKind: CXIdxEntityCXXTemplateKindVar
get() = memberAt(4) get() = memberAt(4)
val lang: CXIdxEntityLanguage.Var val lang: CXIdxEntityLanguageVar
get() = memberAt(8) get() = memberAt(8)
val name: CPointerVar<CInt8Var> val name: CPointerVar<CInt8Var>
@@ -2837,7 +3107,7 @@ class CXIdxObjCContainerDeclInfo(override val rawPtr: NativePtr) : CStructVar()
val declInfo: CPointerVar<CXIdxDeclInfo> val declInfo: CPointerVar<CXIdxDeclInfo>
get() = memberAt(0) get() = memberAt(0)
val kind: CXIdxObjCContainerKind.Var val kind: CXIdxObjCContainerKindVar
get() = memberAt(8) get() = memberAt(8)
} }
@@ -2954,7 +3224,7 @@ class CXIdxEntityRefInfo(override val rawPtr: NativePtr) : CStructVar() {
companion object : Type(88, 8) companion object : Type(88, 8)
val kind: CXIdxEntityRefKind.Var val kind: CXIdxEntityRefKindVar
get() = memberAt(0) get() = memberAt(0)
val cursor: CXCursor val cursor: CXCursor
@@ -3004,28 +3274,17 @@ class IndexerCallbacks(override val rawPtr: NativePtr) : CStructVar() {
} }
enum class clockid_t(val value: Int) { typealias clockid_tVar = CInt32VarWithValueMappedTo<clockid_t>
_CLOCK_REALTIME(0), typealias clockid_t = Int
_CLOCK_MONOTONIC(6),
_CLOCK_MONOTONIC_RAW(4),
_CLOCK_MONOTONIC_RAW_APPROX(5),
_CLOCK_UPTIME_RAW(8),
_CLOCK_UPTIME_RAW_APPROX(9),
_CLOCK_PROCESS_CPUTIME_ID(12),
_CLOCK_THREAD_CPUTIME_ID(16),
;
companion object { val _CLOCK_REALTIME: clockid_t = 0
fun byValue(value: Int) = clockid_t.values().find { it.value == value }!! val _CLOCK_MONOTONIC: clockid_t = 6
} val _CLOCK_MONOTONIC_RAW: clockid_t = 4
val _CLOCK_MONOTONIC_RAW_APPROX: clockid_t = 5
class Var(override val rawPtr: NativePtr) : CEnumVar() { val _CLOCK_UPTIME_RAW: clockid_t = 8
companion object : Type(CInt32Var.size.toInt()) val _CLOCK_UPTIME_RAW_APPROX: clockid_t = 9
var value: clockid_t val _CLOCK_PROCESS_CPUTIME_ID: clockid_t = 12
get() = byValue(this.reinterpret<CInt32Var>().value) val _CLOCK_THREAD_CPUTIME_ID: clockid_t = 16
set(value) { this.reinterpret<CInt32Var>().value = value.value }
}
}
enum class CXErrorCode(val value: Int) { enum class CXErrorCode(val value: Int) {
CXError_Success(0), CXError_Success(0),
@@ -3066,24 +3325,13 @@ enum class CXAvailabilityKind(val value: Int) {
} }
} }
enum class CXGlobalOptFlags(val value: Int) { typealias CXGlobalOptFlagsVar = CInt32VarWithValueMappedTo<CXGlobalOptFlags>
CXGlobalOpt_None(0), typealias CXGlobalOptFlags = Int
CXGlobalOpt_ThreadBackgroundPriorityForIndexing(1),
CXGlobalOpt_ThreadBackgroundPriorityForEditing(2),
CXGlobalOpt_ThreadBackgroundPriorityForAll(3),
;
companion object { val CXGlobalOpt_None: CXGlobalOptFlags = 0
fun byValue(value: Int) = CXGlobalOptFlags.values().find { it.value == value }!! val CXGlobalOpt_ThreadBackgroundPriorityForIndexing: CXGlobalOptFlags = 1
} val CXGlobalOpt_ThreadBackgroundPriorityForEditing: CXGlobalOptFlags = 2
val CXGlobalOpt_ThreadBackgroundPriorityForAll: CXGlobalOptFlags = 3
class Var(override val rawPtr: NativePtr) : CEnumVar() {
companion object : Type(CInt32Var.size.toInt())
var value: CXGlobalOptFlags
get() = byValue(this.reinterpret<CInt32Var>().value)
set(value) { this.reinterpret<CInt32Var>().value = value.value }
}
}
enum class CXDiagnosticSeverity(val value: Int) { enum class CXDiagnosticSeverity(val value: Int) {
CXDiagnostic_Ignored(0), CXDiagnostic_Ignored(0),
@@ -3124,68 +3372,35 @@ enum class CXLoadDiag_Error(val value: Int) {
} }
} }
enum class CXDiagnosticDisplayOptions(val value: Int) { typealias CXDiagnosticDisplayOptionsVar = CInt32VarWithValueMappedTo<CXDiagnosticDisplayOptions>
CXDiagnostic_DisplaySourceLocation(1), typealias CXDiagnosticDisplayOptions = Int
CXDiagnostic_DisplayColumn(2),
CXDiagnostic_DisplaySourceRanges(4),
CXDiagnostic_DisplayOption(8),
CXDiagnostic_DisplayCategoryId(16),
CXDiagnostic_DisplayCategoryName(32),
;
companion object { val CXDiagnostic_DisplaySourceLocation: CXDiagnosticDisplayOptions = 1
fun byValue(value: Int) = CXDiagnosticDisplayOptions.values().find { it.value == value }!! val CXDiagnostic_DisplayColumn: CXDiagnosticDisplayOptions = 2
} val CXDiagnostic_DisplaySourceRanges: CXDiagnosticDisplayOptions = 4
val CXDiagnostic_DisplayOption: CXDiagnosticDisplayOptions = 8
val CXDiagnostic_DisplayCategoryId: CXDiagnosticDisplayOptions = 16
val CXDiagnostic_DisplayCategoryName: CXDiagnosticDisplayOptions = 32
class Var(override val rawPtr: NativePtr) : CEnumVar() { typealias CXTranslationUnit_FlagsVar = CInt32VarWithValueMappedTo<CXTranslationUnit_Flags>
companion object : Type(CInt32Var.size.toInt()) typealias CXTranslationUnit_Flags = Int
var value: CXDiagnosticDisplayOptions
get() = byValue(this.reinterpret<CInt32Var>().value)
set(value) { this.reinterpret<CInt32Var>().value = value.value }
}
}
enum class CXTranslationUnit_Flags(val value: Int) { val CXTranslationUnit_None: CXTranslationUnit_Flags = 0
CXTranslationUnit_None(0), val CXTranslationUnit_DetailedPreprocessingRecord: CXTranslationUnit_Flags = 1
CXTranslationUnit_DetailedPreprocessingRecord(1), val CXTranslationUnit_Incomplete: CXTranslationUnit_Flags = 2
CXTranslationUnit_Incomplete(2), val CXTranslationUnit_PrecompiledPreamble: CXTranslationUnit_Flags = 4
CXTranslationUnit_PrecompiledPreamble(4), val CXTranslationUnit_CacheCompletionResults: CXTranslationUnit_Flags = 8
CXTranslationUnit_CacheCompletionResults(8), val CXTranslationUnit_ForSerialization: CXTranslationUnit_Flags = 16
CXTranslationUnit_ForSerialization(16), val CXTranslationUnit_CXXChainedPCH: CXTranslationUnit_Flags = 32
CXTranslationUnit_CXXChainedPCH(32), val CXTranslationUnit_SkipFunctionBodies: CXTranslationUnit_Flags = 64
CXTranslationUnit_SkipFunctionBodies(64), val CXTranslationUnit_IncludeBriefCommentsInCodeCompletion: CXTranslationUnit_Flags = 128
CXTranslationUnit_IncludeBriefCommentsInCodeCompletion(128), val CXTranslationUnit_CreatePreambleOnFirstParse: CXTranslationUnit_Flags = 256
CXTranslationUnit_CreatePreambleOnFirstParse(256), val CXTranslationUnit_KeepGoing: CXTranslationUnit_Flags = 512
CXTranslationUnit_KeepGoing(512),
;
companion object { typealias CXSaveTranslationUnit_FlagsVar = CInt32VarWithValueMappedTo<CXSaveTranslationUnit_Flags>
fun byValue(value: Int) = CXTranslationUnit_Flags.values().find { it.value == value }!! typealias CXSaveTranslationUnit_Flags = Int
}
class Var(override val rawPtr: NativePtr) : CEnumVar() { val CXSaveTranslationUnit_None: CXSaveTranslationUnit_Flags = 0
companion object : Type(CInt32Var.size.toInt())
var value: CXTranslationUnit_Flags
get() = byValue(this.reinterpret<CInt32Var>().value)
set(value) { this.reinterpret<CInt32Var>().value = value.value }
}
}
enum class CXSaveTranslationUnit_Flags(val value: Int) {
CXSaveTranslationUnit_None(0),
;
companion object {
fun byValue(value: Int) = CXSaveTranslationUnit_Flags.values().find { it.value == value }!!
}
class Var(override val rawPtr: NativePtr) : CEnumVar() {
companion object : Type(CInt32Var.size.toInt())
var value: CXSaveTranslationUnit_Flags
get() = byValue(this.reinterpret<CInt32Var>().value)
set(value) { this.reinterpret<CInt32Var>().value = value.value }
}
}
enum class CXSaveError(val value: Int) { enum class CXSaveError(val value: Int) {
CXSaveError_None(0), CXSaveError_None(0),
@@ -3206,21 +3421,10 @@ enum class CXSaveError(val value: Int) {
} }
} }
enum class CXReparse_Flags(val value: Int) { typealias CXReparse_FlagsVar = CInt32VarWithValueMappedTo<CXReparse_Flags>
CXReparse_None(0), typealias CXReparse_Flags = Int
;
companion object { val CXReparse_None: CXReparse_Flags = 0
fun byValue(value: Int) = CXReparse_Flags.values().find { it.value == value }!!
}
class Var(override val rawPtr: NativePtr) : CEnumVar() {
companion object : Type(CInt32Var.size.toInt())
var value: CXReparse_Flags
get() = byValue(this.reinterpret<CInt32Var>().value)
set(value) { this.reinterpret<CInt32Var>().value = value.value }
}
}
enum class CXTUResourceUsageKind(val value: Int) { enum class CXTUResourceUsageKind(val value: Int) {
CXTUResourceUsage_AST(1), CXTUResourceUsage_AST(1),
@@ -3673,43 +3877,21 @@ enum class CXTemplateArgumentKind(val value: Int) {
} }
} }
enum class CXTypeLayoutError(val value: Int) { typealias CXTypeLayoutErrorVar = CInt32VarWithValueMappedTo<CXTypeLayoutError>
CXTypeLayoutError_Invalid(-1), typealias CXTypeLayoutError = Int
CXTypeLayoutError_Incomplete(-2),
CXTypeLayoutError_Dependent(-3),
CXTypeLayoutError_NotConstantSize(-4),
CXTypeLayoutError_InvalidFieldName(-5),
;
companion object { val CXTypeLayoutError_Invalid: CXTypeLayoutError = -1
fun byValue(value: Int) = CXTypeLayoutError.values().find { it.value == value }!! val CXTypeLayoutError_Incomplete: CXTypeLayoutError = -2
} val CXTypeLayoutError_Dependent: CXTypeLayoutError = -3
val CXTypeLayoutError_NotConstantSize: CXTypeLayoutError = -4
val CXTypeLayoutError_InvalidFieldName: CXTypeLayoutError = -5
class Var(override val rawPtr: NativePtr) : CEnumVar() { typealias CXRefQualifierKindVar = CInt32VarWithValueMappedTo<CXRefQualifierKind>
companion object : Type(CInt32Var.size.toInt()) typealias CXRefQualifierKind = Int
var value: CXTypeLayoutError
get() = byValue(this.reinterpret<CInt32Var>().value)
set(value) { this.reinterpret<CInt32Var>().value = value.value }
}
}
enum class CXRefQualifierKind(val value: Int) { val CXRefQualifier_None: CXRefQualifierKind = 0
CXRefQualifier_None(0), val CXRefQualifier_LValue: CXRefQualifierKind = 1
CXRefQualifier_LValue(1), val CXRefQualifier_RValue: CXRefQualifierKind = 2
CXRefQualifier_RValue(2),
;
companion object {
fun byValue(value: Int) = CXRefQualifierKind.values().find { it.value == value }!!
}
class Var(override val rawPtr: NativePtr) : CEnumVar() {
companion object : Type(CInt32Var.size.toInt())
var value: CXRefQualifierKind
get() = byValue(this.reinterpret<CInt32Var>().value)
set(value) { this.reinterpret<CInt32Var>().value = value.value }
}
}
enum class CX_CXXAccessSpecifier(val value: Int) { enum class CX_CXXAccessSpecifier(val value: Int) {
CX_CXXInvalidAccessSpecifier(0), CX_CXXInvalidAccessSpecifier(0),
@@ -3771,74 +3953,41 @@ enum class CXChildVisitResult(val value: Int) {
} }
} }
enum class CXObjCPropertyAttrKind(val value: Int) { typealias CXObjCPropertyAttrKindVar = CInt32VarWithValueMappedTo<CXObjCPropertyAttrKind>
CXObjCPropertyAttr_noattr(0), typealias CXObjCPropertyAttrKind = Int
CXObjCPropertyAttr_readonly(1),
CXObjCPropertyAttr_getter(2),
CXObjCPropertyAttr_assign(4),
CXObjCPropertyAttr_readwrite(8),
CXObjCPropertyAttr_retain(16),
CXObjCPropertyAttr_copy(32),
CXObjCPropertyAttr_nonatomic(64),
CXObjCPropertyAttr_setter(128),
CXObjCPropertyAttr_atomic(256),
CXObjCPropertyAttr_weak(512),
CXObjCPropertyAttr_strong(1024),
CXObjCPropertyAttr_unsafe_unretained(2048),
CXObjCPropertyAttr_class(4096),
;
companion object { val CXObjCPropertyAttr_noattr: CXObjCPropertyAttrKind = 0
fun byValue(value: Int) = CXObjCPropertyAttrKind.values().find { it.value == value }!! val CXObjCPropertyAttr_readonly: CXObjCPropertyAttrKind = 1
} val CXObjCPropertyAttr_getter: CXObjCPropertyAttrKind = 2
val CXObjCPropertyAttr_assign: CXObjCPropertyAttrKind = 4
val CXObjCPropertyAttr_readwrite: CXObjCPropertyAttrKind = 8
val CXObjCPropertyAttr_retain: CXObjCPropertyAttrKind = 16
val CXObjCPropertyAttr_copy: CXObjCPropertyAttrKind = 32
val CXObjCPropertyAttr_nonatomic: CXObjCPropertyAttrKind = 64
val CXObjCPropertyAttr_setter: CXObjCPropertyAttrKind = 128
val CXObjCPropertyAttr_atomic: CXObjCPropertyAttrKind = 256
val CXObjCPropertyAttr_weak: CXObjCPropertyAttrKind = 512
val CXObjCPropertyAttr_strong: CXObjCPropertyAttrKind = 1024
val CXObjCPropertyAttr_unsafe_unretained: CXObjCPropertyAttrKind = 2048
val CXObjCPropertyAttr_class: CXObjCPropertyAttrKind = 4096
class Var(override val rawPtr: NativePtr) : CEnumVar() { typealias CXObjCDeclQualifierKindVar = CInt32VarWithValueMappedTo<CXObjCDeclQualifierKind>
companion object : Type(CInt32Var.size.toInt()) typealias CXObjCDeclQualifierKind = Int
var value: CXObjCPropertyAttrKind
get() = byValue(this.reinterpret<CInt32Var>().value)
set(value) { this.reinterpret<CInt32Var>().value = value.value }
}
}
enum class CXObjCDeclQualifierKind(val value: Int) { val CXObjCDeclQualifier_None: CXObjCDeclQualifierKind = 0
CXObjCDeclQualifier_None(0), val CXObjCDeclQualifier_In: CXObjCDeclQualifierKind = 1
CXObjCDeclQualifier_In(1), val CXObjCDeclQualifier_Inout: CXObjCDeclQualifierKind = 2
CXObjCDeclQualifier_Inout(2), val CXObjCDeclQualifier_Out: CXObjCDeclQualifierKind = 4
CXObjCDeclQualifier_Out(4), val CXObjCDeclQualifier_Bycopy: CXObjCDeclQualifierKind = 8
CXObjCDeclQualifier_Bycopy(8), val CXObjCDeclQualifier_Byref: CXObjCDeclQualifierKind = 16
CXObjCDeclQualifier_Byref(16), val CXObjCDeclQualifier_Oneway: CXObjCDeclQualifierKind = 32
CXObjCDeclQualifier_Oneway(32),
;
companion object { typealias CXNameRefFlagsVar = CInt32VarWithValueMappedTo<CXNameRefFlags>
fun byValue(value: Int) = CXObjCDeclQualifierKind.values().find { it.value == value }!! typealias CXNameRefFlags = Int
}
class Var(override val rawPtr: NativePtr) : CEnumVar() { val CXNameRange_WantQualifier: CXNameRefFlags = 1
companion object : Type(CInt32Var.size.toInt()) val CXNameRange_WantTemplateArgs: CXNameRefFlags = 2
var value: CXObjCDeclQualifierKind val CXNameRange_WantSinglePiece: CXNameRefFlags = 4
get() = byValue(this.reinterpret<CInt32Var>().value)
set(value) { this.reinterpret<CInt32Var>().value = value.value }
}
}
enum class CXNameRefFlags(val value: Int) {
CXNameRange_WantQualifier(1),
CXNameRange_WantTemplateArgs(2),
CXNameRange_WantSinglePiece(4),
;
companion object {
fun byValue(value: Int) = CXNameRefFlags.values().find { it.value == value }!!
}
class Var(override val rawPtr: NativePtr) : CEnumVar() {
companion object : Type(CInt32Var.size.toInt())
var value: CXNameRefFlags
get() = byValue(this.reinterpret<CInt32Var>().value)
set(value) { this.reinterpret<CInt32Var>().value = value.value }
}
}
enum class CXTokenKind(val value: Int) { enum class CXTokenKind(val value: Int) {
CXToken_Punctuation(0), CXToken_Punctuation(0),
@@ -3896,62 +4045,40 @@ enum class CXCompletionChunkKind(val value: Int) {
} }
} }
enum class CXCodeComplete_Flags(val value: Int) { typealias CXCodeComplete_FlagsVar = CInt32VarWithValueMappedTo<CXCodeComplete_Flags>
CXCodeComplete_IncludeMacros(1), typealias CXCodeComplete_Flags = Int
CXCodeComplete_IncludeCodePatterns(2),
CXCodeComplete_IncludeBriefComments(4),
;
companion object { val CXCodeComplete_IncludeMacros: CXCodeComplete_Flags = 1
fun byValue(value: Int) = CXCodeComplete_Flags.values().find { it.value == value }!! val CXCodeComplete_IncludeCodePatterns: CXCodeComplete_Flags = 2
} val CXCodeComplete_IncludeBriefComments: CXCodeComplete_Flags = 4
class Var(override val rawPtr: NativePtr) : CEnumVar() { typealias CXCompletionContextVar = CInt32VarWithValueMappedTo<CXCompletionContext>
companion object : Type(CInt32Var.size.toInt()) typealias CXCompletionContext = Int
var value: CXCodeComplete_Flags
get() = byValue(this.reinterpret<CInt32Var>().value)
set(value) { this.reinterpret<CInt32Var>().value = value.value }
}
}
enum class CXCompletionContext(val value: Int) { val CXCompletionContext_Unexposed: CXCompletionContext = 0
CXCompletionContext_Unexposed(0), val CXCompletionContext_AnyType: CXCompletionContext = 1
CXCompletionContext_AnyType(1), val CXCompletionContext_AnyValue: CXCompletionContext = 2
CXCompletionContext_AnyValue(2), val CXCompletionContext_ObjCObjectValue: CXCompletionContext = 4
CXCompletionContext_ObjCObjectValue(4), val CXCompletionContext_ObjCSelectorValue: CXCompletionContext = 8
CXCompletionContext_ObjCSelectorValue(8), val CXCompletionContext_CXXClassTypeValue: CXCompletionContext = 16
CXCompletionContext_CXXClassTypeValue(16), val CXCompletionContext_DotMemberAccess: CXCompletionContext = 32
CXCompletionContext_DotMemberAccess(32), val CXCompletionContext_ArrowMemberAccess: CXCompletionContext = 64
CXCompletionContext_ArrowMemberAccess(64), val CXCompletionContext_ObjCPropertyAccess: CXCompletionContext = 128
CXCompletionContext_ObjCPropertyAccess(128), val CXCompletionContext_EnumTag: CXCompletionContext = 256
CXCompletionContext_EnumTag(256), val CXCompletionContext_UnionTag: CXCompletionContext = 512
CXCompletionContext_UnionTag(512), val CXCompletionContext_StructTag: CXCompletionContext = 1024
CXCompletionContext_StructTag(1024), val CXCompletionContext_ClassTag: CXCompletionContext = 2048
CXCompletionContext_ClassTag(2048), val CXCompletionContext_Namespace: CXCompletionContext = 4096
CXCompletionContext_Namespace(4096), val CXCompletionContext_NestedNameSpecifier: CXCompletionContext = 8192
CXCompletionContext_NestedNameSpecifier(8192), val CXCompletionContext_ObjCInterface: CXCompletionContext = 16384
CXCompletionContext_ObjCInterface(16384), val CXCompletionContext_ObjCProtocol: CXCompletionContext = 32768
CXCompletionContext_ObjCProtocol(32768), val CXCompletionContext_ObjCCategory: CXCompletionContext = 65536
CXCompletionContext_ObjCCategory(65536), val CXCompletionContext_ObjCInstanceMessage: CXCompletionContext = 131072
CXCompletionContext_ObjCInstanceMessage(131072), val CXCompletionContext_ObjCClassMessage: CXCompletionContext = 262144
CXCompletionContext_ObjCClassMessage(262144), val CXCompletionContext_ObjCSelectorName: CXCompletionContext = 524288
CXCompletionContext_ObjCSelectorName(524288), val CXCompletionContext_MacroName: CXCompletionContext = 1048576
CXCompletionContext_MacroName(1048576), val CXCompletionContext_NaturalLanguage: CXCompletionContext = 2097152
CXCompletionContext_NaturalLanguage(2097152), val CXCompletionContext_Unknown: CXCompletionContext = 4194303
CXCompletionContext_Unknown(4194303),
;
companion object {
fun byValue(value: Int) = CXCompletionContext.values().find { it.value == value }!!
}
class Var(override val rawPtr: NativePtr) : CEnumVar() {
companion object : Type(CInt32Var.size.toInt())
var value: CXCompletionContext
get() = byValue(this.reinterpret<CInt32Var>().value)
set(value) { this.reinterpret<CInt32Var>().value = value.value }
}
}
enum class CXEvalResultKind(val value: Int) { enum class CXEvalResultKind(val value: Int) {
CXEval_Int(1), CXEval_Int(1),
@@ -4052,134 +4179,57 @@ enum class CXIdxEntityKind(val value: Int) {
} }
} }
enum class CXIdxEntityLanguage(val value: Int) { typealias CXIdxEntityLanguageVar = CInt32VarWithValueMappedTo<CXIdxEntityLanguage>
CXIdxEntityLang_None(0), typealias CXIdxEntityLanguage = Int
CXIdxEntityLang_C(1),
CXIdxEntityLang_ObjC(2),
CXIdxEntityLang_CXX(3),
;
companion object { val CXIdxEntityLang_None: CXIdxEntityLanguage = 0
fun byValue(value: Int) = CXIdxEntityLanguage.values().find { it.value == value }!! val CXIdxEntityLang_C: CXIdxEntityLanguage = 1
} val CXIdxEntityLang_ObjC: CXIdxEntityLanguage = 2
val CXIdxEntityLang_CXX: CXIdxEntityLanguage = 3
class Var(override val rawPtr: NativePtr) : CEnumVar() { typealias CXIdxEntityCXXTemplateKindVar = CInt32VarWithValueMappedTo<CXIdxEntityCXXTemplateKind>
companion object : Type(CInt32Var.size.toInt()) typealias CXIdxEntityCXXTemplateKind = Int
var value: CXIdxEntityLanguage
get() = byValue(this.reinterpret<CInt32Var>().value)
set(value) { this.reinterpret<CInt32Var>().value = value.value }
}
}
enum class CXIdxEntityCXXTemplateKind(val value: Int) { val CXIdxEntity_NonTemplate: CXIdxEntityCXXTemplateKind = 0
CXIdxEntity_NonTemplate(0), val CXIdxEntity_Template: CXIdxEntityCXXTemplateKind = 1
CXIdxEntity_Template(1), val CXIdxEntity_TemplatePartialSpecialization: CXIdxEntityCXXTemplateKind = 2
CXIdxEntity_TemplatePartialSpecialization(2), val CXIdxEntity_TemplateSpecialization: CXIdxEntityCXXTemplateKind = 3
CXIdxEntity_TemplateSpecialization(3),
;
companion object { typealias CXIdxAttrKindVar = CInt32VarWithValueMappedTo<CXIdxAttrKind>
fun byValue(value: Int) = CXIdxEntityCXXTemplateKind.values().find { it.value == value }!! typealias CXIdxAttrKind = Int
}
class Var(override val rawPtr: NativePtr) : CEnumVar() { val CXIdxAttr_Unexposed: CXIdxAttrKind = 0
companion object : Type(CInt32Var.size.toInt()) val CXIdxAttr_IBAction: CXIdxAttrKind = 1
var value: CXIdxEntityCXXTemplateKind val CXIdxAttr_IBOutlet: CXIdxAttrKind = 2
get() = byValue(this.reinterpret<CInt32Var>().value) val CXIdxAttr_IBOutletCollection: CXIdxAttrKind = 3
set(value) { this.reinterpret<CInt32Var>().value = value.value }
}
}
enum class CXIdxAttrKind(val value: Int) { typealias CXIdxDeclInfoFlagsVar = CInt32VarWithValueMappedTo<CXIdxDeclInfoFlags>
CXIdxAttr_Unexposed(0), typealias CXIdxDeclInfoFlags = Int
CXIdxAttr_IBAction(1),
CXIdxAttr_IBOutlet(2),
CXIdxAttr_IBOutletCollection(3),
;
companion object { val CXIdxDeclFlag_Skipped: CXIdxDeclInfoFlags = 1
fun byValue(value: Int) = CXIdxAttrKind.values().find { it.value == value }!!
}
class Var(override val rawPtr: NativePtr) : CEnumVar() { typealias CXIdxObjCContainerKindVar = CInt32VarWithValueMappedTo<CXIdxObjCContainerKind>
companion object : Type(CInt32Var.size.toInt()) typealias CXIdxObjCContainerKind = Int
var value: CXIdxAttrKind
get() = byValue(this.reinterpret<CInt32Var>().value)
set(value) { this.reinterpret<CInt32Var>().value = value.value }
}
}
enum class CXIdxDeclInfoFlags(val value: Int) { val CXIdxObjCContainer_ForwardRef: CXIdxObjCContainerKind = 0
CXIdxDeclFlag_Skipped(1), val CXIdxObjCContainer_Interface: CXIdxObjCContainerKind = 1
; val CXIdxObjCContainer_Implementation: CXIdxObjCContainerKind = 2
companion object { typealias CXIdxEntityRefKindVar = CInt32VarWithValueMappedTo<CXIdxEntityRefKind>
fun byValue(value: Int) = CXIdxDeclInfoFlags.values().find { it.value == value }!! typealias CXIdxEntityRefKind = Int
}
class Var(override val rawPtr: NativePtr) : CEnumVar() { val CXIdxEntityRef_Direct: CXIdxEntityRefKind = 1
companion object : Type(CInt32Var.size.toInt()) val CXIdxEntityRef_Implicit: CXIdxEntityRefKind = 2
var value: CXIdxDeclInfoFlags
get() = byValue(this.reinterpret<CInt32Var>().value)
set(value) { this.reinterpret<CInt32Var>().value = value.value }
}
}
enum class CXIdxObjCContainerKind(val value: Int) { typealias CXIndexOptFlagsVar = CInt32VarWithValueMappedTo<CXIndexOptFlags>
CXIdxObjCContainer_ForwardRef(0), typealias CXIndexOptFlags = Int
CXIdxObjCContainer_Interface(1),
CXIdxObjCContainer_Implementation(2),
;
companion object { val CXIndexOpt_None: CXIndexOptFlags = 0
fun byValue(value: Int) = CXIdxObjCContainerKind.values().find { it.value == value }!! val CXIndexOpt_SuppressRedundantRefs: CXIndexOptFlags = 1
} val CXIndexOpt_IndexFunctionLocalSymbols: CXIndexOptFlags = 2
val CXIndexOpt_IndexImplicitTemplateInstantiations: CXIndexOptFlags = 4
class Var(override val rawPtr: NativePtr) : CEnumVar() { val CXIndexOpt_SuppressWarnings: CXIndexOptFlags = 8
companion object : Type(CInt32Var.size.toInt()) val CXIndexOpt_SkipParsedBodiesInSession: CXIndexOptFlags = 16
var value: CXIdxObjCContainerKind
get() = byValue(this.reinterpret<CInt32Var>().value)
set(value) { this.reinterpret<CInt32Var>().value = value.value }
}
}
enum class CXIdxEntityRefKind(val value: Int) {
CXIdxEntityRef_Direct(1),
CXIdxEntityRef_Implicit(2),
;
companion object {
fun byValue(value: Int) = CXIdxEntityRefKind.values().find { it.value == value }!!
}
class Var(override val rawPtr: NativePtr) : CEnumVar() {
companion object : Type(CInt32Var.size.toInt())
var value: CXIdxEntityRefKind
get() = byValue(this.reinterpret<CInt32Var>().value)
set(value) { this.reinterpret<CInt32Var>().value = value.value }
}
}
enum class CXIndexOptFlags(val value: Int) {
CXIndexOpt_None(0),
CXIndexOpt_SuppressRedundantRefs(1),
CXIndexOpt_IndexFunctionLocalSymbols(2),
CXIndexOpt_IndexImplicitTemplateInstantiations(4),
CXIndexOpt_SuppressWarnings(8),
CXIndexOpt_SkipParsedBodiesInSession(16),
;
companion object {
fun byValue(value: Int) = CXIndexOptFlags.values().find { it.value == value }!!
}
class Var(override val rawPtr: NativePtr) : CEnumVar() {
companion object : Type(CInt32Var.size.toInt())
var value: CXIndexOptFlags
get() = byValue(this.reinterpret<CInt32Var>().value)
set(value) { this.reinterpret<CInt32Var>().value = value.value }
}
}
typealias __darwin_time_tVar = CInt64VarWithValueMappedTo<__darwin_time_t> typealias __darwin_time_tVar = CInt64VarWithValueMappedTo<__darwin_time_t>
typealias __darwin_time_t = Long typealias __darwin_time_t = Long
@@ -4262,6 +4312,9 @@ typealias CXIdxClientFile = COpaquePointer
typealias CXFieldVisitorVar = CPointerVarWithValueMappedTo<CXFieldVisitor> typealias CXFieldVisitorVar = CPointerVarWithValueMappedTo<CXFieldVisitor>
typealias CXFieldVisitor = CFunctionPointer<CFunctionType4> typealias CXFieldVisitor = CFunctionPointer<CFunctionType4>
typealias __darwin_wint_tVar = CInt32VarWithValueMappedTo<__darwin_wint_t>
typealias __darwin_wint_t = Int
object CFunctionType1 : CAdaptedFunctionTypeImpl<(CXCursor, CXCursor, COpaquePointer?) -> CXChildVisitResult>(UInt32, Struct(UInt32, SInt32, Struct(Pointer, Pointer, Pointer)), Struct(UInt32, SInt32, Struct(Pointer, Pointer, Pointer)), Pointer) { object CFunctionType1 : CAdaptedFunctionTypeImpl<(CXCursor, CXCursor, COpaquePointer?) -> CXChildVisitResult>(UInt32, Struct(UInt32, SInt32, Struct(Pointer, Pointer, Pointer)), Struct(UInt32, SInt32, Struct(Pointer, Pointer, Pointer)), Pointer) {
override fun invoke(function: (CXCursor, CXCursor, COpaquePointer?) -> CXChildVisitResult, args: CArray<COpaquePointerVar>, ret: COpaquePointer) { override fun invoke(function: (CXCursor, CXCursor, COpaquePointer?) -> CXChildVisitResult, args: CArray<COpaquePointerVar>, ret: COpaquePointer) {
val res = function(args[0].value!!.reinterpret<CXCursor>().pointed, args[1].value!!.reinterpret<CXCursor>().pointed, args[2].value!!.reinterpret<COpaquePointerVar>().pointed.value) val res = function(args[0].value!!.reinterpret<CXCursor>().pointed, args[1].value!!.reinterpret<CXCursor>().pointed, args[2].value!!.reinterpret<COpaquePointerVar>().pointed.value)
@@ -1,13 +0,0 @@
libName = clangbridge
headers = clang-c/Index.h
compiler = clang
compilerOpts = -std=c99 -fPIC
linkerOpts.linux = -Wl,-z,noexecstack
linker = clang
linkerOpts = -fPIC \
-lclang
@@ -16,7 +16,7 @@ private class StructDefImpl(size: Long, align: Int, decl: StructDecl, hasNatural
} }
private class EnumDefImpl(spelling: String, type: PrimitiveType) : EnumDef(spelling, type) { private class EnumDefImpl(spelling: String, type: PrimitiveType) : EnumDef(spelling, type) {
override val values = mutableListOf<EnumValue>() override val constants = mutableListOf<EnumConstant>()
} }
internal class NativeIndexImpl(val language: Language) : NativeIndex() { internal class NativeIndexImpl(val language: Language) : NativeIndex() {
@@ -276,14 +276,15 @@ internal class NativeIndexImpl(val language: Language) : NativeIndex() {
val name = entityName!! val name = entityName!!
val value = clang_getEnumConstantDeclValue(info.cursor) val value = clang_getEnumConstantDeclValue(info.cursor)
val values = getEnumDefAt(container.cursor).values val constants = getEnumDefAt(container.cursor).constants
val existingValue = values.find { it.name == name } val existingConstant = constants.find { it.name == name }
if (existingValue == null) { if (existingConstant == null) {
values.add(EnumValue(name, value)) val constant = EnumConstant(name, value, isExplicitlyDefined = !cursor.isLeaf())
constants.add(constant)
} else { } else {
// in some cases Clang may index the same definition multiple times; ignore redeclaration // in some cases Clang may index the same definition multiple times; ignore redeclaration
// TODO: implement the same fix for structs // TODO: implement the same fix for structs
assert (existingValue.value == value) assert (existingConstant.value == value)
} }
} }
} }
@@ -199,7 +199,7 @@ private fun collectMacroConstantsNames(library: NativeLibrary): List<String> {
val index = clang_createIndex(excludeDeclarationsFromPCH = 0, displayDiagnostics = 0)!! val index = clang_createIndex(excludeDeclarationsFromPCH = 0, displayDiagnostics = 0)!!
try { try {
// Include macros into AST: // Include macros into AST:
val options = CXTranslationUnit_Flags.CXTranslationUnit_DetailedPreprocessingRecord.value val options = CXTranslationUnit_DetailedPreprocessingRecord
val translationUnit = library.parse(index, options).ensureNoCompileErrors() val translationUnit = library.parse(index, options).ensureNoCompileErrors()
try { try {
@@ -51,14 +51,14 @@ abstract class StructDef(val size: Long, val align: Int,
/** /**
* C enum value. * C enum value.
*/ */
class EnumValue(val name: String, val value: Long) class EnumConstant(val name: String, val value: Long, val isExplicitlyDefined: Boolean)
/** /**
* C enum definition. * C enum definition.
*/ */
abstract class EnumDef(val spelling: String, val baseType: PrimitiveType) { abstract class EnumDef(val spelling: String, val baseType: PrimitiveType) {
abstract val values: List<EnumValue> abstract val constants: List<EnumConstant>
} }
/** /**
@@ -99,6 +99,17 @@ internal fun visitChildren(translationUnit: CXTranslationUnit, visitor: CursorVi
} }
} }
internal fun CXCursor.isLeaf(): Boolean {
var hasChildren = false
visitChildren(this) { _, _ ->
hasChildren = true
CXChildVisitResult.CXChildVisit_Break
}
return !hasChildren
}
internal fun List<String>.toNativeStringArray(placement: NativePlacement): CArray<CPointerVar<CInt8Var>> { internal fun List<String>.toNativeStringArray(placement: NativePlacement): CArray<CPointerVar<CInt8Var>> {
return placement.allocArray(this.size) { index -> return placement.allocArray(this.size) { index ->
this.value = this@toNativeStringArray[index].toCString(placement)!!.asCharPtr() this.value = this@toNativeStringArray[index].toCString(placement)!!.asCharPtr()
@@ -141,7 +152,7 @@ internal fun NativeLibrary.precompileHeaders(): NativeLibrary {
val index = clang_createIndex(excludeDeclarationsFromPCH = 0, displayDiagnostics = 0)!! val index = clang_createIndex(excludeDeclarationsFromPCH = 0, displayDiagnostics = 0)!!
try { try {
val options = CXTranslationUnit_Flags.CXTranslationUnit_ForSerialization.value val options = CXTranslationUnit_ForSerialization
val translationUnit = this.parse(index, options).ensureNoCompileErrors() val translationUnit = this.parse(index, options).ensureNoCompileErrors()
try { try {
clang_saveTranslationUnit(translationUnit, precompiledHeader.absolutePath, 0) clang_saveTranslationUnit(translationUnit, precompiledHeader.absolutePath, 0)
-3
View File
@@ -1,9 +1,6 @@
buildscript { buildscript {
repositories { repositories {
mavenCentral() mavenCentral()
maven {
url "http://dl.bintray.com/kotlin/kotlin-eap-1.1"
}
} }
dependencies { dependencies {
-3
View File
@@ -1,9 +1,6 @@
buildscript { buildscript {
repositories { repositories {
mavenCentral() mavenCentral()
maven {
url "http://dl.bintray.com/kotlin/kotlin-eap-1.1"
}
} }
dependencies { dependencies {
@@ -0,0 +1,14 @@
package org.jetbrains.kotlin.native.interop.gen.jvm
import org.jetbrains.kotlin.native.interop.indexer.NativeLibrary
/**
* Describes the native library and the options for adjusting the Kotlin API to be generated for this library.
*/
class InteropConfiguration(
val library: NativeLibrary,
val pkgName: String,
val excludedFunctions: Set<String>,
val strictEnums: Set<String>,
val nonStrictEnums: Set<String>
)
@@ -12,12 +12,17 @@ enum class KotlinPlatform {
class StubGenerator( class StubGenerator(
val nativeIndex: NativeIndex, val nativeIndex: NativeIndex,
val pkgName: String, val configuration: InteropConfiguration,
val libName: String, val libName: String,
val excludedFunctions: Set<String>,
val dumpShims: Boolean, val dumpShims: Boolean,
val platform: KotlinPlatform = KotlinPlatform.JVM) { val platform: KotlinPlatform = KotlinPlatform.JVM) {
val pkgName: String
get() = configuration.pkgName
val excludedFunctions: Set<String>
get() = configuration.excludedFunctions
val keywords = setOf("object") // TODO val keywords = setOf("object") // TODO
fun String.mangleIfKeyword(): String { fun String.mangleIfKeyword(): String {
@@ -69,10 +74,27 @@ class StubGenerator(
/** /**
* Indicates whether this enum should be represented as Kotlin enum. * Indicates whether this enum should be represented as Kotlin enum.
*/ */
val EnumDef.isKotlinEnum: Boolean val EnumDef.isStrictEnum: Boolean
// TODO: if an anonymous enum defines e.g. a function return value or struct field type, // TODO: if an anonymous enum defines e.g. a function return value or struct field type,
// then it probably should be represented as Kotlin enum // then it probably should be represented as Kotlin enum
get() = !isAnonymous get() {
if (this.isAnonymous) {
return false
}
val name = this.kotlinName
if (name in configuration.strictEnums) {
return true
}
if (name in configuration.nonStrictEnums) {
return false
}
// Let the simple heuristic decide:
return !this.constants.any { it.isExplicitlyDefined }
}
/** /**
* The name to be used for this enum in Kotlin * The name to be used for this enum in Kotlin
@@ -88,12 +110,6 @@ class StubGenerator(
val RecordType.kotlinName: String val RecordType.kotlinName: String
get() = decl.kotlinName get() = decl.kotlinName
val EnumType.isKotlinEnum: Boolean
get() = def.isKotlinEnum
val EnumType.kotlinName: String
get() = def.kotlinName
val functionsToBind = nativeIndex.functions.filter { it.name !in excludedFunctions } val functionsToBind = nativeIndex.functions.filter { it.name !in excludedFunctions }
@@ -309,7 +325,7 @@ class StubGenerator(
} }
} }
private fun mirror(type: PrimitiveType): TypeMirror { private fun mirror(type: PrimitiveType): TypeMirror.ByValue {
val varTypeName = when (type) { val varTypeName = when (type) {
is Int8Type, is UInt8Type -> "CInt8Var" is Int8Type, is UInt8Type -> "CInt8Var"
is Int16Type, is UInt16Type -> "CInt16Var" is Int16Type, is UInt16Type -> "CInt16Var"
@@ -335,12 +351,18 @@ class StubGenerator(
is RecordType -> byRefTypeMirror(type.kotlinName) is RecordType -> byRefTypeMirror(type.kotlinName)
is EnumType -> if (type.isKotlinEnum) { is EnumType -> when {
val className = type.kotlinName type.def.isStrictEnum -> {
val info = TypeInfo.Enum(className, type.def.baseType.kotlinType) val className = type.def.kotlinName
TypeMirror.ByValue("$className.Var", info, className) val info = TypeInfo.Enum(className, type.def.baseType.kotlinType)
} else { TypeMirror.ByValue("$className.Var", info, className)
mirror(type.def.baseType) }
!type.def.isAnonymous -> {
val baseTypeMirror = mirror(type.def.baseType)
val name = type.def.kotlinName
TypeMirror.ByValue("${name}Var", baseTypeMirror.info, name)
}
else -> mirror(type.def.baseType)
} }
is PointerType -> { is PointerType -> {
@@ -527,15 +549,15 @@ class StubGenerator(
* Produces to [out] the Kotlin definitions for given enum. * Produces to [out] the Kotlin definitions for given enum.
*/ */
private fun generateEnum(e: EnumDef) { private fun generateEnum(e: EnumDef) {
if (!e.isKotlinEnum) { if (!e.isStrictEnum) {
generateEnumAsValues(e) generateEnumAsConstants(e)
return return
} }
val baseTypeMirror = mirror(e.baseType) val baseTypeMirror = mirror(e.baseType)
block("enum class ${e.kotlinName}(val value: ${e.baseType.kotlinType})") { block("enum class ${e.kotlinName}(val value: ${e.baseType.kotlinType})") {
e.values.forEach { e.constants.forEach {
out("${it.name}(${it.value}),") out("${it.name}(${it.value}),")
} }
out(";") out(";")
@@ -556,24 +578,45 @@ class StubGenerator(
/** /**
* Produces to [out] the Kotlin definitions for given enum which shouldn't be represented as Kotlin enum. * Produces to [out] the Kotlin definitions for given enum which shouldn't be represented as Kotlin enum.
* *
* @see isKotlinEnum * @see isStrictEnum
*/ */
private fun generateEnumAsValues(e: EnumDef) { private fun generateEnumAsConstants(e: EnumDef) {
// TODO: if this enum defines e.g. a type of struct field, then it should be generated inside the struct class // TODO: if this enum defines e.g. a type of struct field, then it should be generated inside the struct class
// to prevent name clashing // to prevent name clashing
if (e.values.isEmpty()) { val constants = e.constants.filter {
return // Macro "overrides" the original enum constant.
it.name !in macroConstantsByName
} }
out("// ${e.spelling}") val typeName: String
for (value in e.values) {
if (value.name in macroConstantsByName) { if (e.isAnonymous) {
// Macro "overrides" the original enum constant. if (constants.isNotEmpty()) {
continue out("// ${e.spelling}:")
} }
out("val ${value.name}: ${e.baseType.kotlinType} = ${value.value}") typeName = e.baseType.kotlinType
} else {
val typeMirror = mirror(EnumType(e))
if (typeMirror !is TypeMirror.ByValue) {
error("unexpected enum type mirror: $typeMirror")
}
// Generate as typedef:
val varTypeName = typeMirror.info.constructPointedType(typeMirror.valueTypeName)
out("typealias ${typeMirror.pointedTypeName} = $varTypeName")
out("typealias ${typeMirror.valueTypeName} = ${e.baseType.kotlinType}")
if (constants.isNotEmpty()) {
out("")
}
typeName = typeMirror.valueTypeName
}
for (constant in constants) {
out("val ${constant.name}: $typeName = ${constant.value}")
} }
} }
@@ -207,9 +207,18 @@ private fun processLib(konanHome: String,
val libName = fqParts.joinToString("") + "stubs" val libName = fqParts.joinToString("") + "stubs"
val nativeIndex = buildNativeIndex(NativeLibrary(headerFiles, compilerOpts, language)) val library = NativeLibrary(headerFiles, compilerOpts, language)
val configuration = InteropConfiguration(
library = library,
pkgName = outKtPkg,
excludedFunctions = excludedFunctions,
strictEnums = config.getSpaceSeparated("strictEnums").toSet(),
nonStrictEnums = config.getSpaceSeparated("nonStrictEnums").toSet()
)
val gen = StubGenerator(nativeIndex, outKtPkg, libName, excludedFunctions, generateShims, platform) val nativeIndex = buildNativeIndex(library)
val gen = StubGenerator(nativeIndex, configuration, libName, generateShims, platform)
outKtFile.parentFile.mkdirs() outKtFile.parentFile.mkdirs()
outKtFile.bufferedWriter().use { out -> outKtFile.bufferedWriter().use { out ->
@@ -218,8 +227,9 @@ private fun processLib(konanHome: String,
} }
} }
File(nativeLibsDir).mkdirs()
val outCFile = createTempFile(suffix = ".c") val outCFile = File("$nativeLibsDir/$libName.c") // TODO: select the better location.
outCFile.bufferedWriter().use { out -> outCFile.bufferedWriter().use { out ->
gen.withOutput({ out.appendln(it) }) { gen.withOutput({ out.appendln(it) }) {
@@ -227,8 +237,6 @@ private fun processLib(konanHome: String,
} }
} }
File(nativeLibsDir).mkdirs()
val workDir = defFile?.parentFile ?: File(System.getProperty("java.io.tmpdir")) val workDir = defFile?.parentFile ?: File(System.getProperty("java.io.tmpdir"))
if (platform == KotlinPlatform.JVM) { if (platform == KotlinPlatform.JVM) {
@@ -260,6 +268,4 @@ private fun processLib(konanHome: String,
runCmd(compilerCmd, workDir, verbose) runCmd(compilerCmd, workDir, verbose)
} }
outCFile.delete()
} }
-3
View File
@@ -1,9 +1,6 @@
buildscript { buildscript {
repositories { repositories {
mavenCentral() mavenCentral()
maven {
url "http://dl.bintray.com/kotlin/kotlin-eap-1.1"
}
} }
dependencies { dependencies {
-9
View File
@@ -1,9 +0,0 @@
typedef int32_t LLVMAttributeSet;
// Return value type of LLVMGetFunctionAttr is enum LLVMAttribute;
// it is not a strict enum, but used as a set of enum values instead.
// Currently it is not possible to configure interop to treat a enum in such way,
// so redeclare the function with appropriate return value type:
static inline LLVMAttributeSet LLVMGetFunctionAttrSet(LLVMValueRef Fn) {
return LLVMGetFunctionAttr(Fn);
}
-4
View File
@@ -1,9 +1,6 @@
buildscript { buildscript {
repositories { repositories {
mavenCentral() mavenCentral()
maven {
url "http://dl.bintray.com/kotlin/kotlin-eap-1.1"
}
} }
dependencies { dependencies {
@@ -135,7 +132,6 @@ List<String> llvmLinkerOpts() {
kotlinNativeInterop { kotlinNativeInterop {
llvm { llvm {
defFile 'llvm.def' defFile 'llvm.def'
headers files('LlvmHacks.h')
compilerOpts "-fPIC", "-I$llvmDir/include" compilerOpts "-fPIC", "-I$llvmDir/include"
linkerOpts llvmLinkerOpts() linkerOpts llvmLinkerOpts()
} }
@@ -281,7 +281,7 @@ internal class CodeGenerator(override val context: Context) : ContextUtils {
val rargs = allocArrayOf(args)[0].ptr val rargs = allocArrayOf(args)[0].ptr
if (LLVMIsAFunction(llvmFunction) != null /* the function declaration */ && if (LLVMIsAFunction(llvmFunction) != null /* the function declaration */ &&
LLVMAttribute.LLVMNoUnwindAttribute in LLVMGetFunctionAttrSet(llvmFunction)) { (LLVMGetFunctionAttr(llvmFunction) and LLVMNoUnwindAttribute) != 0) {
return LLVMBuildCall(builder, llvmFunction, rargs, args.size, "")!! return LLVMBuildCall(builder, llvmFunction, rargs, args.size, "")!!
} else { } else {
@@ -187,12 +187,8 @@ internal class Llvm(val context: Context, val llvmModule: LLVMModuleRef) {
val functionType = getFunctionType(externalFunction) val functionType = getFunctionType(externalFunction)
val function = LLVMAddFunction(llvmModule, name, functionType)!! val function = LLVMAddFunction(llvmModule, name, functionType)!!
val attributes = LLVMGetFunctionAttrSet(externalFunction) val attributes = LLVMGetFunctionAttr(externalFunction)
for (attribute in LLVMAttribute.values()) { LLVMAddFunctionAttr(function, attributes)
if (attribute in attributes) {
LLVMAddFunctionAttr(function, attribute)
}
}
return function return function
} }
@@ -217,7 +213,7 @@ internal class Llvm(val context: Context, val llvmModule: LLVMModuleRef) {
private fun externalNounwindFunction(name: String, type: LLVMTypeRef): LLVMValueRef { private fun externalNounwindFunction(name: String, type: LLVMTypeRef): LLVMValueRef {
val function = externalFunction(name, type) val function = externalFunction(name, type)
LLVMAddFunctionAttr(function, LLVMAttribute.LLVMNoUnwindAttribute) LLVMAddFunctionAttr(function, LLVMNoUnwindAttribute)
return function return function
} }
@@ -208,10 +208,6 @@ fun llvmtype2string(type: LLVMTypeRef?): String {
return LLVMPrintTypeToString(type)!!.asCString().toString() return LLVMPrintTypeToString(type)!!.asCString().toString()
} }
internal operator fun LLVMAttributeSet.contains(attribute: LLVMAttribute): Boolean {
return (this and attribute.value) != 0
}
fun getStructElements(type: LLVMTypeRef): List<LLVMTypeRef> { fun getStructElements(type: LLVMTypeRef): List<LLVMTypeRef> {
val count = LLVMCountStructElementTypes(type) val count = LLVMCountStructElementTypes(type)
return (0 until count).map { return (0 until count).map {
+2
View File
@@ -21,3 +21,5 @@ linkerOpts.osx = \
linkerOpts.linux=\ linkerOpts.linux=\
-Wl,-z,noexecstack \ -Wl,-z,noexecstack \
-lrt -ldl -lpthread -lz -lm -lrt -ldl -lpthread -lz -lm
strictEnums = LLVMIntPredicate LLVMOpcode LLVMDLLStorageClass LLVMCallConv LLVMThreadLocalMode LLVMAtomicOrdering
-3
View File
@@ -17,9 +17,6 @@ allprojects {
repositories { repositories {
mavenCentral() mavenCentral()
maven {
url "http://dl.bintray.com/kotlin/kotlin-eap-1.1"
}
} }
ext.clangPath = ["$llvmDir/bin"] ext.clangPath = ["$llvmDir/bin"]
+1 -1
View File
@@ -1,4 +1,4 @@
kotlin_version=1.1-M03 kotlin_version=1.1.0
llvmVersion = 3.9.0 llvmVersion = 3.9.0
minMacOsVersion = 10.10 minMacOsVersion = 10.10
#kotlinCompilerModule=org.jetbrains.kotlin:kotlin-compiler:1.1-SNAPSHOT #kotlinCompilerModule=org.jetbrains.kotlin:kotlin-compiler:1.1-SNAPSHOT