@@ -198,10 +198,7 @@ impl Frame {
198198 ref symbols,
199199 ref level,
200200 } => self . import ( vm, name, symbols, * level) ,
201- bytecode:: Instruction :: ImportStar {
202- ref name,
203- ref level,
204- } => self . import_star ( vm, name, * level) ,
201+ bytecode:: Instruction :: ImportStar => self . import_star ( vm) ,
205202 bytecode:: Instruction :: ImportFrom { ref name } => self . import_from ( vm, name) ,
206203 bytecode:: Instruction :: LoadName {
207204 ref name,
@@ -740,25 +737,23 @@ impl Frame {
740737 // Load attribute, and transform any error into import error.
741738 let obj = vm
742739 . get_attribute ( module, name)
743- . map_err ( |_| vm. new_import_error ( format ! ( "cannot import name '{}'" , name) ) ) ;
744- self . push_value ( obj? ) ;
740+ . map_err ( |_| vm. new_import_error ( format ! ( "cannot import name '{}'" , name) ) ) ? ;
741+ self . push_value ( obj) ;
745742 Ok ( None )
746743 }
747744
748745 #[ cfg_attr( feature = "flame-it" , flame( "Frame" ) ) ]
749- fn import_star (
750- & self ,
751- vm : & VirtualMachine ,
752- module : & Option < String > ,
753- level : usize ,
754- ) -> FrameResult {
755- let module = module. clone ( ) . unwrap_or_default ( ) ;
756- let module = vm. import ( & module, & vm. ctx . new_tuple ( vec ! [ ] ) , level) ?;
746+ fn import_star ( & self , vm : & VirtualMachine ) -> FrameResult {
747+ let module = self . pop_value ( ) ;
757748
758749 // Grab all the names from the module and put them in the context
759750 if let Some ( dict) = & module. dict {
760751 for ( k, v) in dict {
761- self . scope . store_name ( & vm, & objstr:: get_value ( & k) , v) ;
752+ let k = vm. to_str ( & k) ?;
753+ let k = k. as_str ( ) ;
754+ if !k. starts_with ( '_' ) {
755+ self . scope . store_name ( & vm, k, v) ;
756+ }
762757 }
763758 }
764759 Ok ( None )
0 commit comments