Skip to content

Commit d930ce7

Browse files
authored
Merge pull request #1899 from BuckleScript/promote_null_undefine
address #1894
2 parents d21cdfb + 4dfe84f commit d930ce7

29 files changed

+439
-222
lines changed

docs/Manual.html

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3504,7 +3504,7 @@ <h3 id="_return_value_checking_since_1_5_1"><a class="anchor" href="#_return_val
35043504
<pre class="pygments highlight"><code data-lang="ocaml"><span class="tok-k">type</span> <span class="tok-n">element</span>
35053505
<span class="tok-k">type</span> <span class="tok-n">dom</span>
35063506
<span class="tok-k">external</span> <span class="tok-n">getElementById</span> <span class="tok-o">:</span> <span class="tok-kt">string</span> <span class="tok-o">-&gt;</span> <span class="tok-n">element</span> <span class="tok-n">option</span> <span class="tok-o">=</span> <span class="tok-s2">&quot;&quot;</span>
3507-
<span class="tok-o">[@@</span><span class="tok-n">bs</span><span class="tok-o">.</span><span class="tok-n">send</span><span class="tok-o">.</span><span class="tok-n">pipe</span><span class="tok-o">:</span><span class="tok-n">dom</span><span class="tok-o">]</span> <span class="tok-o">[@@</span><span class="tok-n">bs</span><span class="tok-o">.</span><span class="tok-n">return</span> <span class="tok-n">null_to_opt</span><span class="tok-o">]</span> <b class="conum">(1)</b>
3507+
<span class="tok-o">[@@</span><span class="tok-n">bs</span><span class="tok-o">.</span><span class="tok-n">send</span><span class="tok-o">.</span><span class="tok-n">pipe</span><span class="tok-o">:</span><span class="tok-n">dom</span><span class="tok-o">]</span> <span class="tok-o">[@@</span><span class="tok-n">bs</span><span class="tok-o">.</span><span class="tok-n">return</span> <span class="tok-n">nullable</span><span class="tok-o">]</span> <b class="conum">(1)</b>
35083508

35093509
<span class="tok-k">let</span> <span class="tok-n">test</span> <span class="tok-n">dom</span> <span class="tok-o">=</span>
35103510
<span class="tok-k">let</span> <span class="tok-n">elem</span> <span class="tok-o">=</span> <span class="tok-n">dom</span> <span class="tok-o">|&gt;</span> <span class="tok-n">getElementById</span> <span class="tok-s2">&quot;haha&quot;</span> <span class="tok-k">in</span>
@@ -3516,7 +3516,7 @@ <h3 id="_return_value_checking_since_1_5_1"><a class="anchor" href="#_return_val
35163516
<div class="colist arabic">
35173517
<ol>
35183518
<li>
3519-
<p><code>null_to_opt</code> attribute will automatically convert null to <code>option</code></p>
3519+
<p><code>nullable</code> attribute will automatically convert null and undefined to <code>option</code></p>
35203520
</li>
35213521
</ol>
35223522
</div>
@@ -3525,26 +3525,18 @@ <h3 id="_return_value_checking_since_1_5_1"><a class="anchor" href="#_return_val
35253525
<div class="content">
35263526
<pre class="pygments highlight"><code data-lang="js"><span class="tok-kd">function</span> <span class="tok-nx">test</span><span class="tok-p">(</span><span class="tok-nx">dom</span><span class="tok-p">)</span> <span class="tok-p">{</span>
35273527
<span class="tok-kd">var</span> <span class="tok-nx">elem</span> <span class="tok-o">=</span> <span class="tok-nx">dom</span><span class="tok-p">.</span><span class="tok-nx">getElementById</span><span class="tok-p">(</span><span class="tok-s2">&quot;haha&quot;</span><span class="tok-p">);</span>
3528-
<span class="tok-k">if</span> <span class="tok-p">(</span><span class="tok-nx">elem</span> <span class="tok-o">!==</span> <span class="tok-kc">null</span><span class="tok-p">)</span> <span class="tok-p">{</span> <b class="conum">(1)</b>
3528+
<span class="tok-k">if</span> <span class="tok-p">(</span><span class="tok-nx">elem</span> <span class="tok-o">==</span> <span class="tok-kc">null</span><span class="tok-p">)</span> <span class="tok-p">{</span>
3529+
<span class="tok-k">return</span> <span class="tok-mi">1</span><span class="tok-p">;</span>
3530+
<span class="tok-p">}</span> <span class="tok-k">else</span> <span class="tok-p">{</span>
35293531
<span class="tok-nx">console</span><span class="tok-p">.</span><span class="tok-nx">log</span><span class="tok-p">(</span><span class="tok-nx">elem</span><span class="tok-p">);</span>
35303532
<span class="tok-k">return</span> <span class="tok-mi">2</span><span class="tok-p">;</span>
35313533
<span class="tok-p">}</span>
3532-
<span class="tok-k">else</span> <span class="tok-p">{</span>
3533-
<span class="tok-k">return</span> <span class="tok-mi">1</span><span class="tok-p">;</span>
3534-
<span class="tok-p">}</span>
35353534
<span class="tok-p">}</span></code></pre>
35363535
</div>
35373536
</div>
3538-
<div class="colist arabic">
3539-
<ol>
3540-
<li>
3541-
<p>nullable checking without boxing due to compiler optimizations</p>
3542-
</li>
3543-
</ol>
3544-
</div>
35453537
<div class="paragraph">
3546-
<p>Currently 4 directives are supported: <code>null_to_opt</code>, <code>undefined_to_opt</code>,
3547-
<code>null_undefined_to_opt</code> and <code>identity</code>.</p>
3538+
<p>Currently 3 directives are supported: <code>null_to_opt</code>, <code>undefined_to_opt</code>,
3539+
<code>nullable</code> and <code>identity</code>.</p>
35483540
</div>
35493541
<div class="admonitionblock note">
35503542
<table>
@@ -3554,7 +3546,7 @@ <h3 id="_return_value_checking_since_1_5_1"><a class="anchor" href="#_return_val
35543546
</td>
35553547
<td class="content">
35563548
<div class="paragraph">
3557-
<p><code>null_to_opt</code>, <code>undefined_to_opt</code> and <code>null_undefined_to_opt</code> will <strong>semantically</strong>
3549+
<p><code>null_to_opt</code>, <code>undefined_to_opt</code> and <code>nullable</code> will <strong>semantically</strong>
35583550
convert a nullable value to <code>option</code> which is a boxed value, but the compiler will
35593551
do smart optimizations to <strong>remove such boxing overhead</strong> when the returned value is destructed
35603552
in the same routine.</p>

jscomp/bin/bsdep.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30910,6 +30910,7 @@ let process_external_attributes
3091030910
begin match txt with
3091130911
| "undefined_to_opt" -> Return_undefined_to_opt
3091230912
| "null_to_opt" -> Return_null_to_opt
30913+
| "nullable"
3091330914
| "null_undefined_to_opt" -> Return_null_undefined_to_opt
3091430915
| "identity" -> Return_identity
3091530916
| _ ->

jscomp/bin/bsppx.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12921,6 +12921,7 @@ let process_external_attributes
1292112921
begin match txt with
1292212922
| "undefined_to_opt" -> Return_undefined_to_opt
1292312923
| "null_to_opt" -> Return_null_to_opt
12924+
| "nullable"
1292412925
| "null_undefined_to_opt" -> Return_null_undefined_to_opt
1292512926
| "identity" -> Return_identity
1292612927
| _ ->

0 commit comments

Comments
 (0)