Re: [whatwg/streams] Lookup methods in constructors (#860)

domenic commented on this pull request.



> @@ -83,15 +83,20 @@ exports.InvokeOrNoop = (O, P, args) => {
   return Call(method, O, args);
 };
 
-exports.PromiseInvokeOrNoop = (O, P, args) => {
-  assert(O !== undefined);
-  assert(IsPropertyKey(P));
-  assert(Array.isArray(args));
+exports.PromiseInvoke = (F, V, args) => {

This is no longer an "Invoke", but instead a "Call". "Invokes" take (object, property name) pairs.

> @@ -1156,12 +1156,22 @@ function SetUpReadableStreamDefaultControllerFromUnderlyingSource(stream, underl
     return InvokeOrNoop(underlyingSource, 'start', [stream._readableStreamController]);
   }
 
-  function pullAlgorithm() {
-    return PromiseInvokeOrNoop(underlyingSource, 'pull', [stream._readableStreamController]);
+  // eslint-disable-next-line func-style

I see what you mean about the controller not existing yet being a problem for algorithm construction. Can we just move the single line

```js
const controller = Object.create(ReadableStreamDefaultController.prototype);
```

before the algorithm creation? Then perhaps pass that as a parameter to the SetUpXYZ() abstract ops? I guess maybe also move the line

```js
stream._readableStreamController = controller;
```

and then we can pass in `controller` instead of `stream` to the SetUpXYZ() ops.

>    try {
-    return Promise.resolve(exports.InvokeOrNoop(O, P, args));
-  } catch (returnValueE) {
-    return Promise.reject(returnValueE);
+    return Promise.resolve(Call(F, V, args));
+  } catch (value) {
+    return Promise.reject(value);
+  }
+};
+
+exports.GetMethod = (V, methodName) => {

This might end up inlined into whatever helper is used for deduping the algorithm creation code.

>    }
 
-  function cancelAlgorithm(reason) {
-    return PromiseInvokeOrNoop(underlyingSource, 'cancel', [reason]);
+  // eslint-disable-next-line func-style

We should probably just disable this lint in the eslintrc, given that it's hurting us repeatedly in this way. I don't like one-off lint disables like this in general.

> @@ -259,30 +259,44 @@ function SetUpTransformStreamDefaultController(stream, transformAlgorithm, flush
 }
 
 function SetUpTransformStreamDefaultControllerFromTransformer(stream, transformer) {
-  function transformAlgorithm(chunk) {

That got a lot simpler, yay.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/streams/pull/860#pullrequestreview-80375282

Received on Friday, 1 December 2017 00:36:22 UTC