@@ -5,7 +5,7 @@ use crate::{
5
5
function:: { PyCell , PyCellRef , PyFunction } ,
6
6
tuple:: { PyTuple , PyTupleTyped } ,
7
7
PyBaseExceptionRef , PyCode , PyCoroutine , PyDict , PyDictRef , PyGenerator , PyListRef , PySet ,
8
- PySlice , PyStr , PyStrRef , PyTraceback , PyTypeRef ,
8
+ PySlice , PyStr , PyStrRef , PyStrStatic , PyTraceback , PyTypeRef ,
9
9
} ,
10
10
bytecode,
11
11
convert:: { IntoObject , ToPyResult } ,
@@ -187,7 +187,7 @@ impl FrameRef {
187
187
let j = std:: cmp:: min ( map. len ( ) , code. varnames . len ( ) ) ;
188
188
if !code. varnames . is_empty ( ) {
189
189
let fastlocals = self . fastlocals . lock ( ) ;
190
- for ( k, v) in itertools:: zip ( & map[ ..j] , & * * fastlocals) {
190
+ for ( & k, v) in itertools:: zip ( & map[ ..j] , & * * fastlocals) {
191
191
match locals. mapping ( ) . ass_subscript ( k, v. clone ( ) , vm) {
192
192
Ok ( ( ) ) => { }
193
193
Err ( e) if e. fast_isinstance ( & vm. ctx . exceptions . key_error ) => { }
@@ -196,8 +196,8 @@ impl FrameRef {
196
196
}
197
197
}
198
198
if !code. cellvars . is_empty ( ) || !code. freevars . is_empty ( ) {
199
- let map_to_dict = |keys : & [ PyStrRef ] , values : & [ PyCellRef ] | {
200
- for ( k, v) in itertools:: zip ( keys, values) {
199
+ let map_to_dict = |keys : & [ & PyStrStatic ] , values : & [ PyCellRef ] | {
200
+ for ( & k, v) in itertools:: zip ( keys, values) {
201
201
if let Some ( value) = v. get ( ) {
202
202
locals. mapping ( ) . ass_subscript ( k, Some ( value) , vm) ?;
203
203
} else {
@@ -424,19 +424,19 @@ impl ExecutingFrame<'_> {
424
424
}
425
425
426
426
fn unbound_cell_exception ( & self , i : usize , vm : & VirtualMachine ) -> PyBaseExceptionRef {
427
- if let Some ( name) = self . code . cellvars . get ( i) {
427
+ if let Some ( & name) = self . code . cellvars . get ( i) {
428
428
vm. new_exception_msg (
429
429
vm. ctx . exceptions . unbound_local_error . clone ( ) ,
430
430
format ! ( "local variable '{}' referenced before assignment" , name) ,
431
431
)
432
432
} else {
433
- let name = & self . code . freevars [ i - self . code . cellvars . len ( ) ] ;
433
+ let name = self . code . freevars [ i - self . code . cellvars . len ( ) ] ;
434
434
vm. new_name_error (
435
435
format ! (
436
436
"free variable '{}' referenced before assignment in enclosing scope" ,
437
437
name
438
438
) ,
439
- name,
439
+ name. to_owned ( ) ,
440
440
)
441
441
}
442
442
}
@@ -471,7 +471,7 @@ impl ExecutingFrame<'_> {
471
471
Ok ( None )
472
472
}
473
473
bytecode:: Instruction :: ImportName { idx } => {
474
- self . import ( vm, Some ( self . code . names [ * idx as usize ] . clone ( ) ) )
474
+ self . import ( vm, Some ( self . code . names [ * idx as usize ] . to_owned ( ) ) )
475
475
}
476
476
bytecode:: Instruction :: ImportNameless => self . import ( vm, None ) ,
477
477
bytecode:: Instruction :: ImportStar => self . import_star ( vm) ,
@@ -495,7 +495,7 @@ impl ExecutingFrame<'_> {
495
495
Ok ( None )
496
496
}
497
497
bytecode:: Instruction :: LoadNameAny ( idx) => {
498
- let name = & self . code . names [ * idx as usize ] ;
498
+ let name = self . code . names [ * idx as usize ] ;
499
499
let value = self . locals . mapping ( ) . subscript ( name, vm) . ok ( ) ;
500
500
self . push_value ( match value {
501
501
Some ( x) => x,
@@ -519,8 +519,8 @@ impl ExecutingFrame<'_> {
519
519
}
520
520
bytecode:: Instruction :: LoadClassDeref ( i) => {
521
521
let i = * i as usize ;
522
- let name = self . code . freevars [ i - self . code . cellvars . len ( ) ] . clone ( ) ;
523
- let value = self . locals . mapping ( ) . subscript ( & name, vm) . ok ( ) ;
522
+ let name = self . code . freevars [ i - self . code . cellvars . len ( ) ] ;
523
+ let value = self . locals . mapping ( ) . subscript ( name, vm) . ok ( ) ;
524
524
self . push_value ( match value {
525
525
Some ( v) => v,
526
526
None => self . cells_frees [ i]
@@ -535,15 +535,15 @@ impl ExecutingFrame<'_> {
535
535
Ok ( None )
536
536
}
537
537
bytecode:: Instruction :: StoreLocal ( idx) => {
538
- let name = & self . code . names [ * idx as usize ] ;
538
+ let name = self . code . names [ * idx as usize ] ;
539
539
let value = self . pop_value ( ) ;
540
540
self . locals . mapping ( ) . ass_subscript ( name, Some ( value) , vm) ?;
541
541
Ok ( None )
542
542
}
543
543
bytecode:: Instruction :: StoreGlobal ( idx) => {
544
544
let value = self . pop_value ( ) ;
545
545
self . globals
546
- . set_item ( & * self . code . names [ * idx as usize ] . clone ( ) , value, vm) ?;
546
+ . set_item ( self . code . names [ * idx as usize ] , value, vm) ?;
547
547
Ok ( None )
548
548
}
549
549
bytecode:: Instruction :: StoreDeref ( i) => {
@@ -556,28 +556,30 @@ impl ExecutingFrame<'_> {
556
556
Ok ( None )
557
557
}
558
558
bytecode:: Instruction :: DeleteLocal ( idx) => {
559
- let name = & self . code . names [ * idx as usize ] ;
559
+ let name = self . code . names [ * idx as usize ] ;
560
560
let res = self . locals . mapping ( ) . ass_subscript ( name, None , vm) ;
561
561
562
562
match res {
563
563
Ok ( ( ) ) => { }
564
564
Err ( e) if e. fast_isinstance ( & vm. ctx . exceptions . key_error ) => {
565
- return Err (
566
- vm. new_name_error ( format ! ( "name '{}' is not defined" , name) , name)
567
- )
565
+ return Err ( vm. new_name_error (
566
+ format ! ( "name '{}' is not defined" , name) ,
567
+ name. to_owned ( ) ,
568
+ ) )
568
569
}
569
570
Err ( e) => return Err ( e) ,
570
571
}
571
572
Ok ( None )
572
573
}
573
574
bytecode:: Instruction :: DeleteGlobal ( idx) => {
574
- let name = & self . code . names [ * idx as usize ] ;
575
- match self . globals . del_item ( & * * name, vm) {
575
+ let name = self . code . names [ * idx as usize ] ;
576
+ match self . globals . del_item ( name, vm) {
576
577
Ok ( ( ) ) => { }
577
578
Err ( e) if e. fast_isinstance ( & vm. ctx . exceptions . key_error ) => {
578
- return Err (
579
- vm. new_name_error ( format ! ( "name '{}' is not defined" , name) , name)
580
- )
579
+ return Err ( vm. new_name_error (
580
+ format ! ( "name '{}' is not defined" , name) ,
581
+ name. to_owned ( ) ,
582
+ ) )
581
583
}
582
584
Err ( e) => return Err ( e) ,
583
585
}
@@ -938,8 +940,8 @@ impl ExecutingFrame<'_> {
938
940
}
939
941
bytecode:: Instruction :: LoadMethod { idx } => {
940
942
let obj = self . pop_value ( ) ;
941
- let method_name = self . code . names [ * idx as usize ] . clone ( ) ;
942
- let method = PyMethod :: get ( obj, method_name, vm) ?;
943
+ let method_name = self . code . names [ * idx as usize ] ;
944
+ let method = PyMethod :: get ( obj, method_name. to_owned ( ) , vm) ?;
943
945
let ( target, is_method, func) = match method {
944
946
PyMethod :: Function { target, func } => ( target, true , func) ,
945
947
PyMethod :: Attribute ( val) => ( vm. ctx . none ( ) , false , val) ,
@@ -1106,7 +1108,7 @@ impl ExecutingFrame<'_> {
1106
1108
self . globals
1107
1109
. get_chain ( self . builtins , name, vm) ?
1108
1110
. ok_or_else ( || {
1109
- vm. new_name_error ( format ! ( "name '{}' is not defined" , name) , & name. to_owned ( ) )
1111
+ vm. new_name_error ( format ! ( "name '{}' is not defined" , name) , name. to_owned ( ) )
1110
1112
} )
1111
1113
}
1112
1114
@@ -1145,10 +1147,10 @@ impl ExecutingFrame<'_> {
1145
1147
#[ cfg_attr( feature = "flame-it" , flame( "Frame" ) ) ]
1146
1148
fn import_from ( & mut self , vm : & VirtualMachine , idx : bytecode:: NameIdx ) -> PyResult {
1147
1149
let module = self . last_value ( ) ;
1148
- let name = & self . code . names [ idx as usize ] ;
1149
- let err = || vm. new_import_error ( format ! ( "cannot import name '{}'" , name) , name. clone ( ) ) ;
1150
+ let name = self . code . names [ idx as usize ] ;
1151
+ let err = || vm. new_import_error ( format ! ( "cannot import name '{}'" , name) , name) ;
1150
1152
// Load attribute, and transform any error into import error.
1151
- if let Some ( obj) = vm. get_attribute_opt ( module. clone ( ) , name. clone ( ) ) ? {
1153
+ if let Some ( obj) = vm. get_attribute_opt ( module. clone ( ) , name) ? {
1152
1154
return Ok ( obj) ;
1153
1155
}
1154
1156
// fallback to importing '{module.__name__}.{name}' from sys.modules
@@ -1743,23 +1745,23 @@ impl ExecutingFrame<'_> {
1743
1745
}
1744
1746
1745
1747
fn load_attr ( & mut self , vm : & VirtualMachine , attr : bytecode:: NameIdx ) -> FrameResult {
1746
- let attr_name = self . code . names [ attr as usize ] . clone ( ) ;
1748
+ let attr_name = self . code . names [ attr as usize ] ;
1747
1749
let parent = self . pop_value ( ) ;
1748
1750
let obj = parent. get_attr ( attr_name, vm) ?;
1749
1751
self . push_value ( obj) ;
1750
1752
Ok ( None )
1751
1753
}
1752
1754
1753
1755
fn store_attr ( & mut self , vm : & VirtualMachine , attr : bytecode:: NameIdx ) -> FrameResult {
1754
- let attr_name = self . code . names [ attr as usize ] . clone ( ) ;
1756
+ let attr_name = self . code . names [ attr as usize ] ;
1755
1757
let parent = self . pop_value ( ) ;
1756
1758
let value = self . pop_value ( ) ;
1757
1759
parent. set_attr ( attr_name, value, vm) ?;
1758
1760
Ok ( None )
1759
1761
}
1760
1762
1761
1763
fn delete_attr ( & mut self , vm : & VirtualMachine , attr : bytecode:: NameIdx ) -> FrameResult {
1762
- let attr_name = self . code . names [ attr as usize ] . clone ( ) ;
1764
+ let attr_name = self . code . names [ attr as usize ] ;
1763
1765
let parent = self . pop_value ( ) ;
1764
1766
parent. del_attr ( attr_name, vm) ?;
1765
1767
Ok ( None )
0 commit comments