Пример #1
0
def test_external_attr_with_args():
    attrs = [ast.Attribute('external', args=(ast.BooleanConstant(True), ))]
    foo_func = ast.Function(
        ast.FunctionProto('foo', [], ast.BuiltinTypes.I32, attrs))
    ap = AttrPass()
    with pytest.raises(DumbTypeError):
        ap.visit(foo_func)
Пример #2
0
 def parse_bool(self):
     """expr : BOOL"""
     bool_tok = self.curr_token
     value = True if bool_tok.value == 'true' else False
     node = ast.BooleanConstant(value, loc=bool_tok.loc)
     self.advance()
     return node
Пример #3
0
def test_if_with_else():
    cond = ast.BooleanConstant(True)
    root = ast.If(cond, ast.Block([]), ast.Block([]))
    tp = TypePass()

    tp.visit(root)
Пример #4
0
def shift_binop(request):
    return request.param


@pytest.fixture(params=[
    Operator.LOGICAL_OR,
    Operator.LOGICAL_AND
])
def logical_binop(request):
    return request.param


@pytest.mark.parametrize('value,expected_ty', [
    (ast.IntegerConstant(1), BuiltinTypes.I32),
    (ast.FloatConstant(1.0), BuiltinTypes.F32),
    (ast.BooleanConstant(True), BuiltinTypes.BOOL),
    (ast.StringConstant('foo'), BuiltinTypes.STR)
])
def test_builtin_literal_types(value, expected_ty):
    tp = TypePass()

    actual_ty = tp.visit(value)

    assert actual_ty == expected_ty


@pytest.mark.parametrize('left,right,expected_ty', [
    (ast.IntegerConstant(1), ast.IntegerConstant(2), BuiltinTypes.I32),
    (ast.IntegerConstant(1), ast.FloatConstant(2.0), BuiltinTypes.F32),
    (ast.FloatConstant(2.0), ast.IntegerConstant(1), BuiltinTypes.F32),
    (ast.FloatConstant(2.0), ast.FloatConstant(2.0), BuiltinTypes.F32),
Пример #5
0
class StubDeclVisitor(DeclVisitor):
    def visit_Function(self, node):
        raise RuntimeError('Unexpected call.')

    def visit_TranslationUnit(self, node):
        raise RuntimeError('Unexpected call.')


@pytest.mark.parametrize('node', [
    ast.BinaryOp(None, None, None),
    ast.Assignment(None, None),
    ast.UnaryOp(None, None),
    ast.Cast(None, None),
    ast.IntegerConstant(None),
    ast.FloatConstant(None),
    ast.BooleanConstant(None),
    ast.StringConstant(None),
    ast.Identifier(None),
    ast.FuncCall(None, None)
])
def test_expr_visitor(node):
    visitor = StubExprVisitor()
    method_name = 'visit_' + type(node).__name__
    with mock.patch.object(visitor, method_name):
        visitor.visit(node)
        getattr(visitor, method_name).assert_called_once_with(node)


@pytest.mark.parametrize('node', [
    ast.Block(None),
    ast.If(None, None),
Пример #6
0
def test_break():
    root = ast.Block(
        [ast.While(ast.BooleanConstant(True), ast.Block([ast.Break()]))])
    lp = LoopPass()
    lp.visit(root)