In the latest Kotlin version the cinterop tool has...
# kotlin-native
n
In the latest Kotlin version the cinterop tool has broken backwards compatibility with C enums. An enum class was used to represent a C enum. Now a type alias is used instead which isn't type safe. Below is an example of what the cinterop tool produces (the textual version generated from a knm file covering LVGL v8.3):
Copy code
public typealias lv_scr_load_anim_t = kotlin.UInt
Here is the C enum from lv_disp.h for LVGL v8.3:
Copy code
typedef enum {
    LV_SCR_LOAD_ANIM_NONE,
    LV_SCR_LOAD_ANIM_OVER_LEFT,
    LV_SCR_LOAD_ANIM_OVER_RIGHT,
    LV_SCR_LOAD_ANIM_OVER_TOP,
    LV_SCR_LOAD_ANIM_OVER_BOTTOM,
    LV_SCR_LOAD_ANIM_MOVE_LEFT,
    LV_SCR_LOAD_ANIM_MOVE_RIGHT,
    LV_SCR_LOAD_ANIM_MOVE_TOP,
    LV_SCR_LOAD_ANIM_MOVE_BOTTOM,
    LV_SCR_LOAD_ANIM_FADE_IN,
    LV_SCR_LOAD_ANIM_FADE_ON = LV_SCR_LOAD_ANIM_FADE_IN, /*For backward compatibility*/
    LV_SCR_LOAD_ANIM_FADE_OUT,
    LV_SCR_LOAD_ANIM_OUT_LEFT,
    LV_SCR_LOAD_ANIM_OUT_RIGHT,
    LV_SCR_LOAD_ANIM_OUT_TOP,
    LV_SCR_LOAD_ANIM_OUT_BOTTOM,
} lv_scr_load_anim_t;
Here is the C enum from lv_disp.h for LVGL v8.0:
Copy code
typedef enum {
    LV_SCR_LOAD_ANIM_NONE,
    LV_SCR_LOAD_ANIM_OVER_LEFT,
    LV_SCR_LOAD_ANIM_OVER_RIGHT,
    LV_SCR_LOAD_ANIM_OVER_TOP,
    LV_SCR_LOAD_ANIM_OVER_BOTTOM,
    LV_SCR_LOAD_ANIM_MOVE_LEFT,
    LV_SCR_LOAD_ANIM_MOVE_RIGHT,
    LV_SCR_LOAD_ANIM_MOVE_TOP,
    LV_SCR_LOAD_ANIM_MOVE_BOTTOM,
    LV_SCR_LOAD_ANIM_FADE_ON,
} lv_scr_load_anim_t;
e
C allows for enum values outside of the named set, for example
Copy code
enum wxPosixPermissions {
  wxS_IRUSR = 00400,
  wxS_IWUSR = 00200,
  wxS_IXUSR = 00100,
  wxS_IRGRP = 00040,
  wxS_IWGRP = 00020,
  wxS_IXGRP = 00010,
  wxS_IROTH = 00004,
  wxS_IWOTH = 00002,
  wxS_IXOTH = 00001,
  ...
}
enum wxPosixPermissions p = (enum wxPosixPermissions) (wxS_IRUSR | wxS_IWUSR | wxS_IRGRP);
is valid and existing C/C++ codebases expect it to work