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
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))
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')
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)
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())
from xls.dslx import ast 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),))