@@ -527,6 +527,58 @@ def test_symtable_entry_repr(self):
527527 expected = f"<symtable entry top({ self .top .get_id ()} ), line { self .top .get_lineno ()} >"
528528 self .assertEqual (repr (self .top ._table ), expected )
529529
530+ def test_lambda (self ):
531+ st = symtable .symtable ("lambda x: x" , "?" , "exec" )
532+ self .assertEqual (len (st .get_children ()), 1 )
533+ st = st .get_children ()[0 ]
534+ self .assertIs (st .get_type (), symtable .SymbolTableType .FUNCTION )
535+ self .assertEqual (st .get_name (), "<lambda>" )
536+ self .assertFalse (st .is_nested ())
537+ self .assertEqual (sorted (st .get_identifiers ()), ["x" ])
538+ self .assertEqual (st .get_children (), [])
539+
540+ def test_nested_lambda (self ):
541+ st = symtable .symtable ("lambda x: lambda y=x: y" , "?" , "exec" )
542+ self .assertEqual (len (st .get_children ()), 1 )
543+ st = st .get_children ()[0 ]
544+ self .assertIs (st .get_type (), symtable .SymbolTableType .FUNCTION )
545+ self .assertEqual (st .get_name (), "<lambda>" )
546+ self .assertFalse (st .is_nested ())
547+ self .assertEqual (sorted (st .get_identifiers ()), ["x" ])
548+ self .assertEqual (len (st .get_children ()), 1 )
549+ st = st .get_children ()[0 ]
550+ self .assertIs (st .get_type (), symtable .SymbolTableType .FUNCTION )
551+ self .assertEqual (st .get_name (), "<lambda>" )
552+ self .assertTrue (st .is_nested ())
553+ self .assertEqual (sorted (st .get_identifiers ()), ["y" ])
554+ self .assertEqual (st .get_children (), [])
555+
556+ def test_genexpr (self ):
557+ st = symtable .symtable ("(x for x in a)" , "?" , "exec" )
558+ self .assertEqual (len (st .get_children ()), 1 )
559+ st = st .get_children ()[0 ]
560+ self .assertIs (st .get_type (), symtable .SymbolTableType .FUNCTION )
561+ self .assertEqual (st .get_name (), "<genexpr>" )
562+ self .assertFalse (st .is_nested ())
563+ self .assertEqual (sorted (st .get_identifiers ()), [".0" , "x" ])
564+ self .assertEqual (st .get_children (), [])
565+
566+ def test_nested_genexpr (self ):
567+ st = symtable .symtable ("((y for y in x) for x in a)" , "?" , "exec" )
568+ self .assertEqual (len (st .get_children ()), 1 )
569+ st = st .get_children ()[0 ]
570+ self .assertIs (st .get_type (), symtable .SymbolTableType .FUNCTION )
571+ self .assertEqual (st .get_name (), "<genexpr>" )
572+ self .assertFalse (st .is_nested ())
573+ self .assertEqual (sorted (st .get_identifiers ()), [".0" , "x" ])
574+ self .assertEqual (len (st .get_children ()), 1 )
575+ st = st .get_children ()[0 ]
576+ self .assertIs (st .get_type (), symtable .SymbolTableType .FUNCTION )
577+ self .assertEqual (st .get_name (), "<genexpr>" )
578+ self .assertTrue (st .is_nested ())
579+ self .assertEqual (sorted (st .get_identifiers ()), [".0" , "y" ])
580+ self .assertEqual (st .get_children (), [])
581+
530582
531583class ComprehensionTests (unittest .TestCase ):
532584 def get_identifiers_recursive (self , st , res ):
0 commit comments