@@ -1520,13 +1520,18 @@ def _do_to_py_ast(ctx: GeneratorContext, node: Do) -> GeneratedPyAST:
15201520 )
15211521
15221522 fn_body_ast : List [ast .AST ] = []
1523- do_result_name = genname (_DO_PREFIX )
15241523 fn_body_ast .extend (map (statementize , body_ast .dependencies ))
1525- fn_body_ast .append (
1526- ast .Assign (
1527- targets = [ast .Name (id = do_result_name , ctx = ast .Store ())], value = body_ast .node
1524+
1525+ if isinstance (body_ast .node , ast .Name ):
1526+ do_result_name = body_ast .node .id
1527+ else :
1528+ do_result_name = genname (_DO_PREFIX )
1529+ fn_body_ast .append (
1530+ ast .Assign (
1531+ targets = [ast .Name (id = do_result_name , ctx = ast .Store ())],
1532+ value = body_ast .node ,
1533+ )
15281534 )
1529- )
15301535
15311536 return GeneratedPyAST (
15321537 node = ast .Name (id = do_result_name , ctx = ast .Load ()), dependencies = fn_body_ast
@@ -2311,6 +2316,7 @@ def _let_to_py_ast(ctx: GeneratorContext, node: Let) -> GeneratedPyAST:
23112316 if node .env .pos == NodeSyntacticPosition .EXPR :
23122317 if isinstance (body_ast .node , ast .Name ):
23132318 let_result_node = body_ast .node
2319+ assert isinstance (let_result_node .ctx , ast .Load )
23142320 else :
23152321 let_result_name = genname (_LET_RESULT_PREFIX )
23162322 let_result_node = ast .Name (id = let_result_name , ctx = ast .Load ())
@@ -2320,10 +2326,7 @@ def _let_to_py_ast(ctx: GeneratorContext, node: Let) -> GeneratedPyAST:
23202326 value = body_ast .node ,
23212327 )
23222328 )
2323- return GeneratedPyAST (
2324- node = let_result_node ,
2325- dependencies = let_body_ast ,
2326- )
2329+ return GeneratedPyAST (node = let_result_node , dependencies = let_body_ast )
23272330 else :
23282331 let_body_ast .append (body_ast .node )
23292332 return GeneratedPyAST (node = _noop_node (), dependencies = let_body_ast )
@@ -2356,21 +2359,23 @@ def _letfn_to_py_ast(ctx: GeneratorContext, node: LetFn) -> GeneratedPyAST:
23562359 )
23572360 )
23582361
2359- letfn_result_name = genname (_LETFN_RESULT_PREFIX )
23602362 body_ast = _synthetic_do_to_py_ast (ctx , node .body )
23612363 letfn_body_ast .extend (map (statementize , body_ast .dependencies ))
23622364
23632365 if node .env .pos == NodeSyntacticPosition .EXPR :
2364- letfn_body_ast .append (
2365- ast .Assign (
2366- targets = [ast .Name (id = letfn_result_name , ctx = ast .Store ())],
2367- value = body_ast .node ,
2366+ if isinstance (body_ast .node , ast .Name ):
2367+ letfn_result_node = body_ast .node
2368+ assert isinstance (letfn_result_node .ctx , ast .Load )
2369+ else :
2370+ letfn_result_name = genname (_LETFN_RESULT_PREFIX )
2371+ letfn_result_node = ast .Name (id = letfn_result_name , ctx = ast .Load ())
2372+ letfn_body_ast .append (
2373+ ast .Assign (
2374+ targets = [ast .Name (id = letfn_result_name , ctx = ast .Store ())],
2375+ value = body_ast .node ,
2376+ )
23682377 )
2369- )
2370- return GeneratedPyAST (
2371- node = ast .Name (id = letfn_result_name , ctx = ast .Load ()),
2372- dependencies = letfn_body_ast ,
2373- )
2378+ return GeneratedPyAST (node = letfn_result_node , dependencies = letfn_body_ast )
23742379 else :
23752380 letfn_body_ast .append (body_ast .node )
23762381 return GeneratedPyAST (node = _noop_node (), dependencies = letfn_body_ast )
0 commit comments