Пример #1
0
def while_loop_has_child_names_resolved():
    _assert_children_resolved(
        lambda ref: nodes.while_(ref, [], []),
    )
    _assert_children_resolved(
        lambda ref: nodes.while_(nodes.bool_literal(True), [nodes.expression_statement(ref)], []),
    )
    _assert_children_resolved(
        lambda ref: nodes.while_(nodes.bool_literal(True), [], [nodes.expression_statement(ref)]),
    )
Пример #2
0
def break_is_not_valid_in_while_loop_else_body():
    break_node = nodes.break_()
    node = nodes.while_(nodes.bool_literal(True), [], [break_node])
    error = assert_raises(errors.TypeCheckError,
        lambda: check_loop_control(node, False))
    assert_equal(break_node, error.node)
    assert_equal("'break' outside loop", str(error))
Пример #3
0
def break_is_not_valid_in_function_in_while_loop_body():
    break_node = nodes.break_()
    func_node = nodes.func("f", nodes.args([]), [break_node], type=None)
    node = nodes.while_(nodes.bool_literal(True), [func_node], [])
    error = assert_raises(errors.TypeCheckError,
        lambda: check_loop_control(node, False))
    assert_equal(break_node, error.node)
    assert_equal("'break' outside loop", str(error))
Пример #4
0
def while_loop_has_condition_type_checked():
    condition_node = nodes.ref("x")
    node = nodes.while_(condition_node, [])
    
    try:
        update_context(node)
        assert False, "Expected error"
    except errors.TypeCheckError as error:
        assert_equal(condition_node, error.node)
Пример #5
0
def children_of_while_loop_are_checked():
    _assert_child_expression_is_checked(lambda generate:
        nodes.while_(generate.unbound_ref(), [], [])
    )
    _assert_child_statement_is_checked(lambda generate:
        nodes.while_(
            nodes.bool_literal(True),
            [generate.unbound_ref_statement()],
            []
        )
    )
    _assert_child_statement_is_checked(lambda generate:
        nodes.while_(
            nodes.bool_literal(True),
            [],
            [generate.unbound_ref_statement()]
        )
    )
Пример #6
0
 def test_transform_while_loop(self):
     _assert_transform(
         nodes.while_(
             nodes.ref("x"),
             [nodes.ret(nodes.ref("y"))],
         ),
         cc.while_(
             cc.call(cc.builtin("bool"), [cc.ref("x")]),
             [cc.ret(cc.ref("y"))],
         )
     )
Пример #7
0
 def test_transform_while_loop_with_else_branch(self):
     _assert_transform(
         nodes.while_(
             nodes.ref("x"),
             [nodes.ret(nodes.ref("y"))],
             [nodes.ret(nodes.ref("z"))]
             
         ),
         """
             var __nope_u_normal_exit0 = False
             while True:
                 if not $builtins.bool(x):
                     __nope_u_normal_exit0 = True
                     break
                 return y
             if __nope_u_normal_exit0:
                 return z
         """
     )
Пример #8
0
def break_is_valid_in_while_loop_body():
    node = nodes.while_(nodes.bool_literal(True), [nodes.break_()])
    check_loop_control(node, False)
Пример #9
0
def while_loop_has_else_body_type_checked():
    assert_statement_is_type_checked(
        lambda bad_statement:
            nodes.while_(nodes.bool_literal(True), [], [bad_statement])
    )
Пример #10
0
def test_parse_while_loop_with_else_body():
    expected = nodes.while_(nodes.ref("x"), [], [nodes.ret(nodes.ref("x"))])
    
    _assert_statement_parse(expected, "while x:\n  pass\nelse:\n  return x")
Пример #11
0
def test_parse_while_loop():
    expected = nodes.while_(nodes.ref("x"), [nodes.ret(nodes.ref("x"))])
    
    _assert_statement_parse(expected, "while x:\n  return x")
Пример #12
0
def declarations_in_both_body_and_else_body_of_while_loop_are_not_definitely_bound():
    _assert_name_is_not_definitely_bound(lambda generate:
        nodes.while_(nodes.bool_literal(True), [generate.assignment()], [generate.assignment()])
    )