Re: [whatwg/streams] Specifying QueuingStrategies in WebIDL (#1005)

I don't want to give up on calling `size` as a plain function. The principle that it is a pure function is important to the mental model of streams. Making it a method gives the implication that it can be stateful.

The brand check is necessary for the correct functioning of WebIDL-generated code, at least in Blink. Before it can call a C++ method, it needs to make sure it's calling it on an object of the correct type.

The way I'm currently doing it in my in-progress implementation in Blink is this:

```idl
[
    Exposed=(Window,Worker,Worklet),
    Constructor(QueuingStrategyInit init)
] interface CountQueuingStrategy {
    readonly attribute any highWaterMark;

    // size is an accessor that returns a function.
    readonly attribute any size;
};
```

This still has slightly odd semantics:
```javascript
const size = new CountQueuingStrategy({}).size;
console.assert(size() == 1);
```
works as expected, but
```javascript
const size = CountQueuingStrategy.prototype.size;
```
throws an exception.

-- 
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/issues/1005#issuecomment-509898162

Received on Wednesday, 10 July 2019 04:01:56 UTC