@@ -2138,10 +2138,18 @@ def _if_to_py_ast(ctx: GeneratorContext, node: If) -> GeneratedPyAST:
2138
2138
then_ast = __if_body_to_py_ast (ctx , node .then , result_name )
2139
2139
else_ast = __if_body_to_py_ast (ctx , node .else_ , result_name )
2140
2140
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
+ )
2145
2153
2146
2154
ifstmt = ast .If (
2147
2155
test = ast .BoolOp (
@@ -2168,7 +2176,7 @@ def _if_to_py_ast(ctx: GeneratorContext, node: If) -> GeneratedPyAST:
2168
2176
node = ast .Name (id = result_name , ctx = ast .Load ())
2169
2177
if result_name is not None
2170
2178
else _noop_node (),
2171
- dependencies = list (chain (test_ast .dependencies , [ test_assign , ifstmt ])),
2179
+ dependencies = list (chain (test_ast .dependencies , if_test_deps , [ ifstmt ])),
2172
2180
)
2173
2181
2174
2182
@@ -2297,19 +2305,23 @@ def _let_to_py_ast(ctx: GeneratorContext, node: Let) -> GeneratedPyAST:
2297
2305
sym .symbol (binding .name ), binding_name , LocalType .LET
2298
2306
)
2299
2307
2300
- let_result_name = genname (_LET_RESULT_PREFIX )
2301
2308
body_ast = _synthetic_do_to_py_ast (ctx , node .body )
2302
2309
let_body_ast .extend (map (statementize , body_ast .dependencies ))
2303
2310
2304
2311
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
+ )
2309
2322
)
2310
- )
2311
2323
return GeneratedPyAST (
2312
- node = ast . Name ( id = let_result_name , ctx = ast . Load ()) ,
2324
+ node = let_result_node ,
2313
2325
dependencies = let_body_ast ,
2314
2326
)
2315
2327
else :
0 commit comments