@@ -68,6 +68,53 @@ static inline int get_lltrace(void) {
6868}
6969#define DPRINTF (level , ...) \
7070 if (get_lltrace() >= (level)) { printf(__VA_ARGS__); }
71+
72+ void
73+ _PyUOpSymPrint (JitOptRef ref )
74+ {
75+ if (PyJitRef_IsNull (ref )) {
76+ printf ("<JitRef NULL>" );
77+ return ;
78+ }
79+ JitOptSymbol * sym = PyJitRef_Unwrap (ref );
80+ switch (sym -> tag ) {
81+ case JIT_SYM_UNKNOWN_TAG :
82+ printf ("<UNKNOWN at %p>" , (void * )sym );
83+ break ;
84+ case JIT_SYM_NULL_TAG :
85+ printf ("<NULL at %p>" , (void * )sym );
86+ break ;
87+ case JIT_SYM_NON_NULL_TAG :
88+ printf ("<!NULL at %p>" , (void * )sym );
89+ break ;
90+ case JIT_SYM_BOTTOM_TAG :
91+ printf ("<BOTTOM at %p>" , (void * )sym );
92+ break ;
93+ case JIT_SYM_TYPE_VERSION_TAG :
94+ printf ("<v%u at %p>" , sym -> version .version , (void * )sym );
95+ break ;
96+ case JIT_SYM_KNOWN_CLASS_TAG :
97+ printf ("<%s at %p>" , sym -> cls .type -> tp_name , (void * )sym );
98+ break ;
99+ case JIT_SYM_KNOWN_VALUE_TAG :
100+ printf ("<%s val=%p at %p>" , Py_TYPE (sym -> value .value )-> tp_name ,
101+ (void * )sym -> value .value , (void * )sym );
102+ break ;
103+ case JIT_SYM_TUPLE_TAG :
104+ printf ("<tuple[%d] at %p>" , sym -> tuple .length , (void * )sym );
105+ break ;
106+ case JIT_SYM_TRUTHINESS_TAG :
107+ printf ("<truthiness%s at %p>" , sym -> truthiness .invert ? "!" : "" , (void * )sym );
108+ break ;
109+ case JIT_SYM_COMPACT_INT :
110+ printf ("<compact_int at %p>" , (void * )sym );
111+ break ;
112+ default :
113+ printf ("<tag=%d at %p>" , sym -> tag , (void * )sym );
114+ break ;
115+ }
116+ }
117+
71118#else
72119#define DPRINTF (level , ...)
73120#endif
0 commit comments