LINUX.ORG.RU

История изменений

Исправление 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, разные выравнивания могут быть и т.д. А еще на это могут влиять параметры компиляторов, которые могут еще и быть переопределены в коде. Опять же всякие директивы препроцессора. Авторы библиотек в принципе могут стараться делать их совместимыми, но если на это изначально наплевали, то фиксить это после каждого обновления - сизифов труд.