PageSourceSearch

https://book.jank-lang.org/toc-846aad8b.js

js jank-lang.org collected 2026-10-02 04:41:05 UTC 48,811 bytes, 454 lines download raw bytes

1// Populate the sidebar
2//
3// This is a script, and not included directly in the page, to control the total size of the book.
4// The TOC contains an entry for each page, so if each page includes a copy of the TOC,
5// the total size of the page becomes O(n**2).
6class MDBookSidebarScrollbox extends HTMLElement {
7    constructor() {
8        super();
9    }
10    connectedCallback() {
11        this.innerHTML = '<ol class="chapter"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="index.html">Welcome to the jank alpha!</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="foreword.html">Foreword</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="getting-started/index.html"><strong aria-hidden="true">1.</strong> Getting Started</a><a class="chapter-fold-toggle"><div>❱</div></a></span><ol class="section"><li class="chapter-item "><span class="chapter-link-wrapper"><a href="getting-started/01-installation.html"><strong aria-hidden="true">1.1.</strong> Installation</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="getting-started/02-hello-world.html"><strong aria-hidden="true">1.2.</strong> Hello, world!</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="getting-started/03-hello-leiningen.html"><strong aria-hidden="true">1.3.</strong> Hello, Leiningen!</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="getting-started/04-hello-nrepl.html"><strong aria-hidden="true">1.4.</strong> Hello, nREPL!</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="cpp-interop/index.html"><strong aria-hidden="true">2.</strong> Reaching into C++</a><a class="chapter-fold-toggle"><div>❱</div></a></span><ol class="section"><li class="chapter-item "><span class="chapter-link-wrapper"><a href="cpp-interop/native-values.html"><strong aria-hidden="true">2.1.</strong> Working with native values</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="cpp-interop/native-types.html"><strong aria-hidden="true">2.2.</strong> Working with native types</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="cpp-interop/native-functions.html"><strong aria-hidden="true">2.3.</strong> Working with native functions</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="cpp-interop/dsl.html"><strong aria-hidden="true">2.4.</strong> The C++ DSL</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="cpp-interop/native-exceptions.html"><strong aria-hidden="true">2.5.</strong> Throwing and catching exceptions</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="cpp-interop/cast.html"><strong aria-hidden="true">2.6.</strong> Casting between native types</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="cpp-interop/cpp-raw.html"><strong aria-hidden="true">2.7.</strong> Embedding raw C++</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="cpp-interop/cpp-ns.html"><strong aria-hidden="true">2.8.</strong> The cpp namespace</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="project/index.html"><strong aria-hidden="true">3.</strong> Working with projects</a><a class="chapter-fold-toggle"><div>❱</div></a></span><ol class="section"><li class="chapter-item "><span class="chapter-link-wrapper"><a href="project/test.html"><strong aria-hidden="true">3.1.</strong> Testing</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="project/aot.html"><strong aria-hidden="true">3.2.</strong> AOT compiling</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="jank-build/index.html"><strong aria-hidden="true">4.</strong> The jank build system</a><a class="chapter-fold-toggle"><div>❱</div></a></span><ol class="section"><li class="chapter-item "><span class="chapter-link-wrapper"><a href="jank-build/overview.html"><strong aria-hidden="true">4.1.</strong> Build system overview</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="jank-build/build-cache.html"><strong aria-hidden="true">4.2.</strong> The build cache</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="jank-build/packaging-system-lib.html"><strong aria-hidden="true">4.3.</strong> Guide: Packaging a system library</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="jank-build/packaging-source-lib.html"><strong aria-hidden="true">4.4.</strong> Guide: Packaging a source library</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="differences-from-clojure.html"><strong aria-hidden="true">5.</strong> Differences from Clojure</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="troubleshooting/index.html"><strong aria-hidden="true">6.</strong> Troubleshooting</a><a class="chapter-fold-toggle"><div>❱</div></a></span><ol class="section"><li class="chapter-item "><span class="chapter-link-wrapper"><a href="troubleshooting/health-check.html"><strong aria-hidden="true">6.1.</strong> Checking jank&#39;s health</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="troubleshooting/printing.html"><strong aria-hidden="true">6.2.</strong> Printing jank&#39;s IR or codegen</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="troubleshooting/stack-trace.html"><strong aria-hidden="true">6.3.</strong> How to get a stack trace</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="troubleshooting/getting-help.html"><strong aria-hidden="true">6.4.</strong> Where to get help</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="troubleshooting/faq.html"><strong aria-hidden="true">6.5.</strong> FAQ</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="reference/index.html"><strong aria-hidden="true">7.</strong> Reference</a><a class="chapter-fold-toggle"><div>❱</div></a></span><ol class="section"><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error.html"><strong aria-hidden="true">7.1.</strong> Errors</a><a class="chapter-fold-toggle"><div>❱</div></a></span><ol class="section"><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/lex/index.html"><strong aria-hidden="true">7.1.1.</strong> Lex</a><a class="chapter-fold-toggle"><div>❱</div></a></span><ol class="section"><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/lex/unexpected-eof.html"><strong aria-hidden="true">7.1.1.1.</strong> lex/unexpected-eof</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/lex/expecting-whitespace.html"><strong aria-hidden="true">7.1.1.2.</strong> lex/expecting-whitespace</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/lex/invalid-unicode.html"><strong aria-hidden="true">7.1.1.3.</strong> lex/invalid-unicode</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/lex/incomplete-character.html"><strong aria-hidden="true">7.1.1.4.</strong> lex/incomplete-character</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/lex/invalid-number.html"><strong aria-hidden="true">7.1.1.5.</strong> lex/invalid-number</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/lex/invalid-ratio.html"><strong aria-hidden="true">7.1.1.6.</strong> lex/invalid-ratio</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/lex/invalid-symbol.html"><strong aria-hidden="true">7.1.1.7.</strong> lex/invalid-symbol</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/lex/invalid-keyword.html"><strong aria-hidden="true">7.1.1.8.</strong> lex/invalid-keyword</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/lex/unterminated-string.html"><strong aria-hidden="true">7.1.1.9.</strong> lex/unterminated-string</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/lex/unexpected-character.html"><strong aria-hidden="true">7.1.1.10.</strong> lex/unexpected-character</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/lex/internal-failure.html"><strong aria-hidden="true">7.1.1.11.</strong> lex/internal-failure</a></span></li></ol><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/parse/index.html"><strong aria-hidden="true">7.1.2.</strong> Parse</a><a class="chapter-fold-toggle"><div>❱</div></a></span><ol class="section"><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-unicode.html"><strong aria-hidden="true">7.1.2.1.</strong> parse/invalid-unicode</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-character.html"><strong aria-hidden="true">7.1.2.2.</strong> parse/invalid-character</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-string-escape.html"><strong aria-hidden="true">7.1.2.3.</strong> parse/invalid-string-escape</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/unexpected-closing-character.html"><strong aria-hidden="true">7.1.2.4.</strong> parse/unexpected-closing-character</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/unterminated-list.html"><strong aria-hidden="true">7.1.2.5.</strong> parse/unterminated-list</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/unterminated-vector.html"><strong aria-hidden="true">7.1.2.6.</strong> parse/unterminated-vector</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/unterminated-map.html"><strong aria-hidden="true">7.1.2.7.</strong> parse/unterminated-map</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/unterminated-set.html"><strong aria-hidden="true">7.1.2.8.</strong> parse/unterminated-set</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper">
11<a href="reference/error/parse/odd-entries-in-map.html"><strong aria-hidden="true">7.1.2.9.</strong> parse/odd-entries-in-map</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/duplicate-keys-in-map.html"><strong aria-hidden="true">7.1.2.10.</strong> parse/duplicate-keys-in-map</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/duplicate-items-in-set.html"><strong aria-hidden="true">7.1.2.11.</strong> parse/duplicate-items-in-set</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-quote.html"><strong aria-hidden="true">7.1.2.12.</strong> parse/invalid-quote</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-meta-hint-value.html"><strong aria-hidden="true">7.1.2.13.</strong> parse/invalid-meta-hint-value</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-meta-hint-target.html"><strong aria-hidden="true">7.1.2.14.</strong> parse/invalid-meta-hint-target</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/unsupported-reader-macro.html"><strong aria-hidden="true">7.1.2.15.</strong> parse/unsupported-reader-macro</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/nested-shorthand-function.html"><strong aria-hidden="true">7.1.2.16.</strong> parse/nested-shorthand-function</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-shorthand-function-parameter.html"><strong aria-hidden="true">7.1.2.17.</strong> parse/invalid-shorthand-function-parameter</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-reader-var.html"><strong aria-hidden="true">7.1.2.18.</strong> parse/invalid-reader-var</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-reader-comment.html"><strong aria-hidden="true">7.1.2.19.</strong> parse/invalid-reader-comment</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-reader-conditional.html"><strong aria-hidden="true">7.1.2.20.</strong> parse/invalid-reader-conditional</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-reader-splice.html"><strong aria-hidden="true">7.1.2.21.</strong> parse/invalid-reader-splice</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-reader-gensym.html"><strong aria-hidden="true">7.1.2.22.</strong> parse/invalid-reader-gensym</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-reader-symbolic-value.html"><strong aria-hidden="true">7.1.2.23.</strong> parse/invalid-reader-symbolic-value</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-reader-tag-value.html"><strong aria-hidden="true">7.1.2.24.</strong> parse/invalid-reader-tag-value</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-regex.html"><strong aria-hidden="true">7.1.2.25.</strong> parse/invalid-regex</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-uuid.html"><strong aria-hidden="true">7.1.2.26.</strong> parse/invalid-uuid</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-inst.html"><strong aria-hidden="true">7.1.2.27.</strong> parse/invalid-inst</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-syntax-quote.html"><strong aria-hidden="true">7.1.2.28.</strong> parse/invalid-syntax-quote</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-syntax-unquote.html"><strong aria-hidden="true">7.1.2.29.</strong> parse/invalid-syntax-unquote</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-syntax-unquote-splice.html"><strong aria-hidden="true">7.1.2.30.</strong> parse/invalid-syntax-unquote-splice</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-reader-deref.html"><strong aria-hidden="true">
117.1.2.31.</strong> parse/invalid-reader-deref</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-ratio.html"><strong aria-hidden="true">7.1.2.32.</strong> parse/invalid-ratio</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-keyword.html"><strong aria-hidden="true">7.1.2.33.</strong> parse/invalid-keyword</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/invalid-data-reader.html"><strong aria-hidden="true">7.1.2.34.</strong> parse/invalid-data-reader</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/parse/internal-failure.html"><strong aria-hidden="true">7.1.2.35.</strong> parse/internal-failure</a></span></li></ol><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/analyze/index.html"><strong aria-hidden="true">7.1.3.</strong> Analyze</a><a class="chapter-fold-toggle"><div>❱</div></a></span><ol class="section"><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-case.html"><strong aria-hidden="true">7.1.3.1.</strong> analyze/invalid-case</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-def.html"><strong aria-hidden="true">7.1.3.2.</strong> analyze/invalid-def</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-fn.html"><strong aria-hidden="true">7.1.3.3.</strong> analyze/invalid-fn</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-fn-parameters.html"><strong aria-hidden="true">7.1.3.4.</strong> analyze/invalid-fn-parameters</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-recur-position.html"><strong aria-hidden="true">7.1.3.5.</strong> analyze/invalid-recur-position</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-recur-from-try.html"><strong aria-hidden="true">7.1.3.6.</strong> analyze/invalid-recur-from-try</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-recur-args.html"><strong aria-hidden="true">7.1.3.7.</strong> analyze/invalid-recur-args</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-let.html"><strong aria-hidden="true">7.1.3.8.</strong> analyze/invalid-let</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-letfn.html"><strong aria-hidden="true">7.1.3.9.</strong> analyze/invalid-letfn</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-if.html"><strong aria-hidden="true">7.1.3.10.</strong> analyze/invalid-if</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-quote.html"><strong aria-hidden="true">7.1.3.11.</strong> analyze/invalid-quote</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-var-reference.html"><strong aria-hidden="true">7.1.3.12.</strong> analyze/invalid-var-reference</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/unresolved-var.html"><strong aria-hidden="true">7.1.3.13.</strong> analyze/unresolved-var</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/unresolved-symbol.html"><strong aria-hidden="true">7.1.3.14.</strong> analyze/unresolved-symbol</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/macro-expansion-exception.html"><strong aria-hidden="true">7.1.3.15.</strong> analyze/macro-expansion-exception</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-cpp-operator-call.html"><strong aria-hidden="true">
117.1.3.16.</strong> analyze/invalid-cpp-operator-call</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-cpp-constructor-call.html"><strong aria-hidden="true">7.1.3.17.</strong> analyze/invalid-cpp-constructor-call</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-cpp-member-call.html"><strong aria-hidden="true">7.1.3.18.</strong> analyze/invalid-cpp-member-call</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-cpp-capture.html"><strong aria-hidden="true">7.1.3.19.</strong> analyze/invalid-cpp-capture</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-cpp-position.html"><strong aria-hidden="true">7.1.3.20.</strong> analyze/invalid-cpp-position</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/mismatched-if-types.html"><strong aria-hidden="true">7.1.3.21.</strong> analyze/mismatched-if-types</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-cpp-call.html"><strong aria-hidden="true">7.1.3.22.</strong> analyze/invalid-cpp-call</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-cpp-conversion.html"><strong aria-hidden="true">7.1.3.23.</strong> analyze/invalid-cpp-conversion</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-cpp-symbol.html"><strong aria-hidden="true">7.1.3.24.</strong> analyze/invalid-cpp-symbol</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/unresolved-cpp-symbol.html"><strong aria-hidden="true">7.1.3.25.</strong> analyze/unresolved-cpp-symbol</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-cpp-raw.html"><strong aria-hidden="true">7.1.3.26.</strong> analyze/invalid-cpp-raw</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-cpp-type.html"><strong aria-hidden="true">7.1.3.27.</strong> analyze/invalid-cpp-type</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-cpp-type-position.html"><strong aria-hidden="true">7.1.3.28.</strong> analyze/invalid-cpp-type-position</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-cpp-dsl.html"><strong aria-hidden="true">7.1.3.29.</strong> analyze/invalid-cpp-dsl</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-cpp-value.html"><strong aria-hidden="true">7.1.3.30.</strong> analyze/invalid-cpp-value</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-cpp-cast.html"><strong aria-hidden="true">7.1.3.31.</strong> analyze/invalid-cpp-cast</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-cpp-unsafe-cast.html"><strong aria-hidden="true">7.1.3.32.</strong> analyze/invalid-cpp-unsafe-cast</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-cpp-box.html"><strong aria-hidden="true">7.1.3.33.</strong> analyze/invalid-cpp-box</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-cpp-unbox.html"><strong aria-hidden="true">7.1.3.34.</strong> analyze/invalid-cpp-unbox</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-cpp-new.html"><strong aria-hidden="true">7.1.3.35.</strong> analyze/invalid-cpp-new</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/invalid-cpp-delete.html"><strong aria-hidden="true">7.1.3.36.</strong> analyze/invalid-cpp-delete</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper">
11<a href="reference/error/analyze/invalid-cpp-member-access.html"><strong aria-hidden="true">7.1.3.37.</strong> analyze/invalid-cpp-member-access</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/analyze/internal-failure.html"><strong aria-hidden="true">7.1.3.38.</strong> analyze/internal-failure</a></span></li></ol><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/codegen/index.html"><strong aria-hidden="true">7.1.4.</strong> Codegen</a><a class="chapter-fold-toggle"><div>❱</div></a></span><ol class="section"><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/codegen/internal-failure.html"><strong aria-hidden="true">7.1.4.1.</strong> codegen/internal-failure</a></span></li></ol><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/aot/index.html"><strong aria-hidden="true">7.1.5.</strong> AOT</a><a class="chapter-fold-toggle"><div>❱</div></a></span><ol class="section">
11<li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/aot/unresolved-main.html"><strong aria-hidden="true">7.1.5.1.</strong> aot/unresolved-main</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/aot/internal-failure.html"><strong aria-hidden="true">7.1.5.2.</strong> aot/internal-failure</a></span></li></ol><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/runtime/index.html"><strong aria-hidden="true">7.1.6.</strong> Runtime</a><a class="chapter-fold-toggle"><div>❱</div></a></span><ol class="section"><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/runtime/module-not-found.html"><strong aria-hidden="true">7.1.6.1.</strong> runtime/module-not-found</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/runtime/module-binary-without-source.html"><strong aria-hidden="true">7.1.6.2.</strong> runtime/module-binary-without-source</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/runtime/unable-to-open-file.html"><strong aria-hidden="true">7.1.6.3.</strong> runtime/unable-to-open-file</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/runtime/invalid-cpp-eval.html"><strong aria-hidden="true">7.1.6.4.</strong> runtime/invalid-cpp-eval</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/runtime/unable-to-load-module.html"><strong aria-hidden="true">7.1.6.5.</strong> runtime/unable-to-load-module</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/runtime/invalid-unbox.html"><strong aria-hidden="true">7.1.6.6.</strong> runtime/invalid-unbox</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/runtime/non-metadatable-value.html"><strong aria-hidden="true">7.1.6.7.</strong> runtime/non-metadatable-value</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/runtime/invalid-referred-global-symbol.html"><strong aria-hidden="true">7.1.6.8.</strong> runtime/invalid-referred-global-symbol</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/runtime/invalid-referred-global-rename.html"><strong aria-hidden="true">7.1.6.9.</strong> runtime/invalid-referred-global-rename</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/runtime/unsupported-behavior.html"><strong aria-hidden="true">7.1.6.10.</strong> runtime/unsupported-behavior</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/runtime/static-feature-disabled.html"><strong aria-hidden="true">7.1.6.11.</strong> runtime/static-feature-disabled</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/runtime/uncaught-exception.html"><strong aria-hidden="true">7.1.6.12.</strong> runtime/uncaught-exception</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/runtime/internal-failure.html"><strong aria-hidden="true">7.1.6.13.</strong> runtime/internal-failure</a></span></li></ol><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/system/index.html"><strong aria-hidden="true">7.1.7.</strong> System</a><a class="chapter-fold-toggle"><div>❱</div></a></span><ol class="section"><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/system/clang-executable-not-found.html"><strong aria-hidden="true">7.1.7.1.</strong> system/clang-executable-not-found</a></span></li><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/system/failure.html"><strong aria-hidden="true">7.1.7.2.</strong> system/failure</a></span></li></ol><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/internal/index.html"><strong aria-hidden="true">7.1.8.</strong> Internal</a><a class="chapter-fold-toggle"><div>❱</div></a></span><ol class="section"><li class="chapter-item "><span class="chapter-link-wrapper"><a href="reference/error/internal/failure.html"><strong aria-hidden="true">7.1.8.1.</strong> internal/failure</a></span></li></ol></li></ol></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="dev/index.html"><strong aria-hidden="true">8.</strong> Developing jank</a><a class="chapter-fold-toggle"><div>❱</div></a></span><ol class="section"><li class="chapter-item "><span class="chapter-link-wrapper"><a href="dev/ir.html"><strong aria-hidden="true">8.1.</strong> IR reference</a></span></li></ol></li></ol>';
12        // Set the current, active page, and reveal it if it's hidden
13        let current_page = document.location.href.toString().split('#')[0].split('?')[0];
14        if (current_page.endsWith('/')) {
15            current_page += 'index.html';
16        }
17        const links = Array.prototype.slice.call(this.querySelectorAll('a'));
18        const l = links.length;
19        for (let i = 0; i < l; ++i) {
20            const link = links[i];
21            const href = link.getAttribute('href');
22            if (href && !href.startsWith('#') && !/^(?:[a-z+]+:)?\/\//.test(href)) {
23                link.href = path_to_root + href;
24            }
25            // The 'index' page is supposed to alias the first chapter in the book.
26            if (link.href === current_page
27                || i === 0
28                && path_to_root === ''
29                && current_page.endsWith('/index.html')) {
30                link.classList.add('active');
31                let parent = link.parentElement;
32                while (parent) {
33                    if (parent.tagName === 'LI' && parent.classList.contains('chapter-item')) {
34                        parent.classList.add('expanded');
35                    }
36                    parent = parent.parentElement;
37                }
38            }
39        }
40        // Track and set sidebar scroll position
41        this.addEventListener('click', e => {
42            if (e.target.tagName === 'A') {
43                const clientRect = e.target.getBoundingClientRect();
44                const sidebarRect = this.getBoundingClientRect();
45                sessionStorage.setItem('sidebar-scroll-offset', clientRect.top - sidebarRect.top);
46            }
47        }, { passive: true });
48        const sidebarScrollOffset = sessionStorage.getItem('sidebar-scroll-offset');
49        sessionStorage.removeItem('sidebar-scroll-offset');
50        if (sidebarScrollOffset !== null) {
51            // preserve sidebar scroll position when navigating via links within sidebar
52            const activeSection = this.querySelector('.active');
53            if (activeSection) {
54                const clientRect = activeSection.getBoundingClientRect();
55                const sidebarRect = this.getBoundingClientRect();
56                const currentOffset = clientRect.top - sidebarRect.top;
57                this.scrollTop += currentOffset - parseFloat(sidebarScrollOffset);
58            }
59        } else {
60            // scroll sidebar to current active section when navigating via
61            // 'next/previous chapter' buttons
62            const activeSection = document.querySelector('#mdbook-sidebar .active');
63            if (activeSection) {
64                activeSection.scrollIntoView({ block: 'center' });
65            }
66        }
67        // Toggle buttons
68        const sidebarAnchorToggles = document.querySelectorAll('.chapter-fold-toggle');
69        function toggleSection(ev) {
70            ev.currentTarget.parentElement.parentElement.classList.toggle('expanded');
71        }
72        Array.from(sidebarAnchorToggles).forEach(el => {
73            el.addEventListener('click', toggleSection);
74        });
75    }
76}
77window.customElements.define('mdbook-sidebar-scrollbox', MDBookSidebarScrollbox);
78
79
80// ---------------------------------------------------------------------------
81// Support for dynamically adding headers to the sidebar.
82
83(function() {
84    // This is used to detect which direction the page has scrolled since the
85    // last scroll event.
86    let lastKnownScrollPosition = 0;
87    // This is the threshold in px from the top of the screen where it will
88    // consider a header the "current" header when scrolling down.
89    const defaultDownThreshold = 150;
90    // Same as defaultDownThreshold, except when scrolling up.
91    const defaultUpThreshold = 300;
92    // The threshold is a virtual horizontal line on the screen where it
93    // considers the "current" header to be above the line. The threshold is
94    // modified dynamically to handle headers that are near the bottom of the
95    // screen, and to slightly offset the behavior when scrolling up vs down.
96    let threshold = defaultDownThreshold;
97    // This is used to disable updates while scrolling. This is needed when
98    // clicking the header in the sidebar, which triggers a scroll event. It
99    // is somewhat finicky to detect when the scroll has finished, so this
100    // uses a relatively dumb system of disabling scroll updates for a short
101    // time after the click.
102    let disableScroll = false;
103    // Array of header elements on the page.
104    let headers;
105    // Array of li elements that are initially collapsed headers in the sidebar.
106    // I'm not sure why eslint seems to have a false positive here.
107    // eslint-disable-next-line prefer-const
108    let headerToggles = [];
109    // This is a debugging tool for the threshold which you can enable in the console.
110    let thresholdDebug = false;
111
112    // Updates the threshold based on the scroll position.
113    function updateThreshold() {
114        const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
115        const windowHeight = window.innerHeight;
116        const documentHeight = document.documentElement.scrollHeight;
117
118        // The number of pixels below the viewport, at most documentHeight.
119        // This is used to push the threshold down to the bottom of the page
120        // as the user scrolls towards the bottom.
121        const pixelsBelow = Math.max(0, documentHeight - (scrollTop + windowHeight));
122        // The number of pixels above the viewport, at least defaultDownThreshold.
123        // Similar to pixelsBelow, this is used to push the threshold back towards
124        // the top when reaching the top of the page.
125        const pixelsAbove = Math.max(0, defaultDownThreshold - scrollTop);
126        // How much the threshold should be offset once it gets close to the
127        // bottom of the page.
128        const bottomAdd = Math.max(0, windowHeight - pixelsBelow - defaultDownThreshold);
129        let adjustedBottomAdd = bottomAdd;
130
131        // Adjusts bottomAdd for a small document. The calculation above
132        // assumes the document is at least twice the windowheight in size. If
133        // it is less than that, then bottomAdd needs to be shrunk
134        // proportional to the difference in size.
135        if (documentHeight < windowHeight * 2) {
136            const maxPixelsBelow = documentHeight - windowHeight;
137            const t = 1 - pixelsBelow / Math.max(1, maxPixelsBelow);
138            const clamp = Math.max(0, Math.min(1, t));
139            adjustedBottomAdd *= clamp;
140        }
141
142        let scrollingDown = true;
143        if (scrollTop < lastKnownScrollPosition) {
144            scrollingDown = false;
145        }
146
147        if (scrollingDown) {
148            // When scrolling down, move the threshold up towards the default
149            // downwards threshold position. If near the bottom of the page,
150            // adjustedBottomAdd will offset the threshold towards the bottom
151            // of the page.
152            const amountScrolledDown = scrollTop - lastKnownScrollPosition;
153            const adjustedDefault = defaultDownThreshold + adjustedBottomAdd;
154            threshold = Math.max(adjustedDefault, threshold - amountScrolledDown);
155        } else {
156            // When scrolling up, move the threshold down towards the default
157            // upwards threshold position. If near the bottom of the page,
158            // quickly transition the threshold back up where it normally
159            // belongs.
160            const amountScrolledUp = lastKnownScrollPosition - scrollTop;
161            const adjustedDefault = defaultUpThreshold - pixelsAbove
162                + Math.max(0, adjustedBottomAdd - defaultDownThreshold);
163            threshold = Math.min(adjustedDefault, threshold + amountScrolledUp);
164        }
165
166        if (documentHeight <= windowHeight) {
167            threshold = 0;
168        }
169
170        if (thresholdDebug) {
171            const id = 'mdbook-threshold-debug-data';
172            let data = document.getElementById(id);
173            if (data === null) {
174                data = document.createElement('div');
175                data.id = id;
176                data.style.cssText = `
177                    position: fixed;
178                    top: 50px;
179                    right: 10px;
180                    background-color: 0xeeeeee;
181                    z-index: 9999;
182                    pointer-events: none;
183                `;
184                document.body.appendChild(data);
185            }
186            data.innerHTML = `
187                <table>
188                  <tr><td>documentHeight</td><td>${documentHeight.toFixed(1)}</td></tr>
189                  <tr><td>windowHeight</td><td>${windowHeight.toFixed(1)}</td></tr>
190                  <tr><td>scrollTop</td><td>${scrollTop.toFixed(1)}</td></tr>
191                  <tr><td>pixelsAbove</td><td>${pixelsAbove.toFixed(1)}</td></tr>
192                  <tr><td>pixelsBelow</td><td>${pixelsBelow.toFixed(1)}</td></tr>
193                  <tr><td>bottomAdd</td><td>${bottomAdd.toFixed(1)}</td></tr>
194                  <tr><td>adjustedBottomAdd</td><td>${adjustedBottomAdd.toFixed(1)}</td></tr>
195                  <tr><td>scrollingDown</td><td>${scrollingDown}</td></tr>
196                  <tr><td>threshold</td><td>${threshold.toFixed(1)}</td></tr>
197                </table>
198            `;
199            drawDebugLine();
200        }
201
202        lastKnownScrollPosition = scrollTop;
203    }
204
205    function drawDebugLine() {
206        if (!document.body) {
207            return;
208        }
209        const id = 'mdbook-threshold-debug-line';
210        const existingLine = document.getElementById(id);
211        if (existingLine) {
212            existingLine.remove();
213        }
214        const line = document.createElement('div');
215        line.id = id;
216        line.style.cssText = `
217            position: fixed;
218            top: ${threshold}px;
219            left: 0;
220            width: 100vw;
221            height: 2px;
222            background-color: red;
223            z-index: 9999;
224            pointer-events: none;
225        `;
226        document.body.appendChild(line);
227    }
228
229    function mdbookEnableThresholdDebug() {
230        thresholdDebug = true;
231        updateThreshold();
232        drawDebugLine();
233    }
234
235    window.mdbookEnableThresholdDebug = mdbookEnableThresholdDebug;
236
237    // Updates which headers in the sidebar should be expanded. If the current
238    // header is inside a collapsed group, then it, and all its parents should
239    // be expanded.
240    function updateHeaderExpanded(currentA) {
241        // Add expanded to all header-item li ancestors.
242        let current = currentA.parentElement;
243        while (current) {
244            if (current.tagName === 'LI' && current.classList.contains('header-item')) {
245                current.classList.add('expanded');
246            }
247            current = current.parentElement;
248        }
249    }
250
251    // Updates which header is marked as the "current" header in the sidebar.
252    // This is done with a virtual Y threshold, where headers at or below
253    // that line will be considered the current one.
254    function updateCurrentHeader() {
255        if (!headers || !headers.length) {
256            return;
257        }
258
259        // Reset the classes, which will be rebuilt below.
260        const els = document.getElementsByClassName('current-header');
261        for (const el of els) {
262            el.classList.remove('current-header');
263        }
264        for (const toggle of headerToggles) {
265            toggle.classList.remove('expanded');
266        }
267
268        // Find the last header that is above the threshold.
269        let lastHeader = null;
270        for (const header of headers) {
271            const rect = header.getBoundingClientRect();
272            if (rect.top <= threshold) {
273                lastHeader = header;
274            } else {
275                break;
276            }
277        }
278        if (lastHeader === null) {
279            lastHeader = headers[0];
280            const rect = lastHeader.getBoundingClientRect();
281            const windowHeight = window.innerHeight;
282            if (rect.top >= windowHeight) {
283                return;
284            }
285        }
286
287        // Get the anchor in the summary.
288        const href = '#' + lastHeader.id;
289        const a = [...document.querySelectorAll('.header-in-summary')]
290            .find(element => element.getAttribute('href') === href);
291        if (!a) {
292            return;
293        }
294
295        a.classList.add('current-header');
296
297        updateHeaderExpanded(a);
298    }
299
300    // Updates which header is "current" based on the threshold line.
301    function reloadCurrentHeader() {
302        if (disableScroll) {
303            return;
304        }
305        updateThreshold();
306        updateCurrentHeader();
307    }
308
309
310    // When clicking on a header in the sidebar, this adjusts the threshold so
311    // that it is located next to the header. This is so that header becomes
312    // "current".
313    function headerThresholdClick(event) {
314        // See disableScroll description why this is done.
315        disableScroll = true;
316        setTimeout(() => {
317            disableScroll = false;
318        }, 100);
319        // requestAnimationFrame is used to delay the update of the "current"
320        // header until after the scroll is done, and the header is in the new
321        // position.
322        requestAnimationFrame(() => {
323            requestAnimationFrame(() => {
324                // Closest is needed because if it has child elements like <code>.
325                const a = event.target.closest('a');
326                const href = a.getAttribute('href');
327                const targetId = href.substring(1);
328                const targetElement = document.getElementById(targetId);
329                if (targetElement) {
330                    threshold = targetElement.getBoundingClientRect().bottom;
331                    updateCurrentHeader();
332                }
333            });
334        });
335    }
336
337    // Takes the nodes from the given head and copies them over to the
338    // destination, along with some filtering.
339    function filterHeader(source, dest) {
340        const clone = source.cloneNode(true);
341        clone.querySelectorAll('mark').forEach(mark => {
342            mark.replaceWith(...mark.childNodes);
343        });
344        dest.append(...clone.childNodes);
345    }
346
347    // Scans page for headers and adds them to the sidebar.
348    document.addEventListener('DOMContentLoaded', function() {
349        const activeSection = document.querySelector('#mdbook-sidebar .active');
350        if (activeSection === null) {
351            return;
352        }
353
354        const main = document.getElementsByTagName('main')[0];
355        headers = Array.from(main.querySelectorAll('h2, h3, h4, h5, h6'))
356            .filter(h => h.id !== '' && h.children.length && h.children[0].tagName === 'A');
357
358        if (headers.length === 0) {
359            return;
360        }
361
362        // Build a tree of headers in the sidebar.
363
364        const stack = [];
365
366        const firstLevel = parseInt(headers[0].tagName.charAt(1));
367        for (let i = 1; i < firstLevel; i++) {
368            const ol = document.createElement('ol');
369            ol.classList.add('section');
370            if (stack.length > 0) {
371                stack[stack.length - 1].ol.appendChild(ol);
372            }
373            stack.push({level: i + 1, ol: ol});
374        }
375
376        // The level where it will start folding deeply nested headers.
377        const foldLevel = 3;
378
379        for (let i = 0; i < headers.length; i++) {
380            const header = headers[i];
381            const level = parseInt(header.tagName.charAt(1));
382
383            const currentLevel = stack[stack.length - 1].level;
384            if (level > currentLevel) {
385                // Begin nesting to this level.
386                for (let nextLevel = currentLevel + 1; nextLevel <= level; nextLevel++) {
387                    const ol = document.createElement('ol');
388                    ol.classList.add('section');
389                    const last = stack[stack.length - 1];
390                    const lastChild = last.ol.lastChild;
391                    // Handle the case where jumping more than one nesting
392                    // level, which doesn't have a list item to place this new
393                    // list inside of.
394                    if (lastChild) {
395                        lastChild.appendChild(ol);
396                    } else {
397                        last.ol.appendChild(ol);
398                    }
399                    stack.push({level: nextLevel, ol: ol});
400                }
401            } else if (level < currentLevel) {
402                while (stack.length > 1 && stack[stack.length - 1].level > level) {
403                    stack.pop();
404                }
405            }
406
407            const li = document.createElement('li');
408            li.classList.add('header-item');
409            li.classList.add('expanded');
410            if (level < foldLevel) {
411                li.classList.add('expanded');
412            }
413            const span = document.createElement('span');
414            span.classList.add('chapter-link-wrapper');
415            const a = document.createElement('a');
416            span.appendChild(a);
417            a.href = '#' + header.id;
418            a.classList.add('header-in-summary');
419            filterHeader(header.children[0], a);
420            a.addEventListener('click', headerThresholdClick);
421            const nextHeader = headers[i + 1];
422            if (nextHeader !== undefined) {
423                const nextLevel = parseInt(nextHeader.tagName.charAt(1));
424                if (nextLevel > level && level >= foldLevel) {
425                    const toggle = document.createElement('a');
426                    toggle.classList.add('chapter-fold-toggle');
427                    toggle.classList.add('header-toggle');
428                    toggle.addEventListener('click', () => {
429                        li.classList.toggle('expanded');
430                    });
431                    const toggleDiv = document.createElement('div');
432                    toggleDiv.textContent = '❱';
433                    toggle.appendChild(toggleDiv);
434                    span.appendChild(toggle);
435                    headerToggles.push(li);
436                }
437            }
438            li.appendChild(span);
439
440            const currentParent = stack[stack.length - 1];
441            currentParent.ol.appendChild(li);
442        }
443
444        const onThisPage = document.createElement('div');
445        onThisPage.classList.add('on-this-page');
446        onThisPage.append(stack[0].ol);
447        const activeItemSpan = activeSection.parentElement;
448        activeItemSpan.after(onThisPage);
449    });
450
451    document.addEventListener('DOMContentLoaded', reloadCurrentHeader);
452    document.addEventListener('scroll', reloadCurrentHeader, { passive: true });
453})();
454

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.