示例#1
0
文件: ast_test.py 项目: mfkiwl/xls
    def test_type_annotation_properties(self):
        m = self.m
        fake_span = self.fake_span
        number_5 = ast.Number(m, fake_span, '5')
        number_2 = ast.Number(m, fake_span, '2')
        number_3 = ast.Number(m, fake_span, '3')
        bits_token = Token(value=Keyword.BITS, span=fake_span)
        un_token = Token(value=Keyword.UN, span=fake_span)
        u32_token = Token(value=Keyword.U32, span=fake_span)

        type_ = ast_helpers.make_builtin_type_annotation(
            m, fake_span, bits_token, (number_5, ))
        self.assertEqual('bits[5]', str(type_))

        type_ = ast_helpers.make_builtin_type_annotation(
            m, fake_span, bits_token, (number_5, number_2))
        self.assertIsInstance(type_, ast.ArrayTypeAnnotation)
        self.assertEqual('bits[5][2]', str(type_))

        type_ = ast_helpers.make_builtin_type_annotation(
            m, fake_span, u32_token, ())
        self.assertEqual('u32', str(type_))

        type_ = ast_helpers.make_builtin_type_annotation(
            m, fake_span, u32_token, (number_3, ))
        self.assertIsInstance(type_, ast.ArrayTypeAnnotation)
        self.assertEqual('u32[3]', str(type_))

        type_ = ast_helpers.make_builtin_type_annotation(
            m, fake_span, un_token, (number_2, ))
        self.assertEqual('uN[2]', str(type_))

        type_ = ast_helpers.make_builtin_type_annotation(
            m, fake_span, un_token, (number_2, number_3))
        self.assertIsInstance(type_, ast.ArrayTypeAnnotation)
        self.assertEqual('uN[2][3]', str(type_))

        # TODO(leary): 2020-08-24 delete bits in favor of uN
        # "no-volume" bits array.
        type_ = ast_helpers.make_builtin_type_annotation(
            m, fake_span, bits_token, ())
        self.assertEqual('bits', str(type_))

        # TypeRef with dims.
        name_def = ast.NameDef(m, fake_span, 'MyType')
        type_def = ast.TypeDef(m, fake_span, name_def, type_, public=False)
        type_ref = ast.TypeRef(m, fake_span, 'MyType', type_def)
        type_ = ast_helpers.make_type_ref_type_annotation(
            m, fake_span, type_ref, (number_2, number_3))
        self.assertIsInstance(type_, ast.ArrayTypeAnnotation)
        self.assertEqual('MyType[2][3]', str(type_))

        type_ = ast.TupleTypeAnnotation(
            m, fake_span,
            (ast_helpers.make_builtin_type_annotation(m, fake_span, bits_token,
                                                      (number_5, )),
             ast_helpers.make_builtin_type_annotation(m, fake_span, bits_token,
                                                      (number_2, ))))
        self.assertIsInstance(type_, ast.TupleTypeAnnotation)
        self.assertEqual('(bits[5], bits[2])', str(type_))
示例#2
0
 def _make_tuple_type(
         self, members: Tuple[ast.TypeAnnotation,
                              ...]) -> ast.TypeAnnotation:
     """Creates a tuple type with the given `members`."""
     tuple_type = ast.TupleTypeAnnotation(self.m, self.fake_span, members)
     self._type_bit_counts[str(tuple_type)] = sum(
         self._get_type_bit_count(t) for t in members)
     return tuple_type
示例#3
0
 def _make_tuple_type(
     self, members: Tuple[ast.TypeAnnotation, ...]) -> ast.TypeAnnotation:
   """Creates a tuple type with the given `members`."""
   tuple_type = ast.TupleTypeAnnotation(self.m, self.fake_span, members)
   return tuple_type