Exemple #1
0
 def test_bits_value_hex(self):
     self.assertEqual(value_from_string('bits[3]:0x7'),
                      Value.make_ubits(bit_count=3, value=7))
     self.assertEqual(value_from_string('bits[1]:0x1'),
                      Value.make_ubits(bit_count=1, value=1))
     self.assertEqual(value_from_string('bits[1]:0x0'),
                      Value.make_ubits(bit_count=1, value=0))
     self.assertEqual(value_from_string('bits[8]:0xff'),
                      Value.make_ubits(bit_count=8, value=0xff))
     self.assertEqual(value_from_string('u8:0xff'),
                      Value.make_ubits(bit_count=8, value=0xff))
Exemple #2
0
  def test_tuple_values(self):
    self.assertEqual(
        value_from_string('(bits[8]:0xff, bits[2]:0x1)'),
        Value.make_tuple((
            Value.make_ubits(bit_count=8, value=0xff),
            Value.make_ubits(bit_count=2, value=1),
        )))

    self.assertEqual(value_from_string('()'), Value.make_tuple(()))

    # Tuple of single element.
    want = Value.make_tuple((Value.make_ubits(bit_count=2, value=1),))
    got = value_from_string('(bits[2]:0x1,)')
    self.assertEqual(want, got)

    with self.assertRaises(ValueParseError) as cm:
      value_from_string('(,)')

    self.assertIn('Unexpected token in value', str(cm.exception))
Exemple #3
0
 def test_array_values(self):
   self.assertEqual(
       value_from_string('[(u8:0xff, u2:0x1), (u8:0, u2:3)]'),
       Value.make_array((
           Value.make_tuple((
               Value.make_ubits(bit_count=8, value=0xff),
               Value.make_ubits(bit_count=2, value=1),
           )),
           Value.make_tuple((
               Value.make_ubits(bit_count=8, value=0x0),
               Value.make_ubits(bit_count=2, value=3),
           )),
       )))
Exemple #4
0
def ir_value_to_interpreter_value(value: ir_value_mod.Value) -> Value:
  """Converts an IR Value to an interpreter Value."""
  if value.is_bits():
    if value.get_bits().bit_count() <= 64:
      return Value.make_bits(Tag.UBITS, value.get_bits())
    else:
      # For wide values which do not fit in 64 bits, parse value as as string.
      return value_from_string(value.to_str(FormatPreference.HEX))

  elif value.is_array():
    return Value.make_array(
        tuple(ir_value_to_interpreter_value(e) for e in value.get_elements()))
  else:
    assert value.is_tuple()
    return Value.make_tuple(
        tuple(ir_value_to_interpreter_value(e) for e in value.get_elements()))
Exemple #5
0
def parse_args(args_text: Text) -> Args:
    """Parses a semicolon-delimited list of values.

  Example input:
    bits[32]:6; (bits[8]:2, bits[16]:4)

  Returns bits values are always unsigned.

  Args:
    args_text: Text to parse.

  Returns:
    List of parsed Values,
  """
    return tuple(
        value_parser.value_from_string(a) for a in args_text.split(';')
        if a.strip())