@@ -2138,10 +2138,18 @@ def _if_to_py_ast(ctx: GeneratorContext, node: If) -> GeneratedPyAST:
21382138 then_ast = __if_body_to_py_ast (ctx , node .then , result_name )
21392139 else_ast = __if_body_to_py_ast (ctx , node .else_ , result_name )
21402140
2141- test_name = genname (_IF_TEST_PREFIX )
2142- test_assign = ast .Assign (
2143- targets = [ast .Name (id = test_name , ctx = ast .Store ())], value = test_ast .node
2144- )
2141+ # Suppress the duplicate assignment statement if the `if` statement test is already
2142+ # an ast.Name instance.
2143+ if_test_deps : List [ast .AST ] = []
2144+ if isinstance (test_ast .node , ast .Name ):
2145+ test_name = test_ast .node .id
2146+ else :
2147+ test_name = genname (_IF_TEST_PREFIX )
2148+ if_test_deps .append (
2149+ ast .Assign (
2150+ targets = [ast .Name (id = test_name , ctx = ast .Store ())], value = test_ast .node
2151+ )
2152+ )
21452153
21462154 ifstmt = ast .If (
21472155 test = ast .BoolOp (
@@ -2168,7 +2176,7 @@ def _if_to_py_ast(ctx: GeneratorContext, node: If) -> GeneratedPyAST:
21682176 node = ast .Name (id = result_name , ctx = ast .Load ())
21692177 if result_name is not None
21702178 else _noop_node (),
2171- dependencies = list (chain (test_ast .dependencies , [ test_assign , ifstmt ])),
2179+ dependencies = list (chain (test_ast .dependencies , if_test_deps , [ ifstmt ])),
21722180 )
21732181
21742182
@@ -2297,19 +2305,23 @@ def _let_to_py_ast(ctx: GeneratorContext, node: Let) -> GeneratedPyAST:
22972305 sym .symbol (binding .name ), binding_name , LocalType .LET
22982306 )
22992307
2300- let_result_name = genname (_LET_RESULT_PREFIX )
23012308 body_ast = _synthetic_do_to_py_ast (ctx , node .body )
23022309 let_body_ast .extend (map (statementize , body_ast .dependencies ))
23032310
23042311 if node .env .pos == NodeSyntacticPosition .EXPR :
2305- let_body_ast .append (
2306- ast .Assign (
2307- targets = [ast .Name (id = let_result_name , ctx = ast .Store ())],
2308- value = body_ast .node ,
2312+ if isinstance (body_ast .node , ast .Name ):
2313+ let_result_node = body_ast .node
2314+ else :
2315+ let_result_name = genname (_LET_RESULT_PREFIX )
2316+ let_result_node = ast .Name (id = let_result_name , ctx = ast .Load ())
2317+ let_body_ast .append (
2318+ ast .Assign (
2319+ targets = [ast .Name (id = let_result_name , ctx = ast .Store ())],
2320+ value = body_ast .node ,
2321+ )
23092322 )
2310- )
23112323 return GeneratedPyAST (
2312- node = ast . Name ( id = let_result_name , ctx = ast . Load ()) ,
2324+ node = let_result_node ,
23132325 dependencies = let_body_ast ,
23142326 )
23152327 else :
0 commit comments