From The Compiler, 8 Years ago, written in Python.
Embed
  1.     def _convert_cast(self):
  2.         # Available types:
  3.         #
  4.         # bool:     Convert to a Python boolean
  5.         #           'true' - True / 'false' - False
  6.         # int:      Convert to an Integer
  7.         #           int('1')
  8.         # 'hexint': Convert to an Integer, original value hex
  9.         #           int('1', 16)
  10.         # 'dt':     Type depends on the datatype
  11.         units = {
  12.             'PDOmapping':   bool,
  13.             'objectType':   int,
  14.             'index':        'hexint',
  15.             'subIndex':     'hexint',
  16.             'defaultValue': 'dt',
  17.             'highLimit':    'dt',
  18.             'lowLimit':     'dt',
  19.         }
  20.  
  21.         # For every [sub]object
  22.         for object in self._deepiterate():
  23.             for label in units:      # Get all the unit definitions and see if
  24.                 if label in object:  # the key is in the active object
  25.                     value = object[label]
  26.                     unit = units[label]
  27.  
  28.                     if unit == 'dt': # If the unit is 'dt', get the real unit
  29.                                      # from the datatype
  30.                         unit = object['dataType'][1]
  31.                         # The datatype doesn't know hexint, but if an integer
  32.                         # starts with '0x' it's hexadecimal.
  33.                         if (unit == int) and value.startswith('0x'):
  34.                             unit = 'hexint'
  35.  
  36.                     if unit == bool:
  37.                         if value == 'true':
  38.                             value = True
  39.                         elif value == 'false':
  40.                             value = False
  41.                         else:
  42.                             raise UserWarning("{0}={1} in {2} is not a valid"
  43.                                   " bool!".format(label, value, object))
  44.                     elif unit == int:
  45.                         try:
  46.                             value = int(value, 10)
  47.                         except ValueError:
  48.                             raise UserWarning("{0}={1} in {2} is not a valid"
  49.                                   " integer!".format(label, value, object))
  50.                     elif unit == 'hexint':
  51.                         try:
  52.                             value = int(value, 16)
  53.                         except ValueError:
  54.                             raise UserWarning("{0}={1} in {2} is not a valid"
  55.                                   " hex-integer!".format(label, value, object))
  56.                     elif unit == str:
  57.                         pass
  58.                     else:
  59.                         raise UserWarning("Can't convert {0}={1} in {2} "
  60.                               "to {3}!".format(label, value, object, unit))
  61.  
  62.                     object[label] = value