- From: Jeffrey Yasskin <notifications@github.com>
- Date: Sat, 01 Oct 2016 01:00:34 -0700
- To: heycam/webidl <webidl@noreply.github.com>
- Message-ID: <heycam/webidl/pull/180/review/2428006@github.com>
jyasskin commented on this pull request. > @@ -7529,6 +7575,95 @@ iterable |iterable| and an iterator getter </div> +<h4 id="es-open-dictionary">Open dictionaries — OpenDictionary<[|K|,] |V|></h4> + +IDL {{OpenDictionary}}<|K|, |V|> values are represented by +ECMAScript <emu-val>Object</emu-val> values. + +<p id="es-to-open-dictionary"> + An ECMAScript value |O| is [=converted to an IDL value|converted=] to an IDL <code>{{OpenDictionary}}<|K|, |V|></code> value as follows: +</p> + +<ol class="algorithm"> + 1. Let |result| be a new empty instance of <code>{{OpenDictionary}}<|K|, |V|></code>. + 1. If [=Type=](|O|) is <emu-val>Undefined</emu-val> or <emu-val>Null</emu-val>, + return |result|. This was in response to @bzbarsky's «Do we want to allow passing null or undefined to mean "empty open dictionary" the way we do for dictionaries?», and he's right that closed dictionaries [treat null and undefined as empty](https://heycam.github.io/webidl/#es-to-dictionary). > @@ -7529,6 +7575,95 @@ iterable |iterable| and an iterator getter </div> +<h4 id="es-open-dictionary">Open dictionaries — OpenDictionary<[|K|,] |V|></h4> + +IDL {{OpenDictionary}}<|K|, |V|> values are represented by +ECMAScript <emu-val>Object</emu-val> values. + +<p id="es-to-open-dictionary"> + An ECMAScript value |O| is [=converted to an IDL value|converted=] to an IDL <code>{{OpenDictionary}}<|K|, |V|></code> value as follows: +</p> + +<ol class="algorithm"> + 1. Let |result| be a new empty instance of <code>{{OpenDictionary}}<|K|, |V|></code>. + 1. If [=Type=](|O|) is <emu-val>Undefined</emu-val> or <emu-val>Null</emu-val>, + return |result|. + 1. If [=Type=](|O|) is not <emu-val>Object</emu-val>, + <a lt="es throw">throw a <emu-val>TypeError</emu-val></a>. Again, closed dictionaries do throw a `TypeError` for non-Object,Null,Undefined arguments: https://heycam.github.io/webidl/#es-to-dictionary > +IDL {{OpenDictionary}}<|K|, |V|> values are represented by +ECMAScript <emu-val>Object</emu-val> values. + +<p id="es-to-open-dictionary"> + An ECMAScript value |O| is [=converted to an IDL value|converted=] to an IDL <code>{{OpenDictionary}}<|K|, |V|></code> value as follows: +</p> + +<ol class="algorithm"> + 1. Let |result| be a new empty instance of <code>{{OpenDictionary}}<|K|, |V|></code>. + 1. If [=Type=](|O|) is <emu-val>Undefined</emu-val> or <emu-val>Null</emu-val>, + return |result|. + 1. If [=Type=](|O|) is not <emu-val>Object</emu-val>, + <a lt="es throw">throw a <emu-val>TypeError</emu-val></a>. + 1. Let |keys| be [=?=] [=EnumerableOwnProperties=](|O|, "key"). + 1. Repeat, for each element |key| of |keys| in [=List=] order: + 1. If [=!=] [=HasOwnProperty=](|O|, |key|) is <code>true</code>, then: I'd like you, @annevk, and @bzbarsky to come to some conclusion about this. So far, @annevk [wondered](https://github.com/heycam/webidl/pull/180#issuecomment-250673458) if we should match [StructuredClone()](https://html.spec.whatwg.org/multipage/infrastructure.html#structuredclone:structuredclone-4), and @bzbarsky [said](https://github.com/heycam/webidl/pull/180#issuecomment-250836913) that MozMap is like StructuredClone but omits the HasOwnProperty() check (so, I think we'd include the key in the map but initialize it from `undefined`). I don't care which we do. > + </pre> + + Open dictionary keys and values can be constrained, although keys can only be + constrained among the three string types. + The following conversions have the described results: + <table class="data"> + <thead><th>Value</th><th>Passed to type</th><th>Result</th></thead> + <tr> + <td><code>{"😞": 1}</code></td> + <td><code>{{OpenDictionary}}<ByteString, double></code></td> + <td><emu-val>TypeError</emu-val></td> + </tr> + <tr> + <td><code>{"\uD83D": 1}</code></td> + <td><code>{{OpenDictionary}}<USVString, double></code></td> + <td>[ "\uFFFD" ⇒ 1 ]</td> Yeah. I don't want to make WebIDL's users type a non-ascii character in order to iterate over a map, so (key, value) is better for that. I can change to that here too. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/heycam/webidl/pull/180
Received on Saturday, 1 October 2016 08:01:06 UTC