@@ -33,6 +33,7 @@ class Parser(object):
3333 ('COMMA' , r',' ),
3434 ('SKIP' , r'\s' ),
3535 ('SEMICOLON' , r';' ),
36+ ('HEXVALUE' , r'(0x[0-9A-Fa-f]+)' ),
3637 ('NUMERIC' , r'(-?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)' ),
3738 ('STRING' , r'("(?:\\.|[^"\\])*"|\'(?:\\.|[^"\\])*\')' ),
3839 ('BOOLEAN' , r'(true|false)' ),
@@ -546,8 +547,12 @@ def _parse_default(self, field, tokens):
546547 # This will get updated later
547548 field .default = token .full_name
548549 return
550+ elif token .token_type == 'HEXVALUE' :
551+ assert field .type in self .scalars .difference ({'bool' , 'enum' }), \
552+ "attempting to set hex value as default for non-numeric field on line {}: '{}'" .format (
553+ token .line + 1 , self .lines [token .line ])
549554 elif token .token_type == 'NUMERIC' :
550- assert field .type in self .scalars , \
555+ assert field .type in self .scalars . difference ({ 'bool' , 'enum' }) , \
551556 "attempting to set numeric as default for non-numeric field on line {}: '{}'" .format (
552557 token .line + 1 , self .lines [token .line ])
553558 if field .type not in self .floats :
@@ -907,6 +912,13 @@ def __init__(self, line, value):
907912 self .line = line
908913 self .value = float (value )
909914
915+ class HexValue (Token ):
916+ token_type = 'HEXVALUE'
917+
918+ def __init__ (self , line , value ):
919+ self .line = line
920+ self .value = int (value , 16 )
921+
910922 class String (Token ):
911923 token_type = 'STRING'
912924
0 commit comments