nl_tokens: ES6 Draft 15 . 13 . 5 . 5 . 3
pl_tokens: function ArrayBufferSlice ( start , end ) { if ( ! IS_ARRAYBUFFER ( this ) ) { throw MakeTypeError ( kIncompatibleMethodReceiver , 'ArrayBuffer.prototype.slice' , this ) ; } var relativeStart = TO_INTEGER ( start ) ; if ( ! IS_UNDEFINED ( end ) ) { end = TO_INTEGER ( end ) ; } var first ; var byte_length = % _ArrayBufferGetByteLength ( this ) ; if ( relativeStart < 0 ) { first = MaxSimple ( byte_length + relativeStart , 0 ) ; } else { first = MinSimple ( relativeStart , byte_length ) ; } var relativeEnd = IS_UNDEFINED ( <mask> ) ? byte_length : end ; var fin ; if ( relativeEnd < 0 ) { fin = MaxSimple ( byte_length + relativeEnd , 0 ) ; } else { fin = MinSimple ( relativeEnd , byte_length ) ; } if ( fin < first ) { fin = first ; } var newLen = fin - first ; var constructor = SpeciesConstructor ( this , GlobalArrayBuffer , true ) ; var result = new constructor ( newLen ) ; if ( ! IS_ARRAYBUFFER ( result ) ) { throw MakeTypeError ( kIncompatibleMethodReceiver , 'ArrayBuffer.prototype.slice' , result ) ; } // Checks for detached source/target ArrayBuffers are done inside of // %ArrayBufferSliceImpl; the reordering of checks does not violate // the spec because all exceptions thrown are TypeErrors. if ( result === this ) { throw MakeTypeError ( kArrayBufferSpeciesThis ) ; } if ( % _ArrayBufferGetByteLength ( result ) < newLen ) { throw MakeTypeError ( kArrayBufferTooShort ) ; } % ArrayBufferSliceImpl ( this , result , first , newLen ) ; return result ; }