Improve the TextMate grammar scopes and precision (again) (#7914)

This is a re-do of #7888

Outside a call, the grammar scoped a name as a type or a variable by its
capitalization. A theme could not distinguish a type from a value with
the same spelling, or a parameter, a member, or an implemented interface
from any other name. Pointer member access `->` was scoped as a result
arrow, which scoped `Lookup` in `regions->Lookup(x)` as a type.

`entity.name.type` now applies only in a type position (after `:`, `->`,
`as`, `adapt`, or `require`, or in an `impl`) and to the name a nominal
declaration declares. A qualifier, in a declared name like `fn N.Base(T:
type).F()` or in a type, is `entity.name.scope-resolution` nested in
`entity.name.type`. As in the parser, a name is a qualifier when its
parameter lists are followed by `.`. Parameters, `let` bindings, choice
alternatives, members, implemented interfaces, primitive types,
`import`, and the strings naming a builtin or a library have their own
scopes, and brackets use the C++ grammar's scopes. A `->` written
directly after its operand is member access; no result arrow in the
repository is written that way.

The sample palette renders each scope that depends on context
differently, and `tmlanguage.py` now supports nested captures.

In 17 of the 19 themes measured, the VS Code built-ins plus One Dark
Pro, Night Owl, Tokyo Night, and Nord, 13% to 27% of the characters in
hand-written Carbon change color or style. A theme loses a color where
`.` is now punctuation, where word operators like `as` are no longer
control-flow keywords, or where a name outside a type position is no
longer a type.

Assisted-by: Claude Code
This commit is contained in:
Chandler Carruth authored and GitHub committed 2026-10-06 23:21:43 +00:00
1 parent bf91a8b4dd
commit fccb349af4
18 files changed
+2496 -368

No files matched your search

+7 -5
View File
@@ -49,9 +49,11 @@ utils/textmate/render_sample.py utils/textmate/Samples/*.carbon
```
The colors are a palette built for this grammar rather than an editor's theme.
Each family of related scopes gets one color, and bold and italic distinguish
the scopes within a family, so every scope the grammar emits renders differently
and a change to what the grammar scopes is visible in the image. Unscoped text
Each family of related scopes gets one color, and bold, italic, and underline
distinguish the scopes within a family. Every scope the grammar picks from
context renders differently, so a change to what the grammar scopes is visible
in the image. Scopes that follow from the spelling alone, such as a bracket's
shape, can share a rendering, since the text already shows them. Unscoped text
is dimmer than any scope's color, so text the grammar misses stands out. A scope
with no entry of its own takes its family's color and style, so give a new scope
an entry to keep every scope distinct.
with no entry of its own takes its family's color and style, so give a new
context-dependent scope an entry of its own.
+5 -5
View File
@@ -5,9 +5,9 @@
<text style="white-space:pre" x="12" y="45"><tspan fill="#6c7086">2 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> Exceptions. See /LICENSE for license information.</tspan></text>
<text style="white-space:pre" x="12" y="64"><tspan fill="#6c7086">3 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception</tspan></text>
<text style="white-space:pre" x="12" y="83"><tspan fill="#6c7086">4 </tspan></text>
<text style="white-space:pre" x="12" y="102"><tspan fill="#6c7086">5 </tspan><tspan fill="#cba6f7">choice</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">SomeChoice</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan><tspan fill="#a6adc8">) {</tspan></text>
<text style="white-space:pre" x="12" y="121"><tspan fill="#6c7086">6 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">Val1</tspan><tspan fill="#74c7ec">,</tspan></text>
<text style="white-space:pre" x="12" y="140"><tspan fill="#6c7086">7 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">Val2</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">b</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">array</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">5</tspan><tspan fill="#a6adc8">)</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">t</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#a6adc8">)</tspan><tspan fill="#74c7ec">,</tspan></text>
<text style="white-space:pre" x="12" y="159"><tspan fill="#6c7086">8 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">Val3</tspan></text>
<text style="white-space:pre" x="12" y="178"><tspan fill="#6c7086">9 </tspan><tspan fill="#a6adc8">}</tspan></text>
<text style="white-space:pre" x="12" y="102"><tspan fill="#6c7086">5 </tspan><tspan fill="#cba6f7">choice</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">SomeChoice</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4" font-style="italic">T</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{</tspan></text>
<text style="white-space:pre" x="12" y="121"><tspan fill="#6c7086">6 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#eba0ac" font-weight="bold">Val1</tspan><tspan fill="#74c7ec">,</tspan></text>
<text style="white-space:pre" x="12" y="140"><tspan fill="#6c7086">7 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#eba0ac" font-weight="bold">Val2</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4" font-style="italic">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">b</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">array</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">5</tspan><tspan fill="#74c7ec">),</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">t</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec">),</tspan></text>
<text style="white-space:pre" x="12" y="159"><tspan fill="#6c7086">8 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#eba0ac" font-weight="bold">Val3</tspan></text>
<text style="white-space:pre" x="12" y="178"><tspan fill="#6c7086">9 </tspan><tspan fill="#74c7ec">}</tspan></text>
</g></svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

+2
View File
@@ -8,6 +8,8 @@
//@dump-sem-ir-begin
//@dump-sem-ir-end
//@include-in-dumps
//@include-in-dumps
//@dump-sem-ir-begin with trailing text is an ordinary comment
//@dump-sem-ir-
//no whitespace after double slash
/* invalid comment pattern. */
+9 -7
View File
@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="721" height="328" viewBox="0 0 721 328">
<svg xmlns="http://www.w3.org/2000/svg" width="721" height="366" viewBox="0 0 721 366">
<rect width="100%" height="100%" fill="#1e1e2e"/>
<g xml:space="preserve" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="14">
<text style="white-space:pre" x="12" y="26"><tspan fill="#6c7086"> 1 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> Part of the Carbon Language project, under the Apache License v2.0 with LLVM</tspan></text>
@@ -11,10 +11,12 @@
<text style="white-space:pre" x="12" y="159"><tspan fill="#6c7086"> 8 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-weight="bold">@dump-sem-ir-begin</tspan></text>
<text style="white-space:pre" x="12" y="178"><tspan fill="#6c7086"> 9 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-weight="bold">@dump-sem-ir-end</tspan></text>
<text style="white-space:pre" x="12" y="197"><tspan fill="#6c7086">10 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-weight="bold">@include-in-dumps</tspan></text>
<text style="white-space:pre" x="12" y="216"><tspan fill="#6c7086">11 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic">@dump-sem-ir-</tspan></text>
<text style="white-space:pre" x="12" y="235"><tspan fill="#6c7086">12 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic">no whitespace after double slash</tspan></text>
<text style="white-space:pre" x="12" y="254"><tspan fill="#6c7086">13 </tspan><tspan fill="#94e2d5">/*</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">invalid</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">comment</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">pattern</tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">*/</tspan></text>
<text style="white-space:pre" x="12" y="273"><tspan fill="#6c7086">14 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic">/ invalid comment pattern.</tspan></text>
<text style="white-space:pre" x="12" y="292"><tspan fill="#6c7086">15 </tspan><tspan fill="#cba6f7">class</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> Comment after a statement/expression/declaration.</tspan></text>
<text style="white-space:pre" x="12" y="311"><tspan fill="#6c7086">16 </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">x</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">1</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> Trailing, with no space before the introducer.</tspan></text>
<text style="white-space:pre" x="12" y="216"><tspan fill="#6c7086">11 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-weight="bold">@include-in-dumps</tspan></text>
<text style="white-space:pre" x="12" y="235"><tspan fill="#6c7086">12 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic">@dump-sem-ir-begin with trailing text is an ordinary comment</tspan></text>
<text style="white-space:pre" x="12" y="254"><tspan fill="#6c7086">13 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic">@dump-sem-ir-</tspan></text>
<text style="white-space:pre" x="12" y="273"><tspan fill="#6c7086">14 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic">no whitespace after double slash</tspan></text>
<text style="white-space:pre" x="12" y="292"><tspan fill="#6c7086">15 </tspan><tspan fill="#94e2d5">/*</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">invalid</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">comment</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">pattern</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">*/</tspan></text>
<text style="white-space:pre" x="12" y="311"><tspan fill="#6c7086">16 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic">/ invalid comment pattern.</tspan></text>
<text style="white-space:pre" x="12" y="330"><tspan fill="#6c7086">17 </tspan><tspan fill="#cba6f7">class</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold" font-style="italic">C</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> Comment after a statement/expression/declaration.</tspan></text>
<text style="white-space:pre" x="12" y="349"><tspan fill="#6c7086">18 </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">x</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">1</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> Trailing, with no space before the introducer.</tspan></text>
</g></svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

+3 -3
View File
@@ -6,10 +6,10 @@
<text style="white-space:pre" x="12" y="64"><tspan fill="#6c7086"> 3 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception</tspan></text>
<text style="white-space:pre" x="12" y="83"><tspan fill="#6c7086"> 4 </tspan></text>
<text style="white-space:pre" x="12" y="102"><tspan fill="#6c7086"> 5 </tspan><tspan fill="#cba6f7">package</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc">SomePackage</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="121"><tspan fill="#6c7086"> 6 </tspan><tspan fill="#f9e2af" font-weight="bold">Core</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">SomeCore</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="121"><tspan fill="#6c7086"> 6 </tspan><tspan fill="#f9e2af" font-weight="bold">Core</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">SomeCore</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="140"><tspan fill="#6c7086"> 7 </tspan></text>
<text style="white-space:pre" x="12" y="159"><tspan fill="#6c7086"> 8 </tspan><tspan fill="#cba6f7">import</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc">SomePackage</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="159"><tspan fill="#6c7086"> 8 </tspan><tspan fill="#f38ba8">import</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc">SomePackage</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="178"><tspan fill="#6c7086"> 9 </tspan></text>
<text style="white-space:pre" x="12" y="197"><tspan fill="#6c7086">10 </tspan><tspan fill="#89b4fa">CallFunction</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">b</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">c</tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#cdd6f4">d</tspan><tspan fill="#a6adc8">)</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="197"><tspan fill="#6c7086">10 </tspan><tspan fill="#89b4fa">CallFunction</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">b</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">c</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#eba0ac" font-style="italic">d</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="216"><tspan fill="#6c7086">11 </tspan><tspan fill="#cdd6f4">unidentified</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
</g></svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

@@ -28,6 +28,7 @@ generic a: T = b;
a: A in some_list;
var a: T;
let b: T;
let unused c: T = d;
binding: T;
generic binding: T;
var
@@ -50,3 +51,17 @@ r#class
r#if
r#i32
var r#var: i32 = r#class;
// --- member access through a pointer
p->field;
p->Method(a);
p->0;
(*p).field;
t.0.1;
q.value()->size();
// --- builtin function definitions
fn Add(a: i32, b: i32) -> i32 = "int.sadd";
fn Bits(n: IntLiteral) -> type = "int.make_type_signed";
+60 -45
View File
@@ -1,56 +1,71 @@
<svg xmlns="http://www.w3.org/2000/svg" width="721" height="1012" viewBox="0 0 721 1012">
<svg xmlns="http://www.w3.org/2000/svg" width="721" height="1297" viewBox="0 0 721 1297">
<rect width="100%" height="100%" fill="#1e1e2e"/>
<g xml:space="preserve" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="14">
<text style="white-space:pre" x="12" y="26"><tspan fill="#6c7086"> 1 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> Part of the Carbon Language project, under the Apache License v2.0 with LLVM</tspan></text>
<text style="white-space:pre" x="12" y="45"><tspan fill="#6c7086"> 2 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> Exceptions. See /LICENSE for license information.</tspan></text>
<text style="white-space:pre" x="12" y="64"><tspan fill="#6c7086"> 3 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception</tspan></text>
<text style="white-space:pre" x="12" y="83"><tspan fill="#6c7086"> 4 </tspan></text>
<text style="white-space:pre" x="12" y="102"><tspan fill="#6c7086"> 5 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">F</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="121"><tspan fill="#6c7086"> 6 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">F1</tspan><tspan fill="#a6adc8">()</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="140"><tspan fill="#6c7086"> 7 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">Func</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">b</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#a6adc8">)</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="159"><tspan fill="#6c7086"> 8 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">Generic</tspan><tspan fill="#a6adc8">[</tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">U</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">I</tspan><tspan fill="#a6adc8">](</tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">b</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">U</tspan><tspan fill="#a6adc8">) </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">U</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="178"><tspan fill="#6c7086"> 9 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">Lambda</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8">) </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">return</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">+</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">5</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="102"><tspan fill="#6c7086"> 5 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa" font-weight="bold">F</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="121"><tspan fill="#6c7086"> 6 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa" font-weight="bold">F1</tspan><tspan fill="#74c7ec">()</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="140"><tspan fill="#6c7086"> 7 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa" font-weight="bold">Func</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4" font-style="italic">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">b</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="159"><tspan fill="#6c7086"> 8 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa" font-weight="bold">Generic</tspan><tspan fill="#74c7ec">[</tspan><tspan fill="#cdd6f4" font-style="italic">T</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">U</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">I</tspan><tspan fill="#74c7ec">](</tspan><tspan fill="#cdd6f4" font-style="italic">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">b</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">U</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">U</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="178"><tspan fill="#6c7086"> 9 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa" font-weight="bold">Lambda</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4" font-style="italic">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">return</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">+</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">5</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="197"><tspan fill="#6c7086">10 </tspan><tspan fill="#cba6f7">fn</tspan></text>
<text style="white-space:pre" x="12" y="216"><tspan fill="#6c7086">11 </tspan></text>
<text style="white-space:pre" x="12" y="235"><tspan fill="#6c7086">12 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">MultiLine</tspan><tspan fill="#a6adc8">[</tspan></text>
<text style="white-space:pre" x="12" y="254"><tspan fill="#6c7086">13 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan><tspan fill="#74c7ec">,</tspan></text>
<text style="white-space:pre" x="12" y="273"><tspan fill="#6c7086">14 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">B</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C1</tspan><tspan fill="#74c7ec">,</tspan></text>
<text style="white-space:pre" x="12" y="292"><tspan fill="#6c7086">15 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C2</tspan></text>
<text style="white-space:pre" x="12" y="311"><tspan fill="#6c7086">16 </tspan><tspan fill="#a6adc8"> ](</tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">A</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#f9e2af">B</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C</tspan><tspan fill="#a6adc8">)</tspan><tspan fill="#74c7ec">,</tspan></text>
<text style="white-space:pre" x="12" y="330"><tspan fill="#6c7086">17 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">b</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">B</tspan><tspan fill="#74c7ec">,</tspan></text>
<text style="white-space:pre" x="12" y="349"><tspan fill="#6c7086">18 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">c</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8">)</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="368"><tspan fill="#6c7086">19 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">Invalid</tspan><tspan fill="#a6adc8">#</tspan><tspan fill="#94e2d5">+?</tspan><tspan fill="#89b4fa">Name</tspan><tspan fill="#a6adc8">()</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="387"><tspan fill="#6c7086">20 </tspan><tspan fill="#cdd6f4">x</tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#f9e2af">I</tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#f9e2af">F</tspan><tspan fill="#a6adc8">)()</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="235"><tspan fill="#6c7086">12 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">MultiLine</tspan><tspan fill="#74c7ec">[</tspan></text>
<text style="white-space:pre" x="12" y="254"><tspan fill="#6c7086">13 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">A</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan><tspan fill="#74c7ec">,</tspan></text>
<text style="white-space:pre" x="12" y="273"><tspan fill="#6c7086">14 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">B</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C1</tspan><tspan fill="#74c7ec">,</tspan></text>
<text style="white-space:pre" x="12" y="292"><tspan fill="#6c7086">15 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">C</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C2</tspan></text>
<text style="white-space:pre" x="12" y="311"><tspan fill="#6c7086">16 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">](</tspan><tspan fill="#cdd6f4" font-style="italic">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#f9e2af">B</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C</tspan><tspan fill="#74c7ec">),</tspan></text>
<text style="white-space:pre" x="12" y="330"><tspan fill="#6c7086">17 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">b</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">B</tspan><tspan fill="#74c7ec">,</tspan></text>
<text style="white-space:pre" x="12" y="349"><tspan fill="#6c7086">18 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">c</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="368"><tspan fill="#6c7086">19 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa" font-weight="bold">Invalid</tspan><tspan fill="#a6adc8">#</tspan><tspan fill="#94e2d5">+?</tspan><tspan fill="#89b4fa">Name</tspan><tspan fill="#74c7ec">()</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="387"><tspan fill="#6c7086">20 </tspan><tspan fill="#cdd6f4">x</tspan><tspan fill="#74c7ec">.(</tspan><tspan fill="#cdd6f4">I</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#eba0ac" font-style="italic">F</tspan><tspan fill="#74c7ec">)()</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="406"><tspan fill="#6c7086">21 </tspan></text>
<text style="white-space:pre" x="12" y="425"><tspan fill="#6c7086">22 </tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="444"><tspan fill="#6c7086">23 </tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> (</tspan><tspan fill="#cdd6f4">b</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#a6adc8">)</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="463"><tspan fill="#6c7086">24 </tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="482"><tspan fill="#6c7086">25 </tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">array</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">5</tspan><tspan fill="#a6adc8">)</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="501"><tspan fill="#6c7086">26 </tspan><tspan fill="#cba6f7" font-style="italic">generic</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="520"><tspan fill="#6c7086">27 </tspan><tspan fill="#cba6f7" font-style="italic">generic</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">b</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="539"><tspan fill="#6c7086">28 </tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">in</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">some_list</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="425"><tspan fill="#6c7086">22 </tspan><tspan fill="#cdd6f4" font-style="italic">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="444"><tspan fill="#6c7086">23 </tspan><tspan fill="#cdd6f4" font-style="italic">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4">b</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="463"><tspan fill="#6c7086">24 </tspan><tspan fill="#cdd6f4" font-style="italic">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="482"><tspan fill="#6c7086">25 </tspan><tspan fill="#cdd6f4" font-style="italic">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">array</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">5</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="501"><tspan fill="#6c7086">26 </tspan><tspan fill="#cba6f7" font-style="italic">generic</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="520"><tspan fill="#6c7086">27 </tspan><tspan fill="#cba6f7" font-style="italic">generic</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">b</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="539"><tspan fill="#6c7086">28 </tspan><tspan fill="#cdd6f4" font-style="italic">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">in</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">some_list</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="558"><tspan fill="#6c7086">29 </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="577"><tspan fill="#6c7086">30 </tspan><tspan fill="#cba6f7">let</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">b</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="596"><tspan fill="#6c7086">31 </tspan><tspan fill="#cdd6f4">binding</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="615"><tspan fill="#6c7086">32 </tspan><tspan fill="#cba6f7" font-style="italic">generic</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">binding</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="634"><tspan fill="#6c7086">33 </tspan><tspan fill="#cba6f7">var</tspan></text>
<text style="white-space:pre" x="12" y="653"><tspan fill="#6c7086">34 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">multiline</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="672"><tspan fill="#6c7086">35 </tspan></text>
<text style="white-space:pre" x="12" y="691"><tspan fill="#6c7086">36 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">F</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#cba6f7" font-style="italic">ref</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">const</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">ref</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">b</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">B</tspan><tspan fill="#a6adc8">)</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="710"><tspan fill="#6c7086">37 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">F</tspan><tspan fill="#a6adc8">() </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="729"><tspan fill="#6c7086">38 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">F</tspan><tspan fill="#a6adc8">() </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#f9e2af">U</tspan><tspan fill="#a6adc8"> { </tspan><tspan fill="#f38ba8">return</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">val</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan><tspan fill="#a6adc8"> }</tspan></text>
<text style="white-space:pre" x="12" y="748"><tspan fill="#6c7086">39 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">F</tspan><tspan fill="#a6adc8">() </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">return</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">val</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="767"><tspan fill="#6c7086">40 </tspan></text>
<text style="white-space:pre" x="12" y="786"><tspan fill="#6c7086">41 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> --- lambdas and positional parameters</tspan></text>
<text style="white-space:pre" x="12" y="805"><tspan fill="#6c7086">42 </tspan></text>
<text style="white-space:pre" x="12" y="824"><tspan fill="#6c7086">43 </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">explicit</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">auto</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> (</tspan><tspan fill="#cdd6f4">x</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8">) </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> { </tspan><tspan fill="#f38ba8">return</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">x</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">+</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">1</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan><tspan fill="#a6adc8"> }</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="843"><tspan fill="#6c7086">44 </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">expression</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">auto</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> (</tspan><tspan fill="#cdd6f4">x</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8">) </tspan><tspan fill="#94e2d5">=&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">x</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">+</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">1</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="862"><tspan fill="#6c7086">45 </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">positional</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">auto</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> { </tspan><tspan fill="#89b4fa">Print</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#cdd6f4" font-style="italic">$0</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">$1</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">$42</tspan><tspan fill="#a6adc8">)</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan><tspan fill="#a6adc8"> }</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="881"><tspan fill="#6c7086">46 </tspan></text>
<text style="white-space:pre" x="12" y="900"><tspan fill="#6c7086">47 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> --- raw identifiers</tspan></text>
<text style="white-space:pre" x="12" y="919"><tspan fill="#6c7086">48 </tspan></text>
<text style="white-space:pre" x="12" y="938"><tspan fill="#6c7086">49 </tspan><tspan fill="#74c7ec" font-weight="bold" font-style="italic">r#</tspan><tspan fill="#cdd6f4">class</tspan></text>
<text style="white-space:pre" x="12" y="957"><tspan fill="#6c7086">50 </tspan><tspan fill="#74c7ec" font-weight="bold" font-style="italic">r#</tspan><tspan fill="#cdd6f4">if</tspan></text>
<text style="white-space:pre" x="12" y="976"><tspan fill="#6c7086">51 </tspan><tspan fill="#74c7ec" font-weight="bold" font-style="italic">r#</tspan><tspan fill="#cdd6f4">i32</tspan></text>
<text style="white-space:pre" x="12" y="995"><tspan fill="#6c7086">52 </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-weight="bold" font-style="italic">r#</tspan><tspan fill="#cdd6f4">var</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-weight="bold" font-style="italic">r#</tspan><tspan fill="#cdd6f4">class</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="577"><tspan fill="#6c7086">30 </tspan><tspan fill="#cba6f7">let</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-weight="bold" font-style="italic">b</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="596"><tspan fill="#6c7086">31 </tspan><tspan fill="#cba6f7">let</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">unused </tspan><tspan fill="#cdd6f4" font-weight="bold" font-style="italic">c</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">d</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="615"><tspan fill="#6c7086">32 </tspan><tspan fill="#cdd6f4" font-style="italic">binding</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="634"><tspan fill="#6c7086">33 </tspan><tspan fill="#cba6f7" font-style="italic">generic</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">binding</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="653"><tspan fill="#6c7086">34 </tspan><tspan fill="#cba6f7">var</tspan></text>
<text style="white-space:pre" x="12" y="672"><tspan fill="#6c7086">35 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">multiline</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="691"><tspan fill="#6c7086">36 </tspan></text>
<text style="white-space:pre" x="12" y="710"><tspan fill="#6c7086">37 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa" font-weight="bold">F</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cba6f7" font-style="italic">ref</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">const</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">ref</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">b</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">B</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="729"><tspan fill="#6c7086">38 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa" font-weight="bold">F</tspan><tspan fill="#74c7ec">()</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="748"><tspan fill="#6c7086">39 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa" font-weight="bold">F</tspan><tspan fill="#74c7ec">()</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc" font-weight="bold" font-style="italic">T</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#f9e2af">U</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">return</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">val</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">}</tspan></text>
<text style="white-space:pre" x="12" y="767"><tspan fill="#6c7086">40 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa" font-weight="bold">F</tspan><tspan fill="#74c7ec">()</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">return</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">val</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="786"><tspan fill="#6c7086">41 </tspan></text>
<text style="white-space:pre" x="12" y="805"><tspan fill="#6c7086">42 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> --- lambdas and positional parameters</tspan></text>
<text style="white-space:pre" x="12" y="824"><tspan fill="#6c7086">43 </tspan></text>
<text style="white-space:pre" x="12" y="843"><tspan fill="#6c7086">44 </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">explicit</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">auto</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4" font-style="italic">x</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">return</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">x</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">+</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">1</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">}</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="862"><tspan fill="#6c7086">45 </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">expression</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">auto</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4" font-style="italic">x</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">x</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">+</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">1</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="881"><tspan fill="#6c7086">46 </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">positional</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">auto</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">Print</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4" font-style="italic">$0</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">$1</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">$42</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">}</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="900"><tspan fill="#6c7086">47 </tspan></text>
<text style="white-space:pre" x="12" y="919"><tspan fill="#6c7086">48 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> --- raw identifiers</tspan></text>
<text style="white-space:pre" x="12" y="938"><tspan fill="#6c7086">49 </tspan></text>
<text style="white-space:pre" x="12" y="957"><tspan fill="#6c7086">50 </tspan><tspan fill="#74c7ec" font-weight="bold" font-style="italic">r#</tspan><tspan fill="#cdd6f4">class</tspan></text>
<text style="white-space:pre" x="12" y="976"><tspan fill="#6c7086">51 </tspan><tspan fill="#74c7ec" font-weight="bold" font-style="italic">r#</tspan><tspan fill="#cdd6f4">if</tspan></text>
<text style="white-space:pre" x="12" y="995"><tspan fill="#6c7086">52 </tspan><tspan fill="#74c7ec" font-weight="bold" font-style="italic">r#</tspan><tspan fill="#cdd6f4">i32</tspan></text>
<text style="white-space:pre" x="12" y="1014"><tspan fill="#6c7086">53 </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-weight="bold" font-style="italic">r#</tspan><tspan fill="#cdd6f4">var</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-weight="bold" font-style="italic">r#</tspan><tspan fill="#cdd6f4">class</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1033"><tspan fill="#6c7086">54 </tspan></text>
<text style="white-space:pre" x="12" y="1052"><tspan fill="#6c7086">55 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> --- member access through a pointer</tspan></text>
<text style="white-space:pre" x="12" y="1071"><tspan fill="#6c7086">56 </tspan></text>
<text style="white-space:pre" x="12" y="1090"><tspan fill="#6c7086">57 </tspan><tspan fill="#cdd6f4">p</tspan><tspan fill="#74c7ec">-&gt;</tspan><tspan fill="#eba0ac" font-style="italic">field</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1109"><tspan fill="#6c7086">58 </tspan><tspan fill="#cdd6f4">p</tspan><tspan fill="#74c7ec">-&gt;</tspan><tspan fill="#89b4fa" font-style="italic">Method</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1128"><tspan fill="#6c7086">59 </tspan><tspan fill="#cdd6f4">p</tspan><tspan fill="#74c7ec">-&gt;</tspan><tspan fill="#fab387">0</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1147"><tspan fill="#6c7086">60 </tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#94e2d5">*</tspan><tspan fill="#cdd6f4">p</tspan><tspan fill="#74c7ec">).</tspan><tspan fill="#eba0ac" font-style="italic">field</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1166"><tspan fill="#6c7086">61 </tspan><tspan fill="#cdd6f4">t</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#fab387">0</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#fab387">1</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1185"><tspan fill="#6c7086">62 </tspan><tspan fill="#cdd6f4">q</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#89b4fa" font-style="italic">value</tspan><tspan fill="#74c7ec">()-&gt;</tspan><tspan fill="#89b4fa" font-style="italic">size</tspan><tspan fill="#74c7ec">()</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1204"><tspan fill="#6c7086">63 </tspan></text>
<text style="white-space:pre" x="12" y="1223"><tspan fill="#6c7086">64 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> --- builtin function definitions</tspan></text>
<text style="white-space:pre" x="12" y="1242"><tspan fill="#6c7086">65 </tspan></text>
<text style="white-space:pre" x="12" y="1261"><tspan fill="#6c7086">66 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa" font-weight="bold">Add</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4" font-style="italic">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">b</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#89b4fa" font-weight="bold" font-style="italic">int.sadd</tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1280"><tspan fill="#6c7086">67 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa" font-weight="bold">Bits</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4" font-style="italic">n</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">IntLiteral</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#89b4fa" font-weight="bold" font-style="italic">int.make_type_signed</tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
</g></svg>

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 25 KiB

