1
1
from __future__ import annotations
2
+ import re
2
3
import sys
3
4
from typing import List , TYPE_CHECKING
4
5
@@ -409,6 +410,14 @@ def get_type_name(self):
409
410
else :
410
411
return "&str"
411
412
413
+ def _getVariantName (variant ) -> str :
414
+ """
415
+ Since the enum variant's type name is in the form `TheEnumName::TheVariantName$Variant`,
416
+ we can extract `TheVariantName` from it for display purpose.
417
+ """
418
+ s = variant .GetType ().GetName ()
419
+ match = re .search (r'::([^:]+)\$Variant$' , s )
420
+ return match .group (1 ) if match else ""
412
421
413
422
class ClangEncodedEnumProvider :
414
423
"""Pretty-printer for 'clang-encoded' enums support implemented in LLDB"""
@@ -424,37 +433,27 @@ def has_children(self) -> bool:
424
433
return True
425
434
426
435
def num_children (self ) -> int :
427
- if self .is_default :
428
- return 1
429
- return 2
436
+ return 1
430
437
431
- def get_child_index (self , name : str ) -> int :
432
- if name == ClangEncodedEnumProvider .VALUE_MEMBER_NAME :
433
- return 0
434
- if name == ClangEncodedEnumProvider .DISCRIMINANT_MEMBER_NAME :
435
- return 1
438
+ def get_child_index (self , _name : str ) -> int :
436
439
return - 1
437
440
438
441
def get_child_at_index (self , index : int ) -> SBValue :
439
442
if index == 0 :
440
- return self .variant .GetChildMemberWithName (
443
+ value = self .variant .GetChildMemberWithName (
441
444
ClangEncodedEnumProvider .VALUE_MEMBER_NAME
442
445
)
443
- if index == 1 :
444
- return self .variant .GetChildMemberWithName (
445
- ClangEncodedEnumProvider .DISCRIMINANT_MEMBER_NAME
446
+ return value .CreateChildAtOffset (
447
+ _getVariantName (self .variant ),
448
+ 0 ,
449
+ value .GetType ()
446
450
)
451
+ return None
447
452
448
453
def update (self ):
449
454
all_variants = self .valobj .GetChildAtIndex (0 )
450
455
index = self ._getCurrentVariantIndex (all_variants )
451
456
self .variant = all_variants .GetChildAtIndex (index )
452
- self .is_default = (
453
- self .variant .GetIndexOfChildWithName (
454
- ClangEncodedEnumProvider .DISCRIMINANT_MEMBER_NAME
455
- )
456
- == - 1
457
- )
458
457
459
458
def _getCurrentVariantIndex (self , all_variants : SBValue ) -> int :
460
459
default_index = 0
0 commit comments