История изменений
Исправление Serral, (текущая версия) :
Пруфца бы.
Это то, что я нашел и исправил:
#if defined(__x86_64__) || defined(__aarch64__)
#define JS_PTR64
#define JS_PTR64_DEF(a) a
#else
#define JS_PTR64_DEF(a)
#endif
#ifndef JS_PTR64
#define JS_NAN_BOXING
#endif
...
#elif defined(JS_NAN_BOXING)
typedef uint64_t JSValue;
...
#else /* !JS_NAN_BOXING */
typedef union JSValueUnion {
int32_t int32;
double float64;
void *ptr;
} JSValueUnion;
typedef struct JSValue {
JSValueUnion u;
int64_t tag;
} JSValue;
Думаю ты поймешь. Но там есть еще и разные рантаймы, разные malloc/free, разные выравнивания могут быть и т.д. А еще на это могут влиять параметры компиляторов, которые могут еще и быть переопределены в коде. Опять же всякие директивы препроцессора. В общем на чем-то из этого оно продолжало валиться. Авторы библиотек в принципе могут стараться делать их совместимыми, но если на это изначально наплевали, то фиксить это после каждого обновления - сизифов труд.
Исходная версия Serral, :
Пруфца бы.
Это то, что я нашел и исправил:
#if defined(__x86_64__) || defined(__aarch64__)
#define JS_PTR64
#define JS_PTR64_DEF(a) a
#else
#define JS_PTR64_DEF(a)
#endif
#ifndef JS_PTR64
#define JS_NAN_BOXING
#endif
...
#elif defined(JS_NAN_BOXING)
typedef uint64_t JSValue;
...
#else /* !JS_NAN_BOXING */
typedef union JSValueUnion {
int32_t int32;
double float64;
void *ptr;
} JSValueUnion;
typedef struct JSValue {
JSValueUnion u;
int64_t tag;
} JSValue;
Думаю ты поймешь. Но там есть еще и разные рантаймы, разные malloc/free, разные выравнивания могут быть и т.д. А еще на это могут влиять параметры компиляторов, которые могут еще и быть переопределены в коде. Опять же всякие директивы препроцессора. Авторы библиотек в принципе могут стараться делать их совместимыми, но если на это изначально наплевали, то фиксить это после каждого обновления - сизифов труд.