+11 -11
View File
@@ -9,25 +9,25 @@
<text style="white-space:pre" x="12" y="121"><tspan fill="#6c7086"> 6 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> grammar highlights them as C++; these renderings come from the Carbon grammar</tspan></text>
<text style="white-space:pre" x="12" y="140"><tspan fill="#6c7086"> 7 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> alone, so that content shows plain.</tspan></text>
<text style="white-space:pre" x="12" y="159"><tspan fill="#6c7086"> 8 </tspan></text>
<text style="white-space:pre" x="12" y="178"><tspan fill="#6c7086"> 9 </tspan><tspan fill="#cba6f7">package</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc">Sample</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">library</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#a6e3a1">interop</tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="178"><tspan fill="#6c7086"> 9 </tspan><tspan fill="#cba6f7">package</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc">Sample</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">library</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#f5e0dc" font-weight="bold">interop</tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="197"><tspan fill="#6c7086">10 </tspan></text>
<text style="white-space:pre" x="12" y="216"><tspan fill="#6c7086">11 </tspan><tspan fill="#cba6f7">import</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc">Cpp</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">library</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#a6e3a1">&lt;cstdio&gt;</tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="235"><tspan fill="#6c7086">12 </tspan><tspan fill="#cba6f7">import</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc">Cpp</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">library</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#a6e3a1">&lt;string_view&gt;</tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="216"><tspan fill="#6c7086">11 </tspan><tspan fill="#f38ba8">import</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Cpp</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">library</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#f5e0dc" font-weight="bold">&lt;cstdio&gt;</tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="235"><tspan fill="#6c7086">12 </tspan><tspan fill="#f38ba8">import</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Cpp</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">library</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#f5e0dc" font-weight="bold">&lt;string_view&gt;</tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="254"><tspan fill="#6c7086">13 </tspan></text>
<text style="white-space:pre" x="12" y="273"><tspan fill="#6c7086">14 </tspan><tspan fill="#cba6f7">import</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Cpp</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">inline</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">'''</tspan><tspan fill="#f5e0dc" font-style="italic">c++</tspan></text>
<text style="white-space:pre" x="12" y="273"><tspan fill="#6c7086">14 </tspan><tspan fill="#f38ba8">import</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Cpp</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">inline</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">'''</tspan><tspan fill="#f5e0dc" font-style="italic">c++</tspan></text>
<text style="white-space:pre" x="12" y="292"><tspan fill="#6c7086">15 </tspan><tspan fill="#a6adc8" font-style="italic">int FromImport() { return 1; }</tspan></text>
<text style="white-space:pre" x="12" y="311"><tspan fill="#6c7086">16 </tspan><tspan fill="#74c7ec" font-style="italic">'''</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="330"><tspan fill="#6c7086">17 </tspan></text>
<text style="white-space:pre" x="12" y="349"><tspan fill="#6c7086">18 </tspan><tspan fill="#cba6f7">import</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Cpp</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">inline</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#a6adc8" font-style="italic">int OneLiner() { return 2; }</tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="349"><tspan fill="#6c7086">18 </tspan><tspan fill="#f38ba8">import</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Cpp</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">inline</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#a6adc8" font-style="italic">int OneLiner() { return 2; }</tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="368"><tspan fill="#6c7086">19 </tspan></text>
<text style="white-space:pre" x="12" y="387"><tspan fill="#6c7086">20 </tspan><tspan fill="#cba6f7">inline</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Cpp</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">'''</tspan></text>
<text style="white-space:pre" x="12" y="406"><tspan fill="#6c7086">21 </tspan><tspan fill="#a6adc8" font-style="italic">int FromBlock() { return 3; }</tspan></text>
<text style="white-space:pre" x="12" y="425"><tspan fill="#6c7086">22 </tspan><tspan fill="#74c7ec" font-style="italic">'''</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="444"><tspan fill="#6c7086">23 </tspan></text>
<text style="white-space:pre" x="12" y="463"><tspan fill="#6c7086">24 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">Uses</tspan><tspan fill="#a6adc8">() {</tspan></text>
<text style="white-space:pre" x="12" y="482"><tspan fill="#6c7086">25 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">value</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Cpp</tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#cdd6f4">int</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">1</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Cpp</tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#cdd6f4">int</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="501"><tspan fill="#6c7086">26 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">widened</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Cpp</tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#cdd6f4">size_t</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">value</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Cpp</tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#cdd6f4">size_t</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="520"><tspan fill="#6c7086">27 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">back</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">value</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">unsafe</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="539"><tspan fill="#6c7086">28 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Cpp</tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#89b4fa">printf</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#a6e3a1">%d</tspan><tspan fill="#f5c2e7">\n</tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">value</tspan><tspan fill="#a6adc8">)</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="558"><tspan fill="#6c7086">29 </tspan><tspan fill="#a6adc8">}</tspan></text>
<text style="white-space:pre" x="12" y="463"><tspan fill="#6c7086">24 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa" font-weight="bold">Uses</tspan><tspan fill="#74c7ec">()</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{</tspan></text>
<text style="white-space:pre" x="12" y="482"><tspan fill="#6c7086">25 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">value</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Cpp</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#f9e2af">int</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">1</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Cpp</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#f9e2af">int</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="501"><tspan fill="#6c7086">26 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">widened</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Cpp</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#f9e2af">size_t</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">value</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Cpp</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#f9e2af">size_t</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="520"><tspan fill="#6c7086">27 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">back</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">value</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">unsafe</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="539"><tspan fill="#6c7086">28 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Cpp</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#89b4fa" font-style="italic">printf</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#a6e3a1">%d</tspan><tspan fill="#f5c2e7">\n</tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">value</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="558"><tspan fill="#6c7086">29 </tspan><tspan fill="#74c7ec">}</tspan></text>
</g></svg>

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

+6 -6
View File
@@ -8,8 +8,8 @@
<text style="white-space:pre" x="12" y="102"><tspan fill="#6c7086"> 5 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> --- operators</tspan></text>
<text style="white-space:pre" x="12" y="121"><tspan fill="#6c7086"> 6 </tspan></text>
<text style="white-space:pre" x="12" y="140"><tspan fill="#6c7086"> 7 </tspan><tspan fill="#94e2d5">&gt;&gt;=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">&lt;=&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">&lt;&lt;=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-&gt;?</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">&amp;=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">^=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">:=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">:?</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">==</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">!=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">&gt;=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">&gt;&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">&lt;=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">&lt;&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">&lt;&lt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">&lt;-</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">--</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">%=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">|=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">+=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">++</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">/=</tspan></text>
<text style="white-space:pre" x="12" y="159"><tspan fill="#6c7086"> 8 </tspan><tspan fill="#94e2d5">*=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">~=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">&amp;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">@</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">^</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">!</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">&lt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">%</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">|</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">+</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">?</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">/</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">*</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">~</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">\</tspan></text>
<text style="white-space:pre" x="12" y="178"><tspan fill="#6c7086"> 9 </tspan><tspan fill="#f38ba8">and</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">impls</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">in</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">like</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">not</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">or</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">typeof</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">where</tspan></text>
<text style="white-space:pre" x="12" y="159"><tspan fill="#6c7086"> 8 </tspan><tspan fill="#94e2d5">*=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">~=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">&amp;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">@</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">^</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">!</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">&lt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">%</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">|</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">+</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">?</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">/</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">*</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">~</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">\</tspan></text>
<text style="white-space:pre" x="12" y="178"><tspan fill="#6c7086"> 9 </tspan><tspan fill="#f38ba8">and</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">impls</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">in</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">like</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">not</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">or</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">typeof</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5" font-style="italic">where</tspan></text>
<text style="white-space:pre" x="12" y="197"><tspan fill="#6c7086">10 </tspan></text>
<text style="white-space:pre" x="12" y="216"><tspan fill="#6c7086">11 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> --- special-keywords</tspan></text>
<text style="white-space:pre" x="12" y="235"><tspan fill="#6c7086">12 </tspan></text>
@@ -18,7 +18,7 @@
<text style="white-space:pre" x="12" y="292"><tspan fill="#6c7086">15 </tspan></text>
<text style="white-space:pre" x="12" y="311"><tspan fill="#6c7086">16 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> --- introducer-keywords</tspan></text>
<text style="white-space:pre" x="12" y="330"><tspan fill="#6c7086">17 </tspan></text>
<text style="white-space:pre" x="12" y="349"><tspan fill="#6c7086">18 </tspan><tspan fill="#cba6f7">adapt</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">alias</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">choice</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">class</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">constraint</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">import</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">inline</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">interface</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">let</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">library</tspan></text>
<text style="white-space:pre" x="12" y="349"><tspan fill="#6c7086">18 </tspan><tspan fill="#cba6f7">adapt</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">alias</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">choice</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">class</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">constraint</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">import</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">inline</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">interface</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">let</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">library</tspan></text>
<text style="white-space:pre" x="12" y="368"><tspan fill="#6c7086">19 </tspan><tspan fill="#cba6f7">match_first</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">namespace</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc">observe</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">require</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">var</tspan></text>
<text style="white-space:pre" x="12" y="387"><tspan fill="#6c7086">20 </tspan><tspan fill="#cba6f7">base</tspan></text>
<text style="white-space:pre" x="12" y="406"><tspan fill="#6c7086">21 </tspan><tspan fill="#cba6f7">export</tspan></text>
@@ -31,7 +31,7 @@
<text style="white-space:pre" x="12" y="539"><tspan fill="#6c7086">28 </tspan><tspan fill="#cba6f7" font-style="italic">private</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">protected</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">ref</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">runtime</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">static</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">template</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">unsafe</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">unused</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">val</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">virtual</tspan></text>
<text style="white-space:pre" x="12" y="558"><tspan fill="#6c7086">29 </tspan><tspan fill="#cba6f7" font-style="italic">base</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">class</tspan></text>
<text style="white-space:pre" x="12" y="577"><tspan fill="#6c7086">30 </tspan><tspan fill="#cba6f7" font-style="italic">default</tspan></text>
<text style="white-space:pre" x="12" y="596"><tspan fill="#6c7086">31 </tspan><tspan fill="#cba6f7" font-style="italic">export</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">import</tspan></text>
<text style="white-space:pre" x="12" y="596"><tspan fill="#6c7086">31 </tspan><tspan fill="#cba6f7" font-style="italic">export</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">import</tspan></text>
<text style="white-space:pre" x="12" y="615"><tspan fill="#6c7086">32 </tspan><tspan fill="#cba6f7" font-style="italic">impl</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">fn</tspan></text>
<text style="white-space:pre" x="12" y="634"><tspan fill="#6c7086">33 </tspan><tspan fill="#cba6f7" font-style="italic">impl</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">library</tspan></text>
<text style="white-space:pre" x="12" y="653"><tspan fill="#6c7086">34 </tspan><tspan fill="#cba6f7" font-style="italic">impl</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">package</tspan></text>
@@ -40,8 +40,8 @@
<text style="white-space:pre" x="12" y="710"><tspan fill="#6c7086">37 </tspan></text>
<text style="white-space:pre" x="12" y="729"><tspan fill="#6c7086">38 </tspan><tspan fill="#94e2d5" font-style="italic">destroy</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5" font-style="italic">each</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5" font-style="italic">expand</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5" font-style="italic">forall</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5" font-style="italic">form</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5" font-style="italic">friend</tspan></text>
<text style="white-space:pre" x="12" y="748"><tspan fill="#6c7086">39 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5" font-style="italic">destroy</tspan></text>
<text style="white-space:pre" x="12" y="767"><tspan fill="#6c7086">40 </tspan><tspan fill="#94e2d5">...</tspan><tspan fill="#94e2d5" font-style="italic">expand</tspan></text>
<text style="white-space:pre" x="12" y="786"><tspan fill="#6c7086">41 </tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#cba6f7">base</tspan></text>
<text style="white-space:pre" x="12" y="767"><tspan fill="#6c7086">40 </tspan><tspan fill="#74c7ec">...</tspan><tspan fill="#94e2d5" font-style="italic">expand</tspan></text>
<text style="white-space:pre" x="12" y="786"><tspan fill="#6c7086">41 </tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#94e2d5" font-style="italic">base</tspan></text>
<text style="white-space:pre" x="12" y="805"><tspan fill="#6c7086">42 </tspan></text>
<text style="white-space:pre" x="12" y="824"><tspan fill="#6c7086">43 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> --- self-keywords</tspan></text>
<text style="white-space:pre" x="12" y="843"><tspan fill="#6c7086">44 </tspan></text>

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

+7
View File
@@ -14,6 +14,12 @@
'''py
Block literal with a file type indicator.
'''
'''sql // A trailing comment on the introducer line.
SELECT 1;
'''
''' // A comment with no file type indicator.
Text.
'''
#"a raw \n literal, where \#n is the escape"#
##"nested "# stays inside, and \##n is the escape"##
@@ -27,6 +33,7 @@
'a' '\n' '\0' '\u{1F600}'
'\x70'
"\x4F is an escape, \x4f is not"
''
'abcde'
+56 -49
View File
@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="721" height="1316" viewBox="0 0 721 1316">
<svg xmlns="http://www.w3.org/2000/svg" width="721" height="1449" viewBox="0 0 721 1449">
<rect width="100%" height="100%" fill="#1e1e2e"/>
<g xml:space="preserve" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="14">
<text style="white-space:pre" x="12" y="26"><tspan fill="#6c7086"> 1 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> Part of the Carbon Language project, under the Apache License v2.0 with LLVM</tspan></text>
@@ -17,56 +17,63 @@
<text style="white-space:pre" x="12" y="273"><tspan fill="#6c7086">14 </tspan><tspan fill="#74c7ec" font-style="italic">'''</tspan><tspan fill="#f5e0dc" font-style="italic">py</tspan></text>
<text style="white-space:pre" x="12" y="292"><tspan fill="#6c7086">15 </tspan><tspan fill="#a6e3a1" font-weight="bold"> Block literal with a file type indicator.</tspan></text>
<text style="white-space:pre" x="12" y="311"><tspan fill="#6c7086">16 </tspan><tspan fill="#74c7ec" font-style="italic">'''</tspan></text>
<text style="white-space:pre" x="12" y="330"><tspan fill="#6c7086">17 </tspan></text>
<text style="white-space:pre" x="12" y="349"><tspan fill="#6c7086">18 </tspan><tspan fill="#74c7ec" font-style="italic">#"</tspan><tspan fill="#a6e3a1">a raw \n literal, where </tspan><tspan fill="#f5c2e7">\#n</tspan><tspan fill="#a6e3a1"> is the escape</tspan><tspan fill="#74c7ec" font-style="italic">"#</tspan></text>
<text style="white-space:pre" x="12" y="368"><tspan fill="#6c7086">19 </tspan><tspan fill="#74c7ec" font-style="italic">##"</tspan><tspan fill="#a6e3a1">nested "# stays inside, and </tspan><tspan fill="#f5c2e7">\##n</tspan><tspan fill="#a6e3a1"> is the escape</tspan><tspan fill="#74c7ec" font-style="italic">"##</tspan></text>
<text style="white-space:pre" x="12" y="387"><tspan fill="#6c7086">20 </tspan><tspan fill="#74c7ec" font-style="italic">#'''</tspan></text>
<text style="white-space:pre" x="12" y="406"><tspan fill="#6c7086">21 </tspan><tspan fill="#a6e3a1" font-weight="bold"> A raw block literal.</tspan></text>
<text style="white-space:pre" x="12" y="425"><tspan fill="#6c7086">22 </tspan><tspan fill="#74c7ec" font-style="italic">'''#</tspan></text>
<text style="white-space:pre" x="12" y="330"><tspan fill="#6c7086">17 </tspan><tspan fill="#74c7ec" font-style="italic">'''</tspan><tspan fill="#f5e0dc" font-style="italic">sql</tspan><tspan fill="#a6e3a1" font-weight="bold"> </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> A trailing comment on the introducer line.</tspan></text>
<text style="white-space:pre" x="12" y="349"><tspan fill="#6c7086">18 </tspan><tspan fill="#a6e3a1" font-weight="bold"> SELECT 1;</tspan></text>
<text style="white-space:pre" x="12" y="368"><tspan fill="#6c7086">19 </tspan><tspan fill="#74c7ec" font-style="italic">'''</tspan></text>
<text style="white-space:pre" x="12" y="387"><tspan fill="#6c7086">20 </tspan><tspan fill="#74c7ec" font-style="italic">'''</tspan><tspan fill="#a6e3a1" font-weight="bold"> </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> A comment with no file type indicator.</tspan></text>
<text style="white-space:pre" x="12" y="406"><tspan fill="#6c7086">21 </tspan><tspan fill="#a6e3a1" font-weight="bold"> Text.</tspan></text>
<text style="white-space:pre" x="12" y="425"><tspan fill="#6c7086">22 </tspan><tspan fill="#74c7ec" font-style="italic">'''</tspan></text>
<text style="white-space:pre" x="12" y="444"><tspan fill="#6c7086">23 </tspan></text>
<text style="white-space:pre" x="12" y="463"><tspan fill="#6c7086">24 </tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#a6e3a1">unterminated</tspan></text>
<text style="white-space:pre" x="12" y="482"><tspan fill="#6c7086">25 </tspan></text>
<text style="white-space:pre" x="12" y="501"><tspan fill="#6c7086">26 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> --- characters</tspan></text>
<text style="white-space:pre" x="12" y="520"><tspan fill="#6c7086">27 </tspan></text>
<text style="white-space:pre" x="12" y="539"><tspan fill="#6c7086">28 </tspan><tspan fill="#74c7ec" font-style="italic">'</tspan><tspan fill="#a6e3a1" font-style="italic">a</tspan><tspan fill="#74c7ec" font-style="italic">'</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">'</tspan><tspan fill="#f5c2e7">\n</tspan><tspan fill="#74c7ec" font-style="italic">'</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">'</tspan><tspan fill="#f5c2e7">\0</tspan><tspan fill="#74c7ec" font-style="italic">'</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">'</tspan><tspan fill="#f5c2e7">\u{1F600}</tspan><tspan fill="#74c7ec" font-style="italic">'</tspan></text>
<text style="white-space:pre" x="12" y="558"><tspan fill="#6c7086">29 </tspan><tspan fill="#74c7ec" font-style="italic">'</tspan><tspan fill="#f5c2e7">\x70</tspan><tspan fill="#74c7ec" font-style="italic">'</tspan></text>
<text style="white-space:pre" x="12" y="577"><tspan fill="#6c7086">30 </tspan><tspan fill="#74c7ec" font-style="italic">''</tspan></text>
<text style="white-space:pre" x="12" y="596"><tspan fill="#6c7086">31 </tspan><tspan fill="#74c7ec" font-style="italic">'</tspan><tspan fill="#a6e3a1" font-style="italic">abcde</tspan><tspan fill="#74c7ec" font-style="italic">'</tspan></text>
<text style="white-space:pre" x="12" y="615"><tspan fill="#6c7086">32 </tspan></text>
<text style="white-space:pre" x="12" y="634"><tspan fill="#6c7086">33 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> --- true-false</tspan></text>
<text style="white-space:pre" x="12" y="653"><tspan fill="#6c7086">34 </tspan></text>
<text style="white-space:pre" x="12" y="672"><tspan fill="#6c7086">35 </tspan><tspan fill="#cba6f7" font-weight="bold">true</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-weight="bold">false</tspan></text>
<text style="white-space:pre" x="12" y="691"><tspan fill="#6c7086">36 </tspan></text>
<text style="white-space:pre" x="12" y="710"><tspan fill="#6c7086">37 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> --- type-literals</tspan></text>
<text style="white-space:pre" x="12" y="729"><tspan fill="#6c7086">38 </tspan></text>
<text style="white-space:pre" x="12" y="748"><tspan fill="#6c7086">39 </tspan><tspan fill="#f9e2af" font-style="italic">array</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">auto</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">bool</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">char</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">str</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan></text>
<text style="white-space:pre" x="12" y="767"><tspan fill="#6c7086">40 </tspan><tspan fill="#f9e2af" font-style="italic">i8</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i16</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i64</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i128</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i10</tspan></text>
<text style="white-space:pre" x="12" y="786"><tspan fill="#6c7086">41 </tspan><tspan fill="#f9e2af" font-style="italic">u8</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">u16</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">u32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">u64</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">u128</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">u11</tspan></text>
<text style="white-space:pre" x="12" y="805"><tspan fill="#6c7086">42 </tspan><tspan fill="#f9e2af" font-style="italic">f8</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">f16</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">f32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">f64</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">f128</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">f12</tspan></text>
<text style="white-space:pre" x="12" y="463"><tspan fill="#6c7086">24 </tspan><tspan fill="#74c7ec" font-style="italic">#"</tspan><tspan fill="#a6e3a1">a raw \n literal, where </tspan><tspan fill="#f5c2e7">\#n</tspan><tspan fill="#a6e3a1"> is the escape</tspan><tspan fill="#74c7ec" font-style="italic">"#</tspan></text>
<text style="white-space:pre" x="12" y="482"><tspan fill="#6c7086">25 </tspan><tspan fill="#74c7ec" font-style="italic">##"</tspan><tspan fill="#a6e3a1">nested "# stays inside, and </tspan><tspan fill="#f5c2e7">\##n</tspan><tspan fill="#a6e3a1"> is the escape</tspan><tspan fill="#74c7ec" font-style="italic">"##</tspan></text>
<text style="white-space:pre" x="12" y="501"><tspan fill="#6c7086">26 </tspan><tspan fill="#74c7ec" font-style="italic">#'''</tspan></text>
<text style="white-space:pre" x="12" y="520"><tspan fill="#6c7086">27 </tspan><tspan fill="#a6e3a1" font-weight="bold"> A raw block literal.</tspan></text>
<text style="white-space:pre" x="12" y="539"><tspan fill="#6c7086">28 </tspan><tspan fill="#74c7ec" font-style="italic">'''#</tspan></text>
<text style="white-space:pre" x="12" y="558"><tspan fill="#6c7086">29 </tspan></text>
<text style="white-space:pre" x="12" y="577"><tspan fill="#6c7086">30 </tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#a6e3a1">unterminated</tspan></text>
<text style="white-space:pre" x="12" y="596"><tspan fill="#6c7086">31 </tspan></text>
<text style="white-space:pre" x="12" y="615"><tspan fill="#6c7086">32 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> --- characters</tspan></text>
<text style="white-space:pre" x="12" y="634"><tspan fill="#6c7086">33 </tspan></text>
<text style="white-space:pre" x="12" y="653"><tspan fill="#6c7086">34 </tspan><tspan fill="#74c7ec" font-style="italic">'</tspan><tspan fill="#a6e3a1" font-style="italic">a</tspan><tspan fill="#74c7ec" font-style="italic">'</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">'</tspan><tspan fill="#f5c2e7">\n</tspan><tspan fill="#74c7ec" font-style="italic">'</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">'</tspan><tspan fill="#f5c2e7">\0</tspan><tspan fill="#74c7ec" font-style="italic">'</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">'</tspan><tspan fill="#f5c2e7">\u{1F600}</tspan><tspan fill="#74c7ec" font-style="italic">'</tspan></text>
<text style="white-space:pre" x="12" y="672"><tspan fill="#6c7086">35 </tspan><tspan fill="#74c7ec" font-style="italic">'</tspan><tspan fill="#f5c2e7">\x70</tspan><tspan fill="#74c7ec" font-style="italic">'</tspan></text>
<text style="white-space:pre" x="12" y="691"><tspan fill="#6c7086">36 </tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#f5c2e7">\x4F</tspan><tspan fill="#a6e3a1"> is an escape, \x4f is not</tspan><tspan fill="#74c7ec" font-style="italic">"</tspan></text>
<text style="white-space:pre" x="12" y="710"><tspan fill="#6c7086">37 </tspan><tspan fill="#74c7ec" font-style="italic">''</tspan></text>
<text style="white-space:pre" x="12" y="729"><tspan fill="#6c7086">38 </tspan><tspan fill="#74c7ec" font-style="italic">'</tspan><tspan fill="#a6e3a1" font-style="italic">abcde</tspan><tspan fill="#74c7ec" font-style="italic">'</tspan></text>
<text style="white-space:pre" x="12" y="748"><tspan fill="#6c7086">39 </tspan></text>
<text style="white-space:pre" x="12" y="767"><tspan fill="#6c7086">40 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> --- true-false</tspan></text>
<text style="white-space:pre" x="12" y="786"><tspan fill="#6c7086">41 </tspan></text>
<text style="white-space:pre" x="12" y="805"><tspan fill="#6c7086">42 </tspan><tspan fill="#cba6f7" font-weight="bold">true</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-weight="bold">false</tspan></text>
<text style="white-space:pre" x="12" y="824"><tspan fill="#6c7086">43 </tspan></text>
<text style="white-space:pre" x="12" y="843"><tspan fill="#6c7086">44 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> --- numbers</tspan></text>
<text style="white-space:pre" x="12" y="843"><tspan fill="#6c7086">44 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> --- type-literals</tspan></text>
<text style="white-space:pre" x="12" y="862"><tspan fill="#6c7086">45 </tspan></text>
<text style="white-space:pre" x="12" y="881"><tspan fill="#6c7086">46 </tspan><tspan fill="#fab387">12345</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">6789</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">00012345</tspan></text>
<text style="white-space:pre" x="12" y="900"><tspan fill="#6c7086">47 </tspan></text>
<text style="white-space:pre" x="12" y="919"><tspan fill="#6c7086">48 </tspan><tspan fill="#fab387">1234.56789</tspan></text>
<text style="white-space:pre" x="12" y="938"><tspan fill="#6c7086">49 </tspan><tspan fill="#fab387">0.875</tspan></text>
<text style="white-space:pre" x="12" y="957"><tspan fill="#6c7086">50 </tspan><tspan fill="#fab387">0.3e5</tspan></text>
<text style="white-space:pre" x="12" y="976"><tspan fill="#6c7086">51 </tspan><tspan fill="#fab387">1e5</tspan></text>
<text style="white-space:pre" x="12" y="995"><tspan fill="#6c7086">52 </tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#fab387">123</tspan></text>
<text style="white-space:pre" x="12" y="1014"><tspan fill="#6c7086">53 </tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#fab387">1e3</tspan></text>
<text style="white-space:pre" x="12" y="881"><tspan fill="#6c7086">46 </tspan><tspan fill="#f9e2af" font-style="italic">array</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">auto</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">bool</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">char</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">str</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan></text>
<text style="white-space:pre" x="12" y="900"><tspan fill="#6c7086">47 </tspan><tspan fill="#f9e2af" font-style="italic">i8</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i16</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i64</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i128</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i10</tspan></text>
<text style="white-space:pre" x="12" y="919"><tspan fill="#6c7086">48 </tspan><tspan fill="#f9e2af" font-style="italic">u8</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">u16</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">u32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">u64</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">u128</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">u11</tspan></text>
<text style="white-space:pre" x="12" y="938"><tspan fill="#6c7086">49 </tspan><tspan fill="#f9e2af" font-style="italic">f8</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">f16</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">f32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">f64</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">f128</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">f12</tspan></text>
<text style="white-space:pre" x="12" y="957"><tspan fill="#6c7086">50 </tspan></text>
<text style="white-space:pre" x="12" y="976"><tspan fill="#6c7086">51 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> --- numbers</tspan></text>
<text style="white-space:pre" x="12" y="995"><tspan fill="#6c7086">52 </tspan></text>
<text style="white-space:pre" x="12" y="1014"><tspan fill="#6c7086">53 </tspan><tspan fill="#fab387">12345</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">6789</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">00012345</tspan></text>
<text style="white-space:pre" x="12" y="1033"><tspan fill="#6c7086">54 </tspan></text>
<text style="white-space:pre" x="12" y="1052"><tspan fill="#6c7086">55 </tspan><tspan fill="#fab387" font-weight="bold" font-style="italic">0o755</tspan></text>
<text style="white-space:pre" x="12" y="1071"><tspan fill="#6c7086">56 </tspan><tspan fill="#fab387" font-weight="bold" font-style="italic">0o_17</tspan></text>
<text style="white-space:pre" x="12" y="1090"><tspan fill="#6c7086">57 </tspan><tspan fill="#fab387" font-weight="bold" font-style="italic">0o</tspan><tspan fill="#a6adc8">8</tspan></text>
<text style="white-space:pre" x="12" y="1109"><tspan fill="#6c7086">58 </tspan></text>
<text style="white-space:pre" x="12" y="1128"><tspan fill="#6c7086">59 </tspan><tspan fill="#fab387" font-weight="bold">0b1011_0010</tspan></text>
<text style="white-space:pre" x="12" y="1147"><tspan fill="#6c7086">60 </tspan><tspan fill="#fab387" font-weight="bold">0b_010</tspan></text>
<text style="white-space:pre" x="12" y="1166"><tspan fill="#6c7086">61 </tspan><tspan fill="#fab387" font-weight="bold">0b</tspan><tspan fill="#a6adc8">2345</tspan></text>
<text style="white-space:pre" x="12" y="1185"><tspan fill="#6c7086">62 </tspan><tspan fill="#fab387">0</tspan><tspan fill="#a6adc8">B011</tspan></text>
<text style="white-space:pre" x="12" y="1204"><tspan fill="#6c7086">63 </tspan></text>
<text style="white-space:pre" x="12" y="1223"><tspan fill="#6c7086">64 </tspan><tspan fill="#fab387" font-style="italic">0x2AE5</tspan></text>
<text style="white-space:pre" x="12" y="1242"><tspan fill="#6c7086">65 </tspan><tspan fill="#fab387" font-style="italic">0x_F109</tspan></text>
<text style="white-space:pre" x="12" y="1261"><tspan fill="#6c7086">66 </tspan><tspan fill="#fab387" font-style="italic">0xD8_E2.5F_7Bp8</tspan></text>
<text style="white-space:pre" x="12" y="1280"><tspan fill="#6c7086">67 </tspan><tspan fill="#fab387" font-style="italic">0xabcdef.abcdef</tspan></text>
<text style="white-space:pre" x="12" y="1299"><tspan fill="#6c7086">68 </tspan><tspan fill="#fab387">0</tspan><tspan fill="#a6adc8">XA85CE</tspan></text>
<text style="white-space:pre" x="12" y="1052"><tspan fill="#6c7086">55 </tspan><tspan fill="#fab387">1234.56789</tspan></text>
<text style="white-space:pre" x="12" y="1071"><tspan fill="#6c7086">56 </tspan><tspan fill="#fab387">0.875</tspan></text>
<text style="white-space:pre" x="12" y="1090"><tspan fill="#6c7086">57 </tspan><tspan fill="#fab387">0.3e5</tspan></text>
<text style="white-space:pre" x="12" y="1109"><tspan fill="#6c7086">58 </tspan><tspan fill="#fab387">1e5</tspan></text>
<text style="white-space:pre" x="12" y="1128"><tspan fill="#6c7086">59 </tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#fab387">123</tspan></text>
<text style="white-space:pre" x="12" y="1147"><tspan fill="#6c7086">60 </tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#fab387">1e3</tspan></text>
<text style="white-space:pre" x="12" y="1166"><tspan fill="#6c7086">61 </tspan></text>
<text style="white-space:pre" x="12" y="1185"><tspan fill="#6c7086">62 </tspan><tspan fill="#94e2d5" font-style="italic">0o</tspan><tspan fill="#fab387" font-weight="bold" font-style="italic">755</tspan></text>
<text style="white-space:pre" x="12" y="1204"><tspan fill="#6c7086">63 </tspan><tspan fill="#94e2d5" font-style="italic">0o</tspan><tspan fill="#fab387" font-weight="bold" font-style="italic">_17</tspan></text>
<text style="white-space:pre" x="12" y="1223"><tspan fill="#6c7086">64 </tspan><tspan fill="#94e2d5" font-style="italic">0o</tspan><tspan fill="#fab387" font-weight="bold" font-style="italic">8</tspan></text>
<text style="white-space:pre" x="12" y="1242"><tspan fill="#6c7086">65 </tspan></text>
<text style="white-space:pre" x="12" y="1261"><tspan fill="#6c7086">66 </tspan><tspan fill="#94e2d5" font-style="italic">0b</tspan><tspan fill="#fab387" font-weight="bold">1011_0010</tspan></text>
<text style="white-space:pre" x="12" y="1280"><tspan fill="#6c7086">67 </tspan><tspan fill="#94e2d5" font-style="italic">0b</tspan><tspan fill="#fab387" font-weight="bold">_010</tspan></text>
<text style="white-space:pre" x="12" y="1299"><tspan fill="#6c7086">68 </tspan><tspan fill="#94e2d5" font-style="italic">0b</tspan><tspan fill="#fab387" font-weight="bold">2345</tspan></text>
<text style="white-space:pre" x="12" y="1318"><tspan fill="#6c7086">69 </tspan><tspan fill="#fab387">0B011</tspan></text>
<text style="white-space:pre" x="12" y="1337"><tspan fill="#6c7086">70 </tspan></text>
<text style="white-space:pre" x="12" y="1356"><tspan fill="#6c7086">71 </tspan><tspan fill="#94e2d5" font-style="italic">0x</tspan><tspan fill="#fab387" font-style="italic">2AE5</tspan></text>
<text style="white-space:pre" x="12" y="1375"><tspan fill="#6c7086">72 </tspan><tspan fill="#94e2d5" font-style="italic">0x</tspan><tspan fill="#fab387" font-style="italic">_F109</tspan></text>
<text style="white-space:pre" x="12" y="1394"><tspan fill="#6c7086">73 </tspan><tspan fill="#94e2d5" font-style="italic">0x</tspan><tspan fill="#fab387" font-style="italic">D8_E2.5F_7Bp8</tspan></text>
<text style="white-space:pre" x="12" y="1413"><tspan fill="#6c7086">74 </tspan><tspan fill="#94e2d5" font-style="italic">0x</tspan><tspan fill="#fab387" font-style="italic">abcdef.abcdef</tspan></text>
<text style="white-space:pre" x="12" y="1432"><tspan fill="#6c7086">75 </tspan><tspan fill="#fab387">0XA85CE</tspan></text>
</g></svg>

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 15 KiB

+23 -23
View File
@@ -9,42 +9,42 @@
<text style="white-space:pre" x="12" y="121"><tspan fill="#6c7086"> 6 </tspan></text>
<text style="white-space:pre" x="12" y="140"><tspan fill="#6c7086"> 7 </tspan><tspan fill="#cba6f7">package</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc">Carbon</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="159"><tspan fill="#6c7086"> 8 </tspan></text>
<text style="white-space:pre" x="12" y="178"><tspan fill="#6c7086"> 9 </tspan><tspan fill="#cba6f7">interface</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">HasValueParam</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">V</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#a6adc8">) {</tspan></text>
<text style="white-space:pre" x="12" y="197"><tspan fill="#6c7086">10 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">Go</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#cdd6f4" font-weight="bold">self</tspan><tspan fill="#a6adc8">) </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="216"><tspan fill="#6c7086">11 </tspan><tspan fill="#a6adc8">}</tspan></text>
<text style="white-space:pre" x="12" y="178"><tspan fill="#6c7086"> 9 </tspan><tspan fill="#cba6f7">interface</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">HasValueParam</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4" font-style="italic">T</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">V</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{</tspan></text>
<text style="white-space:pre" x="12" y="197"><tspan fill="#6c7086">10 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa" font-weight="bold">Go</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4" font-weight="bold">self</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="216"><tspan fill="#6c7086">11 </tspan><tspan fill="#74c7ec">}</tspan></text>
<text style="white-space:pre" x="12" y="235"><tspan fill="#6c7086">12 </tspan></text>
<text style="white-space:pre" x="12" y="254"><tspan fill="#6c7086">13 </tspan><tspan fill="#cba6f7">impl</tspan><tspan fill="#a6adc8"> () </tspan><tspan fill="#f38ba8">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">HasValueParam</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">5</tspan><tspan fill="#a6adc8">) {</tspan></text>
<text style="white-space:pre" x="12" y="273"><tspan fill="#6c7086">14 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">Go</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#cdd6f4" font-weight="bold">self</tspan><tspan fill="#a6adc8">) </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> { </tspan><tspan fill="#f38ba8">return</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">42</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan><tspan fill="#a6adc8"> }</tspan></text>
<text style="white-space:pre" x="12" y="292"><tspan fill="#6c7086">15 </tspan><tspan fill="#a6adc8">}</tspan></text>
<text style="white-space:pre" x="12" y="254"><tspan fill="#6c7086">13 </tspan><tspan fill="#cba6f7">impl</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">()</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" text-decoration="underline">HasValueParam</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">5</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{</tspan></text>
<text style="white-space:pre" x="12" y="273"><tspan fill="#6c7086">14 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa" font-weight="bold">Go</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4" font-weight="bold">self</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">return</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">42</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">}</tspan></text>
<text style="white-space:pre" x="12" y="292"><tspan fill="#6c7086">15 </tspan><tspan fill="#74c7ec">}</tspan></text>
<text style="white-space:pre" x="12" y="311"><tspan fill="#6c7086">16 </tspan></text>
<text style="white-space:pre" x="12" y="330"><tspan fill="#6c7086">17 </tspan><tspan fill="#cba6f7">class</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">Point</tspan><tspan fill="#a6adc8"> {</tspan></text>
<text style="white-space:pre" x="12" y="349"><tspan fill="#6c7086">18 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">Origin</tspan><tspan fill="#a6adc8">() </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-weight="bold">Self</tspan><tspan fill="#a6adc8"> {</tspan></text>
<text style="white-space:pre" x="12" y="368"><tspan fill="#6c7086">19 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">return</tspan><tspan fill="#a6adc8"> {</tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#cdd6f4">x</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">0</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#cdd6f4">y</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">0</tspan><tspan fill="#a6adc8">}</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="387"><tspan fill="#6c7086">20 </tspan><tspan fill="#a6adc8"> }</tspan></text>
<text style="white-space:pre" x="12" y="330"><tspan fill="#6c7086">17 </tspan><tspan fill="#cba6f7">class</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold" font-style="italic">Point</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{</tspan></text>
<text style="white-space:pre" x="12" y="349"><tspan fill="#6c7086">18 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa" font-weight="bold">Origin</tspan><tspan fill="#74c7ec">()</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-weight="bold">Self</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{</tspan></text>
<text style="white-space:pre" x="12" y="368"><tspan fill="#6c7086">19 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">return</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{.</tspan><tspan fill="#eba0ac" font-style="italic">x</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">0</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#eba0ac" font-style="italic">y</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">0</tspan><tspan fill="#74c7ec">}</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="387"><tspan fill="#6c7086">20 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">}</tspan></text>
<text style="white-space:pre" x="12" y="406"><tspan fill="#6c7086">21 </tspan></text>
<text style="white-space:pre" x="12" y="425"><tspan fill="#6c7086">22 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">x</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="444"><tspan fill="#6c7086">23 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">y</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="463"><tspan fill="#6c7086">24 </tspan><tspan fill="#a6adc8">}</tspan></text>
<text style="white-space:pre" x="12" y="463"><tspan fill="#6c7086">24 </tspan><tspan fill="#74c7ec">}</tspan></text>
<text style="white-space:pre" x="12" y="482"><tspan fill="#6c7086">25 </tspan></text>
<text style="white-space:pre" x="12" y="501"><tspan fill="#6c7086">26 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">Procedure</tspan><tspan fill="#a6adc8">() </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> {</tspan></text>
<text style="white-space:pre" x="12" y="501"><tspan fill="#6c7086">26 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa" font-weight="bold">Procedure</tspan><tspan fill="#74c7ec">()</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{</tspan></text>
<text style="white-space:pre" x="12" y="520"><tspan fill="#6c7086">27 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">returned</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">zoop</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">0</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="539"><tspan fill="#6c7086">28 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">while</tspan><tspan fill="#a6adc8"> (</tspan><tspan fill="#89b4fa">DoSomeJob</tspan><tspan fill="#a6adc8">()) {</tspan></text>
<text style="white-space:pre" x="12" y="539"><tspan fill="#6c7086">28 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">while</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#89b4fa">DoSomeJob</tspan><tspan fill="#74c7ec">())</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{</tspan></text>
<text style="white-space:pre" x="12" y="558"><tspan fill="#6c7086">29 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">zoop</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">+=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">1</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="577"><tspan fill="#6c7086">30 </tspan><tspan fill="#a6adc8"> }</tspan></text>
<text style="white-space:pre" x="12" y="577"><tspan fill="#6c7086">30 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">}</tspan></text>
<text style="white-space:pre" x="12" y="596"><tspan fill="#6c7086">31 </tspan></text>
<text style="white-space:pre" x="12" y="615"><tspan fill="#6c7086">32 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">return</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="634"><tspan fill="#6c7086">33 </tspan><tspan fill="#a6adc8">}</tspan></text>
<text style="white-space:pre" x="12" y="634"><tspan fill="#6c7086">33 </tspan><tspan fill="#74c7ec">}</tspan></text>
<text style="white-space:pre" x="12" y="653"><tspan fill="#6c7086">34 </tspan></text>
<text style="white-space:pre" x="12" y="672"><tspan fill="#6c7086">35 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">Main</tspan><tspan fill="#a6adc8">() </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> {</tspan></text>
<text style="white-space:pre" x="12" y="672"><tspan fill="#6c7086">35 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa" font-weight="bold">Main</tspan><tspan fill="#74c7ec">()</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{</tspan></text>
<text style="white-space:pre" x="12" y="691"><tspan fill="#6c7086">36 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">let</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">str</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#a6e3a1">Hello world</tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="710"><tspan fill="#6c7086">37 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">let</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">hex</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387" font-style="italic">0xABCDEF1234567890</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="729"><tspan fill="#6c7086">38 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">let</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">bin</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387" font-weight="bold">0b0000111001010010</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="710"><tspan fill="#6c7086">37 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">let</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">hex</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5" font-style="italic">0x</tspan><tspan fill="#fab387" font-style="italic">ABCDEF1234567890</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="729"><tspan fill="#6c7086">38 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">let</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">bin</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5" font-style="italic">0b</tspan><tspan fill="#fab387" font-weight="bold">0000111001010010</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="748"><tspan fill="#6c7086">39 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">let</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">dec</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">123456789012345678</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="767"><tspan fill="#6c7086">40 </tspan></text>
<text style="white-space:pre" x="12" y="786"><tspan fill="#6c7086">41 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">let</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">big</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Core</tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#89b4fa">Int</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#fab387">1024</tspan><tspan fill="#a6adc8">) </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">1234</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="805"><tspan fill="#6c7086">42 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">let</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">aaa</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">auto</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#a6e3a1">Carbon</tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="824"><tspan fill="#6c7086">43 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">let</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">view</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">str</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#a6e3a1">Carbon</tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="786"><tspan fill="#6c7086">41 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">let</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-weight="bold" font-style="italic">big</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Core</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#f9e2af">Int</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#fab387">1024</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">1234</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="805"><tspan fill="#6c7086">42 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">let</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-weight="bold" font-style="italic">aaa</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">auto</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#a6e3a1">Carbon</tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="824"><tspan fill="#6c7086">43 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">let</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-weight="bold" font-style="italic">view</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">str</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#a6e3a1">Carbon</tspan><tspan fill="#74c7ec" font-style="italic">"</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="843"><tspan fill="#6c7086">44 </tspan></text>
<text style="white-space:pre" x="12" y="862"><tspan fill="#6c7086">45 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">return</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">Procedure</tspan><tspan fill="#a6adc8">()</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="881"><tspan fill="#6c7086">46 </tspan><tspan fill="#a6adc8">}</tspan></text>
<text style="white-space:pre" x="12" y="862"><tspan fill="#6c7086">45 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">return</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">Procedure</tspan><tspan fill="#74c7ec">()</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="881"><tspan fill="#6c7086">46 </tspan><tspan fill="#74c7ec">}</tspan></text>
</g></svg>

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 14 KiB

+38
View File
@@ -30,6 +30,7 @@ interface I;
impl C as (I(A, B, C.(D.E(F, G)).H)) {}
impl C as I where .A = (B where .Self = {}) {}
impl C as I where .A = {} and .B = C {}
impl forall [T: I where .A = i32] T as J where .B = T.A {}
impl Self as I;
impl as I;
@@ -39,3 +40,40 @@ constraint Constraint {
require impls I;
extern require impls I;
}
namespace N;
class N.C1 {
fn N.C1.Make() -> Self;
}
alias N.A = N.C1;
fn N.C1.Other();
class Outer(T: type).Inner(U: type) {}
fn Outer(T: type).Inner(U: type).F[self: Self](x: T) -> U;
fn N.Base(N.T).Member() {}
interface N.I2;
constraint N.C2 {}
class C6 {
fn destroy(ref self);
}
fn C6.destroy(ref self) {}
var p: C6* = &c6;
var q: typeof(p) = p;
var r: typeof(Make(p, (q))).Pointee = *p;
// --- the same names in type and expression positions
var o: Optional(Slice(i32)) = Optional(Slice(i32)).None();
let origin: Point = Point.Origin();
let t: type = Point;
var c: Core.Int(64) = x as Core.Int(64);
var v: Cpp.std.vector(i32) = Make(i32, Vector(Point));
var s: {.x: i32, .y: Point} = {.x = 1, .y = p};
var tup: (i32, Point) = (1, p);
fn Pick[T: Hashable & Eq where .Key = i32](t: T) -> T.Key;
fn Iter() -> Vector(T).Iterator;
if (T == Point and x impls Hashable) {}
alias lower = i32;
var l: lower = a * b;
+67 -29
View File
@@ -1,45 +1,83 @@
<svg xmlns="http://www.w3.org/2000/svg" width="721" height="803" viewBox="0 0 721 803">
<svg xmlns="http://www.w3.org/2000/svg" width="721" height="1525" viewBox="0 0 721 1525">
<rect width="100%" height="100%" fill="#1e1e2e"/>
<g xml:space="preserve" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="14">
<text style="white-space:pre" x="12" y="26"><tspan fill="#6c7086"> 1 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> Part of the Carbon Language project, under the Apache License v2.0 with LLVM</tspan></text>
<text style="white-space:pre" x="12" y="45"><tspan fill="#6c7086"> 2 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> Exceptions. See /LICENSE for license information.</tspan></text>
<text style="white-space:pre" x="12" y="64"><tspan fill="#6c7086"> 3 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception</tspan></text>
<text style="white-space:pre" x="12" y="83"><tspan fill="#6c7086"> 4 </tspan></text>
<text style="white-space:pre" x="12" y="102"><tspan fill="#6c7086"> 5 </tspan><tspan fill="#cba6f7">class</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C1</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="121"><tspan fill="#6c7086"> 6 </tspan><tspan fill="#cba6f7">class</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C2</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#f9e2af">T1</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T2</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C1</tspan><tspan fill="#a6adc8">) {}</tspan></text>
<text style="white-space:pre" x="12" y="140"><tspan fill="#6c7086"> 7 </tspan><tspan fill="#cba6f7">class</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C3</tspan><tspan fill="#a6adc8"> {</tspan></text>
<text style="white-space:pre" x="12" y="159"><tspan fill="#6c7086"> 8 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">extend</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">base</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C1</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="178"><tspan fill="#6c7086"> 9 </tspan><tspan fill="#a6adc8">}</tspan></text>
<text style="white-space:pre" x="12" y="102"><tspan fill="#6c7086"> 5 </tspan><tspan fill="#cba6f7">class</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold" font-style="italic">C1</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="121"><tspan fill="#6c7086"> 6 </tspan><tspan fill="#cba6f7">class</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold" font-style="italic">C2</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4" font-style="italic">T1</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">T2</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C1</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{}</tspan></text>
<text style="white-space:pre" x="12" y="140"><tspan fill="#6c7086"> 7 </tspan><tspan fill="#cba6f7">class</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold" font-style="italic">C3</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{</tspan></text>
<text style="white-space:pre" x="12" y="159"><tspan fill="#6c7086"> 8 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">extend</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">base</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" text-decoration="underline">C1</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="178"><tspan fill="#6c7086"> 9 </tspan><tspan fill="#74c7ec">}</tspan></text>
<text style="white-space:pre" x="12" y="197"><tspan fill="#6c7086">10 </tspan><tspan fill="#cba6f7">class</tspan></text>
<text style="white-space:pre" x="12" y="216"><tspan fill="#6c7086">11 </tspan><tspan fill="#a6adc8"> (</tspan><tspan fill="#89b4fa">C4</tspan><tspan fill="#a6adc8">(</tspan></text>
<text style="white-space:pre" x="12" y="235"><tspan fill="#6c7086">12 </tspan><tspan fill="#a6adc8"> (</tspan><tspan fill="#f9e2af">T1</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan><tspan fill="#a6adc8">)</tspan><tspan fill="#74c7ec">,</tspan></text>
<text style="white-space:pre" x="12" y="254"><tspan fill="#6c7086">13 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T2</tspan><tspan fill="#94e2d5">:</tspan></text>
<text style="white-space:pre" x="12" y="273"><tspan fill="#6c7086">14 </tspan><tspan fill="#a6adc8"> (</tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#89b4fa">B</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#f9e2af">E</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">F</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#f9e2af">G</tspan><tspan fill="#a6adc8">))</tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#f9e2af">C</tspan><tspan fill="#a6adc8">)</tspan></text>
<text style="white-space:pre" x="12" y="292"><tspan fill="#6c7086">15 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#f9e2af">D</tspan><tspan fill="#a6adc8">))) </tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="216"><tspan fill="#6c7086">11 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#89b4fa">C4</tspan><tspan fill="#74c7ec">(</tspan></text>
<text style="white-space:pre" x="12" y="235"><tspan fill="#6c7086">12 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4" font-style="italic">T1</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan><tspan fill="#74c7ec">),</tspan></text>
<text style="white-space:pre" x="12" y="254"><tspan fill="#6c7086">13 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-style="italic">T2</tspan><tspan fill="#94e2d5">:</tspan></text>
<text style="white-space:pre" x="12" y="273"><tspan fill="#6c7086">14 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4">A</tspan><tspan fill="#74c7ec">.(</tspan><tspan fill="#89b4fa">B</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4">E</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">F</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4">G</tspan><tspan fill="#74c7ec">)).</tspan><tspan fill="#eba0ac" font-style="italic">C</tspan><tspan fill="#74c7ec">)</tspan></text>
<text style="white-space:pre" x="12" y="292"><tspan fill="#6c7086">15 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#eba0ac" font-style="italic">D</tspan><tspan fill="#74c7ec">)))</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="311"><tspan fill="#6c7086">16 </tspan></text>
<text style="white-space:pre" x="12" y="330"><tspan fill="#6c7086">17 </tspan><tspan fill="#cba6f7">class</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C5</tspan><tspan fill="#a6adc8"> {</tspan></text>
<text style="white-space:pre" x="12" y="349"><tspan fill="#6c7086">18 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">impl</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">I</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="368"><tspan fill="#6c7086">19 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">extend</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">impl</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">I</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="387"><tspan fill="#6c7086">20 </tspan><tspan fill="#a6adc8">}</tspan></text>
<text style="white-space:pre" x="12" y="330"><tspan fill="#6c7086">17 </tspan><tspan fill="#cba6f7">class</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold" font-style="italic">C5</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{</tspan></text>
<text style="white-space:pre" x="12" y="349"><tspan fill="#6c7086">18 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">impl</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" text-decoration="underline">I</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="368"><tspan fill="#6c7086">19 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">extend</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">impl</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" text-decoration="underline">I</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="387"><tspan fill="#6c7086">20 </tspan><tspan fill="#74c7ec">}</tspan></text>
<text style="white-space:pre" x="12" y="406"><tspan fill="#6c7086">21 </tspan></text>
<text style="white-space:pre" x="12" y="425"><tspan fill="#6c7086">22 </tspan><tspan fill="#cba6f7">alias</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">a1</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C1</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="425"><tspan fill="#6c7086">22 </tspan><tspan fill="#cba6f7">alias</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">a1</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">C1</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="444"><tspan fill="#6c7086">23 </tspan><tspan fill="#cba6f7">alias</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">a2</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="463"><tspan fill="#6c7086">24 </tspan></text>
<text style="white-space:pre" x="12" y="482"><tspan fill="#6c7086">25 </tspan><tspan fill="#cba6f7">adapt</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">SomeClass</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="501"><tspan fill="#6c7086">26 </tspan><tspan fill="#cba6f7">adapt</tspan><tspan fill="#a6adc8"> {</tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">SomeClass</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#cdd6f4">b</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#a6adc8">}</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="501"><tspan fill="#6c7086">26 </tspan><tspan fill="#cba6f7">adapt</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{.</tspan><tspan fill="#eba0ac" font-style="italic">a</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">SomeClass</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#eba0ac" font-style="italic">b</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">}</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="520"><tspan fill="#6c7086">27 </tspan><tspan fill="#cba6f7">adapt</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="539"><tspan fill="#6c7086">28 </tspan></text>
<text style="white-space:pre" x="12" y="558"><tspan fill="#6c7086">29 </tspan><tspan fill="#cba6f7">interface</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">I</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="577"><tspan fill="#6c7086">30 </tspan><tspan fill="#cba6f7">impl</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">as</tspan><tspan fill="#a6adc8"> (</tspan><tspan fill="#89b4fa">I</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">B</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C</tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#f9e2af">D</tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#89b4fa">E</tspan><tspan fill="#a6adc8">(</tspan><tspan fill="#f9e2af">F</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">G</tspan><tspan fill="#a6adc8">))</tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#f9e2af">H</tspan><tspan fill="#a6adc8">)) {}</tspan></text>
<text style="white-space:pre" x="12" y="596"><tspan fill="#6c7086">31 </tspan><tspan fill="#cba6f7">impl</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">I</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">where</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> (</tspan><tspan fill="#f9e2af">B</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">where</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#cdd6f4" font-weight="bold">Self</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> {}) {}</tspan></text>
<text style="white-space:pre" x="12" y="615"><tspan fill="#6c7086">32 </tspan><tspan fill="#cba6f7">impl</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">I</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">where</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> {} </tspan><tspan fill="#f38ba8">and</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">.</tspan><tspan fill="#f9e2af">B</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C</tspan><tspan fill="#a6adc8"> {}</tspan></text>
<text style="white-space:pre" x="12" y="634"><tspan fill="#6c7086">33 </tspan><tspan fill="#cba6f7">impl</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-weight="bold">Self</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">I</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="653"><tspan fill="#6c7086">34 </tspan><tspan fill="#cba6f7">impl</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">I</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="672"><tspan fill="#6c7086">35 </tspan></text>
<text style="white-space:pre" x="12" y="691"><tspan fill="#6c7086">36 </tspan><tspan fill="#cba6f7">constraint</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">Constraint</tspan><tspan fill="#a6adc8"> {</tspan></text>
<text style="white-space:pre" x="12" y="710"><tspan fill="#6c7086">37 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">require</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">impls</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">I</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="729"><tspan fill="#6c7086">38 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">require</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-weight="bold">Self</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">impls</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">I</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="748"><tspan fill="#6c7086">39 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">require</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">impls</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">I</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="767"><tspan fill="#6c7086">40 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">extern</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">require</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">impls</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">I</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="786"><tspan fill="#6c7086">41 </tspan><tspan fill="#a6adc8">}</tspan></text>
<text style="white-space:pre" x="12" y="577"><tspan fill="#6c7086">30 </tspan><tspan fill="#cba6f7">impl</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#f9e2af" text-decoration="underline">I</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4">A</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">B</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">C</tspan><tspan fill="#74c7ec">.(</tspan><tspan fill="#cdd6f4">D</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#89b4fa" font-style="italic">E</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4">F</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">G</tspan><tspan fill="#74c7ec">)).</tspan><tspan fill="#eba0ac" font-style="italic">H</tspan><tspan fill="#74c7ec">))</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{}</tspan></text>
<text style="white-space:pre" x="12" y="596"><tspan fill="#6c7086">31 </tspan><tspan fill="#cba6f7">impl</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" text-decoration="underline">I</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5" font-style="italic">where</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#eba0ac" font-style="italic">A</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4">B</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5" font-style="italic">where</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#cdd6f4" font-weight="bold">Self</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{})</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{}</tspan></text>
<text style="white-space:pre" x="12" y="615"><tspan fill="#6c7086">32 </tspan><tspan fill="#cba6f7">impl</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" text-decoration="underline">I</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5" font-style="italic">where</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#eba0ac" font-style="italic">A</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{}</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">and</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#eba0ac" font-style="italic">B</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">C</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{}</tspan></text>
<text style="white-space:pre" x="12" y="634"><tspan fill="#6c7086">33 </tspan><tspan fill="#cba6f7">impl</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5" font-style="italic">forall</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">[</tspan><tspan fill="#cdd6f4" font-style="italic">T</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">I</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5" font-style="italic">where</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#eba0ac" font-style="italic">A</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">]</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" text-decoration="underline">J</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5" font-style="italic">where</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#eba0ac" font-style="italic">B</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">T</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#eba0ac" font-style="italic">A</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{}</tspan></text>
<text style="white-space:pre" x="12" y="653"><tspan fill="#6c7086">34 </tspan><tspan fill="#cba6f7">impl</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-weight="bold">Self</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" text-decoration="underline">I</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="672"><tspan fill="#6c7086">35 </tspan><tspan fill="#cba6f7">impl</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" text-decoration="underline">I</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="691"><tspan fill="#6c7086">36 </tspan></text>
<text style="white-space:pre" x="12" y="710"><tspan fill="#6c7086">37 </tspan><tspan fill="#cba6f7">constraint</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">Constraint</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{</tspan></text>
<text style="white-space:pre" x="12" y="729"><tspan fill="#6c7086">38 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">require</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">impls</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" text-decoration="underline">I</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="748"><tspan fill="#6c7086">39 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">require</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-weight="bold">Self</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">impls</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" text-decoration="underline">I</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="767"><tspan fill="#6c7086">40 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">require</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">impls</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" text-decoration="underline">I</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="786"><tspan fill="#6c7086">41 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7" font-style="italic">extern</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">require</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">impls</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" text-decoration="underline">I</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="805"><tspan fill="#6c7086">42 </tspan><tspan fill="#74c7ec">}</tspan></text>
<text style="white-space:pre" x="12" y="824"><tspan fill="#6c7086">43 </tspan></text>
<text style="white-space:pre" x="12" y="843"><tspan fill="#6c7086">44 </tspan><tspan fill="#cba6f7">namespace</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc">N</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="862"><tspan fill="#6c7086">45 </tspan></text>
<text style="white-space:pre" x="12" y="881"><tspan fill="#6c7086">46 </tspan><tspan fill="#cba6f7">class</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc" font-weight="bold" font-style="italic">N</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#f9e2af" font-weight="bold" font-style="italic">C1</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{</tspan></text>
<text style="white-space:pre" x="12" y="900"><tspan fill="#6c7086">47 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc" font-weight="bold" font-style="italic">N</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#f5e0dc" font-weight="bold" font-style="italic">C1</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#89b4fa" font-weight="bold">Make</tspan><tspan fill="#74c7ec">()</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-weight="bold">Self</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="919"><tspan fill="#6c7086">48 </tspan><tspan fill="#74c7ec">}</tspan></text>
<text style="white-space:pre" x="12" y="938"><tspan fill="#6c7086">49 </tspan><tspan fill="#cba6f7">alias</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc" font-weight="bold" font-style="italic">N</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#f9e2af">A</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">N</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#eba0ac" font-style="italic">C1</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="957"><tspan fill="#6c7086">50 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc" font-weight="bold" font-style="italic">N</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#f5e0dc" font-weight="bold" font-style="italic">C1</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#89b4fa" font-weight="bold">Other</tspan><tspan fill="#74c7ec">()</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="976"><tspan fill="#6c7086">51 </tspan><tspan fill="#cba6f7">class</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc" font-weight="bold" font-style="italic">Outer</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4" font-style="italic">T</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan><tspan fill="#74c7ec">).</tspan><tspan fill="#f9e2af" font-weight="bold" font-style="italic">Inner</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4" font-style="italic">U</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{}</tspan></text>
<text style="white-space:pre" x="12" y="995"><tspan fill="#6c7086">52 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc" font-weight="bold" font-style="italic">Outer</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4" font-style="italic">T</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan><tspan fill="#74c7ec">).</tspan><tspan fill="#f5e0dc" font-weight="bold" font-style="italic">Inner</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4" font-style="italic">U</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan><tspan fill="#74c7ec">).</tspan><tspan fill="#89b4fa" font-weight="bold">F</tspan><tspan fill="#74c7ec">[</tspan><tspan fill="#cdd6f4" font-weight="bold">self</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-weight="bold">Self</tspan><tspan fill="#74c7ec">](</tspan><tspan fill="#cdd6f4" font-style="italic">x</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">U</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1014"><tspan fill="#6c7086">53 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc" font-weight="bold" font-style="italic">N</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#f5e0dc" font-weight="bold" font-style="italic">Base</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#f5e0dc" font-weight="bold" font-style="italic">N</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec">).</tspan><tspan fill="#89b4fa" font-weight="bold">Member</tspan><tspan fill="#74c7ec">()</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{}</tspan></text>
<text style="white-space:pre" x="12" y="1033"><tspan fill="#6c7086">54 </tspan><tspan fill="#cba6f7">interface</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc" font-weight="bold" font-style="italic">N</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#f9e2af">I2</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1052"><tspan fill="#6c7086">55 </tspan><tspan fill="#cba6f7">constraint</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc" font-weight="bold" font-style="italic">N</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#f9e2af">C2</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{}</tspan></text>
<text style="white-space:pre" x="12" y="1071"><tspan fill="#6c7086">56 </tspan></text>
<text style="white-space:pre" x="12" y="1090"><tspan fill="#6c7086">57 </tspan><tspan fill="#cba6f7">class</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold" font-style="italic">C6</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{</tspan></text>
<text style="white-space:pre" x="12" y="1109"><tspan fill="#6c7086">58 </tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5" font-style="italic">destroy</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cba6f7" font-style="italic">ref</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-weight="bold">self</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1128"><tspan fill="#6c7086">59 </tspan><tspan fill="#74c7ec">}</tspan></text>
<text style="white-space:pre" x="12" y="1147"><tspan fill="#6c7086">60 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc" font-weight="bold" font-style="italic">C6</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#94e2d5" font-style="italic">destroy</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cba6f7" font-style="italic">ref</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-weight="bold">self</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{}</tspan></text>
<text style="white-space:pre" x="12" y="1166"><tspan fill="#6c7086">61 </tspan></text>
<text style="white-space:pre" x="12" y="1185"><tspan fill="#6c7086">62 </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">p</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">C6</tspan><tspan fill="#94e2d5" font-weight="bold">*</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">&amp;</tspan><tspan fill="#cdd6f4">c6</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1204"><tspan fill="#6c7086">63 </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">q</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">typeof</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4">p</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">p</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1223"><tspan fill="#6c7086">64 </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">r</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">typeof</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#89b4fa">Make</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4">p</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4">q</tspan><tspan fill="#74c7ec">))).</tspan><tspan fill="#f9e2af">Pointee</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">*</tspan><tspan fill="#cdd6f4">p</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1242"><tspan fill="#6c7086">65 </tspan></text>
<text style="white-space:pre" x="12" y="1261"><tspan fill="#6c7086">66 </tspan><tspan fill="#7f849c">//</tspan><tspan fill="#7f849c" font-style="italic"> --- the same names in type and expression positions</tspan></text>
<text style="white-space:pre" x="12" y="1280"><tspan fill="#6c7086">67 </tspan></text>
<text style="white-space:pre" x="12" y="1299"><tspan fill="#6c7086">68 </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">o</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">Optional</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#f9e2af">Slice</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">))</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">Optional</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#89b4fa">Slice</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">)).</tspan><tspan fill="#89b4fa" font-style="italic">None</tspan><tspan fill="#74c7ec">()</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1318"><tspan fill="#6c7086">69 </tspan><tspan fill="#cba6f7">let</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-weight="bold" font-style="italic">origin</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">Point</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">Point</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#89b4fa" font-style="italic">Origin</tspan><tspan fill="#74c7ec">()</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1337"><tspan fill="#6c7086">70 </tspan><tspan fill="#cba6f7">let</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4" font-weight="bold" font-style="italic">t</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">type</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">Point</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1356"><tspan fill="#6c7086">71 </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">c</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Core</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#f9e2af">Int</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#fab387">64</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">x</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">as</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Core</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#f9e2af">Int</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#fab387">64</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1375"><tspan fill="#6c7086">72 </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">v</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-weight="bold">Cpp</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#f5e0dc" font-weight="bold" font-style="italic">std</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#f9e2af">vector</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">Make</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa">Vector</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4">Point</tspan><tspan fill="#74c7ec">))</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1394"><tspan fill="#6c7086">73 </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">s</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{.</tspan><tspan fill="#eba0ac" font-style="italic">x</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#eba0ac" font-style="italic">y</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">Point</tspan><tspan fill="#74c7ec">}</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{.</tspan><tspan fill="#eba0ac" font-style="italic">x</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#fab387">1</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#eba0ac" font-style="italic">y</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">p</tspan><tspan fill="#74c7ec">}</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1413"><tspan fill="#6c7086">74 </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">tup</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">Point</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#fab387">1</tspan><tspan fill="#74c7ec">,</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">p</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1432"><tspan fill="#6c7086">75 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa" font-weight="bold">Pick</tspan><tspan fill="#74c7ec">[</tspan><tspan fill="#cdd6f4" font-style="italic">T</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">Hashable</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">&amp;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">Eq</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5" font-style="italic">where</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#eba0ac" font-style="italic">Key</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec">](</tspan><tspan fill="#cdd6f4" font-style="italic">t</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc" font-weight="bold" font-style="italic">T</tspan><tspan fill="#74c7ec">.</tspan><tspan fill="#f9e2af">Key</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1451"><tspan fill="#6c7086">76 </tspan><tspan fill="#cba6f7">fn</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#89b4fa" font-weight="bold">Iter</tspan><tspan fill="#74c7ec">()</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">-&gt;</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f5e0dc" font-weight="bold" font-style="italic">Vector</tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#f9e2af">T</tspan><tspan fill="#74c7ec">).</tspan><tspan fill="#f9e2af">Iterator</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1470"><tspan fill="#6c7086">77 </tspan><tspan fill="#f38ba8">if</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">(</tspan><tspan fill="#cdd6f4">T</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">==</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">Point</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f38ba8">and</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">x</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">impls</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" text-decoration="underline">Hashable</tspan><tspan fill="#74c7ec">)</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#74c7ec">{}</tspan></text>
<text style="white-space:pre" x="12" y="1489"><tspan fill="#6c7086">78 </tspan><tspan fill="#cba6f7">alias</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">lower</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af" font-style="italic">i32</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
<text style="white-space:pre" x="12" y="1508"><tspan fill="#6c7086">79 </tspan><tspan fill="#cba6f7">var</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">l</tspan><tspan fill="#94e2d5">:</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#f9e2af">lower</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">=</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">a</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#94e2d5">*</tspan><tspan fill="#a6adc8"> </tspan><tspan fill="#cdd6f4">b</tspan><tspan fill="#74c7ec" font-weight="bold">;</tspan></text>
</g></svg>

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 35 KiB

File diff suppressed because it is too large. Load diff
+24 -4
View File
@@ -36,10 +36,12 @@ _GRAMMAR_PATH = (
)
# A theme built for this grammar rather than taken from an editor. Each family
# of related scopes gets one color, and bold and italic distinguish the scopes
# within a family, so every scope the grammar emits renders differently and a
# change to what it scopes is visible in the rendering. A scope with no entry of
# its own takes its family's. The colors are Catppuccin Mocha's.
# of related scopes gets one color, and bold, italic, and underline distinguish
# the scopes within a family. Every scope the grammar picks from context renders
# differently, so a change to what it scopes is visible in the rendering. Scopes
# that follow from the spelling alone, such as a bracket's shape, can share a
# rendering, since the text already shows them. A scope with no entry of its own
# takes its family's. The colors are Catppuccin Mocha's.
_COLORS = {
"comment": "#7f849c",
"punctuation.definition.comment": "#7f849c",
@@ -53,10 +55,17 @@ _COLORS = {
"entity.name.type": "#f9e2af",
"support.type": "#f9e2af",
"support.class": "#f9e2af",
"entity.other.inherited-class": "#f9e2af",
"entity.name.namespace": "#f5e0dc",
"entity.name.scope-resolution": "#f5e0dc",
"entity.name.tag": "#f5e0dc",
"entity.name.function": "#89b4fa",
"support.function": "#89b4fa",
"variable": "#cdd6f4",
# Members of something else: a field or other member read through `.` or
# `->`, and a choice's alternatives.
"variable.other.property": "#eba0ac",
"variable.other.enummember": "#eba0ac",
"string": "#a6e3a1",
"constant.character.escape": "#f5c2e7",
"constant.numeric": "#fab387",
@@ -76,14 +85,25 @@ _STYLES = {
"storage.modifier": "italic",
"constant.language": "bold",
"keyword.other": "italic",
"keyword.operator.type.pointer": "bold",
"punctuation.terminator": "bold",
"punctuation.definition.string": "italic",
"punctuation.definition.raw-identifier": "bold italic",
"support.type": "italic",
"support.class": "bold",
"entity.name.type.class": "bold italic",
"entity.other.inherited-class": "underline",
"entity.name.namespace.library": "bold",
"entity.name.scope-resolution": "bold italic",
"entity.name.tag": "italic",
"entity.name.function.definition": "bold",
"entity.name.function.member": "italic",
"support.function": "bold italic",
"variable.parameter": "italic",
"variable.language": "bold",
"variable.other.constant": "bold italic",
"variable.other.property": "italic",
"variable.other.enummember": "bold",
"string.quoted.single": "italic",
"string.quoted.triple": "bold",
"constant.character.escape": "",
+25 -13
View File
@@ -234,30 +234,42 @@ def _append_capture_tokens(
group's text takes on top of `scopes`; group `"0"` is the whole match. The
tokens tile the match with no gaps: text not covered by a listed group is
still appended, under `scopes` alone.
Groups nest, so the scopes do too: text inside `((//)(@x))` carries the
scope of group 1 and then the scope of whichever of 2 and 3 covers it.
Enclosing groups have the lower number, which is what puts them lower in
the stack.
"""
if not captures:
_append_token(tokens, linenum, match.start(), match.end(), scopes)
return
pos = match.start()
spans = []
for group in range((match.re.groups or 0) + 1):
spec = captures.get(str(group))
# Skip a group the grammar does not name, one that did not
# participate in the match (`start` is then -1), and one that lies
# behind text already appended, since tokens come out in order.
if spec is None or match.start(group) < pos:
start, end = match.span(group)
# Skip a group the grammar does not name, one that did not participate
# in the match, whose `start` is then -1, and one that matched empty.
if spec is None or start < 0 or start == end:
continue
if match.start(group) == match.end(group):
continue
_append_token(tokens, linenum, pos, match.start(group), scopes)
spans.append((start, end, spec["name"]))
edges = sorted(
{match.start(), match.end()}.union(
point for start, end, _ in spans for point in (start, end)
)
)
for start, end in zip(edges, edges[1:]):
_append_token(
tokens,
linenum,
match.start(group),
match.end(group),
scopes + [spec["name"]],
start,
end,
scopes
+ [
name
for span_start, span_end, name in spans
if span_start <= start and end <= span_end
],
)
pos = match.end(group)
_append_token(tokens, linenum, pos, match.end(), scopes)
def _push_scope(
+679 -77
View File
@@ -10,7 +10,11 @@
{ "include": "#comments" },
{ "include": "#cpp-inline" },
{ "include": "#strings" },
{ "include": "#builtin-functions" },
{ "include": "#choice-definitions" },
{ "include": "#declarations" },
{ "include": "#inheritance" },
{ "include": "#type-annotation" },
{ "include": "#keywords" },
{ "include": "#literals" },
{ "include": "#numbers" },
@@ -22,12 +26,12 @@
"comments": {
"patterns": [
{
"comment": "Toolchain directives, which are comments the driver acts on.",
"name": "comment.line.double-slash.carbon",
"match": "(//)(@(?:dump-sem-ir-(?:begin|end)|include-in-dumps))\\b.*$",
"comment": "Toolchain directives. The comment scope sits on a capture rather than on the rule, to leave the leading indentation outside it.",
"match": "^\\s*((//)(@(?:dump-sem-ir-(?:begin|end)|include-in-dumps)))$",
"captures": {
"1": { "name": "punctuation.definition.comment.carbon" },
"2": { "name": "keyword.other.directive.carbon" }
"1": { "name": "comment.line.double-slash.carbon" },
"2": { "name": "punctuation.definition.comment.carbon" },
"3": { "name": "keyword.other.directive.carbon" }
}
},
{
@@ -43,20 +47,22 @@
"patterns": [
{
"comment": "Inline C++, block form.",
"begin": "\\b(?:(import)\\s+(Cpp)\\s+(inline)|(inline)\\s+(Cpp))\\s*(''')([^\\s'\\\"#]*)",
"begin": "\\b(?:(import)\\s+(Cpp)\\s+(inline)|(inline)\\s+(Cpp))\\s*(''')([^\\s'\\\"#]*)(?:[ \\t]*((//)(?:[ \\t][^\\n]*)?)$)?",
"end": "(''')\\s*(;)?",
"beginCaptures": {
"1": { "name": "storage.type.carbon" },
"1": { "name": "keyword.control.import.carbon" },
"2": { "name": "support.class.carbon" },
"3": { "name": "storage.type.carbon" },
"4": { "name": "storage.type.carbon" },
"5": { "name": "support.class.carbon" },
"6": { "name": "punctuation.definition.string.begin.carbon" },
"7": { "name": "entity.name.tag.language.carbon" }
"7": { "name": "entity.name.tag.language.carbon" },
"8": { "name": "comment.line.double-slash.carbon" },
"9": { "name": "punctuation.definition.comment.carbon" }
},
"endCaptures": {
"1": { "name": "punctuation.definition.string.end.carbon" },
"2": { "name": "punctuation.terminator.carbon" }
"2": { "name": "punctuation.terminator.statement.carbon" }
},
"contentName": "meta.embedded.block.cpp",
"patterns": [{ "include": "source.cpp" }]
@@ -66,7 +72,7 @@
"begin": "\\b(?:(import)\\s+(Cpp)\\s+(inline)|(inline)\\s+(Cpp))\\s*(\")",
"end": "(\")\\s*(;)?",
"beginCaptures": {
"1": { "name": "storage.type.carbon" },
"1": { "name": "keyword.control.import.carbon" },
"2": { "name": "support.class.carbon" },
"3": { "name": "storage.type.carbon" },
"4": { "name": "storage.type.carbon" },
@@ -75,7 +81,7 @@
},
"endCaptures": {
"1": { "name": "punctuation.definition.string.end.carbon" },
"2": { "name": "punctuation.terminator.carbon" }
"2": { "name": "punctuation.terminator.statement.carbon" }
},
"contentName": "meta.embedded.inline.cpp",
"patterns": [{ "include": "source.cpp" }]
@@ -87,12 +93,14 @@
{
"comment": "Block string literal, with an optional file type indicator, raw at `###` level.",
"name": "string.quoted.triple.carbon",
"begin": "(#{3,})(''')([^\\s'\\\"#]*)",
"begin": "(#{3,})(''')([^\\s'\\\"#]*)(?:[ \\t]*((//)(?:[ \\t][^\\n]*)?)$)?",
"end": "(''')\\1",
"beginCaptures": {
"1": { "name": "punctuation.definition.string.begin.carbon" },
"2": { "name": "punctuation.definition.string.begin.carbon" },
"3": { "name": "entity.name.tag.language.carbon" }
"3": { "name": "entity.name.tag.language.carbon" },
"4": { "name": "comment.line.double-slash.carbon" },
"5": { "name": "punctuation.definition.comment.carbon" }
},
"endCaptures": {
"1": { "name": "punctuation.definition.string.end.carbon" }
@@ -102,12 +110,14 @@
{
"comment": "Block string literal, with an optional file type indicator, raw at `##` level.",
"name": "string.quoted.triple.carbon",
"begin": "(##)(''')([^\\s'\\\"#]*)",
"begin": "(##)(''')([^\\s'\\\"#]*)(?:[ \\t]*((//)(?:[ \\t][^\\n]*)?)$)?",
"end": "('''##)",
"beginCaptures": {
"1": { "name": "punctuation.definition.string.begin.carbon" },
"2": { "name": "punctuation.definition.string.begin.carbon" },
"3": { "name": "entity.name.tag.language.carbon" }
"3": { "name": "entity.name.tag.language.carbon" },
"4": { "name": "comment.line.double-slash.carbon" },
"5": { "name": "punctuation.definition.comment.carbon" }
},
"endCaptures": {
"1": { "name": "punctuation.definition.string.end.carbon" }
@@ -117,12 +127,14 @@
{
"comment": "Block string literal, with an optional file type indicator, raw at `#` level.",
"name": "string.quoted.triple.carbon",
"begin": "(#)(''')([^\\s'\\\"#]*)",
"begin": "(#)(''')([^\\s'\\\"#]*)(?:[ \\t]*((//)(?:[ \\t][^\\n]*)?)$)?",
"end": "('''#)",
"beginCaptures": {
"1": { "name": "punctuation.definition.string.begin.carbon" },
"2": { "name": "punctuation.definition.string.begin.carbon" },
"3": { "name": "entity.name.tag.language.carbon" }
"3": { "name": "entity.name.tag.language.carbon" },
"4": { "name": "comment.line.double-slash.carbon" },
"5": { "name": "punctuation.definition.comment.carbon" }
},
"endCaptures": {
"1": { "name": "punctuation.definition.string.end.carbon" }
@@ -132,11 +144,13 @@
{
"comment": "Block string literal, with an optional file type indicator.",
"name": "string.quoted.triple.carbon",
"begin": "(''')([^\\s'\\\"#]*)",
"begin": "(''')([^\\s'\\\"#]*)(?:[ \\t]*((//)(?:[ \\t][^\\n]*)?)$)?",
"end": "(''')",
"beginCaptures": {
"1": { "name": "punctuation.definition.string.begin.carbon" },
"2": { "name": "entity.name.tag.language.carbon" }
"2": { "name": "entity.name.tag.language.carbon" },
"3": { "name": "comment.line.double-slash.carbon" },
"4": { "name": "punctuation.definition.comment.carbon" }
},
"endCaptures": {
"1": { "name": "punctuation.definition.string.end.carbon" }
@@ -146,11 +160,13 @@
{
"comment": "A `\"\"\"` block is always an error, but highlighting it as a block string keeps the rest of the file readable.",
"name": "string.quoted.triple.carbon",
"begin": "(\"\"\")([^\\s'\\\"#]*)",
"begin": "(\"\"\")([^\\s'\\\"#]*)(?:[ \\t]*((//)(?:[ \\t][^\\n]*)?)$)?",
"end": "(\"\"\")",
"beginCaptures": {
"1": { "name": "punctuation.definition.string.begin.carbon" },
"2": { "name": "entity.name.tag.language.carbon" }
"2": { "name": "entity.name.tag.language.carbon" },
"3": { "name": "comment.line.double-slash.carbon" },
"4": { "name": "punctuation.definition.comment.carbon" }
},
"endCaptures": {
"1": { "name": "punctuation.definition.string.end.carbon" }
@@ -231,7 +247,7 @@
"patterns": [
{
"name": "constant.character.escape.carbon",
"match": "\\\\(?:[tnr0'\\\"\\\\]|x[0-9A-Fa-f]{2}|u\\{[0-9A-Fa-f]+\\})"
"match": "\\\\(?:[tnr0'\\\"\\\\]|x[0-9A-F]{2}|u\\{[0-9A-F]+\\})"
}
]
},
@@ -239,7 +255,7 @@
"patterns": [
{
"name": "constant.character.escape.carbon",
"match": "\\\\#(?:[tnr0'\\\"\\\\]|x[0-9A-Fa-f]{2}|u\\{[0-9A-Fa-f]+\\})"
"match": "\\\\#(?:[tnr0'\\\"\\\\]|x[0-9A-F]{2}|u\\{[0-9A-F]+\\})"
}
]
},
@@ -247,7 +263,7 @@
"patterns": [
{
"name": "constant.character.escape.carbon",
"match": "\\\\##(?:[tnr0'\\\"\\\\]|x[0-9A-Fa-f]{2}|u\\{[0-9A-Fa-f]+\\})"
"match": "\\\\##(?:[tnr0'\\\"\\\\]|x[0-9A-F]{2}|u\\{[0-9A-F]+\\})"
}
]
},
@@ -255,46 +271,383 @@
"patterns": [
{
"name": "constant.character.escape.carbon",
"match": "\\\\#{3,}(?:[tnr0'\\\"\\\\]|x[0-9A-Fa-f]{2}|u\\{[0-9A-Fa-f]+\\})"
"match": "\\\\#{3,}(?:[tnr0'\\\"\\\\]|x[0-9A-F]{2}|u\\{[0-9A-F]+\\})"
}
]
},
"builtin-functions": {
"patterns": [
{
"comment": "A builtin function declaration (`fn ... = \"...\"`), scoping the string contents as `support.function.builtin`.",
"begin": "\\b(fn)\\b(?=[^\"/;]*=\\s*\")",
"beginCaptures": {
"1": { "name": "storage.type.carbon" }
},
"end": "(?=;)|$",
"patterns": [
{
"match": "(=)\\s*((\")([^\"\\\\\\n]*)(\"))",
"captures": {
"1": { "name": "keyword.operator.carbon" },
"2": { "name": "string.quoted.double.carbon" },
"3": { "name": "punctuation.definition.string.begin.carbon" },
"4": { "name": "support.function.builtin.carbon" },
"5": { "name": "punctuation.definition.string.end.carbon" }
}
},
{ "include": "#declarations" },
{ "include": "#comments" },
{ "include": "#strings" },
{ "include": "#type-annotation" },
{ "include": "#keywords" },
{ "include": "#literals" },
{ "include": "#numbers" },
{ "include": "#operators" },
{ "include": "#identifiers" },
{ "include": "#punctuation" }
]
}
]
},
"declarations": {
"patterns": [
{
"comment": "Function declarations, including lambdas with a name. `destroy` is a keyword naming a destructor, not a name.",
"match": "\\b(fn)\\s+(?!destroy\\b)((?:r#)?[A-Za-z_][A-Za-z0-9_]*)",
"comment": "The name a function declaration declares, after any qualifiers, or the `destroy` keyword.",
"begin": "(?<=\\bfn)\\s+(?=(?:r#)?[A-Za-z_])",
"end": "(?:(destroy)|((?:r#)?[A-Za-z_][A-Za-z0-9_]*))\\b(?!\\s*(?:\\[[^\\[\\]]*\\]\\s*)?(?:\\([^()]*(?:\\([^()]*(?:\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*)?\\.)|(?=[^\\sA-Za-z_])|$",
"endCaptures": {
"1": { "name": "keyword.other.carbon" },
"2": { "name": "entity.name.function.definition.carbon" }
},
"patterns": [{ "include": "#declared-name-qualifier" }]
},
{
"comment": "The name a class declaration declares, given `entity.name.type.class` for themes that color classes apart from other types.",
"begin": "(?<=\\bclass)\\s+(?=(?:r#)?[A-Za-z_])",
"end": "((?:r#)?[A-Za-z_][A-Za-z0-9_]*)\\b(?!\\s*(?:\\[[^\\[\\]]*\\]\\s*)?(?:\\([^()]*(?:\\([^()]*(?:\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*)?\\.)|(?=[^\\sA-Za-z_])|$",
"endCaptures": {
"1": { "name": "entity.name.type.class.carbon" }
},
"patterns": [{ "include": "#declared-name-qualifier" }]
},
{
"comment": "The name the other nominal type declarations declare.",
"begin": "(?:(?<=\\balias)|(?<=\\bconstraint)|(?<=\\binterface))\\s+(?=(?:r#)?[A-Za-z_])",
"end": "((?:r#)?[A-Za-z_][A-Za-z0-9_]*)\\b(?!\\s*(?:\\[[^\\[\\]]*\\]\\s*)?(?:\\([^()]*(?:\\([^()]*(?:\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*)?\\.)|(?=[^\\sA-Za-z_])|$",
"endCaptures": {
"1": { "name": "entity.name.type.carbon" }
},
"patterns": [{ "include": "#declared-name-qualifier" }]
},
{
"comment": "`let` and `var` bindings, with optional modifiers before the name. `_` and `self` are left to `#literals`.",
"match": "\\b(let)\\s+((?:(?:generic|ref|template|unused|var)\\s+)*)(?!_\\s*:)(r#)?([A-Za-z_][A-Za-z0-9_]*)(?=\\s*:(?![=!?]))",
"captures": {
"1": { "name": "storage.type.carbon" },
"2": { "name": "entity.name.function.carbon" }
"2": { "name": "storage.modifier.carbon" },
"3": { "name": "punctuation.definition.raw-identifier.carbon" },
"4": { "name": "variable.other.constant.carbon" }
}
},
{
"comment": "Nominal type declarations.",
"match": "\\b(alias|choice|class|constraint|interface)\\s+((?:r#)?[A-Za-z_][A-Za-z0-9_]*)",
"match": "\\b(var)\\s+((?:(?:generic|ref|template|unused)\\s+)*)(?!(?:_|self)\\s*:)(r#)?([A-Za-z_][A-Za-z0-9_]*)(?=\\s*:(?![=!?]))",
"captures": {
"1": { "name": "storage.type.carbon" },
"2": { "name": "entity.name.type.carbon" }
"2": { "name": "storage.modifier.carbon" },
"3": { "name": "punctuation.definition.raw-identifier.carbon" },
"4": { "name": "variable.other.carbon" }
}
},
{
"comment": "Package, namespace, and import names. `library` and `inline` are keywords that may follow `import`, not names.",
"match": "\\b(package|namespace|import)\\s+(?!(?:library|inline)\\b)((?:r#)?[A-Za-z_][A-Za-z0-9_]*)",
"comment": "Package, namespace, and import names, excluding keywords (`library`, `inline`) and `Core` and `Cpp`.",
"match": "\\b(import)\\s+(?!(?:library|inline|Core|Cpp)\\b)((?:r#)?[A-Za-z_][A-Za-z0-9_]*)",
"captures": {
"1": { "name": "keyword.control.import.carbon" },
"2": { "name": "entity.name.namespace.carbon" }
}
},
{
"match": "\\b(package|namespace)\\s+(?!(?:library|Core|Cpp)\\b)((?:r#)?[A-Za-z_][A-Za-z0-9_]*)",
"captures": {
"1": { "name": "storage.type.carbon" },
"2": { "name": "entity.name.namespace.carbon" }
}
},
{
"comment": "A library name, written as a string, with `entity.name.namespace.library` nested inside the string scope.",
"match": "\\b(library)\\s+((\")((?:\\\\.|[^\"\\\\\\n])*)(\"))",
"captures": {
"1": { "name": "storage.type.carbon" },
"2": { "name": "string.quoted.double.carbon" },
"3": { "name": "punctuation.definition.string.begin.carbon" },
"4": { "name": "entity.name.namespace.library.carbon" },
"5": { "name": "punctuation.definition.string.end.carbon" }
}
}
]
},
"declared-name-qualifier": {
"patterns": [
{
"comment": "One qualifier on a declared name, such as `N.` or `Base(T: type).`, matched when followed by `.` after any parameter lists. `entity.name.scope-resolution` is nested inside `entity.name.type` so themes without a scope-resolution rule fall back to the type color.",
"begin": "(((?:r#)?[A-Za-z_][A-Za-z0-9_]*))\\b(?=\\s*(?:\\[[^\\[\\]]*\\]\\s*)?(?:\\([^()]*(?:\\([^()]*(?:\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*)?\\.)",
"beginCaptures": {
"1": { "name": "entity.name.type.carbon" },
"2": { "name": "entity.name.scope-resolution.carbon" }
},
"end": "(\\.)",
"endCaptures": {
"1": { "name": "punctuation.separator.dot-access.carbon" }
},
"patterns": [{ "include": "#type-body" }]
}
]
},
"type-annotation": {
"patterns": [
{
"comment": "A type expression, from the token that introduces it to the first token that cannot continue one.",
"name": "meta.type.annotation.carbon",
"begin": "(:!)|(:\\?)|(:(?![=!?]))|((?<![A-Za-z0-9_)\\]}])\\->\\?)|((?<![A-Za-z0-9_)\\]}])\\->(?!\\?))|\\b(as)\\b|\\b(adapt)\\b|\\b(require)\\b",
"beginCaptures": {
"1": { "name": "keyword.operator.type.annotation.symbolic.carbon" },
"2": { "name": "keyword.operator.type.annotation.form.carbon" },
"3": { "name": "keyword.operator.type.annotation.carbon" },
"4": { "name": "keyword.operator.function-result.form.carbon" },
"5": { "name": "keyword.operator.function-result.carbon" },
"6": { "name": "keyword.operator.expression.as.carbon" },
"7": { "name": "storage.type.carbon" },
"8": { "name": "storage.type.carbon" }
},
"end": "(?=[,;={}\\)\\]]|[-+/%!<>|^~?@\\\\]|//|\\b(?:in|and|or|not|as|impls)\\b|$)",
"patterns": [{ "include": "#type-body" }]
}
]
},
"type-body": {
"patterns": [
{
"comment": "Argument and grouping parentheses, which nest rather than ending the type.",
"begin": "\\(",
"end": "(\\))|$",
"beginCaptures": {
"0": {
"name": "punctuation.section.parens.begin.bracket.round.carbon"
}
},
"endCaptures": {
"1": {
"name": "punctuation.section.parens.end.bracket.round.carbon"
}
},
"patterns": [{ "include": "#type-body" }]
},
{
"begin": "\\[",
"end": "(\\])|$",
"beginCaptures": {
"0": {
"name": "punctuation.section.brackets.begin.bracket.square.carbon"
}
},
"endCaptures": {
"1": {
"name": "punctuation.section.brackets.end.bracket.square.carbon"
}
},
"patterns": [{ "include": "#type-body" }]
},
{
"comment": "A `where` clause switches to expression scoping so `=` does not end the enclosing type as an initializer, and ends at a `)` or `]` it did not open.",
"begin": "\\bwhere\\b",
"beginCaptures": {
"0": { "name": "keyword.other.where.carbon" }
},
"end": "(?=[;{}\\)\\]]|$)",
"patterns": [
{ "include": "#expression-parens" },
{ "include": "$self" }
]
},
{ "include": "#impls-clause" },
{ "include": "#comments" },
{ "include": "#strings" },
{
"comment": "`typeof` takes an expression operand, switching out of `#type-body`.",
"begin": "\\b(typeof)\\s*(\\()",
"end": "(\\))|$",
"beginCaptures": {
"1": { "name": "keyword.operator.expression.typeof.carbon" },
"2": {
"name": "punctuation.section.parens.begin.bracket.round.carbon"
}
},
"endCaptures": {
"1": {
"name": "punctuation.section.parens.end.bracket.round.carbon"
}
},
"patterns": [
{ "include": "#expression-parens" },
{ "include": "$self" }
]
},
{ "include": "#keywords" },
{ "include": "#literals" },
{ "include": "#numbers" },
{
"comment": "Pointer `*`, written directly after the pointee type.",
"name": "keyword.operator.type.pointer.carbon",
"match": "(?<=[A-Za-z0-9_)\\]*])\\*(?!=)"
},
{ "include": "#operators" },
{ "include": "#bindings" },
{
"comment": "A qualifier in a type, which `#declared-name-qualifier` scopes the same way on a declared name.",
"name": "entity.name.type.carbon",
"match": "(?:(?<=[A-Za-z0-9_)\\]]\\.)|(?<!\\.))\\b((?:r#)?[A-Za-z_][A-Za-z0-9_]*)\\b(?=\\s*(?:\\[[^\\[\\]]*\\]\\s*)?(?:\\([^()]*(?:\\([^()]*(?:\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*)?\\.)",
"captures": {
"1": { "name": "entity.name.scope-resolution.carbon" }
}
},
{
"comment": "Unqualified names and qualified member names in a type context. A `.` with no preceding qualifier (such as a struct field `.x`) is left to `#identifiers`.",
"name": "entity.name.type.carbon",
"match": "(?:(?<=[A-Za-z0-9_)\\]]\\.)|(?<!\\.))\\b(r#)?[A-Za-z_][A-Za-z0-9_]*\\b",
"captures": {
"1": { "name": "punctuation.definition.raw-identifier.carbon" }
}
},
{ "include": "#identifiers" },
{ "include": "#punctuation" }
]
},
"inheritance": {
"patterns": [
{
"comment": "An `impl` declaration (when `impl` does not precede another declaration keyword), scoping the type before `as` with `#type-body` and the interface after `as` with `#inheritance-body`.",
"begin": "\\b(impl)\\b(?!\\s*(?:adapt|alias|base|choice|class|constraint|export|fn|impl|import|interface|let|library|match_first|namespace|observe|package|require|var)\\b)",
"beginCaptures": {
"1": { "name": "storage.type.carbon" }
},
"end": "(?=[;{]|$)",
"patterns": [
{
"name": "meta.inheritance-clause.carbon",
"begin": "\\b(as)\\b",
"beginCaptures": {
"1": { "name": "keyword.operator.expression.as.carbon" }
},
"end": "(?=[,;={}\\)\\]]|[-+/%!<>|^~?@\\\\]|//|\\b(?:in|and|or|not|as|impls)\\b|$)",
"patterns": [{ "include": "#inheritance-body" }]
},
{ "include": "#type-body" }
],
"name": "meta.type.annotation.carbon"
},
{
"comment": "A `base:` declaration, excluding `.base` member access and `base class`.",
"name": "meta.inheritance-clause.carbon",
"begin": "(?<!\\.)\\b(base)\\s*(:)(?![=!?])",
"beginCaptures": {
"1": { "name": "storage.type.carbon" },
"2": { "name": "keyword.operator.type.annotation.carbon" }
},
"end": "(?=[,;={}\\)\\]]|[-+/%!<>|^~?@\\\\]|//|\\b(?:in|and|or|not|as|impls)\\b|$)",
"patterns": [{ "include": "#inheritance-body" }]
},
{ "include": "#impls-clause" }
]
},
"impls-clause": {
"patterns": [
{
"name": "meta.inheritance-clause.carbon",
"begin": "\\b(impls)\\b",
"beginCaptures": {
"1": { "name": "keyword.operator.expression.impls.carbon" }
},
"end": "(?=[,;={}\\)\\]]|[-+/%!<>|^~?@\\\\]|//|\\b(?:in|and|or|not|as|impls)\\b|$)",
"patterns": [{ "include": "#inheritance-body" }]
}
]
},
"inheritance-body": {
"patterns": [
{
"comment": "Only the interface itself is scoped as `entity.other.inherited-class`; its argument list switches to expression scoping.",
"begin": "(?<=[A-Za-z0-9_\\]])\\(",
"end": "(\\))|$",
"beginCaptures": {
"0": {
"name": "punctuation.section.parens.begin.bracket.round.carbon"
}
},
"endCaptures": {
"1": {
"name": "punctuation.section.parens.end.bracket.round.carbon"
}
},
"patterns": [
{ "include": "#expression-parens" },
{ "include": "$self" }
]
},
{
"comment": "Grouping parentheses around an interface name stay in `#inheritance-body`.",
"begin": "\\(",
"end": "(\\))|$",
"beginCaptures": {
"0": {
"name": "punctuation.section.parens.begin.bracket.round.carbon"
}
},
"endCaptures": {
"1": {
"name": "punctuation.section.parens.end.bracket.round.carbon"
}
},
"patterns": [{ "include": "#inheritance-body" }]
},
{
"comment": "A `where` clause switches to expression scoping and ends at a `)` or `]` it did not open.",
"begin": "\\b(where)\\b",
"beginCaptures": {
"1": { "name": "keyword.other.where.carbon" }
},
"end": "(?=[;{}\\)\\]]|$)",
"patterns": [
{ "include": "#expression-parens" },
{ "include": "$self" }
]
},
{ "include": "#keywords" },
{ "include": "#literals" },
{
"comment": "The final identifier of the interface or base class name; any preceding qualifiers fall through to `#type-body`.",
"name": "entity.other.inherited-class.carbon",
"match": "\\b(?:r#)?[A-Za-z_][A-Za-z0-9_]*\\b(?!\\s*\\.)"
},
{ "include": "#type-body" }
]
},
"keywords": {
"patterns": [
{
"name": "storage.type.carbon",
"match": "\\b(adapt|alias|choice|class|constraint|fn|import|inline|interface|let|library|match_first|namespace|observe|require|var)\\b"
"comment": "`.base` member access, matched before `base` as an introducer.",
"name": "keyword.other.base.carbon",
"match": "(?<=\\.)\\b(base)\\b"
},
{
"comment": "`base` introduces a base class declaration unless it modifies one.",
"name": "keyword.control.import.carbon",
"match": "\\b(import)\\b"
},
{
"name": "storage.type.carbon",
"match": "\\b(adapt|alias|choice|class|constraint|fn|inline|interface|let|library|match_first|namespace|observe|require|var)\\b"
},
{
"comment": "`base` as an introducer (not `base class`).",
"name": "storage.type.carbon",
"match": "\\b(base)\\b(?!\\s*class\\b)"
},
@@ -304,10 +657,10 @@
},
{
"name": "storage.type.carbon",
"match": "\\b(impl)\\b(?!\\s*(fn|library|package)\\b)"
"match": "\\b(impl)\\b(?!\\s*(adapt|alias|base|choice|class|constraint|export|fn|impl|import|interface|let|library|match_first|namespace|observe|package|require|var)\\b)"
},
{
"comment": "`package` is an introducer unless it begins a qualified name.",
"comment": "`package` as an introducer (not `package.`).",
"name": "storage.type.carbon",
"match": "\\b(package)\\b(?!\\.)"
},
@@ -316,7 +669,7 @@
"match": "\\b(abstract|const|eval|extend|extern|final|generic|musteval|override|partial|private|protected|ref|runtime|static|template|unsafe|unused|val|virtual)\\b"
},
{
"comment": "`default` is a declaration modifier unless it opens a match arm.",
"comment": "`default` as a modifier (not `default =>`).",
"name": "storage.modifier.carbon",
"match": "\\b(default)\\b(?!\\s*=>)"
},
@@ -330,29 +683,50 @@
},
{
"name": "storage.modifier.carbon",
"match": "\\b(impl)\\b(?=\\s*(fn|library|package)\\b)"
"match": "\\b(impl)\\b(?=\\s*(adapt|alias|base|choice|class|constraint|export|fn|impl|import|interface|let|library|match_first|namespace|observe|package|require|var)\\b)"
},
{
"name": "keyword.control.carbon",
"match": "\\b(break|case|continue|else|for|if|match|return|returned|then|while)\\b"
},
{
"comment": "`default` is a match arm here, and a declaration modifier elsewhere.",
"comment": "`default` in a `match` clause.",
"name": "keyword.control.carbon",
"match": "\\b(default)\\b(?=\\s*=>)"
},
{
"name": "keyword.control.carbon",
"match": "\\b(and|as|impls|in|like|not|or|typeof|where)\\b"
"match": "\\b(and|or)\\b"
},
{
"name": "keyword.operator.expression.not.carbon",
"match": "\\b(not)\\b"
},
{
"comment": "Fallback when not matched by `#type-annotation` or `#inheritance`.",
"name": "keyword.operator.expression.as.carbon",
"match": "\\b(as)\\b"
},
{
"name": "keyword.operator.expression.impls.carbon",
"match": "\\b(impls)\\b"
},
{
"name": "keyword.operator.expression.in.carbon",
"match": "\\b(in)\\b"
},
{
"name": "keyword.operator.expression.like.carbon",
"match": "\\b(like)\\b"
},
{
"name": "keyword.operator.expression.typeof.carbon",
"match": "\\b(typeof)\\b"
},
{ "name": "keyword.other.where.carbon", "match": "\\b(where)\\b" },
{
"name": "keyword.other.carbon",
"match": "\\b(destroy|each|expand|forall|form|friend)\\b"
},
{
"comment": "`.base` names the base class subobject.",
"name": "keyword.other.carbon",
"match": "(?<=\\.)\\b(base)\\b"
}
]
},
@@ -365,23 +739,27 @@
"match": "\\b(_)\\b"
},
{
"comment": "Language-provided package roots.",
"comment": "Built-in package names.",
"name": "support.class.carbon",
"match": "\\b(Core|Cpp)\\b"
},
{
"comment": "`package` as a qualified-name root names the current package.",
"comment": "`package` as a qualifier.",
"name": "variable.language.carbon",
"match": "\\b(package)\\b(?=\\.)"
},
{ "name": "constant.language.carbon", "match": "\\b(true|false)\\b" },
{
"name": "support.type.builtin.carbon",
"match": "\\b(array|auto|bool|char|str|type)\\b"
"match": "\\b(array|auto|type)\\b"
},
{
"comment": "Integer and float type literals. The lexer accepts any width, so this must not be restricted to the common ones.",
"name": "support.type.builtin.carbon",
"name": "support.type.primitive.carbon",
"match": "\\b(bool|char|str)\\b"
},
{
"comment": "Integer and floating-point type literals.",
"name": "support.type.primitive.carbon",
"match": "\\b[iuf][1-9][0-9]*\\b"
}
]
@@ -389,14 +767,41 @@
"numbers": {
"patterns": [
{
"comment": "Each numeric rule matches a full alphanumeric word starting with a digit so a malformed suffix is not split into an identifier. Real literals exclude a leading `.` or `->` so tuple access like `t.0.1` is not matched as a real.",
"name": "constant.numeric.hex.carbon",
"match": "\\b0x[_0-9A-Fa-f]*(?:\\.[_0-9A-Fa-f]*)?(?:[pP][-+]?[0-9]+)?"
"match": "(?<!\\.)(?<!->)\\b(0x)[_0-9A-Za-z]*\\.[0-9A-Za-z][_0-9A-Za-z]*(?:(?<=[a-z])[-+][0-9A-Za-z][_0-9A-Za-z]*)?",
"captures": {
"1": { "name": "keyword.other.unit.hexadecimal.carbon" }
}
},
{
"name": "constant.numeric.hex.carbon",
"match": "\\b(0x)[_0-9A-Za-z]*",
"captures": {
"1": { "name": "keyword.other.unit.hexadecimal.carbon" }
}
},
{
"name": "constant.numeric.octal.carbon",
"match": "\\b(0o)[_0-9A-Za-z]*",
"captures": {
"1": { "name": "keyword.other.unit.octal.carbon" }
}
},
{
"name": "constant.numeric.binary.carbon",
"match": "\\b(0b)[_0-9A-Za-z]*",
"captures": {
"1": { "name": "keyword.other.unit.binary.carbon" }
}
},
{ "name": "constant.numeric.octal.carbon", "match": "\\b0o[_0-7]*" },
{ "name": "constant.numeric.binary.carbon", "match": "\\b0b[_01]*" },
{
"name": "constant.numeric.decimal.carbon",
"match": "\\b[0-9][_0-9]*(?:\\.[_0-9]+)?(?:[eE][-+]?[0-9]+)?"
"match": "(?<!\\.)(?<!->)\\b[0-9][_0-9A-Za-z]*\\.[0-9A-Za-z][_0-9A-Za-z]*(?:(?<=[a-z])[-+][0-9A-Za-z][_0-9A-Za-z]*)?"
},
{
"name": "constant.numeric.decimal.carbon",
"match": "\\b[0-9][_0-9A-Za-z]*"
},
{
"comment": "Positional parameter, as used in lambdas.",
@@ -407,50 +812,247 @@
},
"operators": {
"patterns": [
{
"name": "keyword.operator.type.annotation.symbolic.carbon",
"match": ":!"
},
{
"name": "keyword.operator.type.annotation.form.carbon",
"match": ":\\?"
},
{
"name": "keyword.operator.type.annotation.carbon",
"match": ":(?![=!?])"
},
{
"comment": "`->` directly after an operand is pointer member access rather than a return type arrow.",
"name": "punctuation.separator.pointer-access.carbon",
"match": "(?<=[A-Za-z0-9_)\\]}])\\->(?!\\?)"
},
{
"name": "keyword.operator.function-result.form.carbon",
"match": "\\->\\?"
},
{
"name": "keyword.operator.function-result.carbon",
"match": "\\->(?!\\?)"
},
{ "name": "keyword.operator.arrow.fat.carbon", "match": "=>" },
{
"name": "keyword.operator.carbon",
"match": "(\\->\\?|>>=|<=>|<<=|\\&=|\\^=|:=|:\\?|==|=>|!=|>=|>>|<=|<>|<<|<\\-|\\-=|\\->|\\-\\-|%=|\\|=|\\+=|\\+\\+|/=|\\*=|\\~=|\\&|@|\\^|:|=|!|>|<|\\-|%|\\.|\\||\\+|\\?|/|\\*|\\~|\\\\)"
"match": "<=>|<<=|>>=|==|!=|<=|>=|<<|>>|\\+\\+|--|\\+=|-=|\\*=|/=|%=|&=|\\|=|\\^=|~=|:=|<-|<>|[-+*/%&|^~!<>=@?\\\\]"
}
]
},
"identifiers": {
"patterns": [
{ "include": "#bindings" },
{
"comment": "Raw identifiers, which suppress keyword meaning.",
"match": "\\b(r#)([A-Z][A-Za-z0-9_]*)",
"comment": "Raw identifiers.",
"name": "variable.other.carbon",
"match": "\\b(r#)([A-Za-z_][A-Za-z0-9_]*)",
"captures": {
"1": { "name": "punctuation.definition.raw-identifier.carbon" },
"2": { "name": "entity.name.type.carbon" }
"1": { "name": "punctuation.definition.raw-identifier.carbon" }
}
},
{
"match": "\\b(r#)([a-z_][A-Za-z0-9_]*)",
"captures": {
"1": { "name": "punctuation.definition.raw-identifier.carbon" },
"2": { "name": "variable.other.carbon" }
}
"comment": "Member function call.",
"name": "entity.name.function.member.carbon",
"match": "(?:(?<=\\.)|(?<=\\->))[A-Za-z_][A-Za-z0-9_]*(?=\\s*\\()"
},
{
"comment": "An identifier applied to an argument list is a call.",
"name": "entity.name.function.carbon",
"comment": "Member access via `.` or `->`.",
"name": "variable.other.property.carbon",
"match": "(?:(?<=\\.)|(?<=\\->))[A-Za-z_][A-Za-z0-9_]*\\b"
},
{
"comment": "Function call.",
"name": "entity.name.function.call.carbon",
"match": "\\b[A-Za-z_][A-Za-z0-9_]*(?=\\s*\\()"
},
{
"comment": "UpperCamel names a type.",
"name": "entity.name.type.carbon",
"match": "\\b[A-Z][A-Za-z0-9_]*\\b"
},
{
"comment": "lower_snake names a value.",
"name": "variable.other.carbon",
"match": "\\b[a-z_][A-Za-z0-9_]*\\b"
"match": "\\b[A-Za-z_][A-Za-z0-9_]*\\b"
}
]
},
"punctuation": {
"patterns": [
{ "name": "punctuation.separator.carbon", "match": "," },
{ "name": "punctuation.terminator.carbon", "match": ";" }
{
"name": "punctuation.section.parens.begin.bracket.round.carbon",
"match": "\\("
},
{
"name": "punctuation.section.parens.end.bracket.round.carbon",
"match": "\\)"
},
{
"name": "punctuation.section.block.begin.bracket.curly.carbon",
"match": "\\{"
},
{
"name": "punctuation.section.block.end.bracket.curly.carbon",
"match": "\\}"
},
{
"name": "punctuation.section.brackets.begin.bracket.square.carbon",
"match": "\\["
},
{
"name": "punctuation.section.brackets.end.bracket.square.carbon",
"match": "\\]"
},
{ "name": "punctuation.separator.dot-access.carbon", "match": "\\." },
{ "name": "punctuation.separator.comma.carbon", "match": "," },
{ "name": "punctuation.terminator.statement.carbon", "match": ";" }
]
},
"choice-definitions": {
"patterns": [
{
"comment": "A `choice` declaration, scoping names in its body as enum members and closing immediately if there is no body.",
"begin": "\\b(choice)\\b",
"beginCaptures": {
"1": { "name": "storage.type.carbon" }
},
"end": "(?<=\\})|(?=[^\\s({])",
"patterns": [
{
"begin": "(?<=\\bchoice)\\s+(?=(?:r#)?[A-Za-z_])",
"end": "((?:r#)?[A-Za-z_][A-Za-z0-9_]*)\\b(?!\\s*(?:\\[[^\\[\\]]*\\]\\s*)?(?:\\([^()]*(?:\\([^()]*(?:\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*)?\\.)|(?=[^\\sA-Za-z_])|$",
"endCaptures": {
"1": { "name": "entity.name.type.carbon" }
},
"patterns": [{ "include": "#declared-name-qualifier" }]
},
{ "include": "#comments" },
{
"comment": "Choice parameters.",
"begin": "\\(",
"end": "(\\))|$",
"beginCaptures": {
"0": {
"name": "punctuation.section.parens.begin.bracket.round.carbon"
}
},
"endCaptures": {
"1": {
"name": "punctuation.section.parens.end.bracket.round.carbon"
}
},
"patterns": [{ "include": "#choice-parameters" }]
},
{
"comment": "Choice body.",
"begin": "\\{",
"end": "(\\})|(?=[;=])",
"beginCaptures": {
"0": {
"name": "punctuation.section.block.begin.bracket.curly.carbon"
}
},
"endCaptures": {
"1": {
"name": "punctuation.section.block.end.bracket.curly.carbon"
}
},
"patterns": [
{ "include": "#comments" },
{
"comment": "Alternative parameters.",
"begin": "\\(",
"end": "(\\))|$",
"beginCaptures": {
"0": {
"name": "punctuation.section.parens.begin.bracket.round.carbon"
}
},
"endCaptures": {
"1": {
"name": "punctuation.section.parens.end.bracket.round.carbon"
}
},
"patterns": [{ "include": "#choice-parameters" }]
},
{
"comment": "Invalid implicit parameter list on an alternative, matched so its contents are not scoped as enum members.",
"begin": "\\[",
"end": "(\\])|$",
"beginCaptures": {
"0": {
"name": "punctuation.section.brackets.begin.bracket.square.carbon"
}
},
"endCaptures": {
"1": {
"name": "punctuation.section.brackets.end.bracket.square.carbon"
}
},
"patterns": [{ "include": "#choice-parameters" }]
},
{ "include": "#keywords" },
{ "include": "#literals" },
{
"name": "variable.other.enummember.carbon",
"match": "\\b(?:r#)?[A-Za-z_][A-Za-z0-9_]*\\b"
},
{ "include": "#numbers" },
{ "include": "#operators" },
{ "include": "#punctuation" }
]
}
]
}
]
},
"choice-parameters": {
"patterns": [
{ "include": "#comments" },
{ "include": "#strings" },
{ "include": "#inheritance" },
{ "include": "#type-annotation" },
{ "include": "#keywords" },
{ "include": "#literals" },
{ "include": "#numbers" },
{ "include": "#operators" },
{ "include": "#identifiers" },
{ "include": "#punctuation" }
]
},
"bindings": {
"patterns": [
{
"comment": "Parameter bindings (`name: Type` when not preceded by `let` or `var`), with `variable.parameter` nested inside `variable.other`.",
"name": "variable.other.carbon",
"match": "(?<!\\.)(?<!->)\\b(r#)?([A-Za-z_][A-Za-z0-9_]*)(?=\\s*:(?![=!?]))",
"captures": {
"1": { "name": "punctuation.definition.raw-identifier.carbon" },
"2": { "name": "variable.parameter.carbon" }
}
}
]
},
"expression-parens": {
"patterns": [
{
"comment": "Parentheses nested in an expression that sits inside a type, so that only the matching `)` ends the expression.",
"begin": "\\(",
"end": "(\\))|$",
"beginCaptures": {
"0": {
"name": "punctuation.section.parens.begin.bracket.round.carbon"
}
},
"endCaptures": {
"1": {
"name": "punctuation.section.parens.end.bracket.round.carbon"
}
},
"patterns": [
{ "include": "#expression-parens" },
{ "include": "$self" }
]
}
]
}
}