diff --git a/gdb-port/ast.py b/gdb-port/ast.py index b3cb498afc633533b1f120e4f729dd07783bdefb..8c72448cb1db0f1815e85dfc1c12ec62b35c99ae 100644 --- a/gdb-port/ast.py +++ b/gdb-port/ast.py @@ -51,6 +51,7 @@ class HParsedToken: #TT_MAX = gdb.lookup_type("enum HTokenType_").fields()[-1].enumval # Will be cached on the first lookup + # Annoyingly, the numerical value for the first custom token type == TT_MAX TT_MAX = None # Enum value hardcoded for convenience of implementation TT_SEQUENCE = 16 @@ -94,10 +95,13 @@ class HParsedToken: tok = gdb.Value(self.address).cast(__class__.HParsedToken_t_p) return tok +#TODO: how to tell when token_type == TT_MAX is meant to be TT_MAX, and when it's meant to be a custom type? def has_token_data(self): if not __class__.no_token_data: - __class__.no_token_data = [v.enumval for v in gdb.lookup_type("enum HTokenType_").fields() if v.name in ["TT_INVALID", "TT_RESERVED_1", "TT_ERR", "TT_NONE", "TT_MAX"]] - no_token_data = __class__.no_token_data or [v.enumval for v in gdb.lookup_type("enum HTokenType_").fields() if v.name in ["TT_INVALID", "TT_RESERVED_1", "TT_ERR", "TT_NONE", "TT_MAX"]] + #__class__.no_token_data = [v.enumval for v in gdb.lookup_type("enum HTokenType_").fields() if v.name in ["TT_INVALID", "TT_RESERVED_1", "TT_ERR", "TT_NONE", "TT_MAX"]] + __class__.no_token_data = [v.enumval for v in gdb.lookup_type("enum HTokenType_").fields() if v.name in ["TT_INVALID", "TT_RESERVED_1", "TT_ERR", "TT_NONE"]] + #no_token_data = __class__.no_token_data or [v.enumval for v in gdb.lookup_type("enum HTokenType_").fields() if v.name in ["TT_INVALID", "TT_RESERVED_1", "TT_ERR", "TT_NONE", "TT_MAX"]] + no_token_data = __class__.no_token_data or [v.enumval for v in gdb.lookup_type("enum HTokenType_").fields() if v.name in ["TT_INVALID", "TT_RESERVED_1", "TT_ERR", "TT_NONE"]] return self.token_type not in no_token_data #TODO: return make HCountedArray from data, if this is a sequence