@@ -389,10 +389,8 @@ static REBCNT byte_sizes[4] = { 1, 2, 4, 8 };
389
389
REBYTE * data ; // series data head
390
390
REBLEN tail ; // one past end of useful data
391
391
REBLEN rest ; // total number of units from bias to end
392
- REBINT info ; // holds width and flags
393
- #if defined(__LP64__ ) || defined(__LLP64__ )
394
- REBCNT padding ; // ensure next pointer is naturally aligned
395
- #endif
392
+ REBINT sizes ; // 16 bits bias, 8 bits reserved, 8 bits wide!
393
+ REBCNT flags ;
396
394
union {
397
395
REBCNT size ; // used for vectors and bitsets
398
396
REBSER * series ; // MAP datatype uses this
@@ -410,8 +408,9 @@ static REBCNT byte_sizes[4] = { 1, 2, 4, 8 };
410
408
#define SERIES_TAIL (s ) ((s)->tail)
411
409
#define SERIES_REST (s ) ((s)->rest)
412
410
#define SERIES_LEN (s ) ((s)->tail + 1) // Includes terminator
413
- #define SERIES_FLAGS (s ) ((s)->info)
414
- #define SERIES_WIDE (s ) (((s)->info) & 0xff)
411
+ #define SERIES_SIZES (s ) ((s)->sizes)
412
+ #define SERIES_FLAGS (s ) ((s)->flags)
413
+ #define SERIES_WIDE (s ) (((s)->sizes) & 0xff)
415
414
#define SERIES_DATA (s ) ((s)->data)
416
415
#define SERIES_SKIP (s ,i ) (SERIES_DATA(s) + (SERIES_WIDE(s) * (i)))
417
416
@@ -429,11 +428,11 @@ static REBCNT byte_sizes[4] = { 1, 2, 4, 8 };
429
428
#define SERIES_FREED (s ) (!SERIES_WIDE(s))
430
429
431
430
// Bias is empty space in front of head:
432
- #define SERIES_BIAS (s ) (REBCNT)((SERIES_FLAGS (s) >> 16) & 0xffff)
431
+ #define SERIES_BIAS (s ) (REBCNT)((SERIES_SIZES (s) >> 16) & 0xffff)
433
432
#define MAX_SERIES_BIAS 0x1000
434
- #define SERIES_SET_BIAS (s ,b ) (SERIES_FLAGS (s) = (SERIES_FLAGS (s) & 0xffff) | (b << 16))
435
- #define SERIES_ADD_BIAS (s ,b ) (SERIES_FLAGS (s) += (b << 16))
436
- #define SERIES_SUB_BIAS (s ,b ) (SERIES_FLAGS (s) -= (b << 16))
433
+ #define SERIES_SET_BIAS (s ,b ) (SERIES_SIZES (s) = (SERIES_SIZES (s) & 0xffff) | (b << 16))
434
+ #define SERIES_ADD_BIAS (s ,b ) (SERIES_SIZES (s) += (b << 16))
435
+ #define SERIES_SUB_BIAS (s ,b ) (SERIES_SIZES (s) -= (b << 16))
437
436
438
437
// Size in bytes of memory allocated (including bias area):
439
438
#define SERIES_TOTAL (s ) ((SERIES_REST(s) + SERIES_BIAS(s)) * (REBCNT)SERIES_WIDE(s))
@@ -462,11 +461,11 @@ static REBCNT byte_sizes[4] = { 1, 2, 4, 8 };
462
461
#define AT_TAIL ((REBCNT)(~0)) // Extend series at tail
463
462
464
463
// Is it a byte-sized series? (this works because no other odd size allowed)
465
- #define BYTE_SIZE (s ) (((s)->info ) & 1)
464
+ #define BYTE_SIZE (s ) (SERIES_SIZES(s ) & 1)
466
465
#define VAL_BYTE_SIZE (v ) (BYTE_SIZE(VAL_SERIES(v)))
467
466
#define VAL_STR_IS_ASCII (v ) (VAL_BYTE_SIZE(v) && !Is_Not_ASCII(VAL_BIN_DATA(v), VAL_LEN(v)))
468
467
469
- // Series Flags:
468
+ // Series Flags (max32) :
470
469
enum {
471
470
SER_MARK = 1 , // Series was found during GC mark scan.
472
471
SER_KEEP = 1 <<1 , // Series is permanent, do not GC it.
@@ -479,9 +478,9 @@ enum {
479
478
SER_INT = 1 <<8 , // Series data is internal (loop frames) and should not be accessed by users
480
479
};
481
480
482
- #define SERIES_SET_FLAG (s , f ) (SERIES_FLAGS(s) |= ((f) << 8 ))
483
- #define SERIES_CLR_FLAG (s , f ) (SERIES_FLAGS(s) &= ~((f) << 8 ))
484
- #define SERIES_GET_FLAG (s , f ) (SERIES_FLAGS(s) & ((f) << 8 ))
481
+ #define SERIES_SET_FLAG (s , f ) (SERIES_FLAGS(s) |= (f ))
482
+ #define SERIES_CLR_FLAG (s , f ) (SERIES_FLAGS(s) &= ~(f ))
483
+ #define SERIES_GET_FLAG (s , f ) (SERIES_FLAGS(s) & (f ))
485
484
486
485
#define IS_FREEABLE (s ) !SERIES_GET_FLAG(s, SER_MARK|SER_KEEP|SER_FREE)
487
486
#define MARK_SERIES (s ) SERIES_SET_FLAG(s, SER_MARK)
0 commit comments