Skip to content

Commit 097fdaf

Browse files
committed
Apply feedback from code review
1 parent 2b876f1 commit 097fdaf

File tree

1 file changed

+62
-30
lines changed

1 file changed

+62
-30
lines changed

Include/internal/pycore_code.h

Lines changed: 62 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ typedef struct {
2121
} _PyAdaptiveEntry;
2222

2323
typedef struct {
24+
/* Borrowed ref */
2425
PyObject *obj;
2526
} _PyObjectCache;
2627

@@ -429,77 +430,108 @@ extern PyObject* _Py_GetSpecializationStats(void);
429430
#ifdef WORDS_BIGENDIAN
430431

431432
static inline void
432-
write_u32(uint16_t p[2], uint32_t val)
433+
write_u32(uint16_t *p, uint32_t val)
433434
{
434-
p[0] = val >> 16;
435-
p[1] = (uint16_t)val;
436-
}
437-
438-
static inline uint32_t
439-
read_u32(uint16_t p[2])
440-
{
441-
return (p[0] << 16) | p[1];
435+
p[0] = (uint16_t)(val >> 16);
436+
p[1] = (uint16_t)(val >> 0);
442437
}
443438

444439
static inline void
445-
write_obj(uint16_t p[4], PyObject *obj)
440+
write_u64(uint16_t *p, uint64_t val)
446441
{
447-
uint64_t val = (uintptr_t)obj;
448442
p[0] = (uint16_t)(val >> 48);
449443
p[1] = (uint16_t)(val >> 32);
450444
p[2] = (uint16_t)(val >> 16);
451445
p[3] = (uint16_t)(val >> 0);
452446
}
453447

454-
static inline PyObject *
455-
read_obj(uint16_t p[4])
448+
static inline uint32_t
449+
read_u32(uint16_t *p)
450+
{
451+
uint32_t val = 0;
452+
val |= (uint32_t)p[0] << 16;
453+
val |= (uint32_t)p[1] << 0;
454+
return val;
455+
}
456+
457+
static inline uint64_t
458+
read_u64(uint16_t *p)
456459
{
457-
uintptr_t val = 0;
460+
uint64_t val = 0;
458461
val |= (uint64_t)p[0] << 48;
459462
val |= (uint64_t)p[1] << 32;
460463
val |= (uint64_t)p[2] << 16;
461464
val |= (uint64_t)p[3] << 0;
462-
return (PyObject *)val;
465+
return val;
463466
}
464467

465468
#else
466469

467470
static inline void
468-
write_u32(uint16_t p[2], uint32_t val)
469-
{
470-
p[0] = (uint16_t)val;
471-
p[1] = val >> 16;
472-
}
473-
474-
static inline uint32_t
475-
read_u32(uint16_t p[2])
471+
write_u32(uint16_t *p, uint32_t val)
476472
{
477-
return p[0] | (p[1] << 16);
473+
p[0] = (uint16_t)(val >> 0);
474+
p[1] = (uint16_t)(val >> 16);
478475
}
479476

480477
static inline void
481-
write_obj(uint16_t p[4], PyObject *obj)
478+
write_u64(uint16_t *p, uint64_t val)
482479
{
483-
uint64_t val = (uintptr_t)obj;
484480
p[0] = (uint16_t)(val >> 0);
485481
p[1] = (uint16_t)(val >> 16);
486482
p[2] = (uint16_t)(val >> 32);
487483
p[3] = (uint16_t)(val >> 48);
488484
}
489485

490-
static inline PyObject *
491-
read_obj(uint16_t p[4])
486+
static inline uint32_t
487+
read_u32(uint16_t *p)
492488
{
493-
uintptr_t val = 0;
489+
uint32_t val = 0;
490+
val |= (uint32_t)p[0] << 0;
491+
val |= (uint32_t)p[1] << 16;
492+
return val;
493+
}
494+
495+
static inline uint64_t
496+
read_u64(uint16_t *p)
497+
{
498+
uint64_t val = 0;
494499
val |= (uint64_t)p[0] << 0;
495500
val |= (uint64_t)p[1] << 16;
496501
val |= (uint64_t)p[2] << 32;
497502
val |= (uint64_t)p[3] << 48;
498-
return (PyObject *)val;
503+
return val;
499504
}
500505

501506
#endif
502507

508+
static inline void
509+
write_obj(uint16_t *p, PyObject *obj)
510+
{
511+
uintptr_t val = (uintptr_t)obj;
512+
#if SIZEOF_UINTPTR_T == 8
513+
write_u64(p, val);
514+
#elif SIZEOF_UINTPTR_T == 4
515+
write_u32(p, val);
516+
#else
517+
#error "sizeof(uintptr_t) must be 4 or 8"
518+
#endif
519+
}
520+
521+
static inline PyObject *
522+
read_obj(uint16_t *p)
523+
{
524+
uintptr_t val;
525+
#if SIZEOF_UINTPTR_T == 8
526+
val = read_u64(p);
527+
#elif SIZE_OF_UINTPTR_T == 4
528+
val = read_u32(p);
529+
#else
530+
#error "sizeof(uintptr_t) must be 4 or 8"
531+
#endif
532+
return (PyObject *)val;
533+
}
534+
503535
#ifdef __cplusplus
504536
}
505537
#endif

0 commit comments

Comments
 (0)