From e2c5df7aa1435f6fd242d85fee0fda5d7177278a Mon Sep 17 00:00:00 2001 From: Kevin Gibbons Date: Tue, 22 Jul 2025 14:19:05 -0700 Subject: [PATCH 1/3] replace extra method with string parameter --- spec.emu | 40 ++++++++-------------------------------- 1 file changed, 8 insertions(+), 32 deletions(-) diff --git a/spec.emu b/spec.emu index 3d7fda9..6f3b6bb 100644 --- a/spec.emu +++ b/spec.emu @@ -39,8 +39,8 @@ copyright: false - -

Iterator.prototype.sliding ( _windowSize_ )

+ +

Iterator.prototype.windows ( _windowSize_ [ , _undersized_ ] )

This method performs the following steps when called:

1. Let _O_ be the *this* value. @@ -49,13 +49,17 @@ copyright: false 1. If _windowSize_ is not an integral Number in the inclusive interval from *1*๐”ฝ to ๐”ฝ(232 - 1), then 1. Let _error_ be ThrowCompletion(a newly created *RangeError* object). 1. Return ? IteratorClose(_iterated_, _error_). + 1. If _undersized_ is *undefined*, set _undersized_ to *"skip"*. + 1. If _undersized_ is neither *"skip"* nor *"truncate"*, then + 1. Let _error_ be ThrowCompletion(a newly created *TypeError* object). + 1. Return ? IteratorClose(_iterated_, _error_). 1. Set _iterated_ to ? GetIteratorDirect(_O_). - 1. Let _closure_ be a new Abstract Closure with no parameters that captures _iterated_ and _windowSize_ and performs the following steps when called: + 1. Let _closure_ be a new Abstract Closure with no parameters that captures _iterated_, _windowSize_, and _undersized_ and performs the following steps when called: 1. Let _buffer_ be a new empty List. 1. Repeat, 1. Let _value_ be ? IteratorStepValue(_iterated_). 1. If _value_ is ~done~, then - 1. If _buffer_ is not empty and the number of elements in _buffer_ < โ„(_windowSize_), then + 1. If _undersized_ is *"truncate"*, _buffer_ is not empty, and the number of elements in _buffer_ < โ„(_windowSize_), then 1. Perform Completion(Yield(CreateArrayFromList(_buffer_))). 1. Return ReturnCompletion(*undefined*). 1. If the number of elements in _buffer_ is โ„(_windowSize_), then @@ -69,31 +73,3 @@ copyright: false 1. Return _result_.
- - -

Iterator.prototype.windows ( _windowSize_ )

-

This method performs the following steps when called:

- - 1. Let _O_ be the *this* value. - 1. If _O_ is not an Object, throw a *TypeError* exception. - 1. Let _iterated_ be the Iterator Record { [[Iterator]]: _O_, [[NextMethod]]: *undefined*, [[Done]]: *false* }. - 1. If _windowSize_ is not an integral Number in the inclusive interval from *1*๐”ฝ to ๐”ฝ(232 - 1), then - 1. Let _error_ be ThrowCompletion(a newly created *RangeError* object). - 1. Return ? IteratorClose(_iterated_, _error_). - 1. Set _iterated_ to ? GetIteratorDirect(_O_). - 1. Let _closure_ be a new Abstract Closure with no parameters that captures _iterated_ and _windowSize_ and performs the following steps when called: - 1. Let _buffer_ be a new empty List. - 1. Repeat, - 1. Let _value_ be ? IteratorStepValue(_iterated_). - 1. If _value_ is ~done~, return ReturnCompletion(*undefined*). - 1. If the number of elements in _buffer_ is โ„(_windowSize_), then - 1. Remove the first element from _buffer_. - 1. Append _value_ to _buffer_. - 1. If the number of elements in _buffer_ is โ„(_windowSize_), then - 1. Let _completion_ be Completion(Yield(CreateArrayFromList(_buffer_))). - 1. IfAbruptCloseIterator(_completion_, _iterated_). - 1. Let _result_ be CreateIteratorFromClosure(_closure_, *"Iterator Helper"*, %IteratorHelperPrototype%, ยซ [[UnderlyingIterators]] ยป). - 1. Set _result_.[[UnderlyingIterators]] to ยซ _iterated_ ยป. - 1. Return _result_. - -
From ab56d454b72db44b6eac1781ea8d6b3a38bb8a36 Mon Sep 17 00:00:00 2001 From: Kevin Gibbons Date: Tue, 22 Jul 2025 14:58:52 -0700 Subject: [PATCH 2/3] rename skip to discard --- spec.emu | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec.emu b/spec.emu index 6f3b6bb..ba3f86a 100644 --- a/spec.emu +++ b/spec.emu @@ -49,8 +49,8 @@ copyright: false 1. If _windowSize_ is not an integral Number in the inclusive interval from *1*๐”ฝ to ๐”ฝ(232 - 1), then 1. Let _error_ be ThrowCompletion(a newly created *RangeError* object). 1. Return ? IteratorClose(_iterated_, _error_). - 1. If _undersized_ is *undefined*, set _undersized_ to *"skip"*. - 1. If _undersized_ is neither *"skip"* nor *"truncate"*, then + 1. If _undersized_ is *undefined*, set _undersized_ to *"discard"*. + 1. If _undersized_ is neither *"discard"* nor *"truncate"*, then 1. Let _error_ be ThrowCompletion(a newly created *TypeError* object). 1. Return ? IteratorClose(_iterated_, _error_). 1. Set _iterated_ to ? GetIteratorDirect(_O_). From a49cf3a3164ad681e908a8daed45b41defec7c6a Mon Sep 17 00:00:00 2001 From: Michael Ficarra Date: Thu, 11 Sep 2025 13:39:53 -0600 Subject: [PATCH 3/3] change windows option to "only full" and "allow partial" --- spec.emu | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec.emu b/spec.emu index ba3f86a..ef44d42 100644 --- a/spec.emu +++ b/spec.emu @@ -49,8 +49,8 @@ copyright: false 1. If _windowSize_ is not an integral Number in the inclusive interval from *1*๐”ฝ to ๐”ฝ(232 - 1), then 1. Let _error_ be ThrowCompletion(a newly created *RangeError* object). 1. Return ? IteratorClose(_iterated_, _error_). - 1. If _undersized_ is *undefined*, set _undersized_ to *"discard"*. - 1. If _undersized_ is neither *"discard"* nor *"truncate"*, then + 1. If _undersized_ is *undefined*, set _undersized_ to *"only full"*. + 1. If _undersized_ is neither *"only full"* nor *"allow partial"*, then 1. Let _error_ be ThrowCompletion(a newly created *TypeError* object). 1. Return ? IteratorClose(_iterated_, _error_). 1. Set _iterated_ to ? GetIteratorDirect(_O_). @@ -59,7 +59,7 @@ copyright: false 1. Repeat, 1. Let _value_ be ? IteratorStepValue(_iterated_). 1. If _value_ is ~done~, then - 1. If _undersized_ is *"truncate"*, _buffer_ is not empty, and the number of elements in _buffer_ < โ„(_windowSize_), then + 1. If _undersized_ is *"allow partial"*, _buffer_ is not empty, and the number of elements in _buffer_ < โ„(_windowSize_), then 1. Perform Completion(Yield(CreateArrayFromList(_buffer_))). 1. Return ReturnCompletion(*undefined*). 1. If the number of elements in _buffer_ is โ„(_windowSize_), then