Exemplo n.º 1
0
 def test_equality(self):
     fake_pos = span.Pos('<fake>', 0, 0)
     fake_span = span.Span(fake_pos, fake_pos)
     p = BitsType(signed=False, size=ParametricSymbol('N', fake_span))
     c = BitsType(signed=False, size=32)
     self.assertTrue(p.__ne__(c))
     self.assertFalse(p.__eq__(c))
Exemplo n.º 2
0
 def test_stringify(self):
     # Test without a suffix.
     t = BitsType(signed=False, size=3)
     fake_pos = span.Pos('<fake>', 9, 10)
     fake_span = span.Span(fake_pos, fake_pos)
     e = XlsTypeError(fake_span, t, t)
     self.assertEndsWith(str(e), '@ <fake>:10:11-10:11')
Exemplo n.º 3
0
 def test_simple_folding(self):
     fake_pos = span.Pos('<fake>', 0, 0)
     fake_span = span.Span(fake_pos, fake_pos)
     n = ParametricSymbol('N', fake_span)
     self.assertEqual(n, 0 + n)
     self.assertEqual(n, 1 * n)
     self.assertNotEqual(n, 0 * n)
Exemplo n.º 4
0
 def __init__(self, node: ast.AstNode, suffix: str = ''):
   assert isinstance(node, ast.AstNode), repr(node)
   message = 'Missing type for AST node: {node}{suffix}'.format(
       node=node, suffix=' :: ' + suffix if suffix else '')
   # We don't know the real span of the user, we rely on the appropriate caller
   # to catch the error and populate this field properly.
   fake_span = span.Span(span.Pos('<fake>', 0, 0), span.Pos('<fake>', 0, 0))
   super(TypeMissingError, self).__init__(message, fake_span)
   self.node = node
   self.suffix = suffix
   self.user = None
Exemplo n.º 5
0
 def test_sample_evaluation(self):
     fake_pos = span.Pos('<fake>', 0, 0)
     fake_span = span.Span(fake_pos, fake_pos)
     e = ParametricMul(
         ParametricConstant(3),
         ParametricAdd(ParametricSymbol('M', fake_span),
                       ParametricSymbol('N', fake_span)))
     self.assertEqual(e, e)
     self.assertEqual('(3)*((M)+(N))', str(e))
     self.assertEqual(6, e.evaluate(dict(N=2, M=0)))
     self.assertEqual(12, e.evaluate(dict(N=1, M=3)))
     self.assertEqual(set(['N', 'M']), e.get_freevars())
Exemplo n.º 6
0
from xls.dslx import bit_helpers
from xls.dslx import concrete_type as concrete_type_mod
from xls.dslx import import_routines
from xls.dslx import parser
from xls.dslx import parser_helpers
from xls.dslx import scanner
from xls.dslx import span
from xls.dslx import typecheck
from xls.dslx import xls_type_error
from xls.dslx.interpreter import interpreter as interpreter_mod
from xls.dslx.interpreter import value as value_mod

FLAGS = flags.FLAGS
FILENAME = '/fake/repl.x'
FAKE_POS = span.Pos(FILENAME, 0, 0)
FAKE_SPAN = span.Span(FAKE_POS, FAKE_POS)
UN_KEYWORD = scanner.Token(scanner.TokenKind.KEYWORD, FAKE_SPAN,
                           scanner.Keyword.UN)
SN_KEYWORD = scanner.Token(scanner.TokenKind.KEYWORD, FAKE_SPAN,
                           scanner.Keyword.SN)


def concrete_type_to_annotation(
    concrete_type: concrete_type_mod.ConcreteType) -> ast.TypeAnnotation:
  if isinstance(concrete_type, concrete_type_mod.BitsType):
    keyword = SN_KEYWORD if concrete_type.get_signedness() else UN_KEYWORD
    num_tok = scanner.Token(scanner.TokenKind.NUMBER, FAKE_SPAN,
                            concrete_type.get_total_bit_count())
    return ast.make_builtin_type_annotation(
        FAKE_SPAN, keyword, dims=(ast.Number(num_tok),))