\@addtocsec{htoc}{1}{-2}{\@print{Part I}\quad{}An introduction to Objective Caml} \newlabel{p:tutorials}{{I}{X}} \@addtocsec{htoc}{2}{-1}{\@print{Chapter 1}\quad{}The core language} \newlabel{c:core-xamples}{{1}{X}} \@addtocsec{htoc}{3}{0}{\@print{1.1}\quad{}Basics} \@addtocsec{htoc}{4}{0}{\@print{1.2}\quad{}Data types} \@addtocsec{htoc}{5}{0}{\@print{1.3}\quad{}Functions as values} \@addtocsec{htoc}{6}{0}{\@print{1.4}\quad{}Records and variants} \newlabel{s:tut-recvariants}{{1.4}{X}} \@addtocsec{htoc}{7}{0}{\@print{1.5}\quad{}Imperative features} \@addtocsec{htoc}{8}{0}{\@print{1.6}\quad{}Exceptions} \@addtocsec{htoc}{9}{0}{\@print{1.7}\quad{}Symbolic processing of expressions} \@addtocsec{htoc}{10}{0}{\@print{1.8}\quad{}Pretty-printing and parsing} \@addtocsec{htoc}{11}{0}{\@print{1.9}\quad{}Standalone Caml programs} \@addtocsec{htoc}{12}{-1}{\@print{Chapter 2}\quad{}The module system} \newlabel{c:moduleexamples}{{2}{X}} \@addtocsec{htoc}{13}{0}{\@print{2.1}\quad{}Structures} \@addtocsec{htoc}{14}{0}{\@print{2.2}\quad{}Signatures} \@addtocsec{htoc}{15}{0}{\@print{2.3}\quad{}Functors} \@addtocsec{htoc}{16}{0}{\@print{2.4}\quad{}Functors and type abstraction} \@addtocsec{htoc}{17}{0}{\@print{2.5}\quad{}Modules and separate compilation} \@addtocsec{htoc}{18}{-1}{\@print{Chapter 3}\quad{}Objects in Caml} \newlabel{c:objectexamples}{{3}{X}} \@addtocsec{htoc}{19}{0}{\@print{3.1}\quad{}Classes and objects} \newlabel{ss:classes-and-objects}{{3.1}{X}} \@addtocsec{htoc}{20}{0}{\@print{3.2}\quad{}Immediate objects} \newlabel{ss:immediate-objects}{{3.2}{X}} \@addtocsec{htoc}{21}{0}{\@print{3.3}\quad{}Reference to self} \newlabel{ss:reference-to-self}{{3.3}{X}} \@addtocsec{htoc}{22}{0}{\@print{3.4}\quad{}Initializers} \newlabel{ss:initializers}{{3.4}{X}} \@addtocsec{htoc}{23}{0}{\@print{3.5}\quad{}Virtual methods} \newlabel{ss:virtual-methods}{{3.5}{X}} \@addtocsec{htoc}{24}{0}{\@print{3.6}\quad{}Private methods} \newlabel{ss:private-methods}{{3.6}{X}} \@addtocsec{htoc}{25}{0}{\@print{3.7}\quad{}Class interfaces} \newlabel{ss:class-interfaces}{{3.7}{X}} \@addtocsec{htoc}{26}{0}{\@print{3.8}\quad{}Inheritance} \newlabel{ss:inheritance}{{3.8}{X}} \@addtocsec{htoc}{27}{0}{\@print{3.9}\quad{}Multiple inheritance} \newlabel{ss:multiple-inheritance}{{3.9}{X}} \@addtocsec{htoc}{28}{0}{\@print{3.10}\quad{}Parameterized classes} \newlabel{ss:parameterized-classes}{{3.10}{X}} \@addtocsec{htoc}{29}{0}{\@print{3.11}\quad{}Polymorphic methods} \newlabel{ss:polymorphic-methods}{{3.11}{X}} \@addtocsec{htoc}{30}{0}{\@print{3.12}\quad{}Using coercions} \newlabel{ss:using-coercions}{{3.12}{X}} \@addtocsec{htoc}{31}{0}{\@print{3.13}\quad{}Functional objects} \newlabel{ss:functional-objects}{{3.13}{X}} \@addtocsec{htoc}{32}{0}{\@print{3.14}\quad{}Cloning objects} \newlabel{ss:cloning-objects}{{3.14}{X}} \@addtocsec{htoc}{33}{0}{\@print{3.15}\quad{}Recursive classes} \newlabel{ss:recursive-classes}{{3.15}{X}} \@addtocsec{htoc}{34}{0}{\@print{3.16}\quad{}Binary methods} \newlabel{ss:binary-methods}{{3.16}{X}} \@addtocsec{htoc}{35}{0}{\@print{3.17}\quad{}Friends} \newlabel{ss:friends}{{3.17}{X}} \@addtocsec{htoc}{36}{-1}{\@print{Chapter 4}\quad{}Labels and variants} \newlabel{c:labl-examples}{{4}{X}} \@addtocsec{htoc}{37}{0}{\@print{4.1}\quad{}Labels} \@addtocsec{htoc}{38}{1}{\@print{4.1.1}\quad{}Optional arguments} \@addtocsec{htoc}{39}{1}{\@print{4.1.2}\quad{}Labels and type inference} \newlabel{ss:label-inference}{{4.1.2}{X}} \@addtocsec{htoc}{40}{1}{\@print{4.1.3}\quad{}Suggestions for labeling} \@addtocsec{htoc}{41}{0}{\@print{4.2}\quad{}Polymorphic variants} \@addtocsec{htoc}{42}{1}{\@print{4.2.1}\quad{}Weaknesses of polymorphic variants} \@addtocsec{htoc}{43}{-1}{\@print{Chapter 5}\quad{}Advanced examples with classes and modules} \@addtocsec{htoc}{44}{0}{\@print{5.1}\quad{}Extended example: bank accounts} \newlabel{ss:bank-accounts}{{5.1}{X}} \@addtocsec{htoc}{45}{0}{\@print{5.2}\quad{}Simple modules as classes} \newlabel{ss:modules-as-classes}{{5.2}{X}} \@addtocsec{htoc}{46}{1}{\@print{5.2.1}\quad{}Strings} \newlabel{module:string}{{5.2.1}{X}} \newlabel{module:stack}{{5.2.1}{X}} \@addtocsec{htoc}{47}{1}{\@print{5.2.2}\quad{}Hashtbl} \newlabel{module:hashtbl}{{5.2.2}{X}} \@addtocsec{htoc}{48}{1}{\@print{5.2.3}\quad{}Sets} \newlabel{module:set}{{5.2.3}{X}} \@addtocsec{htoc}{49}{0}{\@print{5.3}\quad{}The subject/observer pattern} \newlabel{ss:subject-observer}{{5.3}{X}} \@addtocsec{htoc}{50}{-2}{\@print{Part II}\quad{}The Objective Caml language} \newlabel{p:refman}{{II}{X}} \@addtocsec{htoc}{51}{-1}{\@print{Chapter 6}\quad{}The Objective Caml language} \newlabel{c:refman}{{6}{X}} \@addtocsec{htoc}{52}{0}{\@print{6.1}\quad{}Lexical conventions} \stx@exists{ident}\stx@exists{letter}\stx@exists{integer-literal}\stx@exists{float-literal}\newlabel{s:characterliteral}{{6.1}{X}} \stx@exists{char-literal}\stx@exists{escape-sequence}\newlabel{s:stringliteral}{{6.1}{X}} \stx@exists{string-literal}\stx@exists{string-character}\stx@exists{label-name}\stx@exists{label}\stx@exists{optlabel}\stx@exists{infix-symbol}\stx@exists{prefix-symbol}\stx@exists{operator-char}\stx@exists{linenum-directive}\@addtocsec{htoc}{53}{0}{\@print{6.2}\quad{}Values} \@addtocsec{htoc}{54}{1}{\@print{6.2.1}\quad{}Base values} \newlabel{s:string-val}{{6.2.1}{X}} \@addtocsec{htoc}{55}{1}{\@print{6.2.2}\quad{}Tuples} \@addtocsec{htoc}{56}{1}{\@print{6.2.3}\quad{}Records} \@addtocsec{htoc}{57}{1}{\@print{6.2.4}\quad{}Arrays} \@addtocsec{htoc}{58}{1}{\@print{6.2.5}\quad{}Variant values} \@addtocsec{htoc}{59}{1}{\@print{6.2.6}\quad{}Polymorphic variants} \@addtocsec{htoc}{60}{1}{\@print{6.2.7}\quad{}Functions} \@addtocsec{htoc}{61}{1}{\@print{6.2.8}\quad{}Objects} \@addtocsec{htoc}{62}{0}{\@print{6.3}\quad{}Names} \newlabel{s:names}{{6.3}{X}} \stx@exists{value-name}\stx@exists{operator-name}\stx@exists{infix-op}\stx@exists{constr-name}\stx@exists{tag-name}\stx@exists{typeconstr-name}\stx@exists{field-name}\stx@exists{module-name}\stx@exists{modtype-name}\stx@exists{class-name}\stx@exists{inst-var-name}\stx@exists{method-name}\stx@exists{value-path}\stx@exists{constr}\stx@exists{typeconstr}\stx@exists{field}\stx@exists{module-path}\stx@exists{extended-module-path}\stx@exists{modtype-path}\stx@exists{class-path}\@addtocsec{htoc}{63}{0}{\@print{6.4}\quad{}Type expressions} \stx@exists{typexpr}\stx@exists{poly-typexpr}\stx@exists{method-type}\stx@exists{variant-type}\stx@exists{tag-spec}\stx@exists{tag-spec-full}\newlabel{s:sharp-types}{{6.4}{X}} \@addtocsec{htoc}{64}{0}{\@print{6.5}\quad{}Constants} \stx@exists{constant}\@addtocsec{htoc}{65}{0}{\@print{6.6}\quad{}Patterns} \stx@exists{pattern}\@addtocsec{htoc}{66}{0}{\@print{6.7}\quad{}Expressions\label{s:value-expr}} \newlabel{s:value-expr}{{6.7}{X}} \stx@exists{expr}\stx@exists{argument}\stx@exists{pattern-matching}\stx@exists{multiple-matching}\stx@exists{let-binding}\stx@exists{parameter}\@addtocsec{htoc}{67}{1}{\@print{6.7.1}\quad{}Basic expressions} \newlabel{expr:var}{{6.7.1}{X}} \newlabel{s:localdef}{{6.7.1}{X}} \@addtocsec{htoc}{68}{1}{\@print{6.7.2}\quad{}Control structures} \@addtocsec{htoc}{69}{1}{\@print{6.7.3}\quad{}Operations on data structures} \@addtocsec{htoc}{70}{1}{\@print{6.7.4}\quad{}Operators} \@addtocsec{htoc}{71}{1}{\@print{6.7.5}\quad{}Objects} \newlabel{s:objects}{{6.7.5}{X}} \@addtocsec{htoc}{72}{1}{\@print{6.7.6}\quad{}Coercions} \newlabel{s:coercions}{{6.7.6}{X}} \@addtocsec{htoc}{73}{0}{\@print{6.8}\quad{}Type and exception definitions} \@addtocsec{htoc}{74}{1}{\@print{6.8.1}\quad{}Type definitions} \newlabel{s:type-defs}{{6.8.1}{X}} \stx@exists{type-definition}\stx@exists{typedef}\stx@exists{type-information}\stx@exists{type-equation}\stx@exists{type-representation}\stx@exists{type-params}\stx@exists{type-param}\stx@exists{constr-decl}\stx@exists{field-decl}\stx@exists{type-constraint}\@addtocsec{htoc}{75}{1}{\@print{6.8.2}\quad{}Exception definitions} \newlabel{s:excdef}{{6.8.2}{X}} \stx@exists{exception-definition}\@addtocsec{htoc}{76}{0}{\@print{6.9}\quad{}Classes} \@addtocsec{htoc}{77}{1}{\@print{6.9.1}\quad{}Class types} \stx@exists{class-type}\stx@exists{class-body-type}\stx@exists{class-field-spec}\newlabel{sec-methspec}{{6.9.1}{X}} \@addtocsec{htoc}{78}{1}{\@print{6.9.2}\quad{}Class expressions} \stx@exists{class-expr}\stx@exists{class-field}\newlabel{ss:class-body}{{6.9.2}{X}} \stx@exists{class-body}\@addtocsec{htoc}{79}{1}{\@print{6.9.3}\quad{}Class definitions} \newlabel{s:classdef}{{6.9.3}{X}} \stx@exists{class-definition}\stx@exists{class-binding}\stx@exists{type-parameters}\@addtocsec{htoc}{80}{1}{\@print{6.9.4}\quad{}Class specification} \newlabel{s:class-spec}{{6.9.4}{X}} \stx@exists{class-specification}\stx@exists{class-spec}\@addtocsec{htoc}{81}{1}{\@print{6.9.5}\quad{}Class type definitions} \newlabel{s:classtype}{{6.9.5}{X}} \stx@exists{classtype-definition}\stx@exists{classtype-def}\@addtocsec{htoc}{82}{0}{\@print{6.10}\quad{}Module types (module specifications)} \stx@exists{module-type}\stx@exists{mod-constraint}\stx@exists{specification}\@addtocsec{htoc}{83}{1}{\@print{6.10.1}\quad{}Simple module types} \@addtocsec{htoc}{84}{1}{\@print{6.10.2}\quad{}Signatures} \@addtocsec{htoc}{85}{1}{\@print{6.10.3}\quad{}Functor types} \@addtocsec{htoc}{86}{1}{\@print{6.10.4}\quad{}The {\machine with} operator} \@addtocsec{htoc}{87}{0}{\@print{6.11}\quad{}Module\label{s:module-expr} expressions (module implementations)} \newlabel{s:module-expr}{{6.11}{X}} \stx@exists{module-expr}\stx@exists{definition}\@addtocsec{htoc}{88}{1}{\@print{6.11.1}\quad{}Simple module expressions} \@addtocsec{htoc}{89}{1}{\@print{6.11.2}\quad{}Structures} \@addtocsec{htoc}{90}{1}{\@print{6.11.3}\quad{}Functors} \@addtocsec{htoc}{91}{0}{\@print{6.12}\quad{}Compilation units} \stx@exists{unit-interface}\stx@exists{unit-implementation}\@addtocsec{htoc}{92}{-1}{\@print{Chapter 7}\quad{}Language extensions} \newlabel{c:extensions}{{7}{X}} \@addtocsec{htoc}{93}{0}{\@print{7.1}\quad{}Integer literals for types {\machine int32}, {\machine int64} and {\machine nativeint}} \stx@exists{int32-literal}\stx@exists{int64-literal}\stx@exists{nativeint-literal}\@addtocsec{htoc}{94}{0}{\@print{7.2}\quad{}Streams and stream parsers} \newlabel{s:streams}{{7.2}{X}} \@addtocsec{htoc}{95}{0}{\@print{7.3}\quad{}Recursive definitions of values} \newlabel{s:letrecvalues}{{7.3}{X}} \@addtocsec{htoc}{96}{0}{\@print{7.4}\quad{}Range patterns} \@addtocsec{htoc}{97}{0}{\@print{7.5}\quad{}Assertion checking} \@addtocsec{htoc}{98}{0}{\@print{7.6}\quad{}Lazy evaluation} \@addtocsec{htoc}{99}{0}{\@print{7.7}\quad{}Local modules} \@addtocsec{htoc}{100}{0}{\@print{7.8}\quad{}Recursive modules} \newlabel{s-recursive-modules}{{7.8}{X}} \@addtocsec{htoc}{101}{0}{\@print{7.9}\quad{}Private types} \@addtocsec{htoc}{102}{1}{\@print{7.9.1}\quad{}Private variant and record types} \newlabel{s-private-types-variant}{{7.9.1}{X}} \@addtocsec{htoc}{103}{1}{\@print{7.9.2}\quad{}Private type abbreviations} \newlabel{s-private-types-abbrev}{{7.9.2}{X}} \@addtocsec{htoc}{104}{1}{\@print{7.9.3}\quad{}Private row types} \newlabel{s-private-rows}{{7.9.3}{X}} \@addtocsec{htoc}{105}{-2}{\@print{Part III}\quad{}The Objective Caml tools} \newlabel{p:commands}{{III}{X}} \@addtocsec{htoc}{106}{-1}{\@print{Chapter 8}\quad{}Batch compilation (ocamlc)} \newlabel{c:camlc}{{8}{X}} \@addtocsec{htoc}{107}{0}{\@print{8.1}\quad{}Overview of the compiler} \@addtocsec{htoc}{108}{0}{\@print{8.2}\quad{}Options} \newlabel{s:comp-options}{{8.2}{X}} \@addtocsec{htoc}{109}{0}{\@print{8.3}\quad{}Modules and the file system} \@addtocsec{htoc}{110}{0}{\@print{8.4}\quad{}Common errors} \newlabel{s:comp-errors}{{8.4}{X}} \@addtocsec{htoc}{111}{-1}{\@print{Chapter 9}\quad{}The toplevel system (ocaml)} \newlabel{c:camllight}{{9}{X}} \stx@exists{toplevel-input}\stx@exists{toplevel-phrase}\stx@exists{directive-argument}\@addtocsec{htoc}{112}{0}{\@print{9.1}\quad{}Options} \newlabel{s:toplevel-options}{{9.1}{X}} \@addtocsec{htoc}{113}{0}{\@print{9.2}\quad{}Toplevel directives} \newlabel{s:toplevel-directives}{{9.2}{X}} \@addtocsec{htoc}{114}{0}{\@print{9.3}\quad{}The toplevel and the module system} \newlabel{s:toplevel-modules}{{9.3}{X}} \@addtocsec{htoc}{115}{0}{\@print{9.4}\quad{}Common errors} \@addtocsec{htoc}{116}{0}{\@print{9.5}\quad{}Building custom toplevel systems: {\machine ocamlmktop}} \@addtocsec{htoc}{117}{0}{\@print{9.6}\quad{}Options} \@addtocsec{htoc}{118}{-1}{\@print{Chapter 10}\quad{}The runtime system (ocamlrun)} \newlabel{c:runtime}{{10}{X}} \@addtocsec{htoc}{119}{0}{\@print{10.1}\quad{}Overview} \@addtocsec{htoc}{120}{0}{\@print{10.2}\quad{}Options} \newlabel{ocamlrun-options}{{10.2}{X}} \@addtocsec{htoc}{121}{0}{\@print{10.3}\quad{}Dynamic loading of shared libraries} \newlabel{s-ocamlrun-dllpath}{{10.3}{X}} \@addtocsec{htoc}{122}{0}{\@print{10.4}\quad{}Common errors} \@addtocsec{htoc}{123}{-1}{\@print{Chapter 11}\quad{}Native-code compilation (ocamlopt)} \newlabel{c:nativecomp}{{11}{X}} \@addtocsec{htoc}{124}{0}{\@print{11.1}\quad{}Overview of the compiler} \@addtocsec{htoc}{125}{0}{\@print{11.2}\quad{}Options} \@addtocsec{htoc}{126}{0}{\@print{11.3}\quad{}Common errors} \@addtocsec{htoc}{127}{0}{\@print{11.4}\quad{}Running executables produced by ocamlopt} \@addtocsec{htoc}{128}{0}{\@print{11.5}\quad{}Compatibility with the bytecode compiler} \newlabel{s:compat-native-bytecode}{{11.5}{X}} \@addtocsec{htoc}{129}{-1}{\@print{Chapter 12}\quad{}Lexer and parser generators (ocamllex, ocamlyacc)} \newlabel{c:ocamlyacc}{{12}{X}} \@addtocsec{htoc}{130}{0}{\@print{12.1}\quad{}Overview of {\machine ocamllex}} \@addtocsec{htoc}{131}{1}{\@print{12.1.1}\quad{}Options} \@addtocsec{htoc}{132}{0}{\@print{12.2}\quad{}Syntax of lexer definitions} \@addtocsec{htoc}{133}{1}{\@print{12.2.1}\quad{}Header and trailer} \@addtocsec{htoc}{134}{1}{\@print{12.2.2}\quad{}Naming regular expressions} \@addtocsec{htoc}{135}{1}{\@print{12.2.3}\quad{}Entry points} \@addtocsec{htoc}{136}{1}{\@print{12.2.4}\quad{}Regular expressions} \stx@exists{regexp}\@addtocsec{htoc}{137}{1}{\@print{12.2.5}\quad{}Actions} \@addtocsec{htoc}{138}{1}{\@print{12.2.6}\quad{}Variables in regular expressions} \@addtocsec{htoc}{139}{1}{\@print{12.2.7}\quad{}Reserved identifiers} \@addtocsec{htoc}{140}{0}{\@print{12.3}\quad{}Overview of {\machine ocamlyacc}} \@addtocsec{htoc}{141}{0}{\@print{12.4}\quad{}Syntax of grammar definitions} \@addtocsec{htoc}{142}{1}{\@print{12.4.1}\quad{}Header and trailer} \@addtocsec{htoc}{143}{1}{\@print{12.4.2}\quad{}Declarations} \@addtocsec{htoc}{144}{1}{\@print{12.4.3}\quad{}Rules} \@addtocsec{htoc}{145}{1}{\@print{12.4.4}\quad{}Error handling} \@addtocsec{htoc}{146}{0}{\@print{12.5}\quad{}Options} \@addtocsec{htoc}{147}{0}{\@print{12.6}\quad{}A complete example} \@addtocsec{htoc}{148}{0}{\@print{12.7}\quad{}Common errors} \@addtocsec{htoc}{149}{-1}{\@print{Chapter 13}\quad{}Dependency generator (ocamldep)} \newlabel{c:camldep}{{13}{X}} \@addtocsec{htoc}{150}{0}{\@print{13.1}\quad{}Options} \@addtocsec{htoc}{151}{0}{\@print{13.2}\quad{}A typical Makefile} \@addtocsec{htoc}{152}{-1}{\@print{Chapter 14}\quad{}The browser/editor (ocamlbrowser)} \newlabel{c:browser}{{14}{X}} \@addtocsec{htoc}{153}{0}{\@print{14.1}\quad{}Invocation} \newlabel{s:browser-options}{{14.1}{X}} \@addtocsec{htoc}{154}{0}{\@print{14.2}\quad{}Viewer} \@addtocsec{htoc}{155}{0}{\@print{14.3}\quad{}Module browsing} \@addtocsec{htoc}{156}{0}{\@print{14.4}\quad{}File editor} \@addtocsec{htoc}{157}{0}{\@print{14.5}\quad{}Shell} \@addtocsec{htoc}{158}{-1}{\@print{Chapter 15}\quad{}The documentation generator (ocamldoc)} \newlabel{c:ocamldoc}{{15}{X}} \@addtocsec{htoc}{159}{0}{\@print{15.1}\quad{}Usage} \newlabel{s:ocamldoc-usage}{{15.1}{X}} \@addtocsec{htoc}{160}{1}{\@print{15.1.1}\quad{}Invocation} \@addtocsec{htoc}{161}{1}{\@print{15.1.2}\quad{}Merging of module information} \newlabel{s:ocamldoc-merge}{{15.1.2}{X}} \@addtocsec{htoc}{162}{1}{\@print{15.1.3}\quad{}Coding rules} \newlabel{s:ocamldoc-rules}{{15.1.3}{X}} \@addtocsec{htoc}{163}{0}{\@print{15.2}\quad{}Syntax of documentation comments} \newlabel{s:ocamldoc-comments}{{15.2}{X}} \@addtocsec{htoc}{164}{1}{\@print{15.2.1}\quad{}Placement of documentation comments} \@addtocsec{htoc}{165}{1}{\@print{15.2.2}\quad{}The Stop special comment} \@addtocsec{htoc}{166}{1}{\@print{15.2.3}\quad{}Syntax of documentation comments} \@addtocsec{htoc}{167}{1}{\@print{15.2.4}\quad{}Text formatting} \@addtocsec{htoc}{168}{1}{\@print{15.2.5}\quad{}Documentation tags (@-tags)} \newlabel{s:ocamldoc-tags}{{15.2.5}{X}} \newlabel{s:ocamldoc-custom-tags}{{15.2.5}{X}} \@addtocsec{htoc}{169}{0}{\@print{15.3}\quad{}Custom generators} \newlabel{s:ocamldoc-custom-generators}{{15.3}{X}} \@addtocsec{htoc}{170}{1}{\@print{15.3.1}\quad{}The generator class} \@addtocsec{htoc}{171}{1}{\@print{15.3.2}\quad{}Handling custom tags} \newlabel{s:ocamldoc-handling-custom-tags}{{15.3.2}{X}} \@addtocsec{htoc}{172}{0}{\@print{15.4}\quad{}Adding command line options} \@addtocsec{htoc}{173}{1}{\@print{15.4.1}\quad{}Compilation and usage} \newlabel{s:ocamldoc-compilation-and-usage}{{15.4.1}{X}} \@addtocsec{htoc}{174}{-1}{\@print{Chapter 16}\quad{}The debugger (ocamldebug)} \newlabel{c:debugger}{{16}{X}} \@addtocsec{htoc}{175}{0}{\@print{16.1}\quad{}Compiling for debugging} \@addtocsec{htoc}{176}{0}{\@print{16.2}\quad{}Invocation} \@addtocsec{htoc}{177}{1}{\@print{16.2.1}\quad{}Starting the debugger} \@addtocsec{htoc}{178}{1}{\@print{16.2.2}\quad{}Exiting the debugger} \@addtocsec{htoc}{179}{0}{\@print{16.3}\quad{}Commands} \newlabel{s:debugger-commands}{{16.3}{X}} \@addtocsec{htoc}{180}{1}{\@print{16.3.1}\quad{}Getting help} \@addtocsec{htoc}{181}{1}{\@print{16.3.2}\quad{}Accessing the debugger state} \@addtocsec{htoc}{182}{0}{\@print{16.4}\quad{}Executing a program} \@addtocsec{htoc}{183}{1}{\@print{16.4.1}\quad{}Events} \@addtocsec{htoc}{184}{1}{\@print{16.4.2}\quad{}Starting the debugged program} \@addtocsec{htoc}{185}{1}{\@print{16.4.3}\quad{}Running the program} \@addtocsec{htoc}{186}{1}{\@print{16.4.4}\quad{}Time travel} \@addtocsec{htoc}{187}{1}{\@print{16.4.5}\quad{}Killing the program} \@addtocsec{htoc}{188}{0}{\@print{16.5}\quad{}Breakpoints} \newlabel{s:breakpoints}{{16.5}{X}} \@addtocsec{htoc}{189}{0}{\@print{16.6}\quad{}The call stack} \@addtocsec{htoc}{190}{0}{\@print{16.7}\quad{}Examining variable values} \stx@exists{simple-expr}\@addtocsec{htoc}{191}{0}{\@print{16.8}\quad{}Controlling the debugger} \@addtocsec{htoc}{192}{1}{\@print{16.8.1}\quad{}Setting the program name and arguments} \@addtocsec{htoc}{193}{1}{\@print{16.8.2}\quad{}How programs are loaded} \@addtocsec{htoc}{194}{1}{\@print{16.8.3}\quad{}Search path for files} \@addtocsec{htoc}{195}{1}{\@print{16.8.4}\quad{}Working directory} \@addtocsec{htoc}{196}{1}{\@print{16.8.5}\quad{}Turning reverse execution on and off} \@addtocsec{htoc}{197}{1}{\@print{16.8.6}\quad{}Communication between the debugger and the program} \newlabel{s:communication}{{16.8.6}{X}} \@addtocsec{htoc}{198}{1}{\@print{16.8.7}\quad{}Fine-tuning the debugger} \newlabel{s:fine-tuning}{{16.8.7}{X}} \@addtocsec{htoc}{199}{1}{\@print{16.8.8}\quad{}User-defined printers} \@addtocsec{htoc}{200}{0}{\@print{16.9}\quad{}Miscellaneous commands} \@addtocsec{htoc}{201}{0}{\@print{16.10}\quad{}Running the debugger under Emacs} \newlabel{s:inf-debugger}{{16.10}{X}} \@addtocsec{htoc}{202}{-1}{\@print{Chapter 17}\quad{}Profiling (ocamlprof)} \newlabel{c:profiler}{{17}{X}} \@addtocsec{htoc}{203}{0}{\@print{17.1}\quad{}Compiling for profiling} \@addtocsec{htoc}{204}{0}{\@print{17.2}\quad{}Profiling an execution} \@addtocsec{htoc}{205}{0}{\@print{17.3}\quad{}Printing profiling information} \@addtocsec{htoc}{206}{0}{\@print{17.4}\quad{}Time profiling} \@addtocsec{htoc}{207}{-1}{\@print{Chapter 18}\quad{}Interfacing\label{c:intf-c} C with Objective Caml} \newlabel{c:intf-c}{{18}{X}} \@addtocsec{htoc}{208}{0}{\@print{18.1}\quad{}Overview and compilation information} \@addtocsec{htoc}{209}{1}{\@print{18.1.1}\quad{}Declaring primitives} \@addtocsec{htoc}{210}{1}{\@print{18.1.2}\quad{}Implementing primitives} \@addtocsec{htoc}{211}{1}{\@print{18.1.3}\quad{}Statically linking C code with Caml code} \newlabel{staticlink-c-code}{{18.1.3}{X}} \@addtocsec{htoc}{212}{1}{\@print{18.1.4}\quad{}Dynamically linking C code with Caml code} \newlabel{dynlink-c-code}{{18.1.4}{X}} \@addtocsec{htoc}{213}{1}{\@print{18.1.5}\quad{}Choosing between static linking and dynamic linking} \@addtocsec{htoc}{214}{1}{\@print{18.1.6}\quad{}Building standalone custom runtime systems} \newlabel{s:custom-runtime}{{18.1.6}{X}} \@addtocsec{htoc}{215}{0}{\@print{18.2}\quad{}The {\machine value} type} \@addtocsec{htoc}{216}{1}{\@print{18.2.1}\quad{}Integer values} \@addtocsec{htoc}{217}{1}{\@print{18.2.2}\quad{}Blocks} \@addtocsec{htoc}{218}{1}{\@print{18.2.3}\quad{}Pointers outside the heap} \@addtocsec{htoc}{219}{0}{\@print{18.3}\quad{}Representation of Caml data types} \@addtocsec{htoc}{220}{1}{\@print{18.3.1}\quad{}Atomic types} \@addtocsec{htoc}{221}{1}{\@print{18.3.2}\quad{}Tuples and records} \@addtocsec{htoc}{222}{1}{\@print{18.3.3}\quad{}Arrays} \@addtocsec{htoc}{223}{1}{\@print{18.3.4}\quad{}Concrete types} \@addtocsec{htoc}{224}{1}{\@print{18.3.5}\quad{}Objects} \@addtocsec{htoc}{225}{1}{\@print{18.3.6}\quad{}Variants} \@addtocsec{htoc}{226}{0}{\@print{18.4}\quad{}Operations on values} \@addtocsec{htoc}{227}{1}{\@print{18.4.1}\quad{}Kind tests} \@addtocsec{htoc}{228}{1}{\@print{18.4.2}\quad{}Operations on integers} \@addtocsec{htoc}{229}{1}{\@print{18.4.3}\quad{}Accessing blocks} \@addtocsec{htoc}{230}{1}{\@print{18.4.4}\quad{}Allocating blocks} \@addtocsec{htoc}{231}{1}{\@print{18.4.5}\quad{}Raising exceptions} \newlabel{s:c-exceptions}{{18.4.5}{X}} \@addtocsec{htoc}{232}{0}{\@print{18.5}\quad{}Living in harmony with the garbage collector} \@addtocsec{htoc}{233}{1}{\@print{18.5.1}\quad{}Simple interface} \@addtocsec{htoc}{234}{1}{\@print{18.5.2}\quad{}Low-level interface} \@addtocsec{htoc}{235}{0}{\@print{18.6}\quad{}A complete example} \@addtocsec{htoc}{236}{0}{\@print{18.7}\quad{}Advanced topic: callbacks from C to Caml} \newlabel{s:callback}{{18.7}{X}} \@addtocsec{htoc}{237}{1}{\@print{18.7.1}\quad{}Applying Caml closures from C} \newlabel{s:callbacks}{{18.7.1}{X}} \@addtocsec{htoc}{238}{1}{\@print{18.7.2}\quad{}Registering Caml closures for use in C functions} \@addtocsec{htoc}{239}{1}{\@print{18.7.3}\quad{}Registering Caml exceptions for use in C functions} \newlabel{s:register-exn}{{18.7.3}{X}} \@addtocsec{htoc}{240}{1}{\@print{18.7.4}\quad{}Main program in C} \newlabel{s:main-c}{{18.7.4}{X}} \@addtocsec{htoc}{241}{1}{\@print{18.7.5}\quad{}Embedding the Caml code in the C code} \newlabel{s:embedded-code}{{18.7.5}{X}} \@addtocsec{htoc}{242}{0}{\@print{18.8}\quad{}Advanced example with callbacks} \@addtocsec{htoc}{243}{0}{\@print{18.9}\quad{}Advanced topic: custom blocks} \newlabel{s:custom}{{18.9}{X}} \@addtocsec{htoc}{244}{1}{\@print{18.9.1}\quad{}The {\machine struct\ custom{\char95}operations}} \@addtocsec{htoc}{245}{1}{\@print{18.9.2}\quad{}Allocating custom blocks} \@addtocsec{htoc}{246}{1}{\@print{18.9.3}\quad{}Accessing custom blocks} \@addtocsec{htoc}{247}{1}{\@print{18.9.4}\quad{}Writing custom serialization and deserialization functions} \@addtocsec{htoc}{248}{1}{\@print{18.9.5}\quad{}Choosing identifiers} \@addtocsec{htoc}{249}{1}{\@print{18.9.6}\quad{}Finalized blocks} \@addtocsec{htoc}{250}{0}{\@print{18.10}\quad{}Building mixed C/Caml libraries: {\machine ocamlmklib}} \newlabel{s-ocamlmklib}{{18.10}{X}} \@addtocsec{htoc}{251}{-2}{\@print{Part IV}\quad{}The Objective Caml library} \newlabel{p:library}{{IV}{X}} \@addtocsec{htoc}{252}{-1}{\@print{Chapter 19}\quad{}The core library} \newlabel{c:corelib}{{19}{X}} \@addtocsec{htoc}{253}{0}{\@print{19.1}\quad{}Built-in types and predefined exceptions} \@addtocsec{htoc}{254}{0}{\@print{19.2}\quad{}Module {\tt Pervasives}: the initially opened module} \@addtocsec{htoc}{255}{-1}{\@print{Chapter 20}\quad{}The standard library} \newlabel{c:stdlib}{{20}{X}} \newlabel{stdlib:top}{{20}{X}} \@addtocsec{htoc}{256}{-1}{\@print{Chapter 21}\quad{}The unix library: Unix system calls} \@addtocsec{htoc}{257}{-1}{\@print{Chapter 22}\quad{}The num library: arbitrary-precision rational arithmetic} \@addtocsec{htoc}{258}{-1}{\@print{Chapter 23}\quad{}The str library: regular expressions and string processing} \@addtocsec{htoc}{259}{-1}{\@print{Chapter 24}\quad{}The threads library} \newlabel{c:threads}{{24}{X}} \@addtocsec{htoc}{260}{-1}{\@print{Chapter 25}\quad{}The graphics library} \@addtocsec{htoc}{261}{-1}{\@print{Chapter 26}\quad{}The dbm library: access to NDBM databases} \@addtocsec{htoc}{262}{-1}{\@print{Chapter 27}\quad{}The dynlink library: dynamic loading and linking of object files} \@addtocsec{htoc}{263}{-1}{\@print{Chapter 28}\quad{}The LablTk library: Tcl/Tk GUI interface} \@addtocsec{htoc}{264}{-1}{\@print{Chapter 29}\quad{}The bigarray library} \@addtocsec{htoc}{265}{0}{\@print{29.1}\quad{}Module {\tt Bigarray}: large, multi-dimensional, numerical arrays} \@addtocsec{htoc}{266}{0}{\@print{29.2}\quad{}Big arrays in the Caml-C interface} \@addtocsec{htoc}{267}{1}{\@print{29.2.1}\quad{}Include file} \@addtocsec{htoc}{268}{1}{\@print{29.2.2}\quad{}Accessing a Caml bigarray from C or Fortran} \@addtocsec{htoc}{269}{1}{\@print{29.2.3}\quad{}Wrapping a C or Fortran array as a Caml big array} \@addtocsec{htoc}{270}{-2}{\@print{Part V}\quad{}Appendix} \newlabel{p:appendix}{{V}{X}}