@@ -310,8 +310,8 @@ impl<'src> Compiler<'src> {
310310 kwonlyarg_count : 0 ,
311311 source_path : source_code. path . to_owned ( ) ,
312312 first_line_number : OneIndexed :: MIN ,
313- obj_name : code_name,
314-
313+ obj_name : code_name. clone ( ) ,
314+ qualname : Some ( code_name ) ,
315315 blocks : vec ! [ ir:: Block :: default ( ) ] ,
316316 current_block : ir:: BlockIdx ( 0 ) ,
317317 constants : IndexSet :: default ( ) ,
@@ -402,6 +402,13 @@ impl Compiler<'_> {
402402 . map ( |( var, _) | var. clone ( ) )
403403 . collect ( ) ;
404404
405+ // Calculate qualname based on the current qualified path
406+ let qualname = if self . qualified_path . is_empty ( ) {
407+ Some ( obj_name. clone ( ) )
408+ } else {
409+ Some ( self . qualified_path . join ( "." ) )
410+ } ;
411+
405412 let info = ir:: CodeInfo {
406413 flags,
407414 posonlyarg_count,
@@ -410,6 +417,7 @@ impl Compiler<'_> {
410417 source_path,
411418 first_line_number,
412419 obj_name,
420+ qualname,
413421
414422 blocks : vec ! [ ir:: Block :: default ( ) ] ,
415423 current_block : ir:: BlockIdx ( 0 ) ,
@@ -1496,6 +1504,10 @@ impl Compiler<'_> {
14961504
14971505 self . push_qualified_path ( name) ;
14981506 let qualified_name = self . qualified_path . join ( "." ) ;
1507+
1508+ // Update the qualname in the current code info
1509+ self . code_stack . last_mut ( ) . unwrap ( ) . qualname = Some ( qualified_name. clone ( ) ) ;
1510+
14991511 self . push_qualified_path ( "<locals>" ) ;
15001512
15011513 let ( doc_str, body) = split_doc ( body, & self . opts ) ;
@@ -1720,6 +1732,9 @@ impl Compiler<'_> {
17201732
17211733 self . push_output ( bytecode:: CodeFlags :: empty ( ) , 0 , 0 , 0 , name. to_owned ( ) ) ;
17221734
1735+ // Update the qualname in the current code info
1736+ self . code_stack . last_mut ( ) . unwrap ( ) . qualname = Some ( qualified_name. clone ( ) ) ;
1737+
17231738 let ( doc_str, body) = split_doc ( body, & self . opts ) ;
17241739
17251740 let dunder_name = self . name ( "__name__" ) ;
@@ -3495,6 +3510,9 @@ impl Compiler<'_> {
34953510 let mut func_flags = self
34963511 . enter_function ( & name, parameters. as_deref ( ) . unwrap_or ( & Default :: default ( ) ) ) ?;
34973512
3513+ // Lambda qualname should be <lambda>
3514+ self . code_stack . last_mut ( ) . unwrap ( ) . qualname = Some ( name. clone ( ) ) ;
3515+
34983516 self . ctx = CompileContext {
34993517 loop_data : Option :: None ,
35003518 in_class : prev_ctx. in_class ,
@@ -3956,6 +3974,10 @@ impl Compiler<'_> {
39563974
39573975 // Create magnificent function <listcomp>:
39583976 self . push_output ( flags, 1 , 1 , 0 , name. to_owned ( ) ) ;
3977+
3978+ // Set qualname for comprehension
3979+ self . code_stack . last_mut ( ) . unwrap ( ) . qualname = Some ( name. to_owned ( ) ) ;
3980+
39593981 let arg0 = self . varname ( ".0" ) ?;
39603982
39613983 let return_none = init_collection. is_none ( ) ;
0 commit comments