diff --git a/src/array.c b/src/array.c index 29e4bda2116718a07a22008f0e484c51a3e59bcd..eaae9a7e4f669453038c7b4b05d8da5e634b6477 100644 --- a/src/array.c +++ b/src/array.c @@ -1428,7 +1428,7 @@ PMOD_EXPORT TYPE_FIELD array_fix_type_field(struct array *v) for(e=0; e<v->size; e++) { check_svalue (ITEM(v) + e); - t |= 1 << TYPEOF(ITEM(v)[e]); + t |= BITOF(ITEM(v)[e]); } #ifdef PIKE_DEBUG diff --git a/src/svalue.c b/src/svalue.c index 0f32235318c69c66ae96ef6c9817a202b8060bd5..dc784ba1da239645dfc634595987aeff768839c0 100644 --- a/src/svalue.c +++ b/src/svalue.c @@ -2344,7 +2344,7 @@ PMOD_EXPORT TYPE_FIELD real_gc_mark_svalues(struct svalue *s, size_t num) GC_DO_MARK, MARK_PRE, DO_MARK_FUNC_SVALUE, GC_DO_MARK, DO_MARK_STRING, GC_DO_MARK); - t |= 1 << TYPEOF(*s); + t |= BITOF(*s); } return freed ? t : 0; } @@ -2361,7 +2361,7 @@ TYPE_FIELD gc_mark_weak_svalues(struct svalue *s, size_t num) GC_DONT_MARK, MARK_PRE, DO_MARK_FUNC_SVALUE, DO_MARK_OBJ_WEAK, DO_MARK_STRING, GC_DO_MARK); - t |= 1 << TYPEOF(*s); + t |= BITOF(*s); } return freed ? t : 0; } @@ -2440,7 +2440,7 @@ PMOD_EXPORT TYPE_FIELD real_gc_cycle_check_svalues(struct svalue *s, size_t num) DO_CYCLE_CHECK, {}, DO_CYCLE_CHECK_FUNC_SVALUE, DO_CYCLE_CHECK, DONT_CYCLE_CHECK_STRING, DONT_CYCLE_CHECK); - t |= 1 << TYPEOF(*s); + t |= BITOF(*s); } return freed ? t : 0; } @@ -2457,7 +2457,7 @@ TYPE_FIELD gc_cycle_check_weak_svalues(struct svalue *s, size_t num) DO_CYCLE_CHECK_WEAK, {}, DO_CYCLE_CHECK_FUNC_SVALUE, DO_CYCLE_CHECK_WEAK, DONT_CYCLE_CHECK_STRING, DONT_CYCLE_CHECK); - t |= 1 << TYPEOF(*s); + t |= BITOF(*s); } return freed ? t : 0; } diff --git a/src/svalue.h b/src/svalue.h index 247d8f03783606434f9c74b8644f7a4974a55c2e..6a183a4c315fdffea6654692e55dd92f9af810a8 100644 --- a/src/svalue.h +++ b/src/svalue.h @@ -847,6 +847,14 @@ int svalues_are_constant(const struct svalue *s, TYPE_FIELD hint, struct processing *p); +static INLINE TYPE_FIELD BITOF(struct svalue sv) { + if (TYPEOF(sv) >= sizeof(TYPE_FIELD) * 8) { + return BIT_MIXED | BIT_UNFINISHED; + } + + return 1 << TYPEOF(sv); +} + #define gc_cycle_check_without_recurse gc_mark_without_recurse #define gc_cycle_check_weak_without_recurse gc_mark_without_recurse