@@ -802,72 +802,7 @@ function DefineObjectProperty(obj, p, desc, should_throw) {
802802
803803// ES5 section 15.4.5.1.
804804function DefineArrayProperty ( obj , p , desc , should_throw ) {
805- // Note that the length of an array is not actually stored as part of the
806- // property, hence we use generated code throughout this function instead of
807- // DefineObjectProperty() to modify its value.
808-
809- // Step 3 - Special handling for length property.
810- if ( p === "length" ) {
811- var length = obj . length ;
812- var old_length = length ;
813- if ( ! desc . hasValue ( ) ) {
814- return DefineObjectProperty ( obj , "length" , desc , should_throw ) ;
815- }
816- var new_length = $toUint32 ( desc . getValue ( ) ) ;
817- if ( new_length != $toNumber ( desc . getValue ( ) ) ) {
818- throw MakeRangeError ( kArrayLengthOutOfRange ) ;
819- }
820- var length_desc = GetOwnPropertyJS ( obj , "length" ) ;
821- if ( new_length != length && ! length_desc . isWritable ( ) ) {
822- if ( should_throw ) {
823- throw MakeTypeError ( kRedefineDisallowed , p ) ;
824- } else {
825- return false ;
826- }
827- }
828- var threw = false ;
829-
830- var emit_splice = % IsObserved ( obj ) && new_length !== old_length ;
831- var removed ;
832- if ( emit_splice ) {
833- $observeBeginPerformSplice ( obj ) ;
834- removed = [ ] ;
835- if ( new_length < old_length )
836- removed . length = old_length - new_length ;
837- }
838-
839- while ( new_length < length -- ) {
840- var index = $toString ( length ) ;
841- if ( emit_splice ) {
842- var deletedDesc = GetOwnPropertyJS ( obj , index ) ;
843- if ( deletedDesc && deletedDesc . hasValue ( ) )
844- removed [ length - new_length ] = deletedDesc . getValue ( ) ;
845- }
846- if ( ! Delete ( obj , index , false ) ) {
847- new_length = length + 1 ;
848- threw = true ;
849- break ;
850- }
851- }
852- threw = ! DefineObjectProperty ( obj , "length" , desc , should_throw ) || threw ;
853- if ( emit_splice ) {
854- $observeEndPerformSplice ( obj ) ;
855- $observeEnqueueSpliceRecord ( obj ,
856- new_length < old_length ? new_length : old_length ,
857- removed ,
858- new_length > old_length ? new_length - old_length : 0 ) ;
859- }
860- if ( threw ) {
861- if ( should_throw ) {
862- throw MakeTypeError ( kRedefineDisallowed , p ) ;
863- } else {
864- return false ;
865- }
866- }
867- return true ;
868- }
869-
870- // Step 4 - Special handling for array index.
805+ // Step 3 - Special handling for array index.
871806 if ( ! IS_SYMBOL ( p ) ) {
872807 var index = $toUint32 ( p ) ;
873808 var emit_splice = false ;
0 commit comments