Skip to content

Commit

Permalink
Fix #296: ban dictionary recursion through records. (#298)
Browse files Browse the repository at this point in the history
  • Loading branch information
jyasskin authored and bzbarsky committed Feb 3, 2017
1 parent 7259bd9 commit 662b008
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 9 deletions.
1 change: 1 addition & 0 deletions index.bs
Original file line number Diff line number Diff line change
Expand Up @@ -4192,6 +4192,7 @@ if at least one of the following is true:
includes |D|
* the type is a dictionary, one of whose members or inherited members has
a type that includes |D|
* the type is <code>[=record=]&lt;|K|, |V|></code> where |V| includes |D|

As with interfaces, the IDL for dictionaries can be split into multiple parts
by using <dfn id="dfn-partial-dictionary" export>partial dictionary</dfn> definitions
Expand Down
21 changes: 12 additions & 9 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4829,6 +4829,8 @@ <h3 class="heading settled" data-level="2.4" id="idl-dictionaries"><span class="
<li data-md="">
<p>the type is a dictionary, one of whose members or inherited members has
a type that includes <var>D</var></p>
<li data-md="">
<p>the type is <code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record-2">record</a>&lt;<var>K</var>, <var>V</var>></code> where <var>V</var> includes <var>D</var></p>
</ul>
<p>As with interfaces, the IDL for dictionaries can be split into multiple parts
by using <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-partial-dictionary">partial dictionary</dfn> definitions
Expand Down Expand Up @@ -7178,13 +7180,13 @@ <h5 class="heading settled dfn-paneled" data-dfn-type="dfn" data-level="3.2.18.1
</span></pre>
</div>
<h4 class="heading settled" data-level="3.2.19" id="es-record"><span class="secno">3.2.19. </span><span class="content">Records — record&lt;<var>K</var>, <var>V</var>></span><a class="self-link" href="#es-record"></a></h4>
<p>IDL <a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record-2">record</a>&lt;<var>K</var>, <var>V</var>> values are represented by
<p>IDL <a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record-3">record</a>&lt;<var>K</var>, <var>V</var>> values are represented by
ECMAScript <emu-val>Object</emu-val> values.</p>
<div class="algorithm" data-algorithm="convert an ECMAScript value to record" id="es-to-record">
<p>An ECMAScript value <var>O</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value-29">converted</a> to an IDL <code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record-3">record</a>&lt;<var>K</var>, <var>V</var>></code> value as follows:</p>
<p>An ECMAScript value <var>O</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value-29">converted</a> to an IDL <code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record-4">record</a>&lt;<var>K</var>, <var>V</var>></code> value as follows:</p>
<ol>
<li data-md="">
<p>Let <var>result</var> be a new empty instance of <code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record-4">record</a>&lt;<var>K</var>, <var>V</var>></code>.</p>
<p>Let <var>result</var> be a new empty instance of <code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record-5">record</a>&lt;<var>K</var>, <var>V</var>></code>.</p>
<li data-md="">
<p>If <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values">Type</a>(<var>O</var>) is Undefined or Null,
return <var>result</var>.</p>
Expand Down Expand Up @@ -7218,7 +7220,7 @@ <h4 class="heading settled" data-level="3.2.19" id="es-record"><span class="secn
</ol>
</div>
<div class="algorithm" data-algorithm="convert a record to an ECMAScript value" id="record-to-es">
<p>An IDL <code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record-5">record</a>&lt;…></code> value <var>D</var> is <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value-28">converted</a> to an ECMAScript value as follows:</p>
<p>An IDL <code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record-6">record</a>&lt;…></code> value <var>D</var> is <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value-28">converted</a> to an ECMAScript value as follows:</p>
<ol>
<li data-md="">
<p>Let <var>result</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-algorithm-conventions">!</a> <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-objectcreate">ObjectCreate</a>(<a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-properties-of-the-object-prototype-object">%ObjectPrototype%</a>).</p>
Expand All @@ -7240,7 +7242,7 @@ <h4 class="heading settled" data-level="3.2.19" id="es-record"><span class="secn
</div>
<div class="example" id="example-es-record">
<a class="self-link" href="#example-es-record"></a>
<p>Passing the ECMAScript value <code>{b: 3, a: 4}</code> as a <code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record-6">record</a>&lt;DOMString, double></code> argument
<p>Passing the ECMAScript value <code>{b: 3, a: 4}</code> as a <code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record-7">record</a>&lt;DOMString, double></code> argument
would result in the IDL value « ("b", 3), ("a", 4) ».</p>
<p>Records only consider <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-own-property">own</a> <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-property-attributes">enumerable</a> properties, so given an IDL operation <code>record&lt;DOMString, double>
identity(record&lt;DOMString, double> arg)</code> which returns its
Expand Down Expand Up @@ -7270,15 +7272,15 @@ <h4 class="heading settled" data-level="3.2.19" id="es-record"><span class="secn
<tbody>
<tr>
<td><code>{"😞": 1}</code>
<td><code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record-7">record</a>&lt;ByteString, double></code>
<td><code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record-8">record</a>&lt;ByteString, double></code>
<td><emu-val>TypeError</emu-val>
<tr>
<td><code>{"\uD83D": 1}</code>
<td><code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record-8">record</a>&lt;USVString, double></code>
<td><code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record-9">record</a>&lt;USVString, double></code>
<td>« ("\uFFFD", 1) »
<tr>
<td><code>{"\uD83D": {hello: "world"}}</code>
<td><code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record-9">record</a>&lt;DOMString, double></code>
<td><code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record-10">record</a>&lt;DOMString, double></code>
<td>« ("\uD83D", 0) »
</table>
</div>
Expand Down Expand Up @@ -14948,7 +14950,8 @@ <h2 class="no-num no-ref heading settled" id="idl-index"><span class="content">I
<b><a href="#idl-record">#idl-record</a></b><b>Referenced in:</b>
<ul>
<li><a href="#ref-for-idl-record-1">2.2.6. Overloading</a>
<li><a href="#ref-for-idl-record-2">3.2.19. Records — record&lt;K, V></a> <a href="#ref-for-idl-record-3">(2)</a> <a href="#ref-for-idl-record-4">(3)</a> <a href="#ref-for-idl-record-5">(4)</a> <a href="#ref-for-idl-record-6">(5)</a> <a href="#ref-for-idl-record-7">(6)</a> <a href="#ref-for-idl-record-8">(7)</a> <a href="#ref-for-idl-record-9">(8)</a>
<li><a href="#ref-for-idl-record-2">2.4. Dictionaries</a>
<li><a href="#ref-for-idl-record-3">3.2.19. Records — record&lt;K, V></a> <a href="#ref-for-idl-record-4">(2)</a> <a href="#ref-for-idl-record-5">(3)</a> <a href="#ref-for-idl-record-6">(4)</a> <a href="#ref-for-idl-record-7">(5)</a> <a href="#ref-for-idl-record-8">(6)</a> <a href="#ref-for-idl-record-9">(7)</a> <a href="#ref-for-idl-record-10">(8)</a>
</ul>
</aside>
<aside class="dfn-panel" data-for="record-type">
Expand Down

0 comments on commit 662b008

Please sign in to comment.