\begin{tocenv}
\tocitem \@locref{sec6}{\begin{@norefs}\@print{Part I}\quad{}An introduction to OCaml{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{sec7}{\begin{@norefs}\@print{Chapter 1}\quad{}The core language{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:basics}{\begin{@norefs}\@print{1.1}\quad{}\label{s:basics}Basics{}\end{@norefs}}
\tocitem \@locref{s:datatypes}{\begin{@norefs}\@print{1.2}\quad{}\label{s:datatypes}Data types{}\end{@norefs}}
\tocitem \@locref{s:functions-as-values}{\begin{@norefs}\@print{1.3}\quad{}\label{s:functions-as-values}Functions as values{}\end{@norefs}}
\tocitem \@locref{s:tut-recvariants}{\begin{@norefs}\@print{1.4}\quad{}\label{s:tut-recvariants}Records and variants{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:record-and-variant-disambiguation}{\begin{@norefs}\@print{1.4.1}\quad{}\label{ss:record-and-variant-disambiguation}Record and variant disambiguation{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:imperative-features}{\begin{@norefs}\@print{1.5}\quad{}\label{s:imperative-features}Imperative features{}\end{@norefs}}
\tocitem \@locref{s:exceptions}{\begin{@norefs}\@print{1.6}\quad{}\label{s:exceptions}Exceptions{}\end{@norefs}}
\tocitem \@locref{s:lazy-expr}{\begin{@norefs}\@print{1.7}\quad{}\label{s:lazy-expr}Lazy expressions{}\end{@norefs}}
\tocitem \@locref{s:symb-expr}{\begin{@norefs}\@print{1.8}\quad{}\label{s:symb-expr}Symbolic processing of expressions{}\end{@norefs}}
\tocitem \@locref{s:pretty-printing}{\begin{@norefs}\@print{1.9}\quad{}\label{s:pretty-printing}Pretty-printing{}\end{@norefs}}
\tocitem \@locref{s:printf}{\begin{@norefs}\@print{1.10}\quad{}\label{s:printf}Printf formats{}\end{@norefs}}
\tocitem \@locref{s:standalone-programs}{\begin{@norefs}\@print{1.11}\quad{}\label{s:standalone-programs}Standalone OCaml programs{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{sec20}{\begin{@norefs}\@print{Chapter 2}\quad{}The module system{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:module:structures}{\begin{@norefs}\@print{2.1}\quad{}\label{s:module:structures}Structures{}\end{@norefs}}
\tocitem \@locref{s:signature}{\begin{@norefs}\@print{2.2}\quad{}\label{s:signature}Signatures{}\end{@norefs}}
\tocitem \@locref{s:functors}{\begin{@norefs}\@print{2.3}\quad{}\label{s:functors}Functors{}\end{@norefs}}
\tocitem \@locref{s:functors-and-abstraction}{\begin{@norefs}\@print{2.4}\quad{}\label{s:functors-and-abstraction}Functors and type abstraction{}\end{@norefs}}
\tocitem \@locref{s:separate-compilation}{\begin{@norefs}\@print{2.5}\quad{}\label{s:separate-compilation}Modules and separate compilation{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{sec26}{\begin{@norefs}\@print{Chapter 3}\quad{}Objects in OCaml{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:classes-and-objects}{\begin{@norefs}\@print{3.1}\quad{}\label{s:classes-and-objects}Classes and objects{}\end{@norefs}}
\tocitem \@locref{s:immediate-objects}{\begin{@norefs}\@print{3.2}\quad{}\label{s:immediate-objects}Immediate objects{}\end{@norefs}}
\tocitem \@locref{s:reference-to-self}{\begin{@norefs}\@print{3.3}\quad{}\label{s:reference-to-self}Reference to self{}\end{@norefs}}
\tocitem \@locref{s:initializers}{\begin{@norefs}\@print{3.4}\quad{}\label{s:initializers}Initializers{}\end{@norefs}}
\tocitem \@locref{s:virtual-methods}{\begin{@norefs}\@print{3.5}\quad{}\label{s:virtual-methods}Virtual methods{}\end{@norefs}}
\tocitem \@locref{s:private-methods}{\begin{@norefs}\@print{3.6}\quad{}\label{s:private-methods}Private methods{}\end{@norefs}}
\tocitem \@locref{s:class-interfaces}{\begin{@norefs}\@print{3.7}\quad{}\label{s:class-interfaces}Class interfaces{}\end{@norefs}}
\tocitem \@locref{s:inheritance}{\begin{@norefs}\@print{3.8}\quad{}\label{s:inheritance}Inheritance{}\end{@norefs}}
\tocitem \@locref{s:multiple-inheritance}{\begin{@norefs}\@print{3.9}\quad{}\label{s:multiple-inheritance}Multiple inheritance{}\end{@norefs}}
\tocitem \@locref{s:parameterized-classes}{\begin{@norefs}\@print{3.10}\quad{}\label{s:parameterized-classes}Parameterized classes{}\end{@norefs}}
\tocitem \@locref{s:polymorphic-methods}{\begin{@norefs}\@print{3.11}\quad{}\label{s:polymorphic-methods}Polymorphic methods{}\end{@norefs}}
\tocitem \@locref{s:using-coercions}{\begin{@norefs}\@print{3.12}\quad{}\label{s:using-coercions}Using coercions{}\end{@norefs}}
\tocitem \@locref{s:functional-objects}{\begin{@norefs}\@print{3.13}\quad{}\label{s:functional-objects}Functional objects{}\end{@norefs}}
\tocitem \@locref{s:cloning-objects}{\begin{@norefs}\@print{3.14}\quad{}\label{s:cloning-objects}Cloning objects{}\end{@norefs}}
\tocitem \@locref{s:recursive-classes}{\begin{@norefs}\@print{3.15}\quad{}\label{s:recursive-classes}Recursive classes{}\end{@norefs}}
\tocitem \@locref{s:binary-methods}{\begin{@norefs}\@print{3.16}\quad{}\label{s:binary-methods}Binary methods{}\end{@norefs}}
\tocitem \@locref{s:friends}{\begin{@norefs}\@print{3.17}\quad{}\label{s:friends}Friends{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{sec44}{\begin{@norefs}\@print{Chapter 4}\quad{}Labeled arguments{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:optional-arguments}{\begin{@norefs}\@print{4.1}\quad{}\label{s:optional-arguments}Optional arguments{}\end{@norefs}}
\tocitem \@locref{s:label-inference}{\begin{@norefs}\@print{4.2}\quad{}\label{s:label-inference}Labels and type inference{}\end{@norefs}}
\tocitem \@locref{s:label-suggestions}{\begin{@norefs}\@print{4.3}\quad{}\label{s:label-suggestions}Suggestions for labeling{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{sec48}{\begin{@norefs}\@print{Chapter 5}\quad{}Polymorphic variants{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:polyvariant:basic-use}{\begin{@norefs}\@print{5.1}\quad{}\label{s:polyvariant:basic-use}Basic use{}\end{@norefs}}
\tocitem \@locref{s:polyvariant-advanced}{\begin{@norefs}\@print{5.2}\quad{}\label{s:polyvariant-advanced}Advanced use{}\end{@norefs}}
\tocitem \@locref{s:polyvariant-weaknesses}{\begin{@norefs}\@print{5.3}\quad{}\label{s:polyvariant-weaknesses}Weaknesses of polymorphic variants{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{sec52}{\begin{@norefs}\@print{Chapter 6}\quad{}Polymorphism and its limitations{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:weak-polymorphism}{\begin{@norefs}\@print{6.1}\quad{}\label{s:weak-polymorphism}Weak polymorphism and mutation{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:weak-types}{\begin{@norefs}\@print{6.1.1}\quad{}\label{ss:weak-types}Weakly polymorphic types{}\end{@norefs}}
\tocitem \@locref{ss:valuerestriction}{\begin{@norefs}\@print{6.1.2}\quad{}\label{ss:valuerestriction}The value restriction{}\end{@norefs}}
\tocitem \@locref{ss:relaxed-value-restriction}{\begin{@norefs}\@print{6.1.3}\quad{}\label{ss:relaxed-value-restriction}The relaxed value restriction{}\end{@norefs}}
\tocitem \@locref{ss:variance-and-value-restriction}{\begin{@norefs}\@print{6.1.4}\quad{}\label{ss:variance-and-value-restriction}Variance and value restriction{}\end{@norefs}}
\tocitem \@locref{ss:variance:abstract-data-types}{\begin{@norefs}\@print{6.1.5}\quad{}\label{ss:variance:abstract-data-types}Abstract data types{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:polymorphic-recursion}{\begin{@norefs}\@print{6.2}\quad{}\label{s:polymorphic-recursion}Polymorphic recursion{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:explicit-polymorphism}{\begin{@norefs}\@print{6.2.1}\quad{}\label{ss:explicit-polymorphism}Explicitly polymorphic annotations{}\end{@norefs}}
\tocitem \@locref{ss:recursive-poly-examples}{\begin{@norefs}\@print{6.2.2}\quad{}\label{ss:recursive-poly-examples}More examples{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:higher-rank-poly}{\begin{@norefs}\@print{6.3}\quad{}\label{s:higher-rank-poly}Higher-rank polymorphic functions{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{sec63}{\begin{@norefs}\@print{Chapter 7}\quad{}Generalized algebraic datatypes{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:gadts-recfun}{\begin{@norefs}\@print{7.1}\quad{}\label{s:gadts-recfun}Recursive functions{}\end{@norefs}}
\tocitem \@locref{s:gadts-type-inference}{\begin{@norefs}\@print{7.2}\quad{}\label{s:gadts-type-inference}Type inference{}\end{@norefs}}
\tocitem \@locref{s:gadt-refutation-cases}{\begin{@norefs}\@print{7.3}\quad{}\label{s:gadt-refutation-cases}Refutation cases{}\end{@norefs}}
\tocitem \@locref{s:gadts-advexamples}{\begin{@norefs}\@print{7.4}\quad{}\label{s:gadts-advexamples}Advanced examples{}\end{@norefs}}
\tocitem \@locref{s:existential-names}{\begin{@norefs}\@print{7.5}\quad{}\label{s:existential-names}Existential type names in error messages{}\end{@norefs}}
\tocitem \@locref{s:explicit-existential-name}{\begin{@norefs}\@print{7.6}\quad{}\label{s:explicit-existential-name}Explicit naming of existentials{}\end{@norefs}}
\tocitem \@locref{s:gadt-equation-nonlocal-abstract}{\begin{@norefs}\@print{7.7}\quad{}\label{s:gadt-equation-nonlocal-abstract}Equations on non-local abstract types{}\end{@norefs}}
\tocitem \@locref{s:types-used-as-gadt-indices}{\begin{@norefs}\@print{7.8}\quad{}\label{s:types-used-as-gadt-indices}Types used as GADT indices{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:abstract-types-current-module}{\begin{@norefs}\@print{7.8.1}\quad{}\label{s:abstract-types-current-module}Legacy behavior: types in the current module{}\end{@norefs}}
\end{tocenv}
\end{tocenv}
\tocitem \@locref{sec73}{\begin{@norefs}\@print{Chapter 8}\quad{}Advanced examples with classes and modules{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:extended-bank-accounts}{\begin{@norefs}\@print{8.1}\quad{}\label{s:extended-bank-accounts}Extended example: bank accounts{}\end{@norefs}}
\tocitem \@locref{s:modules-as-classes}{\begin{@norefs}\@print{8.2}\quad{}\label{s:modules-as-classes}Simple modules as classes{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:string-as-class}{\begin{@norefs}\@print{8.2.1}\quad{}\label{ss:string-as-class}Strings{}\end{@norefs}}
\tocitem \@locref{ss:hashtbl-as-class}{\begin{@norefs}\@print{8.2.2}\quad{}\label{ss:hashtbl-as-class}Hashtbl{}\end{@norefs}}
\tocitem \@locref{ss:set-as-class}{\begin{@norefs}\@print{8.2.3}\quad{}\label{ss:set-as-class}Sets{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:subject-observer}{\begin{@norefs}\@print{8.3}\quad{}\label{s:subject-observer}The subject/observer pattern{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{sec81}{\begin{@norefs}\@print{Chapter 9}\quad{}Parallel programming{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:par_domains}{\begin{@norefs}\@print{9.1}\quad{}\label{s:par_domains}Domains{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:par_join}{\begin{@norefs}\@print{9.1.1}\quad{}\label{s:par_join}Joining domains{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:par_parfib}{\begin{@norefs}\@print{9.2}\quad{}\label{s:par_parfib}Domainslib: A library for nested-parallel programming{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:par_parfib_domainslib}{\begin{@norefs}\@print{9.2.1}\quad{}\label{s:par_parfib_domainslib}Parallelising Fibonacci using domainslib{}\end{@norefs}}
\tocitem \@locref{s:par_iterators}{\begin{@norefs}\@print{9.2.2}\quad{}\label{s:par_iterators}Parallel iteration constructs{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:par_gc}{\begin{@norefs}\@print{9.3}\quad{}\label{s:par_gc}Parallel garbage collection{}\end{@norefs}}
\tocitem \@locref{s:par_mm_easy}{\begin{@norefs}\@print{9.4}\quad{}\label{s:par_mm_easy}Memory model: The easy bits{}\end{@norefs}}
\tocitem \@locref{s:par_sync}{\begin{@norefs}\@print{9.5}\quad{}\label{s:par_sync}Blocking synchronisation{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:par_systhread_interaction}{\begin{@norefs}\@print{9.5.1}\quad{}\label{s:par_systhread_interaction}Interaction with systhreads{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:par_c_bindings}{\begin{@norefs}\@print{9.6}\quad{}\label{s:par_c_bindings}Interaction with C bindings{}\end{@norefs}}
\tocitem \@locref{s:par_atomics}{\begin{@norefs}\@print{9.7}\quad{}\label{s:par_atomics}Atomics{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:par_lockfree_stack}{\begin{@norefs}\@print{9.7.1}\quad{}\label{s:par_lockfree_stack}Lock-free stack{}\end{@norefs}}
\tocitem \@locref{s:atomic-record-fields}{\begin{@norefs}\@print{9.7.2}\quad{}\label{s:atomic-record-fields}Atomic record fields{}\end{@norefs}}
\end{tocenv}
\end{tocenv}
\tocitem \@locref{sec97}{\begin{@norefs}\@print{Chapter 10}\quad{}Memory model: The hard bits{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:why_relaxed_memory}{\begin{@norefs}\@print{10.1}\quad{}\label{s:why_relaxed_memory}Why weakly consistent memory?{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:mm_comp_opt}{\begin{@norefs}\@print{10.1.1}\quad{}\label{ss:mm_comp_opt}Compiler optimisations{}\end{@norefs}}
\tocitem \@locref{ss:mm_hw_opt}{\begin{@norefs}\@print{10.1.2}\quad{}\label{ss:mm_hw_opt}Hardware optimisations{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:drf_sc}{\begin{@norefs}\@print{10.2}\quad{}\label{s:drf_sc}Data race freedom implies sequential consistency{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:atomics}{\begin{@norefs}\@print{10.2.1}\quad{}\label{s:atomics}Memory locations{}\end{@norefs}}
\tocitem \@locref{s:happens_before}{\begin{@norefs}\@print{10.2.2}\quad{}\label{s:happens_before}Happens-before relation{}\end{@norefs}}
\tocitem \@locref{s:datarace}{\begin{@norefs}\@print{10.2.3}\quad{}\label{s:datarace}Data race{}\end{@norefs}}
\tocitem \@locref{ss:drf_sc}{\begin{@norefs}\@print{10.2.4}\quad{}\label{ss:drf_sc}DRF-SC{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:drf_reasoning}{\begin{@norefs}\@print{10.3}\quad{}\label{s:drf_reasoning}Reasoning with DRF-SC{}\end{@norefs}}
\tocitem \@locref{s:local_drf}{\begin{@norefs}\@print{10.4}\quad{}\label{s:local_drf}Local data race freedom{}\end{@norefs}}
\tocitem \@locref{s:mm_semantics}{\begin{@norefs}\@print{10.5}\quad{}\label{s:mm_semantics}An operational view of the memory model{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:mm_non_atomic}{\begin{@norefs}\@print{10.5.1}\quad{}\label{ss:mm_non_atomic}Non-atomic locations{}\end{@norefs}}
\tocitem \@locref{ss:mm_domains}{\begin{@norefs}\@print{10.5.2}\quad{}\label{ss:mm_domains}Domains{}\end{@norefs}}
\tocitem \@locref{ss:mm_na_access}{\begin{@norefs}\@print{10.5.3}\quad{}\label{ss:mm_na_access}Non-atomic accesses{}\end{@norefs}}
\tocitem \@locref{ss:mm_at_access}{\begin{@norefs}\@print{10.5.4}\quad{}\label{ss:mm_at_access}Atomic accesses{}\end{@norefs}}
\tocitem \@locref{s:mm_semantics_reasoning}{\begin{@norefs}\@print{10.5.5}\quad{}\label{s:mm_semantics_reasoning}Reasoning with the semantics{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:mm_tearing}{\begin{@norefs}\@print{10.6}\quad{}\label{s:mm_tearing}Non-compliant operations{}\end{@norefs}}
\end{tocenv}
\end{tocenv}
\tocitem \@locref{sec116}{\begin{@norefs}\@print{Part II}\quad{}The OCaml language{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{sec117}{\begin{@norefs}\@print{Chapter 11}\quad{}The OCaml language{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:lexical-conventions}{\begin{@norefs}\@print{11.1}\quad{}\label{s:lexical-conventions}Lexical conventions{}\end{@norefs}}
\tocitem \@locref{s:values}{\begin{@norefs}\@print{11.2}\quad{}\label{s:values}Values{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:values:base}{\begin{@norefs}\@print{11.2.1}\quad{}\label{ss:values:base}Base values{}\end{@norefs}}
\tocitem \@locref{ss:values:tuple}{\begin{@norefs}\@print{11.2.2}\quad{}\label{ss:values:tuple}Tuples{}\end{@norefs}}
\tocitem \@locref{ss:values:records}{\begin{@norefs}\@print{11.2.3}\quad{}\label{ss:values:records}Records{}\end{@norefs}}
\tocitem \@locref{ss:values:array}{\begin{@norefs}\@print{11.2.4}\quad{}\label{ss:values:array}Arrays{}\end{@norefs}}
\tocitem \@locref{ss:values:variant}{\begin{@norefs}\@print{11.2.5}\quad{}\label{ss:values:variant}Variant values{}\end{@norefs}}
\tocitem \@locref{ss:values:polyvars}{\begin{@norefs}\@print{11.2.6}\quad{}\label{ss:values:polyvars}Polymorphic variants{}\end{@norefs}}
\tocitem \@locref{ss:values:fun}{\begin{@norefs}\@print{11.2.7}\quad{}\label{ss:values:fun}Functions{}\end{@norefs}}
\tocitem \@locref{ss:values:obj}{\begin{@norefs}\@print{11.2.8}\quad{}\label{ss:values:obj}Objects{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:names}{\begin{@norefs}\@print{11.3}\quad{}\label{s:names}Names{}\end{@norefs}}
\tocitem \@locref{s:typexpr}{\begin{@norefs}\@print{11.4}\quad{}\label{s:typexpr}Type expressions{}\end{@norefs}}
\tocitem \@locref{s:const}{\begin{@norefs}\@print{11.5}\quad{}\label{s:const}Constants{}\end{@norefs}}
\tocitem \@locref{s:patterns}{\begin{@norefs}\@print{11.6}\quad{}\label{s:patterns}Patterns{}\end{@norefs}}
\tocitem \@locref{s:value-expr}{\begin{@norefs}\@print{11.7}\quad{}\label{s:value-expr}Expressions{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:precedence-and-associativity}{\begin{@norefs}\@print{11.7.1}\quad{}\label{ss:precedence-and-associativity}Precedence and associativity{}\end{@norefs}}
\tocitem \@locref{ss:expr-basic}{\begin{@norefs}\@print{11.7.2}\quad{}\label{ss:expr-basic}Basic expressions{}\end{@norefs}}
\tocitem \@locref{ss:expr-control}{\begin{@norefs}\@print{11.7.3}\quad{}\label{ss:expr-control}Control structures{}\end{@norefs}}
\tocitem \@locref{ss:expr-ops-on-data}{\begin{@norefs}\@print{11.7.4}\quad{}\label{ss:expr-ops-on-data}Operations on data structures{}\end{@norefs}}
\tocitem \@locref{ss:expr-operators}{\begin{@norefs}\@print{11.7.5}\quad{}\label{ss:expr-operators}Operators{}\end{@norefs}}
\tocitem \@locref{ss:expr-obj}{\begin{@norefs}\@print{11.7.6}\quad{}\label{ss:expr-obj}Objects{}\end{@norefs}}
\tocitem \@locref{ss:expr-coercions}{\begin{@norefs}\@print{11.7.7}\quad{}\label{ss:expr-coercions}Coercions{}\end{@norefs}}
\tocitem \@locref{ss:expr-local-items}{\begin{@norefs}\@print{11.7.8}\quad{}\label{ss:expr-local-items}Local structure items{}\end{@norefs}}
\tocitem \@locref{ss:expr-other}{\begin{@norefs}\@print{11.7.9}\quad{}\label{ss:expr-other}Other{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:tydef}{\begin{@norefs}\@print{11.8}\quad{}\label{s:tydef}Type and exception definitions{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:typedefs}{\begin{@norefs}\@print{11.8.1}\quad{}\label{ss:typedefs}Type definitions{}\end{@norefs}}
\tocitem \@locref{ss:exndef}{\begin{@norefs}\@print{11.8.2}\quad{}\label{ss:exndef}Exception definitions{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:classes}{\begin{@norefs}\@print{11.9}\quad{}\label{s:classes}Classes{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:classes:class-types}{\begin{@norefs}\@print{11.9.1}\quad{}\label{ss:classes:class-types}Class types{}\end{@norefs}}
\tocitem \@locref{ss:class-expr}{\begin{@norefs}\@print{11.9.2}\quad{}\label{ss:class-expr}Class expressions{}\end{@norefs}}
\tocitem \@locref{ss:class-def}{\begin{@norefs}\@print{11.9.3}\quad{}\label{ss:class-def}Class definitions{}\end{@norefs}}
\tocitem \@locref{ss:class-spec}{\begin{@norefs}\@print{11.9.4}\quad{}\label{ss:class-spec}Class specifications{}\end{@norefs}}
\tocitem \@locref{ss:classtype}{\begin{@norefs}\@print{11.9.5}\quad{}\label{ss:classtype}Class type definitions{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:modtypes}{\begin{@norefs}\@print{11.10}\quad{}\label{s:modtypes}Module types (module specifications){}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:mty-simple}{\begin{@norefs}\@print{11.10.1}\quad{}\label{ss:mty-simple}Simple module types{}\end{@norefs}}
\tocitem \@locref{ss:mty-signatures}{\begin{@norefs}\@print{11.10.2}\quad{}\label{ss:mty-signatures}Signatures{}\end{@norefs}}
\tocitem \@locref{ss:mty-functors}{\begin{@norefs}\@print{11.10.3}\quad{}\label{ss:mty-functors}Functor types{}\end{@norefs}}
\tocitem \@locref{ss:mty-with}{\begin{@norefs}\@print{11.10.4}\quad{}\label{ss:mty-with}The {\machine{with}} operator{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:module-expr}{\begin{@norefs}\@print{11.11}\quad{}\label{s:module-expr}Module expressions (module implementations){}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:mexpr-simple}{\begin{@norefs}\@print{11.11.1}\quad{}\label{ss:mexpr-simple}Simple module expressions{}\end{@norefs}}
\tocitem \@locref{ss:mexpr-structures}{\begin{@norefs}\@print{11.11.2}\quad{}\label{ss:mexpr-structures}Structures{}\end{@norefs}}
\tocitem \@locref{ss:mexpr-functors}{\begin{@norefs}\@print{11.11.3}\quad{}\label{ss:mexpr-functors}Functors{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:compilation-units}{\begin{@norefs}\@print{11.12}\quad{}\label{s:compilation-units}Compilation units{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{sec286}{\begin{@norefs}\@print{Chapter 12}\quad{}Language extensions{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:letrecvalues}{\begin{@norefs}\@print{12.1}\quad{}\label{s:letrecvalues}Recursive definitions of values{}\end{@norefs}}
\tocitem \@locref{s:recursive-modules}{\begin{@norefs}\@print{12.2}\quad{}\label{s:recursive-modules}Recursive modules{}\end{@norefs}}
\tocitem \@locref{s:private-types}{\begin{@norefs}\@print{12.3}\quad{}\label{s:private-types}Private types{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:private-types-variant}{\begin{@norefs}\@print{12.3.1}\quad{}\label{ss:private-types-variant}Private variant and record types{}\end{@norefs}}
\tocitem \@locref{ss:private-types-abbrev}{\begin{@norefs}\@print{12.3.2}\quad{}\label{ss:private-types-abbrev}Private type abbreviations{}\end{@norefs}}
\tocitem \@locref{ss:private-rows}{\begin{@norefs}\@print{12.3.3}\quad{}\label{ss:private-rows}Private row types{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:locally-abstract}{\begin{@norefs}\@print{12.4}\quad{}\label{s:locally-abstract}Locally abstract types{}\end{@norefs}}
\tocitem \@locref{s:first-class-modules}{\begin{@norefs}\@print{12.5}\quad{}\label{s:first-class-modules}Module-dependent functions and first-class modules{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:fst-mod-intro}{\begin{@norefs}\@print{12.5.1}\quad{}\label{ss:fst-mod-intro}Introduction{}\end{@norefs}}
\tocitem \@locref{ss:fst-mod-reference}{\begin{@norefs}\@print{12.5.2}\quad{}\label{ss:fst-mod-reference}Reference{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:module-type-of}{\begin{@norefs}\@print{12.6}\quad{}\label{s:module-type-of}Recovering the type of a module{}\end{@norefs}}
\tocitem \@locref{s:signature-substitution}{\begin{@norefs}\@print{12.7}\quad{}\label{s:signature-substitution}Substituting inside a signature{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:destructive-substitution}{\begin{@norefs}\@print{12.7.1}\quad{}\label{ss:destructive-substitution}Destructive substitutions{}\end{@norefs}}
\tocitem \@locref{ss:local-substitution}{\begin{@norefs}\@print{12.7.2}\quad{}\label{ss:local-substitution}Local substitution declarations{}\end{@norefs}}
\tocitem \@locref{ss:module-type-substitution}{\begin{@norefs}\@print{12.7.3}\quad{}\label{ss:module-type-substitution}Module type substitutions{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:module-alias}{\begin{@norefs}\@print{12.8}\quad{}\label{s:module-alias}Type-level module aliases{}\end{@norefs}}
\tocitem \@locref{s:explicit-overriding-open}{\begin{@norefs}\@print{12.9}\quad{}\label{s:explicit-overriding-open}Overriding in open statements{}\end{@norefs}}
\tocitem \@locref{s:gadts}{\begin{@norefs}\@print{12.10}\quad{}\label{s:gadts}Generalized algebraic datatypes{}\end{@norefs}}
\tocitem \@locref{s:bigarray-access}{\begin{@norefs}\@print{12.11}\quad{}\label{s:bigarray-access}Syntax for Bigarray access{}\end{@norefs}}
\tocitem \@locref{s:attributes}{\begin{@norefs}\@print{12.12}\quad{}\label{s:attributes}Attributes{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:builtin-attributes}{\begin{@norefs}\@print{12.12.1}\quad{}\label{ss:builtin-attributes}Built-in attributes{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:extension-nodes}{\begin{@norefs}\@print{12.13}\quad{}\label{s:extension-nodes}Extension nodes{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:builtin-extension-nodes}{\begin{@norefs}\@print{12.13.1}\quad{}\label{ss:builtin-extension-nodes}Built-in extension nodes{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:extensible-variants}{\begin{@norefs}\@print{12.14}\quad{}\label{s:extensible-variants}Extensible variant types{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:private-extensible}{\begin{@norefs}\@print{12.14.1}\quad{}\label{ss:private-extensible}Private extensible variant types{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:generative-functors}{\begin{@norefs}\@print{12.15}\quad{}\label{s:generative-functors}Generative functors{}\end{@norefs}}
\tocitem \@locref{s:extension-syntax}{\begin{@norefs}\@print{12.16}\quad{}\label{s:extension-syntax}Extension-only syntax{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:extension-operators}{\begin{@norefs}\@print{12.16.1}\quad{}\label{ss:extension-operators}Extension operators{}\end{@norefs}}
\tocitem \@locref{ss:extension-literals}{\begin{@norefs}\@print{12.16.2}\quad{}\label{ss:extension-literals}Extension literals{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:inline-records}{\begin{@norefs}\@print{12.17}\quad{}\label{s:inline-records}Inline records{}\end{@norefs}}
\tocitem \@locref{s:doc-comments}{\begin{@norefs}\@print{12.18}\quad{}\label{s:doc-comments}Documentation comments{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:floating-comments}{\begin{@norefs}\@print{12.18.1}\quad{}\label{ss:floating-comments}Floating comments{}\end{@norefs}}
\tocitem \@locref{ss:item-comments}{\begin{@norefs}\@print{12.18.2}\quad{}\label{ss:item-comments}Item comments{}\end{@norefs}}
\tocitem \@locref{ss:label-comments}{\begin{@norefs}\@print{12.18.3}\quad{}\label{ss:label-comments}Label comments{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:index-operators}{\begin{@norefs}\@print{12.19}\quad{}\label{s:index-operators}Extended indexing operators {}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:multiindexing}{\begin{@norefs}\@print{12.19.1}\quad{}\label{ss:multiindexing}Multi-index notation{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:empty-variants}{\begin{@norefs}\@print{12.20}\quad{}\label{s:empty-variants}Empty variant types{}\end{@norefs}}
\tocitem \@locref{s:alerts}{\begin{@norefs}\@print{12.21}\quad{}\label{s:alerts}Alerts{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:alert_marking}{\begin{@norefs}\@print{12.21.1}\quad{}\label{ss:alert_marking}Marking a component{}\end{@norefs}}
\tocitem \@locref{ss:control}{\begin{@norefs}\@print{12.21.2}\quad{}\label{ss:control}Controlling which alerts are enabled{}\end{@norefs}}
\tocitem \@locref{ss:alert_deprecated}{\begin{@norefs}\@print{12.21.3}\quad{}\label{ss:alert_deprecated}Shorthand syntax for deprecation{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:generalized-open}{\begin{@norefs}\@print{12.22}\quad{}\label{s:generalized-open}Generalized open statements{}\end{@norefs}}
\tocitem \@locref{s:binding-operators}{\begin{@norefs}\@print{12.23}\quad{}\label{s:binding-operators}Binding operators{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:letop-examples}{\begin{@norefs}\@print{12.23.1}\quad{}\label{ss:letop-examples}Examples{}\end{@norefs}}
\tocitem \@locref{ss:letops-conventions}{\begin{@norefs}\@print{12.23.2}\quad{}\label{ss:letops-conventions}Conventions{}\end{@norefs}}
\tocitem \@locref{ss:letop-rules}{\begin{@norefs}\@print{12.23.3}\quad{}\label{ss:letop-rules}General desugaring rules{}\end{@norefs}}
\tocitem \@locref{ss:letops-punning}{\begin{@norefs}\@print{12.23.4}\quad{}\label{ss:letops-punning}Short notation for variable bindings (let-punning){}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:effect-handlers}{\begin{@norefs}\@print{12.24}\quad{}\label{s:effect-handlers}Effect handlers{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:effects-basics}{\begin{@norefs}\@print{12.24.1}\quad{}\label{s:effects-basics}Basics{}\end{@norefs}}
\tocitem \@locref{s:effects-concurrency}{\begin{@norefs}\@print{12.24.2}\quad{}\label{s:effects-concurrency}Concurrency{}\end{@norefs}}
\tocitem \@locref{s:effects-user-threads}{\begin{@norefs}\@print{12.24.3}\quad{}\label{s:effects-user-threads}User-level threads{}\end{@norefs}}
\tocitem \@locref{s:effects-sequence}{\begin{@norefs}\@print{12.24.4}\quad{}\label{s:effects-sequence}Control inversion{}\end{@norefs}}
\tocitem \@locref{s:effects-semantics}{\begin{@norefs}\@print{12.24.5}\quad{}\label{s:effects-semantics}Semantics{}\end{@norefs}}
\tocitem \@locref{s:effects-shallow}{\begin{@norefs}\@print{12.24.6}\quad{}\label{s:effects-shallow}Shallow handlers{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:array-literals}{\begin{@norefs}\@print{12.25}\quad{}\label{s:array-literals}Type-directed disambiguation of array literals{}\end{@norefs}}
\tocitem \@locref{s:labeled-tuples}{\begin{@norefs}\@print{12.26}\quad{}\label{s:labeled-tuples}Labeled tuples{}\end{@norefs}}
\tocitem \@locref{s:external-types}{\begin{@norefs}\@print{12.27}\quad{}\label{s:external-types}External types{}\end{@norefs}}
\end{tocenv}
\end{tocenv}
\tocitem \@locref{sec364}{\begin{@norefs}\@print{Part III}\quad{}The OCaml tools{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{sec365}{\begin{@norefs}\@print{Chapter 13}\quad{}Batch compilation (ocamlc){}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:comp-overview}{\begin{@norefs}\@print{13.1}\quad{}\label{s:comp-overview}Overview of the compiler{}\end{@norefs}}
\tocitem \@locref{s:comp-options}{\begin{@norefs}\@print{13.2}\quad{}\label{s:comp-options}Options{}\end{@norefs}}
\tocitem \@locref{s:modules-file-system}{\begin{@norefs}\@print{13.3}\quad{}\label{s:modules-file-system}Modules and the file system{}\end{@norefs}}
\tocitem \@locref{s:comp-errors}{\begin{@norefs}\@print{13.4}\quad{}\label{s:comp-errors}Common errors{}\end{@norefs}}
\tocitem \@locref{s:comp-warnings}{\begin{@norefs}\@print{13.5}\quad{}\label{s:comp-warnings}Warning reference{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:warn6}{\begin{@norefs}\@print{13.5.1}\quad{}\label{ss:warn6}Warning 6: Label omitted in function application{}\end{@norefs}}
\tocitem \@locref{ss:warn9}{\begin{@norefs}\@print{13.5.2}\quad{}\label{ss:warn9}Warning 9: missing fields in a record pattern{}\end{@norefs}}
\tocitem \@locref{ss:warn52}{\begin{@norefs}\@print{13.5.3}\quad{}\label{ss:warn52}Warning 52: fragile constant pattern{}\end{@norefs}}
\tocitem \@locref{ss:warn57}{\begin{@norefs}\@print{13.5.4}\quad{}\label{ss:warn57}Warning 57: Ambiguous or-pattern variables under guard{}\end{@norefs}}
\tocitem \@locref{ss:warn74}{\begin{@norefs}\@print{13.5.5}\quad{}\label{ss:warn74}Warning 74: Pattern matching degraded to partial.{}\end{@norefs}}
\end{tocenv}
\end{tocenv}
\tocitem \@locref{sec378}{\begin{@norefs}\@print{Chapter 14}\quad{}The toplevel system or REPL (ocaml){}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:toplevel-options}{\begin{@norefs}\@print{14.1}\quad{}\label{s:toplevel-options}Options{}\end{@norefs}}
\tocitem \@locref{s:toplevel-directives}{\begin{@norefs}\@print{14.2}\quad{}\label{s:toplevel-directives}Toplevel directives{}\end{@norefs}}
\tocitem \@locref{s:toplevel-modules}{\begin{@norefs}\@print{14.3}\quad{}\label{s:toplevel-modules}The toplevel and the module system{}\end{@norefs}}
\tocitem \@locref{s:toplevel-common-errors}{\begin{@norefs}\@print{14.4}\quad{}\label{s:toplevel-common-errors}Common errors{}\end{@norefs}}
\tocitem \@locref{s:custom-toplevel}{\begin{@norefs}\@print{14.5}\quad{}\label{s:custom-toplevel}Building custom toplevel systems: \texttt{ocamlmktop}{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:ocamlmktop-options}{\begin{@norefs}\@print{14.5.1}\quad{}\label{ss:ocamlmktop-options}Options{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:ocamlnat}{\begin{@norefs}\@print{14.6}\quad{}\label{s:ocamlnat}The native toplevel: \texttt{ocamlnat}\ (experimental){}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{sec386}{\begin{@norefs}\@print{Chapter 15}\quad{}The runtime system (ocamlrun){}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:ocamlrun-overview}{\begin{@norefs}\@print{15.1}\quad{}\label{s:ocamlrun-overview}Overview{}\end{@norefs}}
\tocitem \@locref{s:ocamlrun-options}{\begin{@norefs}\@print{15.2}\quad{}\label{s:ocamlrun-options}Options{}\end{@norefs}}
\tocitem \@locref{s:ocamlrun-dllpath}{\begin{@norefs}\@print{15.3}\quad{}\label{s:ocamlrun-dllpath}Dynamic loading of shared libraries{}\end{@norefs}}
\tocitem \@locref{s:ocamlrun-common-errors}{\begin{@norefs}\@print{15.4}\quad{}\label{s:ocamlrun-common-errors}Common errors{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{sec391}{\begin{@norefs}\@print{Chapter 16}\quad{}Native-code compilation (ocamlopt){}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:native-overview}{\begin{@norefs}\@print{16.1}\quad{}\label{s:native-overview}Overview of the compiler{}\end{@norefs}}
\tocitem \@locref{s:native-options}{\begin{@norefs}\@print{16.2}\quad{}\label{s:native-options}Options{}\end{@norefs}}
\tocitem \@locref{s:native-common-errors}{\begin{@norefs}\@print{16.3}\quad{}\label{s:native-common-errors}Common errors{}\end{@norefs}}
\tocitem \@locref{s:native:running-executable}{\begin{@norefs}\@print{16.4}\quad{}\label{s:native:running-executable}Running executables produced by ocamlopt{}\end{@norefs}}
\tocitem \@locref{s:compat-native-bytecode}{\begin{@norefs}\@print{16.5}\quad{}\label{s:compat-native-bytecode}Compatibility with the bytecode compiler{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{sec399}{\begin{@norefs}\@print{Chapter 17}\quad{}Lexer and parser generators (ocamllex, ocamlyacc){}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:ocamllex-overview}{\begin{@norefs}\@print{17.1}\quad{}\label{s:ocamllex-overview}Overview of \texttt{ocamllex}{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:ocamllex-options}{\begin{@norefs}\@print{17.1.1}\quad{}\label{ss:ocamllex-options}Options{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:ocamllex-syntax}{\begin{@norefs}\@print{17.2}\quad{}\label{s:ocamllex-syntax}Syntax of lexer definitions{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:ocamllex-header-trailer}{\begin{@norefs}\@print{17.2.1}\quad{}\label{ss:ocamllex-header-trailer}Header and trailer{}\end{@norefs}}
\tocitem \@locref{ss:ocamllex-named-regexp}{\begin{@norefs}\@print{17.2.2}\quad{}\label{ss:ocamllex-named-regexp}Naming regular expressions{}\end{@norefs}}
\tocitem \@locref{ss:ocamllex-entry-points}{\begin{@norefs}\@print{17.2.3}\quad{}\label{ss:ocamllex-entry-points}Entry points{}\end{@norefs}}
\tocitem \@locref{ss:ocamllex-regexp}{\begin{@norefs}\@print{17.2.4}\quad{}\label{ss:ocamllex-regexp}Regular expressions{}\end{@norefs}}
\tocitem \@locref{ss:ocamllex-actions}{\begin{@norefs}\@print{17.2.5}\quad{}\label{ss:ocamllex-actions}Actions{}\end{@norefs}}
\tocitem \@locref{ss:ocamllex-variables}{\begin{@norefs}\@print{17.2.6}\quad{}\label{ss:ocamllex-variables}Variables in regular expressions{}\end{@norefs}}
\tocitem \@locref{ss:refill-handlers}{\begin{@norefs}\@print{17.2.7}\quad{}\label{ss:refill-handlers}Refill handlers{}\end{@norefs}}
\tocitem \@locref{ss:ocamllex-reserved-ident}{\begin{@norefs}\@print{17.2.8}\quad{}\label{ss:ocamllex-reserved-ident}Reserved identifiers{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:ocamlyacc-overview}{\begin{@norefs}\@print{17.3}\quad{}\label{s:ocamlyacc-overview}Overview of \texttt{ocamlyacc}{}\end{@norefs}}
\tocitem \@locref{s:ocamlyacc-syntax}{\begin{@norefs}\@print{17.4}\quad{}\label{s:ocamlyacc-syntax}Syntax of grammar definitions{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:ocamlyacc-header-trailer}{\begin{@norefs}\@print{17.4.1}\quad{}\label{ss:ocamlyacc-header-trailer}Header and trailer{}\end{@norefs}}
\tocitem \@locref{ss:ocamlyacc-declarations}{\begin{@norefs}\@print{17.4.2}\quad{}\label{ss:ocamlyacc-declarations}Declarations{}\end{@norefs}}
\tocitem \@locref{ss:ocamlyacc-rules}{\begin{@norefs}\@print{17.4.3}\quad{}\label{ss:ocamlyacc-rules}Rules{}\end{@norefs}}
\tocitem \@locref{ss:ocamlyacc-error-handling}{\begin{@norefs}\@print{17.4.4}\quad{}\label{ss:ocamlyacc-error-handling}Error handling{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:ocamlyacc-options}{\begin{@norefs}\@print{17.5}\quad{}\label{s:ocamlyacc-options}Options{}\end{@norefs}}
\tocitem \@locref{s:lexyacc-example}{\begin{@norefs}\@print{17.6}\quad{}\label{s:lexyacc-example}A complete example{}\end{@norefs}}
\tocitem \@locref{s:lexyacc-common-errors}{\begin{@norefs}\@print{17.7}\quad{}\label{s:lexyacc-common-errors}Common errors{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{sec420}{\begin{@norefs}\@print{Chapter 18}\quad{}Dependency generator (ocamldep){}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:ocamldep-options}{\begin{@norefs}\@print{18.1}\quad{}\label{s:ocamldep-options}Options{}\end{@norefs}}
\tocitem \@locref{s:ocamldep-makefile}{\begin{@norefs}\@print{18.2}\quad{}\label{s:ocamldep-makefile}A typical Makefile{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{sec423}{\begin{@norefs}\@print{Chapter 19}\quad{}The documentation generator (ocamldoc){}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:ocamldoc-usage}{\begin{@norefs}\@print{19.1}\quad{}\label{s:ocamldoc-usage}Usage{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:ocamldoc-invocation}{\begin{@norefs}\@print{19.1.1}\quad{}\label{ss:ocamldoc-invocation}Invocation{}\end{@norefs}}
\tocitem \@locref{ss:ocamldoc-merge}{\begin{@norefs}\@print{19.1.2}\quad{}\label{ss:ocamldoc-merge}Merging of module information{}\end{@norefs}}
\tocitem \@locref{ss:ocamldoc-rules}{\begin{@norefs}\@print{19.1.3}\quad{}\label{ss:ocamldoc-rules}Coding rules{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:ocamldoc-comments}{\begin{@norefs}\@print{19.2}\quad{}\label{s:ocamldoc-comments}Syntax of documentation comments{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:ocamldoc-placement}{\begin{@norefs}\@print{19.2.1}\quad{}\label{ss:ocamldoc-placement}Placement of documentation comments{}\end{@norefs}}
\tocitem \@locref{ss:ocamldoc-stop}{\begin{@norefs}\@print{19.2.2}\quad{}\label{ss:ocamldoc-stop}The Stop special comment{}\end{@norefs}}
\tocitem \@locref{ss:ocamldoc-syntax}{\begin{@norefs}\@print{19.2.3}\quad{}\label{ss:ocamldoc-syntax}Syntax of documentation comments{}\end{@norefs}}
\tocitem \@locref{ss:ocamldoc-formatting}{\begin{@norefs}\@print{19.2.4}\quad{}\label{ss:ocamldoc-formatting}Text formatting{}\end{@norefs}}
\tocitem \@locref{ss:ocamldoc-tags}{\begin{@norefs}\@print{19.2.5}\quad{}\label{ss:ocamldoc-tags}Documentation tags (@-tags){}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:ocamldoc-custom-generators}{\begin{@norefs}\@print{19.3}\quad{}\label{s:ocamldoc-custom-generators}Custom generators{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:ocamldoc-generators}{\begin{@norefs}\@print{19.3.1}\quad{}\label{ss:ocamldoc-generators}The generator modules{}\end{@norefs}}
\tocitem \@locref{ss:ocamldoc-handling-custom-tags}{\begin{@norefs}\@print{19.3.2}\quad{}\label{ss:ocamldoc-handling-custom-tags}Handling custom tags{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:ocamldoc-adding-flags}{\begin{@norefs}\@print{19.4}\quad{}\label{s:ocamldoc-adding-flags}Adding command line options{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:ocamldoc-compilation-and-usage}{\begin{@norefs}\@print{19.4.1}\quad{}\label{ss:ocamldoc-compilation-and-usage}Compilation and usage{}\end{@norefs}}
\end{tocenv}
\end{tocenv}
\tocitem \@locref{sec460}{\begin{@norefs}\@print{Chapter 20}\quad{}The debugger (ocamldebug){}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:debugger-compilation}{\begin{@norefs}\@print{20.1}\quad{}\label{s:debugger-compilation}Compiling for debugging{}\end{@norefs}}
\tocitem \@locref{s:debugger-invocation}{\begin{@norefs}\@print{20.2}\quad{}\label{s:debugger-invocation}Invocation{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:debugger-start}{\begin{@norefs}\@print{20.2.1}\quad{}\label{ss:debugger-start}Starting the debugger{}\end{@norefs}}
\tocitem \@locref{ss:debugger-init-file}{\begin{@norefs}\@print{20.2.2}\quad{}\label{ss:debugger-init-file}Initialization file{}\end{@norefs}}
\tocitem \@locref{ss:debugger-exut}{\begin{@norefs}\@print{20.2.3}\quad{}\label{ss:debugger-exut}Exiting the debugger{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:debugger-commands}{\begin{@norefs}\@print{20.3}\quad{}\label{s:debugger-commands}Commands{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:debugger-help}{\begin{@norefs}\@print{20.3.1}\quad{}\label{ss:debugger-help}Getting help{}\end{@norefs}}
\tocitem \@locref{ss:debugger-state}{\begin{@norefs}\@print{20.3.2}\quad{}\label{ss:debugger-state}Accessing the debugger state{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:debugger-execution}{\begin{@norefs}\@print{20.4}\quad{}\label{s:debugger-execution}Executing a program{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:debugger-events}{\begin{@norefs}\@print{20.4.1}\quad{}\label{ss:debugger-events}Events{}\end{@norefs}}
\tocitem \@locref{ss:debugger-starting-program}{\begin{@norefs}\@print{20.4.2}\quad{}\label{ss:debugger-starting-program}Starting the debugged program{}\end{@norefs}}
\tocitem \@locref{ss:debugger-running}{\begin{@norefs}\@print{20.4.3}\quad{}\label{ss:debugger-running}Running the program{}\end{@norefs}}
\tocitem \@locref{ss:debugger-time-travel}{\begin{@norefs}\@print{20.4.4}\quad{}\label{ss:debugger-time-travel}Time travel{}\end{@norefs}}
\tocitem \@locref{ss:debugger-kill}{\begin{@norefs}\@print{20.4.5}\quad{}\label{ss:debugger-kill}Killing the program{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:breakpoints}{\begin{@norefs}\@print{20.5}\quad{}\label{s:breakpoints}Breakpoints{}\end{@norefs}}
\tocitem \@locref{s:debugger-callstack}{\begin{@norefs}\@print{20.6}\quad{}\label{s:debugger-callstack}The call stack{}\end{@norefs}}
\tocitem \@locref{s:debugger-examining-values}{\begin{@norefs}\@print{20.7}\quad{}\label{s:debugger-examining-values}Examining variable values{}\end{@norefs}}
\tocitem \@locref{s:debugger-control}{\begin{@norefs}\@print{20.8}\quad{}\label{s:debugger-control}Controlling the debugger{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:debugger-name-and-arguments}{\begin{@norefs}\@print{20.8.1}\quad{}\label{ss:debugger-name-and-arguments}Setting the program name and arguments{}\end{@norefs}}
\tocitem \@locref{ss:debugger-loading}{\begin{@norefs}\@print{20.8.2}\quad{}\label{ss:debugger-loading}How programs are loaded{}\end{@norefs}}
\tocitem \@locref{ss:debugger-search-path}{\begin{@norefs}\@print{20.8.3}\quad{}\label{ss:debugger-search-path}Search path for files{}\end{@norefs}}
\tocitem \@locref{ss:debugger-working-dir}{\begin{@norefs}\@print{20.8.4}\quad{}\label{ss:debugger-working-dir}Working directory{}\end{@norefs}}
\tocitem \@locref{ss:debugger-reverse-execution}{\begin{@norefs}\@print{20.8.5}\quad{}\label{ss:debugger-reverse-execution}Turning reverse execution on and off{}\end{@norefs}}
\tocitem \@locref{ss:debugger-fork}{\begin{@norefs}\@print{20.8.6}\quad{}\label{ss:debugger-fork}Behavior of the debugger with respect to {\machine{fork}}{}\end{@norefs}}
\tocitem \@locref{ss:debugger-stop-at-new-load}{\begin{@norefs}\@print{20.8.7}\quad{}\label{ss:debugger-stop-at-new-load}Stopping execution when new code is loaded{}\end{@norefs}}
\tocitem \@locref{ss:debugger-communication}{\begin{@norefs}\@print{20.8.8}\quad{}\label{ss:debugger-communication}Communication between the debugger and the program{}\end{@norefs}}
\tocitem \@locref{ss:debugger-fine-tuning}{\begin{@norefs}\@print{20.8.9}\quad{}\label{ss:debugger-fine-tuning}Fine-tuning the debugger{}\end{@norefs}}
\tocitem \@locref{ss:debugger-printers}{\begin{@norefs}\@print{20.8.10}\quad{}\label{ss:debugger-printers}User-defined printers{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:debugger-misc-cmds}{\begin{@norefs}\@print{20.9}\quad{}\label{s:debugger-misc-cmds}Miscellaneous commands{}\end{@norefs}}
\tocitem \@locref{s:inf-debugger}{\begin{@norefs}\@print{20.10}\quad{}\label{s:inf-debugger}Running the debugger under Emacs{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{sec491}{\begin{@norefs}\@print{Chapter 21}\quad{}Native debugging (gdb, lldb){}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:native-debugger-overview}{\begin{@norefs}\@print{21.1}\quad{}\label{s:native-debugger-overview}Overview{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:native-debugger-dwarf}{\begin{@norefs}\@print{21.1.1}\quad{}\label{ss:native-debugger-dwarf}DWARF{}\end{@norefs}}
\tocitem \@locref{ss:native-debugger-name-mangling}{\begin{@norefs}\@print{21.1.2}\quad{}\label{ss:native-debugger-name-mangling}Name Mangling{}\end{@norefs}}
\tocitem \@locref{ss:native-debugger-frame-pointers}{\begin{@norefs}\@print{21.1.3}\quad{}\label{ss:native-debugger-frame-pointers}Frame Pointers{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:native-debugger-compilation}{\begin{@norefs}\@print{21.2}\quad{}\label{s:native-debugger-compilation}Compiling for Debugging{}\end{@norefs}}
\tocitem \@locref{s:native-debugger-gdb}{\begin{@norefs}\@print{21.3}\quad{}\label{s:native-debugger-gdb}Using GDB{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:native-debugger-gdb-commands}{\begin{@norefs}\@print{21.3.1}\quad{}\label{ss:native-debugger-gdb-commands}GDB Commands{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:native-debugger-lldb}{\begin{@norefs}\@print{21.4}\quad{}\label{s:native-debugger-lldb}Using LLDB{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:native-debugger-lldb-commands}{\begin{@norefs}\@print{21.4.1}\quad{}\label{ss:native-debugger-lldb-commands}LLDB Commands{}\end{@norefs}}
\end{tocenv}
\end{tocenv}
\tocitem \@locref{sec501}{\begin{@norefs}\@print{Chapter 22}\quad{}Profiling (ocamlprof, perf){}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:ocamlprog-overview}{\begin{@norefs}\@print{22.1}\quad{}\label{s:ocamlprog-overview}Profiling execution counts with ocamlprof{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:ocamlprof-compiling}{\begin{@norefs}\@print{22.1.1}\quad{}\label{s:ocamlprof-compiling}Compiling for profiling{}\end{@norefs}}
\tocitem \@locref{s:ocamlprof-profiling}{\begin{@norefs}\@print{22.1.2}\quad{}\label{s:ocamlprof-profiling}Profiling an execution{}\end{@norefs}}
\tocitem \@locref{s:ocamlprof-printing}{\begin{@norefs}\@print{22.1.3}\quad{}\label{s:ocamlprof-printing}Printing profiling information{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:ocamlprof-time-profiling}{\begin{@norefs}\@print{22.2}\quad{}\label{s:ocamlprof-time-profiling}Time profiling with Linux perf{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:ocamlprof-time-profiling-background}{\begin{@norefs}\@print{22.2.1}\quad{}\label{s:ocamlprof-time-profiling-background}Background{}\end{@norefs}}
\tocitem \@locref{s:ocamlprof-compiling-perf}{\begin{@norefs}\@print{22.2.2}\quad{}\label{s:ocamlprof-compiling-perf}Compiling for Profiling{}\end{@norefs}}
\tocitem \@locref{s:ocamlprof-profiling-perf}{\begin{@norefs}\@print{22.2.3}\quad{}\label{s:ocamlprof-profiling-perf}Profiling an Execution{}\end{@norefs}}
\tocitem \@locref{s:ocamlprof-printing-perf}{\begin{@norefs}\@print{22.2.4}\quad{}\label{s:ocamlprof-printing-perf}Displaying profiling information{}\end{@norefs}}
\tocitem \@locref{s:ocamlperf-conclusion}{\begin{@norefs}\@print{22.2.5}\quad{}\label{s:ocamlperf-conclusion}Conclusion{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:ocamlprof-instruments}{\begin{@norefs}\@print{22.3}\quad{}\label{s:ocamlprof-instruments}Time profiling with macOS Instruments{}\end{@norefs}}
\tocitem \@locref{s:ocamlprof-glossary}{\begin{@norefs}\@print{22.4}\quad{}\label{s:ocamlprof-glossary}Glossary{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{c:intf-c}{\begin{@norefs}\@print{Chapter 23}\quad{}Interfacing\label{c:intf-c} C with OCaml{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:c-overview}{\begin{@norefs}\@print{23.1}\quad{}\label{s:c-overview}Overview and compilation information{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:c-prim-decl}{\begin{@norefs}\@print{23.1.1}\quad{}\label{ss:c-prim-decl}Declaring primitives{}\end{@norefs}}
\tocitem \@locref{ss:c-prim-impl}{\begin{@norefs}\@print{23.1.2}\quad{}\label{ss:c-prim-impl}Implementing primitives{}\end{@norefs}}
\tocitem \@locref{ss:staticlink-c-code}{\begin{@norefs}\@print{23.1.3}\quad{}\label{ss:staticlink-c-code}Statically linking C code with OCaml code{}\end{@norefs}}
\tocitem \@locref{ss:dynlink-c-code}{\begin{@norefs}\@print{23.1.4}\quad{}\label{ss:dynlink-c-code}Dynamically linking C code with OCaml code{}\end{@norefs}}
\tocitem \@locref{ss:c-static-vs-dynamic}{\begin{@norefs}\@print{23.1.5}\quad{}\label{ss:c-static-vs-dynamic}Choosing between static linking and dynamic linking{}\end{@norefs}}
\tocitem \@locref{ss:custom-runtime}{\begin{@norefs}\@print{23.1.6}\quad{}\label{ss:custom-runtime}Building standalone custom runtime systems{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:c-value}{\begin{@norefs}\@print{23.2}\quad{}\label{s:c-value}The \texttt{value} type{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:c-int}{\begin{@norefs}\@print{23.2.1}\quad{}\label{ss:c-int}Integer values{}\end{@norefs}}
\tocitem \@locref{ss:c-blocks}{\begin{@norefs}\@print{23.2.2}\quad{}\label{ss:c-blocks}Blocks{}\end{@norefs}}
\tocitem \@locref{ss:c-outside-head}{\begin{@norefs}\@print{23.2.3}\quad{}\label{ss:c-outside-head}Pointers outside the heap{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:c-ocaml-datatype-repr}{\begin{@norefs}\@print{23.3}\quad{}\label{s:c-ocaml-datatype-repr}Representation of OCaml data types{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:c-atomic}{\begin{@norefs}\@print{23.3.1}\quad{}\label{ss:c-atomic}Atomic types{}\end{@norefs}}
\tocitem \@locref{ss:c-tuples-and-records}{\begin{@norefs}\@print{23.3.2}\quad{}\label{ss:c-tuples-and-records}Tuples and records{}\end{@norefs}}
\tocitem \@locref{ss:c-arrays}{\begin{@norefs}\@print{23.3.3}\quad{}\label{ss:c-arrays}Arrays{}\end{@norefs}}
\tocitem \@locref{ss:c-concrete-datatypes}{\begin{@norefs}\@print{23.3.4}\quad{}\label{ss:c-concrete-datatypes}Concrete data types{}\end{@norefs}}
\tocitem \@locref{ss:c-objects}{\begin{@norefs}\@print{23.3.5}\quad{}\label{ss:c-objects}Objects{}\end{@norefs}}
\tocitem \@locref{ss:c-polyvar}{\begin{@norefs}\@print{23.3.6}\quad{}\label{ss:c-polyvar}Polymorphic variants{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:c-ops-on-values}{\begin{@norefs}\@print{23.4}\quad{}\label{s:c-ops-on-values}Operations on values{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:c-kind-tests}{\begin{@norefs}\@print{23.4.1}\quad{}\label{ss:c-kind-tests}Kind tests{}\end{@norefs}}
\tocitem \@locref{ss:c-int-ops}{\begin{@norefs}\@print{23.4.2}\quad{}\label{ss:c-int-ops}Operations on integers{}\end{@norefs}}
\tocitem \@locref{ss:c-block-access}{\begin{@norefs}\@print{23.4.3}\quad{}\label{ss:c-block-access}Accessing blocks{}\end{@norefs}}
\tocitem \@locref{ss:c-block-allocation}{\begin{@norefs}\@print{23.4.4}\quad{}\label{ss:c-block-allocation}Allocating blocks{}\end{@norefs}}
\tocitem \@locref{ss:c-exceptions}{\begin{@norefs}\@print{23.4.5}\quad{}\label{ss:c-exceptions}Raising exceptions{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:c-gc-harmony}{\begin{@norefs}\@print{23.5}\quad{}\label{s:c-gc-harmony}Living in harmony with the garbage collector{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:c-simple-gc-harmony}{\begin{@norefs}\@print{23.5.1}\quad{}\label{ss:c-simple-gc-harmony}Simple interface{}\end{@norefs}}
\tocitem \@locref{ss:c-low-level-gc-harmony}{\begin{@norefs}\@print{23.5.2}\quad{}\label{ss:c-low-level-gc-harmony}Low-level interface{}\end{@norefs}}
\tocitem \@locref{ss:c-process-pending-actions}{\begin{@norefs}\@print{23.5.3}\quad{}\label{ss:c-process-pending-actions}Pending actions and asynchronous exceptions{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:c-intf-example}{\begin{@norefs}\@print{23.6}\quad{}\label{s:c-intf-example}A complete example{}\end{@norefs}}
\tocitem \@locref{s:c-callback}{\begin{@norefs}\@print{23.7}\quad{}\label{s:c-callback}Advanced topic: callbacks from C to OCaml{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:c-callbacks}{\begin{@norefs}\@print{23.7.1}\quad{}\label{ss:c-callbacks}Applying OCaml closures from C{}\end{@norefs}}
\tocitem \@locref{ss:c-result}{\begin{@norefs}\@print{23.7.2}\quad{}\label{ss:c-result}{\machine{caml{\char95}result}}: resource cleanup on OCaml exceptions{}\end{@norefs}}
\tocitem \@locref{ss:c-closures}{\begin{@norefs}\@print{23.7.3}\quad{}\label{ss:c-closures}Obtaining or registering OCaml closures for use in C functions{}\end{@norefs}}
\tocitem \@locref{ss:c-register-exn}{\begin{@norefs}\@print{23.7.4}\quad{}\label{ss:c-register-exn}Registering OCaml exceptions for use in C functions{}\end{@norefs}}
\tocitem \@locref{ss:main-c}{\begin{@norefs}\@print{23.7.5}\quad{}\label{ss:main-c}Main program in C{}\end{@norefs}}
\tocitem \@locref{ss:c-embedded-code}{\begin{@norefs}\@print{23.7.6}\quad{}\label{ss:c-embedded-code}Embedding the OCaml code in the C code{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:c-advexample}{\begin{@norefs}\@print{23.8}\quad{}\label{s:c-advexample}Advanced example with callbacks{}\end{@norefs}}
\tocitem \@locref{s:c-custom}{\begin{@norefs}\@print{23.9}\quad{}\label{s:c-custom}Advanced topic: custom blocks{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:c-custom-ops}{\begin{@norefs}\@print{23.9.1}\quad{}\label{ss:c-custom-ops}The {\machine{struct\ custom{\char95}operations}}{}\end{@norefs}}
\tocitem \@locref{ss:c-custom-alloc}{\begin{@norefs}\@print{23.9.2}\quad{}\label{ss:c-custom-alloc}Allocating custom blocks{}\end{@norefs}}
\tocitem \@locref{ss:c-custom-access}{\begin{@norefs}\@print{23.9.3}\quad{}\label{ss:c-custom-access}Accessing custom blocks{}\end{@norefs}}
\tocitem \@locref{ss:c-custom-serialization}{\begin{@norefs}\@print{23.9.4}\quad{}\label{ss:c-custom-serialization}Writing custom serialization and deserialization functions{}\end{@norefs}}
\tocitem \@locref{ss:c-custom-idents}{\begin{@norefs}\@print{23.9.5}\quad{}\label{ss:c-custom-idents}Choosing identifiers{}\end{@norefs}}
\tocitem \@locref{ss:c-finalized}{\begin{@norefs}\@print{23.9.6}\quad{}\label{ss:c-finalized}Finalized blocks{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:C-Bigarrays}{\begin{@norefs}\@print{23.10}\quad{}\label{s:C-Bigarrays}Advanced topic: Bigarrays and the OCaml-C interface{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:C-Bigarrays-include}{\begin{@norefs}\@print{23.10.1}\quad{}\label{ss:C-Bigarrays-include}Include file{}\end{@norefs}}
\tocitem \@locref{ss:C-Bigarrays-access}{\begin{@norefs}\@print{23.10.2}\quad{}\label{ss:C-Bigarrays-access}Accessing an OCaml bigarray from C or Fortran{}\end{@norefs}}
\tocitem \@locref{ss:C-Bigarrays-wrap}{\begin{@norefs}\@print{23.10.3}\quad{}\label{ss:C-Bigarrays-wrap}Wrapping a C or Fortran array as an OCaml Bigarray{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:C-cheaper-call}{\begin{@norefs}\@print{23.11}\quad{}\label{s:C-cheaper-call}Advanced topic: cheaper C call{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:c-unboxed}{\begin{@norefs}\@print{23.11.1}\quad{}\label{ss:c-unboxed}Passing unboxed values{}\end{@norefs}}
\tocitem \@locref{ss:c-direct-call}{\begin{@norefs}\@print{23.11.2}\quad{}\label{ss:c-direct-call}Direct C call{}\end{@norefs}}
\tocitem \@locref{ss:c-direct-call-example}{\begin{@norefs}\@print{23.11.3}\quad{}\label{ss:c-direct-call-example}Example: calling C library functions without indirection{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:C-multithreading}{\begin{@norefs}\@print{23.12}\quad{}\label{s:C-multithreading}Advanced topic: multithreading{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:c-thread-register}{\begin{@norefs}\@print{23.12.1}\quad{}\label{ss:c-thread-register}Registering threads created from C{}\end{@norefs}}
\tocitem \@locref{ss:parallel-execution-long-running-c-code}{\begin{@norefs}\@print{23.12.2}\quad{}\label{ss:parallel-execution-long-running-c-code}Parallel execution of long-running C code with systhreads{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:interfacing-windows-unicode-apis}{\begin{@norefs}\@print{23.13}\quad{}\label{s:interfacing-windows-unicode-apis}Advanced topic: interfacing with Windows Unicode APIs{}\end{@norefs}}
\tocitem \@locref{s:ocamlmklib}{\begin{@norefs}\@print{23.14}\quad{}\label{s:ocamlmklib}Building mixed C/OCaml libraries: \texttt{ocamlmklib}{}\end{@norefs}}
\tocitem \@locref{s:c-internal-guidelines}{\begin{@norefs}\@print{23.15}\quad{}\label{s:c-internal-guidelines}Cautionary words: the internal runtime API{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:c-internals}{\begin{@norefs}\@print{23.15.1}\quad{}\label{ss:c-internals}Internal variables and CAML_INTERNALS{}\end{@norefs}}
\tocitem \@locref{ss:c-internal-macros}{\begin{@norefs}\@print{23.15.2}\quad{}\label{ss:c-internal-macros}OCaml version macros{}\end{@norefs}}
\end{tocenv}
\end{tocenv}
\tocitem \@locref{sec597}{\begin{@norefs}\@print{Chapter 24}\quad{}Optimisation with Flambda{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:flambda-overview}{\begin{@norefs}\@print{24.1}\quad{}\label{s:flambda-overview}Overview{}\end{@norefs}}
\tocitem \@locref{s:flambda-cli}{\begin{@norefs}\@print{24.2}\quad{}\label{s:flambda-cli}Command-line flags{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:flambda-rounds}{\begin{@norefs}\@print{24.2.1}\quad{}\label{ss:flambda-rounds}Specification of optimisation parameters by round{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:flambda-inlining}{\begin{@norefs}\@print{24.3}\quad{}\label{s:flambda-inlining}Inlining{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:flambda-classic}{\begin{@norefs}\@print{24.3.1}\quad{}\label{ss:flambda-classic}Classic inlining heuristic{}\end{@norefs}}
\tocitem \@locref{ss:flambda-inlining-overview}{\begin{@norefs}\@print{24.3.2}\quad{}\label{ss:flambda-inlining-overview}Overview of ``Flambda'' inlining heuristics{}\end{@norefs}}
\tocitem \@locref{ss:flambda-by-constructs}{\begin{@norefs}\@print{24.3.3}\quad{}\label{ss:flambda-by-constructs}Handling of specific language constructs{}\end{@norefs}}
\tocitem \@locref{ss:flambda-inlining-reports}{\begin{@norefs}\@print{24.3.4}\quad{}\label{ss:flambda-inlining-reports}Inlining reports{}\end{@norefs}}
\tocitem \@locref{ss:flambda-assessment-inlining}{\begin{@norefs}\@print{24.3.5}\quad{}\label{ss:flambda-assessment-inlining}Assessment of inlining benefit{}\end{@norefs}}
\tocitem \@locref{ss:flambda-speculation}{\begin{@norefs}\@print{24.3.6}\quad{}\label{ss:flambda-speculation}Control of speculation{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:flambda-specialisation}{\begin{@norefs}\@print{24.4}\quad{}\label{s:flambda-specialisation}Specialisation{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:flambda-assessment-specialisation}{\begin{@norefs}\@print{24.4.1}\quad{}\label{ss:flambda-assessment-specialisation}Assessment of specialisation benefit{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:flambda-defaults}{\begin{@norefs}\@print{24.5}\quad{}\label{s:flambda-defaults}Default settings of parameters{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:flambda-o2}{\begin{@norefs}\@print{24.5.1}\quad{}\label{ss:flambda-o2}Settings at -O2 optimisation level{}\end{@norefs}}
\tocitem \@locref{ss:flambda-o3}{\begin{@norefs}\@print{24.5.2}\quad{}\label{ss:flambda-o3}Settings at -O3 optimisation level{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:flambda-manual-control}{\begin{@norefs}\@print{24.6}\quad{}\label{s:flambda-manual-control}Manual control of inlining and specialisation{}\end{@norefs}}
\tocitem \@locref{s:flambda-simplification}{\begin{@norefs}\@print{24.7}\quad{}\label{s:flambda-simplification}Simplification{}\end{@norefs}}
\tocitem \@locref{s:flambda-other-transfs}{\begin{@norefs}\@print{24.8}\quad{}\label{s:flambda-other-transfs}Other code motion transformations{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:flambda-lift-const}{\begin{@norefs}\@print{24.8.1}\quad{}\label{ss:flambda-lift-const}Lifting of constants{}\end{@norefs}}
\tocitem \@locref{ss:flambda-lift-toplevel-let}{\begin{@norefs}\@print{24.8.2}\quad{}\label{ss:flambda-lift-toplevel-let}Lifting of toplevel let bindings{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:flambda-unboxing}{\begin{@norefs}\@print{24.9}\quad{}\label{s:flambda-unboxing}Unboxing transformations{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:flambda-unbox-fvs}{\begin{@norefs}\@print{24.9.1}\quad{}\label{ss:flambda-unbox-fvs}Unboxing of closure variables{}\end{@norefs}}
\tocitem \@locref{ss:flambda-unbox-spec-args}{\begin{@norefs}\@print{24.9.2}\quad{}\label{ss:flambda-unbox-spec-args}Unboxing of specialised arguments{}\end{@norefs}}
\tocitem \@locref{ss:flambda-unbox-closures}{\begin{@norefs}\@print{24.9.3}\quad{}\label{ss:flambda-unbox-closures}Unboxing of closures{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:flambda-remove-unused}{\begin{@norefs}\@print{24.10}\quad{}\label{s:flambda-remove-unused}Removal of unused code and values{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:flambda-redundant-let}{\begin{@norefs}\@print{24.10.1}\quad{}\label{ss:flambda-redundant-let}Removal of redundant let expressions{}\end{@norefs}}
\tocitem \@locref{ss:flambda-redundant}{\begin{@norefs}\@print{24.10.2}\quad{}\label{ss:flambda-redundant}Removal of redundant program constructs{}\end{@norefs}}
\tocitem \@locref{ss:flambda-remove-unused-args}{\begin{@norefs}\@print{24.10.3}\quad{}\label{ss:flambda-remove-unused-args}Removal of unused arguments{}\end{@norefs}}
\tocitem \@locref{ss:flambda-removal-closure-vars}{\begin{@norefs}\@print{24.10.4}\quad{}\label{ss:flambda-removal-closure-vars}Removal of unused closure variables{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:flambda-other}{\begin{@norefs}\@print{24.11}\quad{}\label{s:flambda-other}Other code transformations{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:flambda-non-escaping-refs}{\begin{@norefs}\@print{24.11.1}\quad{}\label{ss:flambda-non-escaping-refs}Transformation of non-escaping references into mutable variables{}\end{@norefs}}
\tocitem \@locref{ss:flambda-subst-closure-vars}{\begin{@norefs}\@print{24.11.2}\quad{}\label{ss:flambda-subst-closure-vars}Substitution of closure variables for specialised arguments{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:flambda-effects}{\begin{@norefs}\@print{24.12}\quad{}\label{s:flambda-effects}Treatment of effects{}\end{@norefs}}
\tocitem \@locref{s:flambda-static-modules}{\begin{@norefs}\@print{24.13}\quad{}\label{s:flambda-static-modules}Compilation of statically-allocated modules{}\end{@norefs}}
\tocitem \@locref{s:flambda-inhibition}{\begin{@norefs}\@print{24.14}\quad{}\label{s:flambda-inhibition}Inhibition of optimisation{}\end{@norefs}}
\tocitem \@locref{s:flambda-unsafe}{\begin{@norefs}\@print{24.15}\quad{}\label{s:flambda-unsafe}Use of unsafe operations{}\end{@norefs}}
\tocitem \@locref{s:flambda-glossary}{\begin{@norefs}\@print{24.16}\quad{}\label{s:flambda-glossary}Glossary{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{sec648}{\begin{@norefs}\@print{Chapter 25}\quad{}Fuzzing with afl-fuzz{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:afl-overview}{\begin{@norefs}\@print{25.1}\quad{}\label{s:afl-overview}Overview{}\end{@norefs}}
\tocitem \@locref{s:afl-generate}{\begin{@norefs}\@print{25.2}\quad{}\label{s:afl-generate}Generating instrumentation{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{ss:afl-advanced}{\begin{@norefs}\@print{25.2.1}\quad{}\label{ss:afl-advanced}Advanced options{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:afl-example}{\begin{@norefs}\@print{25.3}\quad{}\label{s:afl-example}Example{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{sec653}{\begin{@norefs}\@print{Chapter 26}\quad{}Runtime tracing with runtime events{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:runtime-tracing-overview}{\begin{@norefs}\@print{26.1}\quad{}\label{s:runtime-tracing-overview}Overview{}\end{@norefs}}
\tocitem \@locref{s:runtime-tracing-architecture}{\begin{@norefs}\@print{26.2}\quad{}\label{s:runtime-tracing-architecture}Architecture{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:runtime-tracing-event-sources}{\begin{@norefs}\@print{26.2.1}\quad{}\label{s:runtime-tracing-event-sources}Event sources{}\end{@norefs}}
\tocitem \@locref{s:runtime-tracing-ingestion}{\begin{@norefs}\@print{26.2.2}\quad{}\label{s:runtime-tracing-ingestion}Events transport{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:runtime-tracing-usage}{\begin{@norefs}\@print{26.3}\quad{}\label{s:runtime-tracing-usage}Usage{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:runtime-tracing-ocaml-apis}{\begin{@norefs}\@print{26.3.1}\quad{}\label{s:runtime-tracing-ocaml-apis}With OCaml APIs{}\end{@norefs}}
\tocitem \@locref{s:runtime-tracing-tooling}{\begin{@norefs}\@print{26.3.2}\quad{}\label{s:runtime-tracing-tooling}With tooling{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{s:runtime-tracing-custom-events}{\begin{@norefs}\@print{26.4}\quad{}\label{s:runtime-tracing-custom-events}Custom events{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:runtime-tracing-custom-events-overview}{\begin{@norefs}\@print{26.4.1}\quad{}\label{s:runtime-tracing-custom-events-overview}Overview{}\end{@norefs}}
\tocitem \@locref{s:runtime-tracing-custom-events-usage}{\begin{@norefs}\@print{26.4.2}\quad{}\label{s:runtime-tracing-custom-events-usage}Tracing custom events: an
example{}\end{@norefs}}
\end{tocenv}
\end{tocenv}
\tocitem \@locref{sec669}{\begin{@norefs}\@print{Chapter 27}\quad{}The ``Tail Modulo Constructor'' program transformation{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{sec:disambiguation}{\begin{@norefs}\@print{27.1}\quad{}\label{sec:disambiguation}Disambiguation{}\end{@norefs}}
\tocitem \@locref{sec:out-of-tmc}{\begin{@norefs}\@print{27.2}\quad{}\label{sec:out-of-tmc}Danger: getting out of tail-mod-cons{}\end{@norefs}}
\tocitem \@locref{sec:details}{\begin{@norefs}\@print{27.3}\quad{}\label{sec:details}Details on the transformation{}\end{@norefs}}
\tocitem \@locref{sec:limitations}{\begin{@norefs}\@print{27.4}\quad{}\label{sec:limitations}Current limitations{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{sec682}{\begin{@norefs}\@print{Chapter 28}\quad{}Runtime detection of data races with ThreadSanitizer{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:tsan-overview}{\begin{@norefs}\@print{28.1}\quad{}\label{s:tsan-overview}Overview and usage{}\end{@norefs}}
\tocitem \@locref{s:tsan-performance}{\begin{@norefs}\@print{28.2}\quad{}\label{s:tsan-performance}Performance implications{}\end{@norefs}}
\tocitem \@locref{s:tsan-false-neg-false-pos}{\begin{@norefs}\@print{28.3}\quad{}\label{s:tsan-false-neg-false-pos}False negatives and false positives{}\end{@norefs}}
\tocitem \@locref{s:tsan-runtime-flags}{\begin{@norefs}\@print{28.4}\quad{}\label{s:tsan-runtime-flags}Runtime options{}\end{@norefs}}
\tocitem \@locref{s:tsan-c-code}{\begin{@norefs}\@print{28.5}\quad{}\label{s:tsan-c-code}Guidelines for linking{}\end{@norefs}}
\tocitem \@locref{s:tsan-signal-changes}{\begin{@norefs}\@print{28.6}\quad{}\label{s:tsan-signal-changes}Changes in the delivery of signals{}\end{@norefs}}
\end{tocenv}
\end{tocenv}
\tocitem \@locref{sec689}{\begin{@norefs}\@print{Part IV}\quad{}The OCaml library{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{sec690}{\begin{@norefs}\@print{Chapter 29}\quad{}The core library{}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:core-builtins}{\begin{@norefs}\@print{29.1}\quad{}\label{s:core-builtins}Built-in types and predefined exceptions{}\end{@norefs}}
\tocitem \@locref{s:stdlib-module}{\begin{@norefs}\@print{29.2}\quad{}\label{s:stdlib-module}Module {\tt Stdlib}: the initially opened module{}\end{@norefs}}
\end{tocenv}
\tocitem \@locref{sec695}{\begin{@norefs}\@print{Chapter 30}\quad{}The standard library{}\end{@norefs}}
\tocitem \@locref{sec696}{\begin{@norefs}\@print{Chapter 31}\quad{}The compiler front-end{}\end{@norefs}}
\tocitem \@locref{sec697}{\begin{@norefs}\@print{Chapter 32}\quad{}The unix library: Unix system calls{}\end{@norefs}}
\tocitem \@locref{sec698}{\begin{@norefs}\@print{Chapter 33}\quad{}The str library: regular expressions and string processing{}\end{@norefs}}
\tocitem \@locref{sec699}{\begin{@norefs}\@print{Chapter 34}\quad{}The runtime_events library{}\end{@norefs}}
\tocitem \@locref{sec700}{\begin{@norefs}\@print{Chapter 35}\quad{}The threads library{}\end{@norefs}}
\tocitem \@locref{sec701}{\begin{@norefs}\@print{Chapter 36}\quad{}The dynlink library: dynamic loading and linking of object files{}\end{@norefs}}
\tocitem \@locref{sec702}{\begin{@norefs}\@print{Chapter 37}\quad{}Recently removed or moved libraries (Graphics, Bigarray, Num, LablTk){}\end{@norefs}}
\begin{tocenv}
\tocitem \@locref{s:graphics-removed}{\begin{@norefs}\@print{37.1}\quad{}\label{s:graphics-removed}The Graphics Library{}\end{@norefs}}
\tocitem \@locref{s:bigarray-moved}{\begin{@norefs}\@print{37.2}\quad{}\label{s:bigarray-moved}The Bigarray Library{}\end{@norefs}}
\tocitem \@locref{sec705}{\begin{@norefs}\@print{37.3}\quad{}\label{s:graphics-removed}The Num Library{}\end{@norefs}}
\tocitem \@locref{s:labltk-removed}{\begin{@norefs}\@print{37.4}\quad{}\label{s:labltk-removed}The Labltk Library and OCamlBrowser{}\end{@norefs}}
\end{tocenv}
\end{tocenv}
\tocitem \@locref{sec707}{\begin{@norefs}\@print{Part V}\quad{}Indexes{}\end{@norefs}}
\end{tocenv}
