@@ -510,7 +510,9 @@ func do_SET_ADD(vm *Vm, i int32) {
510510// iterations of the loop.
511511func do_LIST_APPEND (vm * Vm , i int32 ) {
512512 defer vm .CheckException ()
513- vm .NotImplemented ("LIST_APPEND" , i )
513+ w := vm .POP ()
514+ v := vm .PEEK (int (i ))
515+ v .(* py.List ).Append (w )
514516}
515517
516518// Calls dict.setitem(TOS1[-i], TOS, TOS1). Used to implement dict comprehensions.
@@ -759,10 +761,7 @@ func do_LOAD_NAME(vm *Vm, namei int32) {
759761func do_BUILD_TUPLE (vm * Vm , count int32 ) {
760762 defer vm .CheckException ()
761763 tuple := make (py.Tuple , count )
762- p := len (vm .frame .Stack ) - int (count )
763- for i := range tuple {
764- tuple [i ] = vm .frame .Stack [p + i ]
765- }
764+ copy (tuple , vm .frame .Stack [len (vm .frame .Stack )- int (count ):])
766765 vm .DROPN (int (count ))
767766 vm .PUSH (tuple )
768767}
@@ -776,11 +775,7 @@ func do_BUILD_SET(vm *Vm, count int32) {
776775// Works as BUILD_TUPLE, but creates a list.
777776func do_BUILD_LIST (vm * Vm , count int32 ) {
778777 defer vm .CheckException ()
779- list := make (py.List , count )
780- p := len (vm .frame .Stack ) - int (count )
781- for i := range list {
782- list [i ] = vm .frame .Stack [p + i ]
783- }
778+ list := py .NewListFromItems (vm .frame .Stack [len (vm .frame .Stack )- int (count ):])
784779 vm .DROPN (int (count ))
785780 vm .PUSH (list )
786781}
0 commit comments