Skip to content

Commit 2991580

Browse files
committed
Fix spec errors pointed out in google#804.
This change only covers clear, simple errors and not stylistic issues or spec-implementation discrepancies.
1 parent ea4d40a commit 2991580

File tree

2 files changed

+32
-48
lines changed

2 files changed

+32
-48
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ bazel-*
3535
/external/
3636
/dist/
3737
/jsonnet.egg-info/
38+
/doc/.jekyll-cache/
3839

3940
# Cmake
4041
**/CMakeCache.txt

doc/ref/spec.html

+31-48
Original file line numberDiff line numberDiff line change
@@ -128,15 +128,15 @@ <h2 id="lexing">Lexing</h2>
128128
<ul>
129129
<li>
130130
<p>
131-
<i>id</i>: Matched by <tt>[_a-zA-Z][_a-zA-Z0-9]*</tt>
131+
<i>id</i>: Matched by <tt>[_a-zA-Z][_a-zA-Z0-9]*</tt>.
132132
</p>
133133
<p>
134134
Some identifiers are reserved as keywords, thus are not in the set <i>id</i>:
135135
<code>assert</code> <code>else</code> <code>error</code> <code>false</code>
136136
<code>for</code> <code>function</code> <code>if</code> <code>import</code>
137137
<code>importstr</code> <code>in</code> <code>local</code> <code>null</code>
138138
<code>tailstrict</code> <code>then</code> <code>self</code> <code>super</code>
139-
<code>true</code>
139+
<code>true</code>.
140140
</p>
141141
</li>
142142
<li>
@@ -205,25 +205,25 @@ <h2 id="lexing">Lexing</h2>
205205
<li>
206206
<p>
207207
<i>operator</i>: A sequence of at least one of the following single-character symbols:
208-
<code>!$:~+-&amp;|^=&lt;&gt;*/%</code>
208+
<code>!$:~+-&amp;|^=&lt;&gt;*/%</code>.
209209
</p>
210210
<p>
211-
Subject to the following rules, which will cause the lexing to terminate with a shorter
211+
Additionally it is subject to the following rules, which may cause the lexing to terminate with a shorter
212212
token:
213213
</p>
214214
<ul>
215215
<li>
216-
The sequence <code>//</code> is not allowed in an operator
216+
The sequence <code>//</code> is not allowed in an operator.
217217
</li>
218218
<li>
219-
The sequence <code>/*</code> is not allowed in an operator
219+
The sequence <code>/*</code> is not allowed in an operator.
220220
</li>
221221
<li>
222-
The sequence <code>|||</code> is not allowed in an operator
222+
The sequence <code>|||</code> is not allowed in an operator.
223223
</li>
224224
<li>
225225
If the sequence has more than one character, it is not allowed to end in any of
226-
<code>+-~!$</code>
226+
<code>+</code>, <code>-</code>, <code>~</code>, <code>!</code>, <code>$</code>.
227227
</li>
228228
</ul>
229229
</li>
@@ -299,7 +299,7 @@ <h2 id="abstract_syntax">Abstract Syntax</h2>
299299
[ <i>expr</i> { <code>,</code> <i>expr</i> } [ <code>,</code> ] ]
300300
<code>]</code>
301301
</td>
302-
</tr>
302+
</tr>
303303

304304
<!-- array comprehension -->
305305
<tr>
@@ -332,21 +332,8 @@ <h2 id="abstract_syntax">Abstract Syntax</h2>
332332
<td>
333333
<i>expr</i>
334334
<code>[</code>
335-
<i>expr</i>
336-
[ <code>:</code> [ <i>expr</i>
337-
[ <code>:</code> [ <i>expr</i> ] ] ] ]
338-
<code>]</code>
339-
</td>
340-
</tr>
341-
342-
<!-- object index (general2) -->
343-
<tr>
344-
<td></td>
345-
<td> | </td>
346-
<td>
347-
<i>expr</i>
348-
<code>[</code>
349-
<code>:</code> [ <i>expr</i>
335+
[ <i>expr</i> ]
336+
[ <code>:</code> [ <i> expr</i> ]
350337
[ <code>:</code> [ <i>expr</i> ] ] ]
351338
<code>]</code>
352339
</td>
@@ -549,7 +536,7 @@ <h2 id="abstract_syntax">Abstract Syntax</h2>
549536
<code>]</code>
550537
<code>:</code>
551538
<i>expr</i>
552-
[ { <code>,</code> <i>objlocal</i> } ] [ <code>,</code> ]
539+
[ { <code>,</code> <i>objlocal</i> } ] [ <code>,</code> ]
553540
<i>forspec</i> <i>compspec</i>
554541
</td>
555542
</tr>
@@ -882,10 +869,6 @@ <h3 id="core_syntax">Core Syntax</h3>
882869
The following binary operators are removed: <code>!=</code> <code>==</code> <code>%</code>
883870
<code>in</code>
884871
</li>
885-
<li>
886-
All function parameters must now have default arguments. To simulate a parameter that
887-
must be bound at the call site, use a default argument that evaluates to an error.
888-
</li>
889872
<li>Array slices <code>[::]</code> are removed.</li>
890873
<li>
891874
Array and object comprehensions are replaced with a simple object comprehension construct.
@@ -1177,9 +1160,9 @@ <h3 id="desugaring">Desugaring</h3>
11771160
\textrm{ be the sequence of variables defined in }forspec\ compspec \\
11781161

11791162
\hspace{10mm} \object{ \\
1180-
\hspace{20mm} [desugar_{expr}(\local{x_1=arr[1] \ldots x_n=arr[n]}{e_f}, b)]: \\
1163+
\hspace{20mm} [desugar_{expr}(\local{x_1=arr[0] \ldots x_n=arr[n-1]}{e_f}, b)]: \\
11811164
\hspace{30mm} desugar_{expr}(
1182-
\local{x_1=arr[1] \ldots x_n=arr[n]}{
1165+
\local{x_1=arr[0] \ldots x_n=arr[n-1]}{
11831166
\local{bind_1 \ldots bind_n}{e_{body}}
11841167
}, true) \\
11851168
\hspace{20mm} \textrm{ for } arr \textrm{ in }
@@ -1349,74 +1332,74 @@ <h3 id="desugaring">Desugaring</h3>
13491332
</div>
13501333
<div class="desugar-rule-group">
13511334
<p>
1352-
<i>desugar<sub>assert</sub></i>: (Field × Boolean) → Field. This desugars object
1335+
<i>desugar<sub>assert</sub></i>: (Field × [Bind]) → Field. This desugars object
13531336
assertions.
13541337
</p>
13551338
<div class="desugar-rule">
13561339
\[
1357-
desugar_{assert}(\assert e), binds) =
1340+
desugar_{assert}(\assert e, binds) =
13581341
desugar_{assert}(\assert e : \texttt{"Assertion failed"}, binds)
13591342
\]
13601343
</div>
13611344
<div class="desugar-rule">
13621345
\[
1363-
desugar_{assert}(\assert e : e'), binds) =
1346+
desugar_{assert}(\assert e : e', binds) =
13641347
\assert{desugar_{expr}(\local{binds}{\if{e}{\null}{\error{e'}}}, \true)}
13651348
\]
13661349
</div>
13671350
</div>
13681351
<div class="desugar-rule-group">
13691352
<p>
1370-
<i>desugar<sub>field</sub></i>: (Field × Boolean) → Field. This desugars object fields.
1353+
<i>desugar<sub>field</sub></i>: (Field × [Bind] × Boolean) → Field. This desugars object fields.
13711354
Recall that <i>h</i> ranges over <code>:</code>, <code>::</code>, <code>:::</code>. The
13721355
boolean records whether the object containing this field is itself in another object. The
13731356
notation <i>string(id)</i> means converting the identifier token to a string literal.
13741357
</p>
13751358
<div class="desugar-rule">
13761359
\[
1377-
desugar_{field}(id \mathrel{h} e), binds, b) =
1360+
desugar_{field}(id \mathrel{h} e, binds, b) =
13781361
desugar_{field}([string(id)] \mathrel{h} e), binds, b)
13791362
\]
13801363
</div>
13811364
<div class="desugar-rule">
13821365
\[
1383-
desugar_{field}(id \mathrel{+h} e), binds, b) =
1366+
desugar_{field}(id \mathrel{+h} e, binds, b) =
13841367
desugar_{field}([string(id)] \mathrel{+h} e), binds, b)
13851368
\]
13861369
</div>
13871370
<div class="desugar-rule">
13881371
\[
1389-
desugar_{field}(id(params) \mathrel{h} e), binds, b) =
1372+
desugar_{field}(id(params) \mathrel{h} e, binds, b) =
13901373
desugar_{field}([string(id)](params) \mathrel{h} e), binds, b)
13911374
\]
13921375
</div>
13931376
<div class="desugar-rule">
13941377
\[
1395-
desugar_{field}(string \mathrel{h} e), binds, b) =
1378+
desugar_{field}(string \mathrel{h} e, binds, b) =
13961379
desugar_{field}([string] \mathrel{h} e), binds, b)
13971380
\]
13981381
</div>
13991382
<div class="desugar-rule">
14001383
\[
1401-
desugar_{field}(string \mathrel{+h} e), binds, b) =
1384+
desugar_{field}(string \mathrel{+h} e, binds, b) =
14021385
desugar_{field}([string] \mathrel{+h} e), binds, b)
14031386
\]
14041387
</div>
14051388
<div class="desugar-rule">
14061389
\[
1407-
desugar_{field}(string(params) \mathrel{h} e), binds, b) =
1390+
desugar_{field}(string(params) \mathrel{h} e, binds, b) =
14081391
desugar_{field}([string](params) \mathrel{h} e), binds, b)
14091392
\]
14101393
</div>
14111394
<div class="desugar-rule">
14121395
\[
1413-
desugar_{field}([e] \mathrel{h} e'), binds, b) =
1396+
desugar_{field}([e] \mathrel{h} e', binds, b) =
14141397
[desugar_{expr}(e, b)] \mathrel{h} desugar_{expr}(\local{binds}{e}, \true)
14151398
\]
14161399
</div>
14171400
<div class="desugar-rule">
14181401
\[
1419-
desugar_{field}([e] \mathrel{+h} e'), binds, b) = \\
1402+
desugar_{field}([e] \mathrel{+h} e', binds, b) = \\
14201403
\hspace{10mm}
14211404
\textrm{let } e'' = e[\texttt{\$outerself} / \self, \texttt{\$outersuper} / \super] \\
14221405
\hspace{10mm}
@@ -1427,14 +1410,14 @@ <h3 id="desugaring">Desugaring</h3>
14271410
</div>
14281411
<div class="desugar-rule">
14291412
\[
1430-
desugar_{field}([e](params) \mathrel{h} e'), binds, b) =
1413+
desugar_{field}([e](params) \mathrel{h} e', binds, b) =
14311414
desugar_{field}([e] \mathrel{h} \function{params}{e'}, binds, b)
14321415
\]
14331416
</div>
14341417
</div>
14351418
<div class="desugar-rule-group">
14361419
<p>
1437-
<i>desugar<sub>bind</sub></i>: (Field × Boolean) → Field. This desugars local bindings.
1420+
<i>desugar<sub>bind</sub></i>: (Bind × Boolean) → Field. This desugars local bindings.
14381421
</p>
14391422
<div class="desugar-rule">
14401423
\[
@@ -1474,7 +1457,7 @@ <h3 id="desugaring">Desugaring</h3>
14741457
<div class="desugar-rule">
14751458
\[
14761459
desugar_{arrcomp}(e, \textrm{if }e'\ compspec, b) =
1477-
desugar_{expr}(\if{e'}{[desugar_{arrcomp}(e, compspec, b)]}{[\ ]}, b)
1460+
desugar_{expr}(\if{e'}{desugar_{arrcomp}(e, compspec, b)}{[\ ]}, b)
14781461
\]
14791462
</div>
14801463
<div class="desugar-rule">
@@ -1491,7 +1474,7 @@ <h3 id="desugaring">Desugaring</h3>
14911474
\local{arr = e'}{
14921475
\texttt{std.join}(\\\hspace{20mm}[\ ], \texttt{std.makeArray}(
14931476
\texttt{std.length}(arr),
1494-
\function{i}{\local{x = arr[i]}{[desugar_{arrcomp}(e, compspec, b)]}}
1477+
\function{i}{\local{x = arr[i]}{desugar_{arrcomp}(e, compspec, b)}}
14951478
))
14961479
},
14971480
b
@@ -1506,7 +1489,7 @@ <h3 id="desugaring">Desugaring</h3>
15061489
\local{arr = e'}{
15071490
\texttt{std.join}(\\\hspace{20mm}[\ ], \texttt{std.makeArray}(
15081491
\texttt{std.length}(arr),
1509-
\function{i}{\local{x = arr[i]}{[base]}}
1492+
\function{i}{\local{x = arr[i]}{[e]}}
15101493
))
15111494
},
15121495
b

0 commit comments

Comments
 (0)