;ELC ;;; Compiled ;;; in Emacs version 28.0.50 ;;; with all optimizations. (byte-code "\300\301!\210\300\302!\207" [require easymenu find-file] 2) #@47 Tuareg revision from the control system used. (defconst tuareg-mode-revision nil (#$ . 159)) #@765 Copyright (C) 1997-2006 Albert Cohen, all rights reserved. Copyright (C) 2009-2010 Jane Street Holding, LLC. Copyright (C) 2011- Stefan Monnier & Christophe Troestler Copying is covered by the GNU General Public License. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. (defconst tuareg-mode-version (byte-code "\204\301\207\302\303Q\207" [tuareg-mode-revision "Tuareg Version 2.2.0" "Tuareg Version 2.2.0 (" ")"] 3) (#$ . 259)) #@53 Tell whether we are editing Lucid Synchrone syntax. (defalias 'tuareg-editing-ls3 #[0 "\302\206\303 \304\305\306#)\207" [buffer-file-name inhibit-changing-match-data "\\.ls\\'" buffer-name nil t string-match] 7 (#$ . 1192)]) #@46 Tell whether we are editing OCamlLex syntax. (defalias 'tuareg-editing-ocamllex #[0 "\302\206\303 \304\305\306#)\207" [buffer-file-name inhibit-changing-match-data "\\.mll\\'" buffer-name nil t string-match] 7 (#$ . 1430)]) (defvar tuareg-with-caml-mode-p (byte-code "\300\301\302\303#\205 \300\304\302\303#\207" [require caml-types nil t caml-help] 4)) (byte-code "\300\301!\210\300\302!\210\303\304\305\306\307\310\311\312&\210\313\314\315\316\317DD\320\311\304\321\322&\210\313\323\315\316\324DD\325\311\304\321\326\327\330& \210\313\331\315\316\332DD\333\311\304\321\326\327\334& \210\313\335\315\316\336DD\337\311\304\321\322&\210\313\340\315\316\341DD\342\311\304\321\322&\210\313\343\315\316\344DD\345\321\322%\210\313\346\315\316\347DD\350\321\322%\210\313\351\315\316\352DD\353\311\304\321\326&\210\354\355\356\357#\210\313\360\315\316\361DD\362\311\304\321\326&\210\313\363\315\316\364DD\365\311\304\321\326&\210\313\366\315\316\367DD\370\311\304\321\326&\210\313\371\315\316\372DD\373\311\304\321\374&\210\313\375\315\316\376DD\377\311\304\321\326\327\201@& \210\313\201A\315\316\201BDD\201C\311\304\321\326&\210\313\201D\315\316\201EDD\201F\311\304\321\326&\210\313\201G\315\316\201HDD\201I\311\304\321\326&\210\313\201J\315\316\201KDD\201L\311\304\321\326&\210\313\201M\315\316\201NDD\201O\311\304\321\326&\210\313\201P\315\316\201QDD\201R\311\304\321\326&\210\313\201S\315\316\201TDD\201U\311\304\321\326&\210\313\201V\315\316\201WDD\201X\311\304\321\201Y&\210\313\201Z\315\316\201[DD\201\\\311\304\321\316&\210\313\201]\315\316\201^DD\201_\311\304\321\201Y&\207" [require smie custom custom-declare-group tuareg nil "Support for the OCaml language." :link (url-link "https://github.com/ocaml/tuareg") :group languages custom-declare-variable tuareg-default-indent funcall function #[0 "\300\207" [2] 1] "*Default indentation.\n\nGlobal indentation variable (large values may lead to indentation overflows).\nWhen no governing keyword is found, this value is used to indent the line\nif it has to." :type integer tuareg-support-camllight #[0 "\300\207" [nil] 1] "*If true, handle Caml Light character syntax (incompatible with labels)." boolean :set #[514 "\301\"\210\302\300!\205\303\304\203\305\202\306#\207" [tuareg-mode-syntax-table set-default boundp modify-syntax-entry 96 "\"" "."] 6 "\n\n(fn VAR VAL)"] tuareg-support-metaocaml #[0 "\300\207" [nil] 1] "*If true, handle MetaOCaml syntax." #[514 "\300\"\210\3011+\302 \211\205'\211@r\211q\210\303\304\305\"\203\306 \210)A\266\202\202 \2620\207\210\307\207" [set-default (error) buffer-list derived-mode-p tuareg-mode tuareg-interactive-mode tuareg--install-font-lock nil] 7 "\n\n(fn VAR VAL)"] tuareg-in-indent #[0 "\300\207" [0] 1] "*How many spaces to indent from a `in' keyword.\nUpstream \nrecommends 0, and this is what we default to since 2.0.1\ninstead of the historical `tuareg-default-indent'." tuareg-with-indent #[0 "\300\207" [0] 1] "*How many spaces to indent from a `with' keyword.\nThe examples at \nshow the '|' is aligned with 'match', thus 0 is the default value." tuareg-match-clause-indent #[0 "\300\207" [1] 1] "*How many spaces to indent a clause of match after a pattern `| ... ->'\nor `... ->' (pattern without preceding `|' in the first clause of a matching).\nTo respect \nthe default is 1." tuareg-match-when-indent #[0 "\301\\\207" [tuareg-match-clause-indent 4] 2] "*How many spaces from `|' to indent `when' in a pattern match\n | patt\n when cond ->\n clause" tuareg-match-patterns-aligned #[0 "\300\207" [nil] 1] "Non-nil means that the pipes for multiple patterns of a single case\nare aligned instead of being slightly shifted to spot the multiple\npatterns better.\n function v.s. function\n | A | A\n | B -> ... | B -> ...\n | C -> ... | C -> ... " make-obsolete-variable tuareg-use-abbrev-mode "Use `electric-indent-mode' instead." "2.2.0" tuareg-electric-indent #[0 "\300\207" [nil] 1] "Whether to automatically indent the line after typing one of\nthe words in `tuareg-electric-indent-keywords'. Lines starting\nwith `|', `)', `]`, and `}' are always indented when the\n`electric-indent-mode' is turned on." tuareg-electric-close-vector #[0 "\300\207" [t] 1] "*Non-nil means electrically insert `|' before a vector-closing `]' or\n`>' before an object-closing `}'.\n\nMany people find electric keys irritating, so you can disable them by\nsetting this variable to nil. You should probably have this on,\nthough, if you also have `tuareg-electric-indent' on." tuareg-highlight-all-operators #[0 "\300\207" [nil] 1] "If t, highlight all operators (as opposed to unusual ones).\nThis is not turned on by default because this makes font-lock\nmuch less efficient." tuareg-other-file-alist #[0 "\300\207" [(("\\.mli\\'" (".ml" ".mll" ".mly")) ("\\.ml\\'" (".mli")) ("\\.mll\\'" (".mli")) ("\\.mly\\'" (".mli")) ("\\.eliomi\\'" (".eliom")) ("\\.eliom\\'" (".eliomi")))] 1] "Associative list of alternate extensions to find.\nSee `ff-other-file-alist'." (repeat (list regexp (choice (repeat string) function))) tuareg-interactive-scroll-to-bottom-on-output #[0 "\300\207" [nil] 1] "*Controls when to scroll to the bottom of the interactive buffer\nupon evaluating an expression.\n\nSee `comint-scroll-to-bottom-on-output' for details." #[514 "\301\"\210\302\300!\205-\303 \211\205+\211@r\211q\210\304\305!\203#\306\300!\210)A\266\202\202 \262\207" [comint-scroll-to-bottom-on-output set-default boundp buffer-list derived-mode-p tuareg-interactive-mode make-local-variable] 6 "\n\n(fn VAR VAL)"] tuareg-skip-after-eval-phrase #[0 "\300\207" [t] 1] "*Non-nil means skip to the end of the phrase after evaluation in the\nOCaml REPL." tuareg-interactive-read-only-input #[0 "\300\207" [nil] 1] "*Non-nil means input sent to the OCaml REPL is read-only." tuareg-interactive-echo-phrase #[0 "\300\207" [t] 1] "*Non-nil means echo phrases in the REPL buffer when sending\nthem to the OCaml REPL." tuareg-interactive-input-font-lock #[0 "\300\207" [t] 1] "*Non nil means Font-Lock for REPL input phrases." tuareg-interactive-output-font-lock #[0 "\300\207" [t] 1] "*Non nil means Font-Lock for REPL output messages." tuareg-interactive-error-font-lock #[0 "\300\207" [t] 1] "*Non nil means Font-Lock for REPL error messages." tuareg-display-buffer-on-eval #[0 "\300\207" [t] 1] "*Non nil means pop up the OCaml REPL when evaluating code." tuareg-manual-url #[0 "\300\207" [#1="http://caml.inria.fr/pub/docs/manual-ocaml/"] 1 #1#] "*URL to the OCaml reference manual." string tuareg-browser #[0 "\300\207" [browse-url] 1] "*Name of function that displays the OCaml reference manual.\nValid names are `browse-url', `browse-url-firefox', etc." tuareg-library-path #[0 "\300\207" [#2="/usr/local/lib/ocaml/"] 1 #2#] "*Path to the OCaml library."] 10) #@44 *List of menu-configurable Tuareg options. (defvar tuareg-options-list '(["Prettify symbols" prettify-symbols-mode :style toggle :selected prettify-symbols-mode :active t]) (#$ . -8583)) #@44 *List of menu-configurable Tuareg options. (defvar tuareg-interactive-options-list '(("Skip phrase after evaluation" quote tuareg-skip-after-eval-phrase) ("Echo phrase in interactive buffer" quote tuareg-interactive-echo-phrase) "---" ("Font-lock interactive input" quote tuareg-interactive-input-font-lock) ("Font-lock interactive output" quote tuareg-interactive-output-font-lock) ("Font-lock interactive error" quote tuareg-interactive-error-font-lock) "---" ("Read only input" quote tuareg-interactive-read-only-input)) (#$ . -8776)) #@77 *Default program name for invoking an OCaml REPL (aka toplevel) from Emacs. (defvar tuareg-interactive-program "ocaml -nopromptcont" (#$ . -9320)) (custom-declare-group 'tuareg-faces nil "Special faces for the Tuareg mode." :group 'tuareg) (defconst tuareg-faces-inherit-p (byte-code "\301\300!\205 \302\236\207" [face-attribute-name-alist boundp :inherit] 2)) (custom-declare-face 'tuareg-font-lock-governing-face '((((class color) (type tty)) (:bold t)) (((background light)) (:foreground "black" :bold t)) (t (:foreground "wheat" :bold t))) "Face description for governing/leading keywords." :group 'tuareg-faces) (defvar tuareg-font-lock-governing-face 'tuareg-font-lock-governing-face) (custom-declare-face 'tuareg-font-lock-multistage-face '((((background light)) (:foreground "darkblue" :background "lightgray" :bold t)) (t (:foreground "steelblue" :background "darkgray" :bold t))) "Face description for MetaOCaml staging operators." :group 'tuareg-faces) (defvar tuareg-font-lock-multistage-face 'tuareg-font-lock-multistage-face) (custom-declare-face 'tuareg-font-lock-line-number-face '((((background light)) (:foreground "dark gray")) (t (:foreground "gray60"))) "Face description for line numbering directives." :group 'tuareg-faces) (defvar tuareg-font-lock-line-number-face 'tuareg-font-lock-line-number-face) (custom-declare-face 'tuareg-font-lock-operator-face '((((background light)) (:foreground "brown")) (t (:foreground "khaki"))) "Face description for all operators." :group 'tuareg-faces) (defvar tuareg-font-lock-operator-face 'tuareg-font-lock-operator-face) (custom-declare-face 'tuareg-font-lock-module-face '((t (:inherit font-lock-type-face))) "Face description for modules and module paths." :group 'tuareg-faces) (defvar tuareg-font-lock-module-face 'tuareg-font-lock-module-face) (custom-declare-face 'tuareg-font-lock-constructor-face '((t (:inherit default))) "Face description for constructors of (polymorphic) variants and exceptions." :group 'tuareg-faces) (defvar tuareg-font-lock-constructor-face 'tuareg-font-lock-constructor-face) (custom-declare-face 'tuareg-font-lock-label-face '((t (:inherit font-lock-constant-face keep))) "Face description for labels." :group 'tuareg-faces) (defvar tuareg-font-lock-label-face 'tuareg-font-lock-label-face) (custom-declare-face 'tuareg-font-double-semicolon-face '((t (:foreground "OrangeRed"))) "Face description for ;; which is not needed in standard code." :group 'tuareg-faces) (defvar tuareg-font-double-semicolon-face 'tuareg-font-double-semicolon-face) (custom-declare-face 'tuareg-font-lock-error-face '((t (:foreground "yellow" :background "red" :bold t))) "Face description for all errors reported to the source." :group 'tuareg-faces) (defvar tuareg-font-lock-error-face 'tuareg-font-lock-error-face) (custom-declare-face 'tuareg-font-lock-interactive-output-face '((((background light)) (:foreground "blue4")) (t (:foreground "grey"))) "Face description for all outputs in the REPL." :group 'tuareg-faces) (defvar tuareg-font-lock-interactive-output-face 'tuareg-font-lock-interactive-output-face) (byte-code "\301\302\203\n\303\202 \304\305\306\307%\207" [tuareg-faces-inherit-p custom-declare-face tuareg-font-lock-interactive-error-face ((t :inherit font-lock-warning-face)) ((((background light)) (:foreground "red3")) (t (:foreground "red2"))) "Face description for all REPL errors." :group tuareg-faces] 6) (defvar tuareg-font-lock-interactive-error-face 'tuareg-font-lock-interactive-error-face) (custom-declare-face 'tuareg-font-lock-interactive-directive-face '((((background light)) (:foreground "slate gray")) (t (:foreground "light slate gray"))) "Face description for all REPL directives such as #load." :group 'tuareg-faces) (defvar tuareg-font-lock-interactive-directive-face 'tuareg-font-lock-interactive-directive-face) (byte-code "\301\302\203\n\303\202 \304\305\306\307%\207" [tuareg-faces-inherit-p custom-declare-face tuareg-font-lock-attribute-face ((t :inherit font-lock-preprocessor-face)) ((((background light)) (:foreground "DodgerBlue2")) (t (:foreground "LightSteelBlue"))) "Face description for OCaml attribute annotations." :group tuareg-faces] 6) (defvar tuareg-font-lock-attribute-face 'tuareg-font-lock-attribute-face) (byte-code "\301\302\203\n\303\202 \304\305\306\307%\207" [tuareg-faces-inherit-p custom-declare-face tuareg-font-lock-infix-extension-node-face ((t :inherit font-lock-preprocessor-face)) ((((background light)) (:foreground "Orchid")) (((background dark)) (:foreground "LightSteelBlue")) (t (:foreground "LightSteelBlue"))) "Face description for OCaml the infix extension node." :group tuareg-faces] 6) (defvar tuareg-font-lock-infix-extension-node-face 'tuareg-font-lock-infix-extension-node-face) (byte-code "\301\302\203\n\303\202 \304\305\306\307%\207" [tuareg-faces-inherit-p custom-declare-face tuareg-font-lock-extension-node-face ((t :inherit tuareg-font-lock-infix-extension-node-face :background "gray92")) ((((background light)) (:foreground "Orchid" :background "gray92")) (((background dark)) (:foreground "LightSteelBlue" :background "gray92")) (t (:foreground "LightSteelBlue"))) "Face description for OCaml extension nodes." :group tuareg-faces] 6) (defvar tuareg-font-lock-extension-node-face 'tuareg-font-lock-extension-node-face) #@23 (fn &optional STEP) (defalias 'tuareg-backward-char #[256 "\211\203 `Zb\207`Sb\207" [] 3 (#$ . 14634)]) #@77 Return non-nil if all chars between beginning of line and point are blanks. (defalias 'tuareg-in-indentation-p #[0 "\212\300\301x\210n)\207" [" " nil] 2 (#$ . 14748)]) #@84 Return non-nil if point is inside an OCaml literal or comment. (fn &optional POS) (defalias 'tuareg-in-literal-or-comment-p #[256 "\300\301!8\207" [8 syntax-ppss] 4 (#$ . 14923)]) (defalias 'tuareg-backward-up-list #[0 "\3001\301 0\207\210eb\207" [(scan-error) backward-up-list] 1]) (byte-code "\300\301\302\303\304DD\305\306\307\310\311&\210\312\313!\203\314\301\313\315#\210\300\316\302\303\317DD\320\306\307\310\311&\207" [custom-declare-variable tuareg-font-lock-symbols funcall function #[0 "\300\207" [nil] 1] "*Display fun and -> and such using symbols in fonts.\nThis may sound like a neat trick, but note that it can change the\nalignment and can thus lead to surprises. On recent Emacs >= 24.4,\nuse `prettify-symbols-mode'." :group tuareg :type boolean fboundp prettify-symbols-mode make-obsolete-variable "Emacs-24.4" tuareg-prettify-symbols-full #[0 "\300\207" [nil] 1] "If non-nil, add fun and -> and such to be prettified with symbols.\nThis may sound like a neat trick, but note that it can change the\nalignment and can thus lead to surprises. By default, only symbols that\ndo not perturb in essential ways the alignment are used. See\n`tuareg-prettify-symbols-basic-alist' and\n`tuareg-prettify-symbols-extra-alist'."] 8) (defvar tuareg-prettify-symbols-basic-alist '(("sqrt" . 8730) ("&&" . 8743) ("||" . 8744) ("+." . 8724) ("-." . 8760) ("*." . 8729) ("/." . 247) ("<-" . 8592) ("<=" . 8804) (">=" . 8805) ("<>" . 8800) ("==" . 8801) ("!=" . 8802) ("<=>" . 8660) ("infinity" . 8734) ("'a" . 945) ("'b" . 946) ("'c" . 947) ("'d" . 948) ("'e" . 949) ("'f" . 966) ("'i" . 953) ("'k" . 954) ("'m" . 956) ("'n" . 957) ("'o" . 969) ("'p" . 960) ("'r" . 961) ("'s" . 963) ("'t" . 964) ("'x" . 958))) (defvar tuareg-prettify-symbols-extra-alist '(("fun" . 955) ("not" . 172) ("[|" . 12314) ("|]" . 12315) ("->" . 8594) (":=" . 8656) ("::" . 8759))) #@118 Return true iff the symbol MATCH should be composed. See `prettify-symbols-compose-predicate'. (fn START END MATCH) (defalias 'tuareg--prettify-symbols-compose-p #[771 "\300#\205\301\302\"\303>?\207" [prettify-symbols-default-compose-p get-text-property face (tuareg-font-lock-error-face tuareg-font-lock-interactive-output-face tuareg-font-lock-interactive-error-face)] 7 (#$ . 16804)]) #@103 Compose a sequence of ascii chars into a symbol. Regexp match data 0 points to the chars. (fn ALIST) (defalias 'tuareg-font-lock-compose-symbol #[257 "\300\224\300\225fz\206\f`Sf\206\301z=\204-f\206\301z=\204-\302\303\"\304>\2037\305\306#\266\202E\307\310\311\300!\"A#\266\312\207" [0 32 get-text-property face (tuareg-doc-face font-lock-string-face font-lock-comment-face tuareg-font-lock-error-face tuareg-font-lock-interactive-output-face tuareg-font-lock-interactive-error-face) remove-text-properties (composition) compose-region assoc match-string nil] 10 (#$ . 17206)]) (defalias 'tuareg-font-lock-symbols-keywords #[0 "\203 \303 \n\"\202\f \211\211\2038\211@\304\305!\203 \305A!\202!\306\2031\307@\"\2041\211B\262A\266\202\202 \210\211\205M\310\311\312\"\306\"\313\314\315DDDDC\207" [tuareg-prettify-symbols-full tuareg-prettify-symbols-basic-alist tuareg-prettify-symbols-extra-alist append fboundp char-displayable-p t assoc regexp-opt mapcar car 0 tuareg-font-lock-compose-symbol quote] 6]) #@45 Syntax table in use in Tuareg mode buffers. (defvar tuareg-mode-syntax-table (byte-code "\301 \302\303\304#\210\302\305\306#\210\302\307\310#\210\302\311\312#\210\302\313\312#\210\314\211\2034\211@\302\310#\210A\266\202\202!\210\302\315\304#\210\302\316\203E\317\202F\310#\210\302\320\317#\210\302\321\322#\210\302\323\324#\210\3251m\302\326\327#\210\302\330\331#0\210\207\210\302\326\332#\210\302\330\333#\210\207" [tuareg-support-camllight make-syntax-table modify-syntax-entry 95 "_" 46 "'" 35 "." 63 ". p" 126 (33 36 37 38 43 45 47 58 60 61 62 64 94 124) 39 96 "\"" 34 92 "\\" 42 ". 23" (error) 40 "()1n" 41 ")(4n" "()1" ")(4"] 7) (#$ . 18256)) (defvar tuareg-doc-face 'font-lock-doc-face) (defconst tuareg-font-lock-syntactic-keywords '(("\\<\\('\\)\\([^'\\\n]\\|\\\\.[^\\'\n \")]*\\)\\('\\)" (1 '(7)) (3 '(7))))) #@18 (fn START END) (defalias 'tuareg-syntax-propertize #[514 "b\210\300!\210`b\210`W\205g\301\302\303#\205g\304\224\204$\305\224\203C\304\224\2032\306\304\224\304\225\307\310$\210\305\224\203\f\306\305\224\305\225\307\310$\210\202\f\311\224\203\f\312\313!\211A\314\233\241\210\315!\266\306\304\224\304\225\307\316$\210\300!\210\202\f\207" [tuareg--syntax-quotation re-search-forward "\\_<\\('\\)\\(?:[^'\\\n]\\|\\\\.[^\\'\n \")]*\\)\\('\\)\\|\\({\\)[a-z_]*|" t 1 2 put-text-property syntax-table (7) 3 match-data ints 6 set-match-data (15)] 9 (#$ . 19104)]) #@12 (fn END) (defalias 'tuareg--syntax-quotation #[257 "\300 \3018\302=\205U\3038f\211\304\267\202L\305\306\307#\205S\310`S`\311\312$\202S\212\3038Tb\210`\313\314w\210`{)\315\316\317Q\307#\205G\310`S`\311\312$\262\202S\211\320\321\"\262\262\207" [syntax-ppss 3 t 8 #s(hash-table size 2 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (60 20 123 38)) re-search-forward ">>" move put-text-property syntax-table (15) "a-z_" nil search-forward "|" "}" error "Unexpected char '%c' starting delimited string"] 9 (#$ . 19685)]) #@61 `font-lock-syntactic-face-function' for Tuareg. (fn STATE) (defalias 'tuareg-font-lock-syntactic-face-function #[257 "\3038\203\207\3048d\305\\V\203'\211\305\\f\306=\203'\211\303\\f\306=\204' \207\n\207" [font-lock-string-face tuareg-doc-face font-lock-comment-face 3 8 2 42] 5 (#$ . 20242)]) #@51 Font-Lock patterns for Tuareg mode (basic level). (defvar tuareg-font-lock-keywords nil (#$ . 20551)) #@58 Font-Lock patterns for Tuareg mode (intermediate level). (defvar tuareg-font-lock-keywords-1 nil (#$ . 20659)) #@53 Font-Lock patterns for Tuareg mode (maximum level). (defvar tuareg-font-lock-keywords-2 nil (#$ . 20776)) #@31 Syntax changes for Font-Lock. (defconst tuareg-font-lock-syntax '((95 . "w") (39 . "w")) (#$ . 20888)) (defconst tuareg--whitespace-re " *\\(?:[ \n] *\\)?") #@37 Regular expression for identifiers. (defconst tuareg--id-re "\\_<[A-Za-z_][A-Za-z0-9_']*\\_>" (#$ . 21051)) #@40 Regular expression for variable names. (defconst tuareg--lid-re "\\_<[a-z_][A-Za-z0-9_']*\\_>" (#$ . 21165)) #@54 Regular expression for module and constructor names. (defconst tuareg--uid-re "\\_<[A-Z][A-Za-z0-9_']*\\_>" (#$ . 21280)) #@119 Setup `font-lock-defaults'. INTERACTIVE-P says whether it is for the interactive mode. (fn &optional INTERACTIVE-P) (defalias 'tuareg--install-font-lock #[256 " \n\211\306\307R\310\311R\312P\211\313\307R\310\314 R\315P\316\317 \203)\320\202*\321\322Q\323\324\325B\326 \203H\327\f\330Q\331B\332 \330Q\333BD\202P\334\f\330Q\335BC\203Y\336\202Z\337\340 \330R\341B\342\343\344B\345\346B\347\350B\351 \352\353\260\354B\355\356B\357\360Q\361B\362\363\364Q\365B\366\367Q\370B\371\372Q\373B\374\375B\376\367Q\377B\201F\201G\201HB\201I\201JB\257\317 \205\277\201K\201JBC\201L\f\353Q\201MB\201N\201O \367\260\201PB\201Q\317 \205\346\201R\201S\367\260\201TB\201U\367Q\201VB\201W\353Q\201XB\201Y\353Q\201ZB\201[\201\\B\201]P\201^B\257\f\205-\201_\201`\367Q\201aB\201b\201cB\n\201d\201eR\201fB\201g\201h\201i\260\201jB\201k\201l\367\260\201mB\201n\353Q\201oB\201p \352\367\260\201qB\257&BB\201r\326\201s\201tR\201uBC\"\201v\201wB\201x\317 \203\322\201yB\262\201zB\262\201{B\262\201|B\262\201}\201~\"\262\201B\201\200\f\330Q\201\201B\201\202 \201\203\n\201\204\260\201\205B\201\206 \201\207\201\210\201\211 \201\212 \352\201\213 \352\367\260\201\214B\201\215\201\216\f\201\217\260\201\220B\201\221\201B\201\222\330 \201\223\260\201\224B\201\225 \352\201\226\260\201\227B\201\230P\201\231B\201\232\201\233B\201\234\201\235\352\201\236Q\201\237B\201\240\330Q\201\241B\201s\201\242R\201\243B\310\201\244Q\201\245B\201\246\201\247B\201\250\330Q\201\251B\201\252\201\253Q\201\254B\201\255\201\256B@\205\327\201\257 BBBBBBBBBBBBBBBBBBBBB\262\326\"A\326\201\260\201\261BCB\203\201\262\201\263B\201\264\201\265B\201\266\201\267BE\202$\201\270\201\271BC\201}\317 \2032\201\272\2025\201\273\201~\"\201\274BC%C\266\f\201\275\201r\211D\201\276BBBB\211E\207" [tuareg--id-re tuareg--lid-re tuareg--uid-re tuareg--whitespace-re tuareg-support-metaocaml tuareg-font-lock-keywords "\\(?:\\." "\\)*" "\\(?:" "\\.\\)?" "\\(?: *([ A-Z]\\(?:[^()]\\|(\\(?:[^()]\\|(\\(?:[^()]\\|([^()]*)\\)*)\\)*)\\)*)\\)*" "\\(?: *\\. *" "\\.\\)*" "\\(?:\\(?:\\(?:[+-]?'[A-Za-z_][A-Za-z0-9_']*\\>\\|_\\)\\|( *\\(?:[+-]?'[A-Za-z_][A-Za-z0-9_']*\\>\\|_\\) *\\(?:, *\\(?:[+-]?'[A-Za-z_][A-Za-z0-9_']*\\>\\|_\\) *\\)*)\\) *\\)?" "\\_<\\(?:\\(let\\_>\\(?:[-$&*+/<=>@^|][-!$%&*+./:<=>?@^|~]*\\)?\\)\\(\\(?:%\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\)?\\(?:\\[@\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[[^][]*\\]\\)*\\]\\)*\\]\\)*\\]\\)*\\)\\(?: +\\(" tuareg-editing-ls3 "\\(?:automaton\\|clock\\|do\\(?:ne\\)?\\|every\\|match\\|node\\|present\\|reset\\|static\\|un\\(?:less\\|til\\)\\|w\\(?:here\\|ith\\)\\)" "rec\\_>" "\\)\\)?\\|\\(and\\_>\\(?:[-$&*+/<=>@^|][-!$%&*+./:<=>?@^|~]*\\)?\\)\\)" ("^#[0-9]+ *\\(?:\"[^\"]+\"\\)?" 0 tuareg-font-lock-line-number-face t) "^ *#\\_<\\(define\\|e\\(?:l\\(?:if\\|se\\)\\|nd\\(?:ext\\|if\\)\\|rror\\|xt\\)\\|i\\(?:f\\(?:n?def\\)?\\|nclude\\)\\|undef\\|warning\\)\\_>" font-lock-preprocessor-face append "^# +\\(#" "\\)" (1 tuareg-font-lock-interactive-directive-face) "^ *\\(#" (1 tuareg-font-lock-interactive-directive-face) "^\\(#" tuareg-font-lock-interactive-directive-face "^ *#\\(?: +#\\)?" "^#" "show\\(?:_module\\)? +\\(" (1 tuareg-font-lock-module-face) (";;+" 0 tuareg-font-double-semicolon-face) "\\[@\\(?:@@?\\)?\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[[^][]*\\]\\)*\\]\\)*\\]\\)*\\]" (0 tuareg-font-lock-attribute-face keep) "\\(\\[%%?\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\)\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[[^][]*\\]\\)*\\]\\)*\\]\\)*\\(\\]\\)" ((1 tuareg-font-lock-extension-node-face) (2 tuareg-font-lock-extension-node-face)) "[^;];\\(\\(?:%\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\)?\\)" (1 tuareg-font-lock-infix-extension-node-face) "\\_<\\(function\\)\\_>\\(\\(?:%\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\)?\\(?:\\[@\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[[^][]*\\]\\)*\\]\\)*\\]\\)*\\]\\)*\\)" "\\(" "\\)?" ((1 font-lock-keyword-face) (2 tuareg-font-lock-infix-extension-node-face keep) (3 font-lock-variable-name-face nil t)) "\\_<\\(fun\\|match\\)\\_>\\(\\(?:%\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\)?\\(?:\\[@\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[[^][]*\\]\\)*\\]\\)*\\]\\)*\\]\\)*\\)" ((1 font-lock-keyword-face) (2 tuareg-font-lock-infix-extension-node-face keep)) "( *\\(type\\) +\\(" " *\\)+)" ((1 font-lock-keyword-face) (2 font-lock-type-face)) (":[\n]? *\\(\\\\)" (1 font-lock-keyword-face)) "(" " *:\\(['_A-Za-z]\\(?:[^()\"]\\|(\\(?:[^()\"]\\|(\\(?:[^()\"]\\|([^()\"]*)\\)*)\\)*)\\)*\\))" (1 font-lock-type-face keep) "\\<\\(module +type +of\\)\\>\\(?: +\\(" "\\)\\)?" ((1 tuareg-font-lock-governing-face keep) (2 tuareg-font-lock-module-face keep t)) "( *\\(module\\) +\\(" "\\) *\\(?:: *\\(\\(?:[^()\"]\\|(\\(?:[^()\"]\\|(\\(?:[^()\"]\\|([^()\"]*)\\)*)\\)*)\\)*\\)\\)?)" ((1 font-lock-keyword-face) (2 tuareg-font-lock-module-face) (3 tuareg-font-lock-module-face keep t)) "( *\\(val\\) +\\(\\(?:[^()!$%&*+-./:<=>?@^|~]\\|[!$%&*+-./:<=>?@^|][!$%&*+-./:<=>?@^|~]*\\(?:[^()!$%&*+-./:<=>?@^|~]\\|(\\(?:[^()]\\|(\\(?:[^()]\\|([^()]*)\\)*)\\)*)\\)\\|~\\(?:[!$%&*+-./:<=>?@^|~]+\\(?:[^()!$%&*+-./:<=>?@^|~]\\|(\\(?:[^()]\\|(\\(?:[^()]\\|([^()]*)\\)*)\\)*)\\)\\|[a-z][a-zA-Z0-9]*[: ]\\)\\|(\\(?:[^()]\\|(\\(?:[^()]\\|([^()]*)\\)*)\\)*)\\)*\\): +\\(\\(?:[^()\"]\\|(\\(?:[^()\"]\\|(\\(?:[^()\"]\\|([^()\"]*)\\)*)\\)*)\\)*\\))" ((1 font-lock-keyword-face) (2 tuareg-font-lock-module-face) (3 tuareg-font-lock-module-face)) "\\_<\\(module\\)\\(\\(?:%\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\)?\\(?:\\[@\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[[^][]*\\]\\)*\\]\\)*\\]\\)*\\]\\)*\\)\\(\\(?: +type\\)?\\(?: +rec\\)?\\)\\>\\(?: *\\(" ((1 tuareg-font-lock-governing-face) (2 tuareg-font-lock-infix-extension-node-face) (3 tuareg-font-lock-governing-face) (4 tuareg-font-lock-module-face keep t)) tuareg-font-lock-symbols tuareg-font-lock-keywords-1 tuareg-highlight-all-operators tuareg-font-lock-keywords-2 tuareg-font-lock-syntax font-lock-defaults ("\\_" . tuareg-font-lock-governing-face) "\\_<\\(begin\\|functor\\|in\\(?:herit\\|itializer\\)\\|object\\|s\\(?:ig\\|truct\\)\\)\\_>\\(\\(?:%\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\)?\\(?:\\[@\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[[^][]*\\]\\)*\\]\\)*\\]\\)*\\]\\)*\\)" ((1 tuareg-font-lock-governing-face) (2 tuareg-font-lock-infix-extension-node-face keep)) "\\_<\\(constraint\\|end\\|in\\)\\_>" tuareg-font-lock-governing-face "\\<\\(let[ ]+\\(?:automaton\\|clock\\|do\\(?:ne\\)?\\|every\\|match\\|node\\|present\\|reset\\|static\\|un\\(?:less\\|til\\)\\|w\\(?:here\\|ith\\)\\)\\)\\>" "\\<\\(\\(?:with\\|and\\) +type\\(?: +nonrec\\)?\\_>\\) *\\(" ((1 tuareg-font-lock-governing-face keep) (2 font-lock-type-face keep t)) "\\<\\(\\(?:with\\|and\\) +module\\>\\) *\\(?:\\(" "\\) *\\)?\\(?:= *\\(" ((1 tuareg-font-lock-governing-face keep) (2 tuareg-font-lock-module-face keep t) (3 tuareg-font-lock-module-face keep t)) "\\<\\(\\(?:val\\(\\(?:%\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\)?\\(?:\\[@\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[[^][]*\\]\\)*\\]\\)*\\]\\)*\\]\\)*\\)" "\\|reset\\|do" "\\)!? +\\(?:mutable\\(?: +virtual\\)?\\_>\\|virtual\\(?: +mutable\\)?\\_>\\)\\|val!\\(\\(?:%\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\)?\\(?:\\[@\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[[^][]*\\]\\)*\\]\\)*\\]\\)*\\]\\)*\\)\\)\\(?: *\\(" ((2 tuareg-font-lock-infix-extension-node-face keep t) (3 tuareg-font-lock-infix-extension-node-face keep t) (1 tuareg-font-lock-governing-face keep t) (4 font-lock-variable-name-face nil t)) "\\_<\\(val\\)\\_>\\(\\(?:%\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\)?\\(?:\\[@\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[[^][]*\\]\\)*\\]\\)*\\]\\)*\\]\\)*\\)\\(?: +\\(" ((1 tuareg-font-lock-governing-face keep) (2 tuareg-font-lock-infix-extension-node-face keep) (3 font-lock-function-name-face keep t)) "\\(\\\\) *\\(" ((1 tuareg-font-lock-governing-face keep t) (2 font-lock-function-name-face keep t)) "\\<\\(open\\(?:! +\\|\\> *\\)\\)\\(" ((1 tuareg-font-lock-governing-face) (2 tuareg-font-lock-module-face keep t)) "(\\(?:[^()!$%&*+-./:<=>?@^|~]\\|[!$%&*+-./:<=>?@^|][!$%&*+-./:<=>?@^|~]*\\(?:[^()!$%&*+-./:<=>?@^|~]\\|(\\(?:[^()]\\|(\\(?:[^()]\\|([^()]*)\\)*)\\)*)\\)\\|~\\(?:[!$%&*+-./:<=>?@^|~]+\\(?:[^()!$%&*+-./:<=>?@^|~]\\|(\\(?:[^()]\\|(\\(?:[^()]\\|([^()]*)\\)*)\\)*)\\)\\|[a-z][a-zA-Z0-9]*[: ]\\)\\|(\\(?:[^()]\\|(\\(?:[^()]\\|([^()]*)\\)*)\\)*)\\)*:>? *\\(?:\n *\\)?\\(['_A-Za-z]\\(?:[^()\"]\\|(\\(?:[^()\"]\\|(\\(?:[^()\"]\\|([^()\"]*)\\)*)\\)*)\\)*\\|(\\(?:[^()\"]\\|(\\(?:[^()\"]\\|(\\(?:[^()\"]\\|([^()\"]*)\\)*)\\)*)\\)*)\\(?:[^()\"]\\|(\\(?:[^()\"]\\|(\\(?:[^()\"]\\|([^()\"]*)\\)*)\\)*)\\)*\\))" (1 font-lock-type-face) "\\." tuareg-font-lock-module-face (("[^-@^!*=<>&/%+~?#]\\(\\(?:\\.<\\|\\.~\\|!\\.\\|>\\.\\)+\\)" 1 tuareg-font-lock-multistage-face)) "\\_<\\(external\\)\\_>\\(?: +\\(" ((1 tuareg-font-lock-governing-face) (2 font-lock-function-name-face keep t)) "( *\\(\\(?:let\\|and\\)\\_>\\(?:[-$&*+/<=>@^|][-!$%&*+./:<=>?@^|~]*\\)\\) *)" (1 font-lock-function-name-face) " *\\(?:\\(" "\\) *\\(?:[^ =,:a]\\|a\\(?:[^s]\\|s[^[:space:]]\\)\\)\\)?" ((1 tuareg-font-lock-governing-face keep t) (2 tuareg-font-lock-infix-extension-node-face keep t) (3 tuareg-font-lock-governing-face keep t) (4 tuareg-font-lock-governing-face keep t) (5 font-lock-function-name-face keep t)) "\\_<\\(include\\)\\_>\\(?: +\\(" "\\|( *" " *: *\\(?:[^()]\\|(\\(?:[^()]\\|(\\(?:[^()]\\|([^()]*)\\)*)\\)*)\\)* *)\\)\\)?" ((1 tuareg-font-lock-governing-face) (2 tuareg-font-lock-module-face keep t)) "\\_<\\(module +type\\)\\_>\\(?: +" " *= *\\(" ((1 tuareg-font-lock-governing-face) (2 tuareg-font-lock-module-face keep t)) "\\(\\_\\) *\\(\\[ *'[A-Za-z_][A-Za-z0-9_']*\\> *\\(?:, *'[A-Za-z_][A-Za-z0-9_']*\\> *\\)*\\] *\\)?\\(" ((1 tuareg-font-lock-governing-face keep) (2 font-lock-type-face keep t) (3 font-lock-function-name-face keep t)) "\\_<\\(type\\_>\\)\\(\\(?:%\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\)?\\(?:\\[@\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[[^][]*\\]\\)*\\]\\)*\\]\\)*\\]\\)*\\)\\(?: +\\(nonrec\\_>\\)\\)?\\(?:" ((1 tuareg-font-lock-governing-face) (2 tuareg-font-lock-infix-extension-node-face keep) (3 tuareg-font-lock-governing-face keep t) (4 font-lock-type-face keep t)) nil " *\\(" "\\) *= *\\(fun\\(?:ction\\)?\\)\\>" ((5 font-lock-function-name-face) (6 font-lock-keyword-face)) "\\_<\\(__\\(?:\\(?:FILE\\|L\\(?:INE\\(?:_OF\\)?\\|OC\\(?:_OF\\)?\\)\\|MODULE\\|POS\\(?:_OF\\)?\\)__\\)\\|\\(?:fals\\|tru\\)e\\)\\_>" font-lock-constant-face ("as" "do" "done" "downto" "else" "for" "if" "then" "to" "try" "when" "while" "new" "lazy" "assert" "exception") "reset" "merge" "emit" "period" regexp-opt symbols font-lock-keyword-face "\\_\\(?:[^()]\\|(\\(?:[^()]\\|(\\(?:[^()]\\|([^()]*)\\)*)\\)*)\\)*\\)?\\) *)" (1 tuareg-font-lock-module-face keep) "\\_\\(?:[^()]\\|(\\(?:[^()]\\|(\\(?:[^()]\\|([^()]*)\\)*)\\)*)\\)*\\)? *)" "\\)*\\)\\(?::" "\\) *\\)?\\(?:=" ((1 font-lock-variable-name-face keep) (2 tuareg-font-lock-module-face keep t) (3 tuareg-font-lock-module-face keep t)) "\\_ *( *\\(" "\\) *: *\\(" "\\) *)" ((1 font-lock-variable-name-face keep) (2 tuareg-font-lock-module-face keep)) "\\_<\\(mutable\\|of\\|private\\|virtual\\|with\\)\\_>" "\\([?~]" ":[^:>=]" (1 tuareg-font-lock-label-face keep) "\\(?:->\\|:[^:>=]\\)" "\\)[ ]*:[^:>=]" (1 tuareg-font-lock-label-face keep) "`" tuareg-font-lock-constructor-face "\\_<\\(Assert_failure\\|Division_by_zero\\|End_of_file\\|Failure\\|Invalid_argument\\|Match_failure\\|Not_found\\|Out_of_memory\\|S\\(?:tack_overflow\\|ys_\\(?:blocked_io\\|error\\)\\)\\|Undefined_recursive_module\\|at_exit\\|exit\\|failwithf?\\|i\\(?:gnore\\|nvalid_arg\\)\\|parser\\|r\\(?:aise\\(?:_notrace\\)?\\|ef\\)\\)\\_>" font-lock-builtin-face ("\\[[ ]*\\]" . tuareg-font-lock-constructor-face) ("[])a-zA-Z0-9 ]\\(::\\)[[(a-zA-Z0-9 ]" 1 tuareg-font-lock-constructor-face) "\\)[^.]" (1 tuareg-font-lock-constructor-face) "\\_" ((5 font-lock-function-name-face nil t) (6 font-lock-type-face keep t)) "\\|\\(\\_\\) *\\(\\[ *'[A-Za-z_][A-Za-z0-9_']*\\> *\\(?:, *'[A-Za-z_][A-Za-z0-9_']*\\> *\\)*\\] *\\)?\\)" ((tuareg--pattern-vars-matcher (tuareg--pattern-pre-form-let) nil (0 font-lock-variable-name-face keep)) (tuareg--pattern-maybe-type-matcher nil nil (1 font-lock-type-face keep))) "\\_\\(?:%\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\)?\\(?:\\[@\\<[A-Za-z_][A-Za-z0-9_']*\\>\\(?:\\.\\<[A-Za-z_][A-Za-z0-9_']*\\>\\)*\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[\\(?:[^][]\\|\\[[^][]*\\]\\)*\\]\\)*\\]\\)*\\]\\)*" ((tuareg--pattern-vars-matcher (tuareg--pattern-pre-form-fun) nil (0 font-lock-variable-name-face keep))) "\\_\\|_\\) *)" (1 font-lock-type-face) tuareg-font-lock-symbols-keywords "( *\\([-=<>@^|&+*/$%!][-!$%&*+./:<=>?@^|~]*\\|[#?~][-!$%&*+./:<=>?@^|~]+\\) *)" (1 font-lock-function-name-face) "[^-!$%&*+./:<=>?@^|~#?]\\([=<>@^&+*/$%!][-!$%&*+./:<=>?@^|~]*\\|:=\\|[|#?~][-!$%&*+./:<=>?@^|~]+\\)" (1 tuareg-font-lock-operator-face) "\\(-\\)\\(?:[^0-9>]\\|\\([-!$%&*+./:<=?@^|~][-!$%&*+./:<=>?@^|~]*\\)\\)" ((1 tuareg-font-lock-operator-face) (2 tuareg-font-lock-operator-face keep t)) "\\_<\\(module\\(?: type\\)?\\|type\\|val\\(?: mutable\\)?\\)\\_>" ((tuareg--pattern-equal-matcher nil nil nil)) "[@^&$%!][-!$%&*+./:<=>?@^|~]*\\|[|#?~][-!$%&*+./:<=>?@^|~]+" tuareg-font-lock-operator-face ("asr" "asl" "lsr" "lsl" "or" "lor" "and" "land" "lxor" "not" "lnot" "mod" "fby" "pre" "last" "at") ("asr" "asl" "lsr" "lsl" "or" "lor" "land" "lxor" "not" "lnot" "mod") (1 tuareg-font-lock-operator-face) (tuareg-font-lock-keywords tuareg-font-lock-keywords-1 tuareg-font-lock-keywords-2) (nil (font-lock-syntactic-face-function . tuareg-font-lock-syntactic-face-function))] 35 (#$ . 21409)]) #@45 Limit for the matcher of function arguments (defvar tuareg--pattern-matcher-limit 0 (#$ . 37315)) (make-variable-buffer-local 'tuareg--pattern-matcher-limit) #@47 Limit for the type of a let bound definition. (defvar tuareg--pattern-matcher-type-limit 0 (#$ . 37479)) (make-variable-buffer-local 'tuareg--pattern-matcher-type-limit) #@131 Returns t if the point is inside a string or a comment. This based on the fontification and is faster than calling `syntax-ppss'. (defalias 'tuareg--font-lock-in-string-or-comment #[0 "\300`\301\"\2119\205\f\211\302>\207" [get-text-property face (font-lock-comment-face font-lock-comment-delimiter-face font-lock-doc-face font-lock-string-face)] 3 (#$ . 37656)]) #@54 Return the position of "=" marking the end of "let". (defalias 'tuareg--pattern-pre-form-let #[0 "\302 \204\303\304!\204\303\305!\203``\211\207`\211\306\\\307\211\310\311\312#\211\262\203h\313u\210\307f\314>\203K\3151=\316 0\202A\210\202D\204\211Sb\210\202h\317\320\307f\"\203h\321\307x\210`Sf\322>\204b\211S\211b\210\202`T\204q`m\204}\323``T\324\307$\210b\266\323`\325\312$\210\207" [tuareg--pattern-matcher-limit tuareg--pattern-matcher-type-limit tuareg--font-lock-in-string-or-comment looking-at "[ \n]*open\\_>" "[ \n]*exception\\_>" 800 nil re-search-forward "[=({:]" t -1 (40 123) (error) forward-list char-equal 58 "a-zA-Z0-9_'" (126 63) put-text-property face font-lock-multiline] 8 (#$ . 38026)]) #@55 Return the position of "->" marking the end of "fun". (defalias 'tuareg--pattern-pre-form-fun #[0 "\301 \203 `\211\207`\211\302\\\303\304\305\306#\211\262\203N\307\310`Sf\"\204+\307\311`Sf\"\203F\312u\210\31318\314 0\202<\210\202?\204\211Sb\210\202N\307\315\303f\"\203`b\210\316`\317\306$\266\207" [tuareg--pattern-matcher-limit tuareg--font-lock-in-string-or-comment 800 nil re-search-forward "[-({]" t char-equal 40 123 -1 (error) forward-list 62 put-text-property font-lock-multiline] 8 (#$ . 38774)]) #@59 Find "=" and "+=" and remove its highlithing. (fn LIMIT) (defalias 'tuareg--pattern-equal-matcher #[257 "\300 ?\205x\301`X\203u\302\303\304#\211\262\203u\305u\210\306\307\301f\"\2043\306\310\301f\"\2043\306\311\301f\"\203K\3121=\313 0\202A\210\202D\204\211Sb\210\202u\306\314\301f\"\203k\306\315f\"\203e\316`T\317\301$\202r\301u\210\202\316``T\317\301$\204\301\262\207" [tuareg--font-lock-in-string-or-comment nil re-search-forward "[+=({[]" t -1 char-equal 40 123 91 (error) forward-list 43 61 put-text-property face] 7 (#$ . 39305)]) #@166 Match a variable name after the point. If it succeeds, it moves the point after the variable name and set `match-data'. See e.g., `font-lock-keywords'. (fn LIMIT) (defalias 'tuareg--pattern-vars-matcher #[257 "`X\205w\302 \303#\205w\304\305w\210`Y\203\303\207\306\307\305f\"\203J\310``T\311\305$\210\312\224b\210\304\305x\210\306`Sf\313\"\203@\314 \210\303\207\312\225b\210\302 \303#\207\306\315\305f\"\203v`T\312\224b\210\304\305x\210\306`Sf\313\"\203r\314 \210\310`S\311\316$\210\303\207\312\225b\207\303\207" [tuareg--pattern-matcher-limit tuareg--lid-re re-search-forward t " \n" nil char-equal 61 put-text-property face 0 40 up-list 58 font-lock-type-face] 7 (#$ . 39874)]) #@71 Match a possible type after a let binding. Run only once. (fn LIMIT) (defalias 'tuareg--pattern-maybe-type-matcher #[257 "`X\205\301\302\303#\205\211b\210\303\207" [tuareg--pattern-matcher-type-limit re-search-forward "[ \n]*:\\([^=]+\\)=" t] 5 (#$ . 40575)]) #@29 Keymap used in Tuareg mode. (defvar tuareg-mode-map (byte-code "\301 \302\303\304#\210\302\305\304#\210\302\306\307#\210\302\310\311#\210\302\312\313#\210\302\314\315#\210\302\316\317#\210\302\320\317#\210\302\321\317#\210\302\322\323#\210\302\324\325#\210\302\326\327#\210\302\330\331#\210\302\332\333#\210\302\334\335#\210\302\336\337#\210\302\340\341#\210\302\342\343#\210\302\344\343#\210\302\345\346#\210\302\347\350#\210\302\351\352#\210\302\353\354#\210\302\355\356#\210\302\357\360#\210\302\361\362#\210\302\363\364#\210\203\366\302\365\366#\210\302\367\370#\210\302\371\372#\210\302\373\374#\210\302\375\376#\210\302\377\201@#\210\302\201A\201B#\210\302\201C\201D#\210\302\201E\201F#\210\302\201G\201H#\210\207" [tuareg-with-caml-mode-p make-sparse-keymap define-key "\361" tuareg-indent-phrase "" "" tuareg-find-alternate-file "" compile "" tuareg-opam-update-env "nd" tuareg-narrow-to-phrase "\230" tuareg-eval-phrase "" "" "" tuareg-eval-region "" tuareg-eval-buffer "" tuareg-run-ocaml " " tuareg-interrupt-ocaml " " tuareg-kill-ocaml "" tuareg-next-phrase "" tuareg-previous-phrase [(control c) (home)] tuareg-move-inside-module-or-class-opening "`" tuareg-interactive-next-error-source "?" ".c" tuareg-insert-class-form ".b" tuareg-insert-begin-form ".f" tuareg-insert-for-form ".w" tuareg-insert-while-form ".i" tuareg-insert-if-form ".l" tuareg-insert-let-form ".m" tuareg-insert-match-form ".t" tuareg-insert-try-form [3 20] caml-types-show-type [3 6] caml-types-show-call [3 12] caml-types-show-ident [3 mouse-1] caml-types-mouse-ignore [3 down-mouse-1] caml-types-explore [3 9] ocaml-add-path [3 91] ocaml-open-module [3 93] ocaml-close-module [3 8] caml-help [3 9] tuareg-complete] 5) (#$ . 40849)) (defvar tuareg-electric-indent-keywords '("module" "class" "functor" "object" "type" "val" "inherit" "include" "virtual" "constraint" "exception" "external" "open" "method" "and" "initializer" "to" "downto" "do" "done" "else" "begin" "end" "let" "in" "then" "with")) #@89 Check whether we should auto-indent. For use on `electric-indent-functions'. (fn CHAR) (defalias 'tuareg--electric-indent-predicate #[257 "\212\302 \210\211z\303 \203\304=\206b\211\305=\202b\306\267\202B\307\310h\"\202C\307\311h\"\203F\302 \210\303 \202C\307\304h\"\203F\302 \210\303 \202C\312\206b\205b\211\313=?\205b`\314\315!\210`{ \235\262\205b\303 \262)\207" [tuareg-electric-indent tuareg-electric-indent-keywords tuareg-backward-char tuareg-in-indentation-p 124 41 #s(hash-table size 3 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (41 29 125 36 93 51)) char-equal 42 62 nil 119 skip-syntax-backward "w_"] 5 (#$ . 42925)]) (defalias 'tuareg--electric-close-vector #[0 "\205S \302\236A\211\205Q`Sf =\205Q\211@`S\206`Sf=?\205Q\303 ?\205Q\212\30417\305\306!\210\3070\202<\210\310\202D\205D\311A@!)\205Q\212`Sb\210\211@c)\262\207" [tuareg-electric-close-vector last-command-event ((125 62 "{<") (93 124 "\\[|")) tuareg-in-literal-or-comment-p (error) backward-sexp 1 t nil looking-at] 3]) (defconst tuareg-smie-grammar (byte-code "\300\301\302\303B\"\304=\204\305\306!\210\307\302\303B\"\210\310\311\312\313\314!!\"!\207" [#s(hash-table size 2463 test equal rehash-size 1.5 rehash-threshold 0.8125 data ((#3="d=" . #1="type") > (#14="m-and" . #1#) > (#15="w-type" . #1#) > (#16="w-module" . #1#) > (#17="c=" . #1#) > (#18="m-with" . #1#) > (#19="|" . #1#) > (#20="of" . #1#) > (#21="as" . #1#) > (#22="t->" . #1#) > (#23="*…" . #1#) > (#2="in" . #1#) > (#24="|]" . #1#) > (#25="}" . #1#) > (#26="else" . #1#) > (#27="done" . #1#) > (#28=";" . #1#) > (#29="function" . #1#) > (#30="->" . #1#) > (#31="with" . #1#) > (#32="end" . #1#) > (#33=")" . #1#) > (#34=">}" . #1#) > (#35=">." . #1#) > (#36="then" . #1#) > (#4="include" . #1#) = (#5="open" . #1#) = (#6="external" . #1#) = (#7="val" . #1#) = (#8="class" . #1#) = (#9="module" . #1#) = (#10="exception" . #1#) = (#11=";;" . #1#) = (#12="and" . #1#) > (#13="d-let" . #1#) = (#1# . #1#) = (#1# . #37="of") < (#1# . #38=":") < (#1# . #39="l-class") < (#1# . #40="l-module") < (#1# . #41="private") < (#1# . #42="rec") < (#1# . #43="d-type") < (#1# . #44="m-type") < (#1# . #2#) < (#1# . #3#) < (#1# . #45="l-open") < (#1# . #4#) = (#1# . #5#) = (#1# . #6#) = (#1# . #7#) = (#1# . #8#) = (#1# . #9#) = (#1# . #10#) = (#1# . #11#) = (#1# . #12#) < (#1# . #13#) = (#3# . #13#) > (#14# . #13#) > (#15# . #13#) > (#16# . #13#) > (#17# . #13#) > (#18# . #13#) > (#19# . #13#) > (#20# . #13#) > (#21# . #13#) > (#22# . #13#) > (#23# . #13#) > (#2# . #13#) > (#24# . #13#) > (#25# . #13#) > (#26# . #13#) > (#27# . #13#) > (#28# . #13#) > (#29# . #13#) > (#30# . #13#) > (#31# . #13#) > (#32# . #13#) > (#33# . #13#) > (#34# . #13#) > (#35# . #13#) > (#36# . #13#) > (#4# . #13#) = (#5# . #13#) = (#6# . #13#) = (#7# . #13#) = (#8# . #13#) = (#9# . #13#) = (#10# . #13#) = (#11# . #13#) = (#12# . #13#) > (#13# . #13#) = (#13# . #37#) < (#13# . #38#) < (#13# . #39#) < (#13# . #40#) < (#13# . #41#) < (#13# . #42#) < (#13# . #43#) < (#13# . #44#) < (#13# . #2#) < (#13# . #3#) < (#13# . #45#) < (#13# . #4#) = (#13# . #5#) = (#13# . #6#) = (#13# . #7#) = (#13# . #8#) = (#13# . #9#) = (#13# . #10#) = (#13# . #11#) = (#13# . #12#) < (#3# . #12#) > (#14# . #12#) > (#15# . #12#) > (#16# . #12#) > (#17# . #12#) > (#18# . #12#) > (#19# . #12#) > (#20# . #12#) > (#21# . #12#) > (#22# . #12#) > (#23# . #12#) > (#2# . #12#) > (#24# . #12#) > (#25# . #12#) > (#26# . #12#) > (#27# . #12#) > (#28# . #12#) > (#29# . #12#) > (#30# . #12#) > (#31# . #12#) > (#32# . #12#) > (#33# . #12#) > (#34# . #12#) > (#35# . #12#) > (#36# . #12#) > (#4# . #12#) < (#5# . #12#) < (#6# . #12#) < (#7# . #12#) < (#8# . #12#) < (#9# . #12#) < (#10# . #12#) < (#11# . #12#) < (#12# . #12#) = (#12# . #37#) < (#12# . #38#) < (#12# . #39#) < (#12# . #40#) < (#12# . #41#) < (#12# . #42#) < (#12# . #43#) < (#12# . #44#) < (#12# . #2#) > (#12# . #3#) < (#12# . #45#) < (#12# . #4#) > (#12# . #5#) > (#12# . #6#) > (#12# . #7#) > (#12# . #8#) > (#12# . #9#) > (#12# . #10#) > (#12# . #11#) > (#3# . #11#) > (#14# . #11#) > (#15# . #11#) > (#16# . #11#) > (#17# . #11#) > (#18# . #11#) > (#19# . #11#) > (#20# . #11#) > (#21# . #11#) > (#22# . #11#) > (#23# . #11#) > (#2# . #11#) > (#24# . #11#) > (#25# . #11#) > (#26# . #11#) > (#27# . #11#) > (#28# . #11#) > (#29# . #11#) > (#30# . #11#) > (#31# . #11#) > (#32# . #11#) > (#33# . #11#) > (#34# . #11#) > (#35# . #11#) > (#36# . #11#) > (#4# . #11#) = (#5# . #11#) = (#6# . #11#) = (#7# . #11#) = (#8# . #11#) = (#9# . #11#) = (#10# . #11#) = (#11# . #11#) = (#11# . #37#) < (#11# . #38#) < (#11# . #39#) < (#11# . #40#) < (#11# . #41#) < (#11# . #42#) < (#11# . #43#) < (#11# . #44#) < (#11# . #2#) < (#11# . #3#) < (#11# . #45#) < (#11# . #4#) = (#11# . #5#) = (#11# . #6#) = (#11# . #7#) = (#11# . #8#) = (#11# . #9#) = (#11# . #10#) = (#3# . #10#) > (#14# . #10#) > (#15# . #10#) > (#16# . #10#) > (#17# . #10#) > (#18# . #10#) > (#19# . #10#) > (#20# . #10#) > (#21# . #10#) > (#22# . #10#) > (#23# . #10#) > (#2# . #10#) > (#24# . #10#) > (#25# . #10#) > (#26# . #10#) > (#27# . #10#) > (#28# . #10#) > (#29# . #10#) > (#30# . #10#) > (#31# . #10#) > (#32# . #10#) > (#33# . #10#) > (#34# . #10#) > (#35# . #10#) > (#36# . #10#) > (#4# . #10#) = (#5# . #10#) = (#6# . #10#) = (#7# . #10#) = (#8# . #10#) = (#9# . #10#) = (#10# . #10#) = (#10# . #37#) < (#10# . #38#) < (#10# . #39#) < (#10# . #40#) < (#10# . #41#) < (#10# . #42#) < (#10# . #43#) < (#10# . #44#) < (#10# . #2#) < (#10# . #3#) < (#10# . #45#) < (#10# . #4#) = (#10# . #5#) = (#10# . #6#) = (#10# . #7#) = (#10# . #8#) = (#10# . #9#) = (#3# . #9#) > (#14# . #9#) > (#15# . #9#) > (#16# . #9#) > (#17# . #9#) > (#18# . #9#) > (#19# . #9#) > (#20# . #9#) > (#21# . #9#) > (#22# . #9#) > (#23# . #9#) > (#2# . #9#) > (#24# . #9#) > (#25# . #9#) > (#26# . #9#) > (#27# . #9#) > (#28# . #9#) > (#29# . #9#) > (#30# . #9#) > (#31# . #9#) > (#32# . #9#) > (#33# . #9#) > (#34# . #9#) > (#35# . #9#) > (#36# . #9#) > (#4# . #9#) = (#5# . #9#) = (#6# . #9#) = (#7# . #9#) = (#8# . #9#) = (#9# . #9#) = (#9# . #37#) < (#9# . #38#) < (#9# . #39#) < (#9# . #40#) < (#9# . #41#) < (#9# . #42#) < (#9# . #43#) < (#9# . #44#) < (#9# . #2#) < (#9# . #3#) < (#9# . #45#) < (#9# . #4#) = (#9# . #5#) = (#9# . #6#) = (#9# . #7#) = (#9# . #8#) = (#3# . #8#) > (#14# . #8#) > (#15# . #8#) > (#16# . #8#) > (#17# . #8#) > (#18# . #8#) > (#19# . #8#) > (#20# . #8#) > (#21# . #8#) > (#22# . #8#) > (#23# . #8#) > (#2# . #8#) > (#24# . #8#) > (#25# . #8#) > (#26# . #8#) > (#27# . #8#) > (#28# . #8#) > (#29# . #8#) > (#30# . #8#) > (#31# . #8#) > (#32# . #8#) > (#33# . #8#) > (#34# . #8#) > (#35# . #8#) > (#36# . #8#) > (#4# . #8#) = (#5# . #8#) = (#6# . #8#) = (#7# . #8#) = (#8# . #8#) = (#8# . #37#) < (#8# . #38#) < (#8# . #39#) < (#8# . #40#) < (#8# . #41#) < (#8# . #42#) < (#8# . #43#) < (#8# . #44#) < (#8# . #2#) < (#8# . #3#) < (#8# . #45#) < (#8# . #4#) = (#8# . #5#) = (#8# . #6#) = (#8# . #7#) = (#3# . #7#) > (#14# . #7#) > (#15# . #7#) > (#16# . #7#) > (#17# . #7#) > (#18# . #7#) > (#19# . #7#) > (#20# . #7#) > (#21# . #7#) > (#22# . #7#) > (#23# . #7#) > (#2# . #7#) > (#24# . #7#) > (#25# . #7#) > (#26# . #7#) > (#27# . #7#) > (#28# . #7#) > (#29# . #7#) > (#30# . #7#) > (#31# . #7#) > (#32# . #7#) > (#33# . #7#) > (#34# . #7#) > (#35# . #7#) > (#36# . #7#) > (#4# . #7#) = (#5# . #7#) = (#6# . #7#) = (#7# . #7#) = (#7# . #37#) < (#7# . #38#) < (#7# . #39#) < (#7# . #40#) < (#7# . #41#) < (#7# . #42#) < (#7# . #43#) < (#7# . #44#) < (#7# . #2#) < (#7# . #3#) < (#7# . #45#) < (#7# . #4#) = (#7# . #5#) = (#7# . #6#) = (#3# . #6#) > (#14# . #6#) > (#15# . #6#) > (#16# . #6#) > (#17# . #6#) > (#18# . #6#) > (#19# . #6#) > (#20# . #6#) > (#21# . #6#) > (#22# . #6#) > (#23# . #6#) > (#2# . #6#) > (#24# . #6#) > (#25# . #6#) > (#26# . #6#) > (#27# . #6#) > (#28# . #6#) > (#29# . #6#) > (#30# . #6#) > (#31# . #6#) > (#32# . #6#) > (#33# . #6#) > (#34# . #6#) > (#35# . #6#) > (#36# . #6#) > (#4# . #6#) = (#5# . #6#) = (#6# . #6#) = (#6# . #37#) < (#6# . #38#) < (#6# . #39#) < (#6# . #40#) < (#6# . #41#) < (#6# . #42#) < (#6# . #43#) < (#6# . #44#) < (#6# . #2#) < (#6# . #3#) < (#6# . #45#) < (#6# . #4#) = (#6# . #5#) = (#3# . #5#) > (#14# . #5#) > (#15# . #5#) > (#16# . #5#) > (#17# . #5#) > (#18# . #5#) > (#19# . #5#) > (#20# . #5#) > (#21# . #5#) > (#22# . #5#) > (#23# . #5#) > (#2# . #5#) > (#24# . #5#) > (#25# . #5#) > (#26# . #5#) > (#27# . #5#) > (#28# . #5#) > (#29# . #5#) > (#30# . #5#) > (#31# . #5#) > (#32# . #5#) > (#33# . #5#) > (#34# . #5#) > (#35# . #5#) > (#36# . #5#) > (#4# . #5#) = (#5# . #5#) = (#5# . #37#) < (#5# . #38#) < (#5# . #39#) < (#5# . #40#) < (#5# . #41#) < (#5# . #42#) < (#5# . #43#) < (#5# . #44#) < (#5# . #2#) < (#5# . #3#) < (#5# . #45#) < (#5# . #4#) = (#3# . #4#) > (#14# . #4#) > (#15# . #4#) > (#16# . #4#) > (#17# . #4#) > (#18# . #4#) > (#19# . #4#) > (#20# . #4#) > (#21# . #4#) > (#22# . #4#) > (#23# . #4#) > (#2# . #4#) > (#24# . #4#) > (#25# . #4#) > (#26# . #4#) > (#27# . #4#) > (#28# . #4#) > (#29# . #4#) > (#30# . #4#) > (#31# . #4#) > (#32# . #4#) > (#33# . #4#) > (#34# . #4#) > (#35# . #4#) > (#36# . #4#) > (#4# . #4#) = (#4# . #37#) < (#4# . #38#) < (#4# . #39#) < (#4# . #40#) < (#4# . #41#) < (#4# . #42#) < (#4# . #43#) < (#4# . #44#) < (#4# . #2#) < (#4# . #3#) < (#4# . #45#) < (#14# . #2#) > (#15# . #2#) > (#16# . #2#) > (#17# . #2#) > (#18# . #2#) > (#71="->" . #2#) > (#69="end" . #2#) > (#19# . #2#) > (#20# . #2#) > (#21# . #2#) > (#22# . #2#) > (#23# . #2#) > (#62="with" . #2#) > (#64="}" . #2#) > (#24# . #2#) > (#26# . #2#) > (#27# . #2#) > (#28# . #2#) > (#29# . #2#) > (#74="in" . #2#) > (#33# . #2#) > (#34# . #2#) > (#35# . #2#) > (#36# . #2#) > (#3# . #2#) > (#45# . #2#) > (#2# . #47="begin") < (#2# . #48="[|") < (#2# . #49="{") < (#2# . #50="while") < (#2# . #51="for") < (#2# . #28#) < (#2# . #52="match") < (#2# . #29#) < (#2# . #53="fun") < (#2# . #54="try") < (#2# . #55="let") < (#2# . #56="object") < (#2# . #57="(") < (#2# . #58="{<") < (#2# . #59=".<") < (#2# . #60="if") < (#21# . #46="d=") > (#22# . #46#) > (#23# . #46#) > (#38# . #46#) > (#39# . #46#) > (#40# . #46#) > (#41# . #46#) > (#42# . #46#) > (#43# . #46#) > (#44# . #46#) > (#46# . #47#) < (#46# . #48#) < (#46# . #49#) < (#46# . #50#) < (#46# . #51#) < (#46# . #28#) < (#46# . #52#) < (#46# . #29#) < (#46# . #53#) < (#46# . #54#) < (#46# . #55#) < (#46# . #56#) < (#46# . #57#) < (#46# . #58#) < (#46# . #59#) < (#46# . #60#) < (#61="d=" . #19#) < (#61# . #20#) < (#61# . #62#) < (#3# . #18#) < (#3# . #70="functor") < (#3# . #68="sig") < (#3# . #66="struct") < (#38# . #21#) < (#38# . #22#) < (#38# . #23#) < (#44# . #38#) < (#44# . #39#) < (#44# . #40#) < (#44# . #41#) < (#44# . #42#) < (#44# . #43#) < (#44# . #44#) < (#43# . #38#) < (#43# . #39#) < (#43# . #40#) < (#43# . #41#) < (#43# . #42#) < (#43# . #43#) < (#43# . #44#) < (#42# . #38#) < (#42# . #39#) < (#42# . #40#) < (#42# . #41#) < (#42# . #42#) < (#42# . #43#) < (#42# . #44#) < (#41# . #38#) < (#41# . #39#) < (#41# . #40#) < (#41# . #41#) < (#41# . #42#) < (#41# . #43#) < (#41# . #44#) < (#40# . #38#) < (#40# . #39#) < (#40# . #40#) < (#40# . #41#) < (#40# . #42#) < (#40# . #43#) < (#40# . #44#) < (#39# . #38#) < (#39# . #39#) < (#39# . #40#) < (#39# . #41#) < (#39# . #42#) < (#39# . #43#) < (#39# . #44#) < (#37# . #21#) < (#37# . #22#) < (#37# . #23#) < (#63="{" . #38#) < (#63# . #65=";") < (#63# . #64#) = (#21# . #64#) > (#22# . #64#) > (#23# . #64#) > (#38# . #64#) > (#65# . #64#) > (#23# . #62#) > (#22# . #62#) > (#21# . #62#) > (#20# . #62#) > (#19# . #62#) > (#23# . #19#) > (#22# . #19#) > (#21# . #19#) > (#20# . #19#) > (#19# . #19#) = (#19# . #20#) < (#21# . #65#) > (#22# . #65#) > (#23# . #65#) > (#38# . #65#) > (#65# . #65#) = (#65# . #38#) < (#21# . #23#) > (#22# . #23#) < (#23# . #23#) = (#23# . #21#) > (#23# . #22#) > (#21# . #22#) > (#22# . #22#) = (#22# . #21#) > (#21# . #21#) > (#66# . #37#) < (#66# . #38#) < (#66# . #39#) < (#66# . #40#) < (#66# . #41#) < (#66# . #42#) < (#66# . #43#) < (#66# . #44#) < (#66# . #2#) < (#66# . #3#) < (#66# . #45#) < (#66# . #4#) < (#66# . #5#) < (#66# . #6#) < (#66# . #7#) < (#66# . #8#) < (#66# . #9#) < (#66# . #10#) < (#66# . #11#) < (#66# . #12#) < (#66# . #13#) < (#66# . #1#) < (#66# . #67="end") = (#3# . #67#) > (#14# . #67#) > (#15# . #67#) > (#16# . #67#) > (#17# . #67#) > (#18# . #67#) > (#19# . #67#) > (#20# . #67#) > (#21# . #67#) > (#22# . #67#) > (#23# . #67#) > (#2# . #67#) > (#24# . #67#) > (#25# . #67#) > (#26# . #67#) > (#27# . #67#) > (#28# . #67#) > (#29# . #67#) > (#30# . #67#) > (#31# . #67#) > (#32# . #67#) > (#33# . #67#) > (#34# . #67#) > (#35# . #67#) > (#36# . #67#) > (#4# . #67#) > (#5# . #67#) > (#6# . #67#) > (#7# . #67#) > (#8# . #67#) > (#9# . #67#) > (#10# . #67#) > (#11# . #67#) > (#12# . #67#) > (#13# . #67#) > (#1# . #67#) > (#68# . #37#) < (#68# . #38#) < (#68# . #39#) < (#68# . #40#) < (#68# . #41#) < (#68# . #42#) < (#68# . #43#) < (#68# . #44#) < (#68# . #2#) < (#68# . #3#) < (#68# . #45#) < (#68# . #4#) < (#68# . #5#) < (#68# . #6#) < (#68# . #7#) < (#68# . #8#) < (#68# . #9#) < (#68# . #10#) < (#68# . #11#) < (#68# . #12#) < (#68# . #13#) < (#68# . #1#) < (#68# . #69#) = (#70# . #71#) = (#71# . #18#) < (#71# . #70#) < (#71# . #68#) < (#71# . #66#) < (#23# . #18#) > (#22# . #18#) > (#21# . #18#) > (#14# . #18#) > (#15# . #18#) > (#16# . #18#) > (#17# . #18#) > (#18# . #18#) > (#69# . #18#) > (#18# . #16#) < (#18# . #15#) < (#18# . #14#) < (#17# . #21#) < (#17# . #22#) < (#17# . #23#) < (#21# . #14#) > (#22# . #14#) > (#23# . #14#) > (#17# . #14#) > (#16# . #14#) > (#15# . #14#) > (#14# . #14#) = (#14# . #16#) < (#14# . #15#) < (#15# . #17#) < (#16# . #17#) < (#47# . #47#) < (#47# . #48#) < (#47# . #49#) < (#47# . #50#) < (#47# . #51#) < (#47# . #28#) < (#47# . #52#) < (#47# . #29#) < (#47# . #53#) < (#47# . #54#) < (#47# . #55#) < (#47# . #56#) < (#47# . #57#) < (#47# . #58#) < (#47# . #59#) < (#47# . #60#) < (#47# . #108="end") = (#72="(" . #59#) < (#72# . #58#) < (#72# . #57#) < (#72# . #56#) < (#72# . #55#) < (#72# . #54#) < (#72# . #53#) < (#72# . #29#) < (#72# . #52#) < (#72# . #28#) < (#72# . #51#) < (#72# . #50#) < (#72# . #49#) < (#72# . #48#) < (#72# . #47#) < (#72# . #60#) < (#72# . #73=")") = (#75="|" . #73#) > (#35# . #73#) > (#34# . #73#) > (#33# . #73#) > (#32# . #73#) > (#74# . #73#) > (#31# . #73#) > (#30# . #73#) > (#29# . #73#) > (#28# . #73#) > (#27# . #73#) > (#26# . #73#) > (#25# . #73#) > (#24# . #73#) > (#36# . #73#) > (#48# . #47#) < (#48# . #48#) < (#48# . #49#) < (#48# . #50#) < (#48# . #51#) < (#48# . #28#) < (#48# . #52#) < (#48# . #29#) < (#48# . #53#) < (#48# . #54#) < (#48# . #55#) < (#48# . #56#) < (#48# . #57#) < (#48# . #58#) < (#48# . #59#) < (#48# . #60#) < (#48# . #24#) = (#75# . #24#) > (#24# . #24#) > (#25# . #24#) > (#26# . #24#) > (#27# . #24#) > (#28# . #24#) > (#29# . #24#) > (#30# . #24#) > (#31# . #24#) > (#74# . #24#) > (#32# . #24#) > (#33# . #24#) > (#34# . #24#) > (#35# . #24#) > (#36# . #24#) > (#49# . #59#) < (#49# . #58#) < (#49# . #57#) < (#49# . #56#) < (#49# . #55#) < (#49# . #54#) < (#49# . #53#) < (#49# . #29#) < (#49# . #52#) < (#49# . #51#) < (#49# . #50#) < (#49# . #49#) < (#49# . #48#) < (#49# . #47#) < (#49# . #76="f=") < (#49# . #60#) < (#49# . #77="with") < (#75# . #25#) > (#24# . #25#) > (#25# . #25#) > (#26# . #25#) > (#27# . #25#) > (#29# . #25#) > (#30# . #25#) > (#74# . #25#) > (#32# . #25#) > (#33# . #25#) > (#34# . #25#) > (#35# . #25#) > (#76# . #25#) > (#77# . #25#) > (#78="if" . #47#) < (#78# . #48#) < (#78# . #49#) < (#78# . #50#) < (#78# . #51#) < (#78# . #28#) < (#78# . #52#) < (#78# . #29#) < (#78# . #53#) < (#78# . #54#) < (#78# . #55#) < (#78# . #56#) < (#78# . #57#) < (#78# . #58#) < (#78# . #59#) < (#78# . #60#) < (#78# . #79="then") = (#75# . #79#) > (#24# . #79#) > (#25# . #79#) > (#26# . #79#) > (#27# . #79#) > (#28# . #79#) > (#29# . #79#) > (#30# . #79#) > (#31# . #79#) > (#74# . #79#) > (#32# . #79#) > (#33# . #79#) > (#34# . #79#) > (#35# . #79#) > (#36# . #79#) > (#79# . #59#) < (#79# . #58#) < (#79# . #57#) < (#79# . #56#) < (#79# . #55#) < (#79# . #54#) < (#79# . #53#) < (#79# . #29#) < (#79# . #52#) < (#79# . #28#) < (#79# . #51#) < (#79# . #50#) < (#79# . #78#) < (#79# . #49#) < (#79# . #48#) < (#79# . #47#) < (#79# . #26#) = (#75# . #26#) > (#35# . #26#) > (#34# . #26#) > (#33# . #26#) > (#32# . #26#) > (#74# . #26#) > (#31# . #26#) > (#30# . #26#) > (#29# . #26#) > (#28# . #26#) > (#27# . #26#) > (#26# . #26#) > (#25# . #26#) > (#24# . #26#) > (#26# . #59#) < (#26# . #58#) < (#26# . #57#) < (#26# . #56#) < (#26# . #55#) < (#26# . #54#) < (#26# . #53#) < (#26# . #29#) < (#26# . #52#) < (#26# . #28#) > (#26# . #51#) < (#26# . #50#) < (#26# . #78#) < (#26# . #49#) < (#26# . #48#) < (#26# . #47#) < (#50# . #47#) < (#50# . #48#) < (#50# . #49#) < (#50# . #50#) < (#50# . #51#) < (#50# . #28#) < (#50# . #52#) < (#50# . #29#) < (#50# . #53#) < (#50# . #54#) < (#50# . #55#) < (#50# . #56#) < (#50# . #57#) < (#50# . #58#) < (#50# . #59#) < (#50# . #60#) < (#50# . #80="do") = (#75# . #80#) > (#24# . #80#) > (#25# . #80#) > (#26# . #80#) > (#27# . #80#) > (#28# . #80#) > (#29# . #80#) > (#30# . #80#) > (#31# . #80#) > (#74# . #80#) > (#32# . #80#) > (#33# . #80#) > (#34# . #80#) > (#35# . #80#) > (#36# . #80#) > (#80# . #47#) < (#80# . #48#) < (#80# . #49#) < (#80# . #50#) < (#80# . #51#) < (#80# . #28#) < (#80# . #52#) < (#80# . #29#) < (#80# . #53#) < (#80# . #54#) < (#80# . #55#) < (#80# . #56#) < (#80# . #57#) < (#80# . #58#) < (#80# . #59#) < (#80# . #60#) < (#80# . #81="done") = (#75# . #81#) > (#24# . #81#) > (#25# . #81#) > (#26# . #81#) > (#27# . #81#) > (#28# . #81#) > (#29# . #81#) > (#30# . #81#) > (#31# . #81#) > (#74# . #81#) > (#32# . #81#) > (#33# . #81#) > (#34# . #81#) > (#35# . #81#) > (#36# . #81#) > (#51# . #76#) < (#51# . #82="downto") < (#51# . #84="to") < (#51# . #83="do") = (#82# . #83#) > (#84# . #83#) > (#75# . #28#) < (#35# . #28#) > (#34# . #28#) > (#33# . #28#) > (#32# . #28#) > (#31# . #28#) < (#30# . #28#) < (#29# . #28#) > (#27# . #28#) > (#25# . #28#) > (#24# . #28#) > (#28# . #59#) < (#28# . #58#) < (#28# . #57#) < (#28# . #56#) < (#28# . #55#) < (#28# . #54#) < (#28# . #53#) < (#28# . #29#) < (#28# . #52#) < (#28# . #51#) < (#28# . #50#) < (#28# . #78#) < (#28# . #49#) < (#28# . #48#) < (#28# . #47#) < (#52# . #47#) < (#52# . #48#) < (#52# . #49#) < (#52# . #50#) < (#52# . #51#) < (#52# . #28#) < (#52# . #52#) < (#52# . #29#) < (#52# . #53#) < (#52# . #54#) < (#52# . #55#) < (#52# . #56#) < (#52# . #57#) < (#52# . #58#) < (#52# . #59#) < (#52# . #60#) < (#52# . #85="with") = (#24# . #85#) > (#25# . #85#) > (#26# . #85#) > (#27# . #85#) > (#28# . #85#) > (#29# . #85#) > (#30# . #85#) > (#31# . #85#) > (#74# . #85#) > (#32# . #85#) > (#33# . #85#) > (#34# . #85#) > (#35# . #85#) > (#36# . #85#) > (#85# . #86="->") < (#85# . #87="as") < (#85# . #88="|-or") < (#85# . #89=",") < (#85# . #90="exception-case") < (#85# . #91="when") < (#85# . #75#) < (#29# . #86#) < (#29# . #87#) < (#29# . #88#) < (#29# . #89#) < (#29# . #90#) < (#29# . #91#) < (#29# . #75#) < (#53# . #91#) < (#53# . #90#) < (#53# . #89#) < (#53# . #88#) < (#53# . #87#) < (#53# . #92="-dlpd-") < (#53# . #30#) = (#75# . #30#) < (#91# . #30#) > (#90# . #30#) > (#35# . #30#) > (#34# . #30#) > (#33# . #30#) > (#32# . #30#) > (#74# . #30#) > (#30# . #30#) > (#28# . #30#) > (#27# . #30#) > (#26# . #30#) > (#25# . #30#) > (#24# . #30#) > (#89# . #30#) > (#88# . #30#) > (#87# . #30#) > (#92# . #30#) > (#30# . #59#) < (#30# . #58#) < (#30# . #57#) < (#30# . #56#) < (#30# . #55#) < (#30# . #54#) < (#30# . #53#) < (#30# . #29#) < (#30# . #52#) < (#30# . #51#) < (#30# . #50#) < (#30# . #78#) < (#30# . #49#) < (#30# . #48#) < (#30# . #47#) < (#54# . #47#) < (#54# . #48#) < (#54# . #49#) < (#54# . #50#) < (#54# . #51#) < (#54# . #28#) < (#54# . #52#) < (#54# . #29#) < (#54# . #53#) < (#54# . #54#) < (#54# . #55#) < (#54# . #56#) < (#54# . #57#) < (#54# . #58#) < (#54# . #59#) < (#54# . #60#) < (#54# . #31#) = (#93="let" . #38#) < (#93# . #39#) < (#93# . #40#) < (#93# . #41#) < (#93# . #42#) < (#93# . #43#) < (#93# . #44#) < (#93# . #3#) < (#93# . #45#) < (#93# . #104="and") < (#93# . #109="in") = (#55# . #94="exception-let") = (#94# . #37#) < (#94# . #74#) = (#56# . #47#) < (#56# . #48#) < (#56# . #49#) < (#56# . #50#) < (#56# . #51#) < (#56# . #28#) < (#56# . #52#) < (#56# . #29#) < (#56# . #53#) < (#56# . #54#) < (#56# . #55#) < (#56# . #56#) < (#56# . #57#) < (#56# . #58#) < (#56# . #59#) < (#56# . #95="mutable") < (#56# . #96="virtual") < (#56# . #97="private") < (#56# . #60#) < (#56# . #98="constraint") < (#56# . #105="val") < (#56# . #99="initializer") < (#56# . #100="method") < (#56# . #101="inherit") < (#56# . #32#) = (#95# . #32#) > (#96# . #32#) > (#97# . #32#) > (#38# . #32#) > (#98# . #32#) > (#99# . #32#) > (#100# . #32#) > (#101# . #32#) > (#57# . #102=":>") < (#23# . #33#) > (#22# . #33#) > (#21# . #33#) > (#102# . #33#) > (#58# . #59#) < (#58# . #58#) < (#58# . #57#) < (#58# . #56#) < (#58# . #55#) < (#58# . #54#) < (#58# . #53#) < (#58# . #29#) < (#58# . #52#) < (#58# . #51#) < (#58# . #50#) < (#58# . #49#) < (#58# . #48#) < (#58# . #47#) < (#58# . #103=";") < (#58# . #76#) < (#58# . #60#) < (#58# . #77#) < (#58# . #34#) = (#75# . #34#) > (#103# . #34#) > (#24# . #34#) > (#25# . #34#) > (#26# . #34#) > (#27# . #34#) > (#29# . #34#) > (#30# . #34#) > (#74# . #34#) > (#32# . #34#) > (#33# . #34#) > (#34# . #34#) > (#35# . #34#) > (#76# . #34#) > (#77# . #34#) > (#59# . #47#) < (#59# . #48#) < (#59# . #49#) < (#59# . #50#) < (#59# . #51#) < (#59# . #28#) < (#59# . #52#) < (#59# . #29#) < (#59# . #53#) < (#59# . #54#) < (#59# . #55#) < (#59# . #56#) < (#59# . #57#) < (#59# . #58#) < (#59# . #59#) < (#59# . #60#) < (#59# . #35#) = (#75# . #35#) > (#24# . #35#) > (#25# . #35#) > (#26# . #35#) > (#27# . #35#) > (#28# . #35#) > (#29# . #35#) > (#30# . #35#) > (#31# . #35#) > (#74# . #35#) > (#32# . #35#) > (#33# . #35#) > (#34# . #35#) > (#35# . #35#) > (#36# . #35#) > (#75# . #84#) > (#24# . #84#) > (#25# . #84#) > (#26# . #84#) > (#27# . #84#) > (#28# . #84#) > (#29# . #84#) > (#30# . #84#) > (#31# . #84#) > (#74# . #84#) > (#32# . #84#) > (#33# . #84#) > (#34# . #84#) > (#35# . #84#) > (#76# . #84#) > (#84# . #47#) < (#84# . #48#) < (#84# . #49#) < (#84# . #50#) < (#84# . #51#) < (#84# . #28#) < (#84# . #52#) < (#84# . #29#) < (#84# . #53#) < (#84# . #54#) < (#84# . #55#) < (#84# . #56#) < (#84# . #57#) < (#84# . #58#) < (#84# . #59#) < (#84# . #60#) < (#75# . #82#) > (#24# . #82#) > (#25# . #82#) > (#26# . #82#) > (#27# . #82#) > (#28# . #82#) > (#29# . #82#) > (#30# . #82#) > (#31# . #82#) > (#74# . #82#) > (#32# . #82#) > (#33# . #82#) > (#34# . #82#) > (#35# . #82#) > (#76# . #82#) > (#82# . #47#) < (#82# . #48#) < (#82# . #49#) < (#82# . #50#) < (#82# . #51#) < (#82# . #28#) < (#82# . #52#) < (#82# . #29#) < (#82# . #53#) < (#82# . #54#) < (#82# . #55#) < (#82# . #56#) < (#82# . #57#) < (#82# . #58#) < (#82# . #59#) < (#82# . #60#) < (#45# . #104#) > (#75# . #102#) > (#35# . #102#) > (#34# . #102#) > (#33# . #102#) > (#32# . #102#) > (#74# . #102#) > (#31# . #102#) > (#30# . #102#) > (#29# . #102#) > (#28# . #102#) > (#27# . #102#) > (#26# . #102#) > (#25# . #102#) > (#24# . #102#) > (#36# . #102#) > (#102# . #21#) < (#102# . #22#) < (#102# . #23#) < (#77# . #76#) < (#76# . #103#) > (#103# . #76#) < (#76# . #59#) < (#76# . #58#) < (#76# . #57#) < (#76# . #56#) < (#76# . #55#) < (#76# . #54#) < (#76# . #53#) < (#76# . #29#) < (#76# . #52#) < (#76# . #51#) < (#76# . #50#) < (#76# . #78#) < (#76# . #49#) < (#76# . #48#) < (#76# . #47#) < (#86# . #75#) > (#35# . #75#) > (#34# . #75#) > (#33# . #75#) > (#32# . #75#) > (#74# . #75#) > (#28# . #75#) > (#27# . #75#) > (#26# . #75#) > (#25# . #75#) > (#24# . #75#) > (#75# . #87#) < (#75# . #88#) < (#75# . #89#) < (#75# . #90#) < (#75# . #91#) < (#92# . #91#) < (#92# . #90#) < (#92# . #89#) < (#92# . #88#) < (#92# . #87#) < (#92# . #92#) < (#89# . #91#) > (#88# . #91#) > (#87# . #91#) > (#91# . #59#) < (#91# . #58#) < (#91# . #57#) < (#91# . #56#) < (#91# . #55#) < (#91# . #54#) < (#91# . #53#) < (#91# . #29#) < (#91# . #52#) < (#91# . #28#) < (#91# . #51#) < (#91# . #50#) < (#91# . #78#) < (#91# . #49#) < (#91# . #48#) < (#91# . #47#) < (#90# . #89#) < (#90# . #88#) < (#90# . #87#) < (#89# . #87#) > (#88# . #87#) > (#89# . #88#) > (#88# . #88#) = (#87# . #88#) > (#88# . #89#) < (#89# . #89#) = (#87# . #89#) > (#75# . #101#) > (#23# . #101#) > (#22# . #101#) > (#21# . #101#) > (#24# . #101#) > (#25# . #101#) > (#26# . #101#) > (#27# . #101#) > (#28# . #101#) > (#29# . #101#) > (#30# . #101#) > (#31# . #101#) > (#74# . #101#) > (#32# . #101#) > (#33# . #101#) > (#34# . #101#) > (#35# . #101#) > (#95# . #101#) > (#96# . #101#) > (#97# . #101#) > (#38# . #101#) > (#36# . #101#) > (#98# . #101#) = (#105# . #101#) = (#99# . #101#) = (#100# . #101#) = (#101# . #101#) = (#101# . #47#) < (#101# . #48#) < (#101# . #49#) < (#101# . #50#) < (#101# . #51#) < (#101# . #28#) < (#101# . #52#) < (#101# . #29#) < (#101# . #53#) < (#101# . #54#) < (#101# . #55#) < (#101# . #56#) < (#101# . #57#) < (#101# . #58#) < (#101# . #59#) < (#101# . #95#) < (#101# . #96#) < (#101# . #97#) < (#101# . #60#) < (#101# . #98#) = (#101# . #105#) = (#101# . #99#) = (#101# . #100#) = (#75# . #100#) > (#23# . #100#) > (#22# . #100#) > (#21# . #100#) > (#24# . #100#) > (#25# . #100#) > (#26# . #100#) > (#27# . #100#) > (#28# . #100#) > (#29# . #100#) > (#30# . #100#) > (#31# . #100#) > (#74# . #100#) > (#32# . #100#) > (#33# . #100#) > (#34# . #100#) > (#35# . #100#) > (#95# . #100#) > (#96# . #100#) > (#97# . #100#) > (#38# . #100#) > (#36# . #100#) > (#98# . #100#) = (#105# . #100#) = (#99# . #100#) = (#100# . #100#) = (#100# . #47#) < (#100# . #48#) < (#100# . #49#) < (#100# . #50#) < (#100# . #51#) < (#100# . #28#) < (#100# . #52#) < (#100# . #29#) < (#100# . #53#) < (#100# . #54#) < (#100# . #55#) < (#100# . #56#) < (#100# . #57#) < (#100# . #58#) < (#100# . #59#) < (#100# . #95#) < (#100# . #96#) < (#100# . #97#) < (#100# . #60#) < (#100# . #98#) = (#100# . #105#) = (#100# . #99#) = (#75# . #99#) > (#23# . #99#) > (#22# . #99#) > (#21# . #99#) > (#24# . #99#) > (#25# . #99#) > (#26# . #99#) > (#27# . #99#) > (#28# . #99#) > (#29# . #99#) > (#30# . #99#) > (#31# . #99#) > (#74# . #99#) > (#32# . #99#) > (#33# . #99#) > (#34# . #99#) > (#35# . #99#) > (#95# . #99#) > (#96# . #99#) > (#97# . #99#) > (#38# . #99#) > (#36# . #99#) > (#98# . #99#) = (#105# . #99#) = (#99# . #99#) = (#99# . #47#) < (#99# . #48#) < (#99# . #49#) < (#99# . #50#) < (#99# . #51#) < (#99# . #28#) < (#99# . #52#) < (#99# . #29#) < (#99# . #53#) < (#99# . #54#) < (#99# . #55#) < (#99# . #56#) < (#99# . #57#) < (#99# . #58#) < (#99# . #59#) < (#99# . #95#) < (#99# . #96#) < (#99# . #97#) < (#99# . #60#) < (#99# . #98#) = (#99# . #105#) = (#95# . #105#) > (#96# . #105#) > (#97# . #105#) > (#38# . #105#) > (#98# . #105#) = (#105# . #47#) < (#105# . #48#) < (#105# . #49#) < (#105# . #50#) < (#105# . #51#) < (#105# . #28#) < (#105# . #52#) < (#105# . #29#) < (#105# . #53#) < (#105# . #54#) < (#105# . #55#) < (#105# . #56#) < (#105# . #57#) < (#105# . #58#) < (#105# . #59#) < (#105# . #95#) < (#105# . #96#) < (#105# . #60#) < (#105# . #98#) = (#75# . #98#) > (#23# . #98#) > (#22# . #98#) > (#21# . #98#) > (#24# . #98#) > (#25# . #98#) > (#26# . #98#) > (#27# . #98#) > (#28# . #98#) > (#29# . #98#) > (#30# . #98#) > (#31# . #98#) > (#74# . #98#) > (#32# . #98#) > (#33# . #98#) > (#34# . #98#) > (#35# . #98#) > (#95# . #98#) > (#96# . #98#) > (#97# . #98#) > (#38# . #98#) > (#36# . #98#) > (#98# . #98#) = (#98# . #47#) < (#98# . #48#) < (#98# . #49#) < (#98# . #50#) < (#98# . #51#) < (#98# . #28#) < (#98# . #52#) < (#98# . #29#) < (#98# . #53#) < (#98# . #54#) < (#98# . #55#) < (#98# . #56#) < (#98# . #57#) < (#98# . #58#) < (#98# . #59#) < (#98# . #95#) < (#98# . #96#) < (#98# . #97#) < (#98# . #60#) < (#95# . #38#) < (#96# . #38#) < (#107="mutable" . #106=";") > (#106# . #107#) < :smie-open/close-alist ((#96# . opener) (#95# . opener) (#90# . opener) (#92# . opener) (#45# . opener) (#35# . closer) (#59# . opener) (#34# . closer) (#58# . opener) (#56# . opener) (#93# . opener) (#54# . opener) (#53# . opener) (#29# . opener) (#52# . opener) (#51# . opener) (#81# . closer) (#50# . opener) (#78# . opener) (#24# . closer) (#48# . opener) (#73# . closer) (#72# . opener) (#47# . opener) (#16# . opener) (#15# . opener) (#70# . opener) (#68# . opener) (#67# . closer) (#66# . opener) (#64# . closer) (#63# . opener) (#39# . opener) (#40# . opener) (#41# . opener) (#42# . opener) (#43# . opener) (#44# . opener)) :smie-closer-alist ((#63# . #64#) (#66# . #67#) (#68# . #69#) (#70# . #71#) (#47# . #108#) (#72# . #73#) (#48# . #24#) (#78# . #26#) (#78# . #79#) (#50# . #81#) (#50# . #80#) (#51# . #27#) (#51# . #83#) (#52# . #85#) (#53# . #30#) (#54# . #31#) (#93# . #109#) (#55# . #94#) (#56# . #32#) (#58# . #34#) (#59# . #35#)))) gethash #111="function" #112=";" > cl--assertion-failed (eq '> (gethash (cons #111# #112#) bnfprec2)) remhash smie-prec2->grammar smie-merge-prec2s smie-precs->prec2 reverse ((nonassoc ".") (right "**…" "lsl" "lsr" "asr") (nonassoc "*…" "/…" "%…" "mod" "land" "lor" "lxor") (left "+…" "-…") (assoc "::") (right "@…" "^…") (left "=…" "<…" ">…" "|…" "&…" "$…") (right "&" "&&") (right "or" "||") (assoc ",") (right "<-" ":=") (assoc ";"))] 7)) #@15 (fn TOKENS) (defalias 'tuareg-smie--search-backward #[257 "\300\301 \262\211G\302U\204\211\235?\2020o\2043\3031#\304 \210\3050\2020\3068\3068T{\262\300\262\204\207" [nil tuareg-smie--backward-token 0 (scan-error) backward-sexp t 3] 6 (#$ . 72449)]) #@15 (fn TOKENS) (defalias 'tuareg-smie--search-forward #[257 "\300\301 \262\211G\302U\204\211\235?\202/m\2042\3031#\304 \210\3050\202/\3068\3078{\262\300\262\204\207" [nil tuareg-smie--forward-token 0 (scan-error) forward-sexp t 2 3] 6 (#$ . 72720)]) (defalias 'tuareg-skip-blank-and-comments #[0 "\300d!\207" [forward-comment] 2]) (defconst tuareg-smie--type-label-leader '("->" ":" "=" "")) (defconst tuareg-smie--exp-operator-leader (byte-code "\301\302\303\304\"\"\207" [tuareg-smie-grammar delq nil mapcar #[257 "\3008\247\205 \211@\207" [2] 3 "\n\n(fn X)"]] 5)) (defconst tuareg-smie--float-re "[0-9]+\\(?:\\.[0-9]*\\)?\\(?:e[-+]?[0-9]+\\)") (defalias 'tuareg-smie--forward-token #[0 "\301 \210`\302\303\304!\305U\2034`\303\306!\210\302f\307>\2030`Sf\310=\2030\212\211b\210\311!)\2030\305\225b\210\210\202Z\304\302w\305U\2034\303\304!\305U\2034`Sf\312=\203Z\311\313!\203Z`S\262\305\225b\210\314\206a`\"\207" [tuareg-smie--float-re tuareg-skip-blank-and-comments nil skip-syntax-forward "." 0 "w_'" (45 43) 101 looking-at 37 "[[:alpha:]]+" buffer-substring-no-properties] 5]) (defalias 'tuareg-smie--backward-token #[0 "\301`[!\210`\302\303x\304U\203o\305\302!\304U\203o\305\306!\210`Sf\211\307\267\210\202\234\303f\310>\203k\212\311u\210\305\312!\210\313!)\203k\304\225`Y\203k\304\224b\266\202\234`\311u\210\302\303x\304U\203d\305\302!\304U\203d\211b\266\202\234\211S\266\203\202\234\210\202\234\303f\314>\204\234\303f\315=\203\214`Sf\316>\203\214\317\303x\210\202\234\302\303x\304U\203\214\305\302!\304U\203\214\320`\"\207" [tuareg-smie--float-re forward-comment "." nil 0 skip-syntax-backward "w_'" #s(hash-table size 3 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (43 36 45 36 37 73)) (48 49 50 51 52 53 54 55 56 57 48) -1 "w_" looking-at (59 44) 46 (48 49 50 51 52 53 54 55 56 57 48) "0-9" buffer-substring-no-properties] 5]) #@67 Move point to the end of the next token and return its SMIE name. (defalias 'tuareg-smie-forward-token #[0 "\302 \211G\303U\203\304\305!\204\207\303\225b\210\306\303!\207\211\307\232\203/\310\311\304!)\262\203/\312u\210\313\207\211\314\232\203F\315\311\304!)\262\203F\312u\210\316\207\211\317\232\203]\320f\321>\203]\312u\210\322\323`Sf\"\207\211\324\235\204k\211\303H\325>\203p\212\326 )\207\211\327\235\203\202\304\330!\203\202\303\225b\210\331\207\332\311\304!)\262\203\257\333\320\311\334#)\266\203\203\257\212\335 \210\335 \235)\203\257\312u\210\331\207\336\320\311\334#)\266\203\203\307\337u\210\211\303\337O\207\207" [inhibit-changing-match-data tuareg-smie--type-label-leader tuareg-smie--forward-token 0 looking-at "{<\\|\\[|" match-string "|" "\\]" t 1 "|]" ">" "}" ">}" "." nil (60 126) string 46 ("let" "=" "->" "module" "class" "open" "type" "with" "and" "exception") (42 47 37 43 45 64 94 61 60 62 124 38 36) tuareg-smie-backward-token ("~" "?") "[[:alpha:]_][[:alnum:]'_]*:" "label:" ":\\(?:[^:]\\|\\'\\)" "\\`[[:alpha:]_]" string-match tuareg-smie--backward-token "\\`[[:alpha:]_].*\\.\\'" -1] 8 (#$ . 74632)]) (defconst tuareg-smie--exp-leaders '("->" ".<" ";" "[|" "begin" "=" "do" "downto" "else" "if" "in" "match" "then" "to" "try" "when" "while")) #@75 Return "d-let" if "let" at point is a decl, or just "let" if it's an exp. (defalias 'tuareg-smie--let-disambiguate #[0 "\212\302 \211\235\204B\211G\303U\203!o\204F\304\305`S!@\306\"\307=\202?\211\303Hz\310=\203F\211\311\232\204F\312 \"\211?\206=\3138\250\262\203F\314\202G\315\262)\207" [tuareg-smie--exp-leaders smie-grammar tuareg-smie--backward-token 0 mod syntax-after 256 4 46 ";;" assoc 2 "let" "d-let"] 4 (#$ . 75945)]) (defalias 'tuareg-smie--label-colon-p #[0 "\301\302x\303U?\205\304\302x\303U?\206\212\305 \235)\207" [tuareg-smie--type-label-leader "[[:alnum:]]_" nil 0 "?~" tuareg-smie--backward-token] 2]) #@265 Return which kind of "=" we've just found. Point is not moved and should be right in front of the equality. Return values can be "f=" for field definition, "d=" for a normal definition, "c=" for a type equality constraint, and "=…" for an equality test. (defalias 'tuareg-smie--=-disambiguate #[0 "\212`\301\302!\211\303\235\203G\304\305 `W\2056\211G\306U\203#\307\211\262\2026\211\306Hz\310>\2066\211\311\235\2066\307\211\262\262\204 \211\262\203G\266\312\202\263\211\313\232\203a\212\314u\210\315 \316\232)\203a\302!\262\202G\211\317\235\203u\302!\320\235\203u\266\321\202\263\211\322\235\204\201\266\323\202\263\211\324\235\203\260\325 \326\235\204\252\211\327\232\203\260Tb\203\260\330\331\332\333\"B!\211\331\232\262\203\260\266\334\202\263\266\321)\207" [tuareg-smie-grammar ("type" "let" "module" "class" "and" "external" "val" "method" "=" ":=" "if" "then" "else" "->" ";") tuareg-smie--search-backward ("{" ";") t tuareg-smie--forward-token 0 nil (119 95) ("." ";") "f=" "->" 2 tuareg-smie-backward-token "t->" ("=" ":=") ("type" "module") "d=" ("type" "let" "module" "class" "and" "external" "val" "method") "=…" ("type" "module") tuareg-smie--backward-token ("with" "and") "type" tuareg-smie--search-forward "=" mapcar car "c="] 8 (#$ . 76590)]) #@209 Return which kind of ":=" we've just found. Point is not moved and should be right in front of the equality. Return values can be ":=" for assignment definition, "c=" for destructive equality constraint. (defalias 'tuareg-smie--:=-disambiguate #[0 "\212\300\301!\211\302\235\203\303 \304\235\203\266\305\202\266\306)\207" [("type" "let" "module" "class" "and" "external" "val" "method" "=" ":=" "if" "then" "else" "->" ";") tuareg-smie--search-backward ("type" "module") tuareg-smie--backward-token ("with" "and") "c=" ":="] 4 (#$ . 77906)]) #@61 Return non-nil if we're just in front of an or pattern "|". (defalias 'tuareg-smie--|-or-p #[0 "\212\300\301!\211\302\267\2023\303\2024\300\304!\211\262\305\232\204\211\306\267\202/\307 \310\232?\2024\311\2024\311\2024\303\2024\311\262)\207" [tuareg-smie--search-backward ("|" "[" "->" "with" "function" "=" "of" "in" "then") #s(hash-table size 2 test equal rehash-size 1.5 rehash-threshold 0.8125 purecopy t data ("(" 10 "|" 14)) t ("|" "with" "function" "=" "of" "in" "then") "|" #s(hash-table size 5 test equal rehash-size 1.5 rehash-threshold 0.8125 purecopy t data ("=" 31 "of" 39 "[" 43 "{" 43 "(" 43)) tuareg-smie--=-disambiguate "d=" nil] 3 (#$ . 78467)]) #@73 Move point to the beginning of the next token and return its SMIE name. (defalias 'tuareg-smie-backward-token #[0 "\301 \211\302\267\202\203\303 \207\304u\210\305\207\212\301 )\211\306\232\203\307P\207\211\310\235\203,\311\232\203,\312\207\207\212\313\314\315!\262\211\316\232\203@\317 \2040\211\320\235\203J\202K\321\262)\207\212\301 \211\322\267\202d\323\202e\324\202e\325\202e\262)\207\212\326 \210\326 \327\235\203z\330P\202{\211)\207\331 \207\332 \207\211G\333U\203\246`Sf\334>\203\235\212\335u\210\336\337!)\204\236\207\333\224b\210\340\333!\207\211\341\232\203\271`Sf\342=\203\271\343u\210\344\207\211\345\232\203\314`Sf\346=\203\314\343u\210\347\207\211\341\232\203\333\350 \203\331\351\207\341\207\211\333H\352>\203\n\211\353\235\203\352\207\211\333H\354=\203\211G\355V\203\211\355H\354=\203\356\207\357\333H\360\"\207\211\361\267\202-`\317 \203\362\207\211b\210\207\212\301 )\211\363\267\202+\364\207\365\207\207\366\313\367\370#)\266\203\203D\211GSu\210\371\207\207" [inhibit-changing-match-data tuareg-smie--backward-token #s(hash-table size 11 test equal rehash-size 1.5 rehash-threshold 0.8125 purecopy t data ("let" 8 ".<.~" 11 "module" 16 "class" 16 "open" 16 "->" 46 "type" 79 "with" 105 "and" 105 "=" 125 ":=" 128)) tuareg-smie--let-disambiguate 2 ".~" "let" "l-" ("with" "and") "module" "w-module" nil tuareg-smie--search-backward ("with" "|" "fun" "function" "functor" "type" ":" "of") ":" tuareg-smie--label-colon-p ("with" "|" "fun" "function" "functor") "t->" #s(hash-table size 4 test equal rehash-size 1.5 rehash-threshold 0.8125 purecopy t data ("module" 88 "and" 92 "with" 92 ":" 96)) "m-type" "w-type" "d-type" tuareg-smie--forward-token ("type" "module") "m-" tuareg-smie--=-disambiguate tuareg-smie--:=-disambiguate 0 (125 93) -2 looking-at ">}\\||\\]" match-string "|" 91 -1 "[|" "<" 123 "{<" tuareg-smie--|-or-p "|-or" (42 47 37 43 45 64 94 61 60 62 124 38 36) ("|" "||" "&" "&&" "<-" "->" ">.") 42 1 "**…" string 8230 #s(hash-table size 2 test equal rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (":" 272 "exception" 285)) "label:" #s(hash-table size 3 test equal rehash-size 1.5 rehash-threshold 0.8125 purecopy t data ("|" 295 "with" 295 "let" 297)) "exception-case" "exception-let" "\\`[[:alpha:]_].*\\.\\'" t string-match "."] 8 (#$ . 79148)]) #@19 (fn KIND TOKEN) (defalias 'tuareg-smie-rules #[514 "\306=\203\211\307\235\203\310\311!\203\312 \206\277\306=\203%\211\313\232\203%\314\207\315=\2031\316!\206\277\211\317\232\203?\310\320!\203?\314\207\211\321\235\203\270\315=\203]\211\322\235\203]\310\323!\203]\324!\206\277\325 \203\202\326\327\311\330\331$\203\202\315=\203\200\325 \203\200\326\330\327\331#\203\200\314\207\207\211\332\232\203\264\325 \203\264\326\327!\204\264\310\327!\203\264\333\301!\205\267 \205\277 A@b\210\334 \210\335 \210\336i\337ZB\207\340!\207\341\267\202\276\211\342\267\202\310\n\207\313\207\343\207\211\344\235\207\345\207\211\346\267\202\347\337!\207\325 ?\205\277\326\327!\203\352\347\n!\207\326\350!\205\277\347 \207\347 \207\325 ?\205\277\326\351!\205\277\347 \207\211\311\232\203\310\352!\203\347 \207\211\311\232\203C\310\327!\203C\353\311!\3378\327\232\204/\354\355!\210\211A@b\210\353\327!\262\211A@b\210\336\356 B\207\211\357\232\203b\310\327!\203b\212\353!\210\353\360!A@b\210\336\337i\\)B\207\211\361\235\203\247\362 \205\277\363\326 \"\205\277\364\363\326\"\206\201\363\310\"?\262\203\234\211\365\235\203\227\310\366\367\"\204\227\314\202\230\n\347!\207\212\353\360!\210\336\356 )B\207\f\203\272\211\370\232\203\272\310\332!\203\272\347 \207\371!\206\277\211\372\232\205\277\347 !\207\211\373\267\202\203\310\320!\205\277\374\330!?\205\277\314\207\310\311!\203\212\337\375\332!8\332\232?\205\370\337\353\332!8\311\232)\203\347\337!\207@\207\310\331!\203'\212\337\375\332!8\332\232?\205\337\353\332!8\331\232)\203$\347\n!\207@\207\310\332!\2030@\207\310\376!\203V\212\353\377!\210`Sf\201C=\203S\336\n\201Du\210\356 \\B\202T\314)\207\314\207\310\201E\201F\"\203g\347\337!\207\310\201G!\203r\347 \207\337\207A\207\310\352!\203\343\207\337\\\207\211\201H\235\204\230\337\201IB\"8:\203\232\343\207\211\201J\235\203\274\356 \201Ku\210\201L\343w\210l?\205\273\336i\n\\^B\207\n\207\343\207" [tuareg-with-indent smie--parent tuareg-default-indent tuareg-smie--exp-operator-leader tuareg-match-patterns-aligned tuareg-match-when-indent :after ("." ";") smie-rule-parent-p "with" tuareg-smie--with-module-fields-rule ";;" 0 :before tuareg-smie--monadic-rule "and" "type" (";" "|" "," "and" "m-and") ("|" ";") "then" tuareg-smie--if-then-hack smie-rule-bolp smie-rule-prev-p "d=" "[" "function" "|" boundp smie-indent-forward-token tuareg-skip-blank-and-comments column 2 smie-rule-separator #s(hash-table size 5 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (:elem 190 :list-intro 202 :close-all 206 :before 208 :after 458)) #s(hash-table size 2 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (basic 196 empty-line-token 198)) nil ("fun") t #s(hash-table size 5 test equal rehash-size 1.5 rehash-threshold 0.8125 purecopy t data ("d=" 214 "fun" 218 "match" 218 "then" 243 "if" 246)) smie-rule-parent "begin" "else" "{" smie-backward-sexp cl--assertion-failed (equal (nth 2 td) "d=") smie-indent-virtual "m-with" halfsexp ("let" "(" "[" "{" "sig" "struct" "begin") smie-rule-hanging-p apply ("{" "(" "{<" "[" "[|") ("(" "struct" "sig") "let" "d-let" "|-or" tuareg-smie--object-hanging-rule "when" #s(hash-table size 5 test equal rehash-size 1.5 rehash-threshold 0.8125 purecopy t data ("d=" 464 "->" 479 ":" 600 "in" 628 "with" 631)) smie-rule-next-p smie-forward-sexp "fun" "->" tuareg-match-clause-indent tuareg-in-indent tuareg-smie-grammar 40 -1 "val" "external" "module" ("." "t->" "]") assoc ("{" "(") 1 " "] 7 (#$ . 81501)]) (defalias 'tuareg-smie--with-module-fields-rule #[0 "\212\300u\210\301\302!\210\303\304!\205\301\302!\210\305iB)\207" [1 smie-backward-sexp halfsexp looking-at "\\(?:\\sw\\|\\s_\\)+\\.[ ]*$" column] 2]) #@25 Monadic infix operators (defconst tuareg-smie--monadic-operators '(">>|" ">>=" ">>>" ">|=") (#$ . 85285)) (defconst tuareg-smie--monadic-op-re (regexp-opt tuareg-smie--monadic-operators)) #@14 (fn TOKEN) (defalias 'tuareg-smie--monadic-rule #[257 "\211\302\232\203S\303!\203S\212\304 \210\305\306\307!\211@\203!\3108\311\235\202G\3108\312\235\203-\305\202G\3108\313\235\205G\314 \235\203F\315\316 B\262\305\202G\317\262\204\211\262)\206x\211\320\235\205x\321 ?\205x\212\322 \211\302\232\205u\303!\205u\306!\210\315iB\262)\207" [tuareg-smie--monadic-op-re tuareg-smie--monadic-operators ">…" looking-at tuareg-smie--forward-token nil smie-backward-sexp halfsexp 2 ("->") (";" "d=") ("fun" "function") tuareg-smie--backward-token column smie-indent-virtual t ("fun" "function") smie-rule-bolp tuareg-smie-backward-token] 5 (#$ . 85479)]) #@14 (fn TOKEN) (defalias 'tuareg-smie--object-hanging-rule #[257 "\211\301\235\203\"\302\303!\203\"\212\304v\210\305\306!A@b\210\307 \310\\B\262)\207\211\303\232\2050\302\311!\2050\312 \207" [tuareg-default-indent ("inherit" "val" "method" "constraint") smie-rule-parent-p "object" 1 smie-backward-sexp halfsexp smie-indent-virtual column "class" smie-rule-parent] 5 (#$ . 86159)]) #@14 (fn TOKEN) (defalias 'tuareg-smie--if-then-hack #[257 "\212\300\301\302!\211\2628\303\232\203\"\302\304!\3018\305\232\204\306\307!\210\210\202\3018\232\2036\211A@b\210\310\311 B\202Y\312\232\203V\3018\313\232\203V\314 \204V\211A@b\210\310\315i\\B\202Y\310iB\262)\207" [nil 2 smie-backward-sexp "then" halfsexp #1="if" cl--assertion-failed (equal (nth 2 pdi) #1#) column smie-indent-virtual "|" "with" smie-rule-bolp 3] 5 (#$ . 86552)]) (defalias 'tuareg-smie--inside-string #[0 "\300\301 8\205\212\302\301 8Tb\210i)\207" [3 syntax-ppss 8] 2]) (byte-code "\300\301\302\303\304DD\305\306\307%\207" [custom-declare-variable tuareg-indent-align-with-first-arg funcall function #[0 "\300\207" [nil] 1] "Non-nil if indentation should try to align arguments on the first one.\nWith a non-nil value you get\n\n let x = List.map (fun x -> 5)\n my list\n\nwhereas with a nil value you get\n\n let x = List.map (fun x -> 5)\n my list" :type boolean] 6) (defalias 'tuareg-smie--args #[0 "\206(\304\305 8\206(\306 !\206(\306\307!\206(\212\310 )A@\247\206(\311\212\312 )8\247?\205\217\212\313\211\314 @\204C`B\211\262\203C\315 \203/\212\314 @?\206P\n\316 \"\262)\204]\266\313\202\216\211\203x@b\210\317\320!\203r\320 \266\202\202\216i\266\202\202\216@b\210\321\322!\317\320!\203\212\320 \202\213i\\\266\202)\207" [tuareg-indent-align-with-first-arg comment-start-skip smie-rules-function smie-backward-token-function 8 syntax-ppss looking-at "[ ]*$" smie-indent-forward-token 2 smie-indent-backward-token nil smie-backward-sexp smie-indent--bolp :list-intro fboundp smie-indent--current-column smie-indent--offset args] 5]) #@116 Skip backward a single comment and at most one preceding newline. Return a non-nil value if a comment was skipped. (defalias 'tuareg--skip-backward-comment #[0 "\300\301x\210`\302h\303\"\203\304\305!\203\300\301x\210\306`Sx\210\307\207\211b\210\301\207" [" " nil char-equal 41 forward-comment -1 "\n" t] 4 (#$ . 88259)]) #@53 Skip 'sticky' comments and ';;' after a definition. (defalias 'tuareg--skip-backward-comments-semicolon #[0 "\301\302\303!)\262\203\304\305x\210\306`Sx\210\307 \204\310\305x\207" [inhibit-changing-match-data "[ ]*(\\*" t looking-at " " nil "\n" tuareg--skip-backward-comment " ;"] 3 (#$ . 88591)]) #@116 Skip forward a single comment and at most one subsequent newline. Return a non-nil value if a comment was skipped. (defalias 'tuareg--skip-forward-comment #[0 "\300\301w\210`\302`Tw\210\300\301w\210\303g\304\"\203\305\306!\203\307\207\211b\210\301\207" [" " nil "\n" char-equal 40 forward-comment 1 t] 4 (#$ . 88906)]) #@58 Skip ';;' and then 'sticky' comments after a definition. (defalias 'tuareg--skip-forward-comments-semicolon #[0 "\300\301w\210\302 \205\f\202\207" [" ;" nil tuareg--skip-forward-comment] 2 (#$ . 89236)]) (defconst tuareg-starters-syms '("type" "d-let" "exception" "module" "class" "val" "external" "open")) #@128 Move the point backward to the beginning of a definition. Return the token starting the phrase (`nil' if it is an expression). (defalias 'tuareg-backward-beginning-of-defun #[0 "\301 \3028\203\3038b\266\202\304\305!\306U\203\307 \210\210\310\211`\311\312!\262@\203?\3138\235\203?A@b\210\3138\262\202\244@\203L\3138\312\230\204\244\211b\210\311\314!\262@\203n\3138\235\203nA@b\210\3138\262\202\244@\203{\3138\312\230\204\244@\203\240@\247\204\240o\204\244A@b\210`\262\315 b\210\211\312\230?\262\202\241\316\204O\207" [tuareg-starters-syms syntax-ppss 3 8 skip-syntax-forward "w_" 0 tuareg--skip-backward-comments-semicolon nil smie-backward-sexp ";;" 2 halfsexp tuareg-smie-backward-token t] 6 (#$ . 89554)]) (defalias 'tuareg--skip-double-semicolon #[0 "\300 \210\301\302!\205\f\303\225b\207" [tuareg-skip-blank-and-comments looking-at ";;[ \n]*" 0] 2]) #@111 Assuming that we are at the beginning of a definition, move to its end. See variable `end-of-defun-function'. (defalias 'tuareg-end-of-defun #[0 "\301\302!\3038\235\203\301\304!\210\210\305 \207" [tuareg-starters-syms smie-forward-sexp ";;" 2 halfsexp tuareg--skip-forward-comments-semicolon] 3 (#$ . 90466) nil]) #@119 Move point backward to the beginning of a definition. See variable `beginning-of-defun-function'. (fn &optional ARG) (defalias 'tuareg-beginning-of-defun #[256 "\211\204\300\262\211\301V\203!\211\301V\203Fo\204F\302 \210\211S\262\202 \302 \210o\204+\303 \210\211\301W\203Cm\204C\304 \210\305\306!\210\211T\262\202+\302 \210\307\207" [1 0 tuareg-backward-beginning-of-defun tuareg-end-of-defun tuareg--skip-double-semicolon smie-forward-sexp halfsexp t] 3 (#$ . 90791) "^P"]) (defalias 'tuareg-skip-siblings #[0 "o\204&\301 \211@?\206\3028\303\230\205\304 \262\203&\305 \210\306`[!\210\202\307\310\311!)\262\205;\312v\210\301\313!\210\314 \207" [inhibit-changing-match-data smie-backward-sexp 2 ";;" tuareg-smie-backward-token tuareg-backward-beginning-of-defun forward-comment "in" t looking-at 1 halfsexp tuareg-skip-siblings] 3]) (defalias 'tuareg--current-fun-name #[0 "\300 \205 \212\301 \210\302 \210\301 \211\303\235\204\211\202\302 \210\301 \262)\207" [tuareg-backward-beginning-of-defun tuareg-smie-forward-token tuareg-skip-blank-and-comments ("rec" "type")] 3]) (byte-code "\300\301\302\303\304DD\305\306\307%\207" [custom-declare-variable tuareg-max-name-components funcall function #[0 "\300\207" [3] 1] "Maximum number of components to use for the current function name." :type integer] 6) (defalias 'tuareg-current-fun-name #[0 "\212\301\211\211\210\302V\203-\303 \211\262\203-S\262\203$\211\304Q\202%\211\262\305 \210\202\266\203)\207" [tuareg-max-name-components nil 0 tuareg--current-fun-name "." tuareg-skip-siblings] 6]) (byte-code "\300\301\302\303#\210\304\301\302\305#\207" [defalias tuareg--beginning-of-phrase tuareg-backward-beginning-of-defun nil make-obsolete "Apr 10, 2019"] 4) #@203 Return a couple (BEGIN . END) for the OCaml phrase around POS, including comments after the phrase. In case of error, move the point at the beginning of the error and return `nil'. (fn &optional POS) (defalias 'tuareg-region-of-defun #[256 "\300\301\211\212\203 b\210\302 \210`\262\303 \210`\262`dW\203*\304\305!\210\211`U\203*\301\262)\2033B\207\211b\210\301\207" [t nil tuareg-backward-beginning-of-defun tuareg-end-of-defun smie-forward-sexp halfsexp] 6 (#$ . 92554)]) #@183 Return a triplet (BEGIN END END-WITH-COMMENTS) for the OCaml phrase around POS. In case of error, move the point at the beginning of the error and return `nil'. (fn &optional POS) (defalias 'tuareg-discover-phrase #[256 "\300!\301\205Ab\210\302`[!\210`\262@AE\207" [tuareg-region-of-defun nil forward-comment] 6 (#$ . 93047)]) #@123 Assume point is inside a string and return (START . END), the positions delimiting the string (including its delimiters). (defalias 'tuareg--string-boundaries #[0 "\212\300\301 8\302b\210\303 \210`S\262B\266\202)\207" [8 syntax-ppss nil smie-forward-sexp] 4 (#$ . 93392)]) #@99 Assume the point is inside a string delimited by " and jusfify it. This function moves the point. (defalias 'tuareg--fill-string #[0 "\303 \304 @\305\223\304 A\305\223\305\306\211\307\310!\310!\"\210\310!b\210\311iT\312\"\313\314!\2032\315\316!\210\317\320\310!\306#\203C\315\321!\210\2022\322\310!\310!\"\210\323\310!\310!S\"\210\310!b\210\305\210`\310!W\203y\324`\325\"\204p\326c\210\305u\210\305\210\202^\305\211\223\210\211\305\211\223+\207" [fill-prefix fill-individual-varying-indent use-hard-newlines tuareg--string-boundaries make-marker nil t indent-region marker-position make-string 32 looking-at "\"\\\\ *[\n ] *" replace-match "\"" re-search-forward " +\\\\ *[\n ] *" " " set-hard-newline-properties fill-region get-char-property hard " \\"] 8 (#$ . 93675)]) #@86 Assumes the point is inside a comment and justify it. This function moves the point. (defalias 'tuareg--fill-comment #[0 "\302 \303\304 8\305\223\302 \305\306\307!b\210\310 \210\311\312i\\\313\"\314\315!\210\211`\305\223\210\307!b\210\307!\316\317\306#\203B\320\321\224\321\225\322\306$\210\202.\210\323\"\210\324\307!\307!\325#\210\305\211\223\210\211\305\211\223*\207" [fill-prefix use-hard-newlines make-marker 8 syntax-ppss nil t marker-position indent-according-to-mode make-string 3 32 forward-comment 1 re-search-forward "\n\n" put-text-property 0 hard fill-region remove-text-properties (hard)] 8 (#$ . 94478)]) #@100 Depending of the context: justify and indent a comment, or indent all lines in the current phrase. (defalias 'tuareg-indent-phrase #[0 "\212\300 \3018\302=\203\303 \202)\3048\203\305 \202)\306 \211\205'\307@A\"\262\262)\207" [syntax-ppss 3 34 tuareg--fill-string 4 tuareg--fill-comment tuareg-region-of-defun indent-region] 5 (#$ . 95119) nil]) #@78 Return the end position of the comment or string given by STATE. (fn STATE) (defalias 'tuareg--end-of-string-or-comment #[257 "\212\3008b\210\3018\203\302\303!\210\202\304 \210`)\207" [8 4 comment-forward 1 forward-sexp] 3 (#$ . 95483)]) #@95 Replacement for `comment-or-uncomment-region' tailored for OCaml. (fn BEG END &optional ARG) (defalias 'tuareg-comment-or-uncomment-region #[770 "\300 \210\212b\210\301\302w\210`)\262\212b\210\301\302x\210`)\262\302\211\303\304!8\262\211\203,\211\262\304!\262\3038\203<\305!\262\306\"\203I\307#\207\310#\207" [comment-normalize-vars " \n" nil 8 syntax-ppss tuareg--end-of-string-or-comment comment-only-p uncomment-region comment-region] 9 (#$ . 95734) "*r\nP"]) #@72 Replacement for `comment-dwim' tailored for OCaml. (fn &optional ARG) (defalias 'tuareg-comment-dwim #[256 "\301 \210\302 \203\212\303\304 \305 #)\207\306 \3078\203$\310\3118\312!#\207\3138\2034\314\3118\312!#\207\315\316\317!)\262\203D\320!\207\212\303\321 \322 #)\207" [inhibit-changing-match-data comment-normalize-vars use-region-p tuareg-comment-or-uncomment-region region-beginning region-end syntax-ppss 4 uncomment-region 8 tuareg--end-of-string-or-comment 3 comment-region "[ ]*$" t looking-at comment-dwim line-beginning-position line-end-position] 6 (#$ . 96230) "*P"]) (byte-code "\301\302\303#\210\304\305\306\"\207" [tuareg-mode-map define-key [3 67108923] tuareg-comment-dwim defalias tuareg-find-alternate-file ff-get-other-file] 4) #@195 If the current buffer refers to a file under a _build directory and a corresponding file exists outside the _build directory, propose the user to switch to it. Return t if the switch was made. (defalias 'tuareg--switch-outside-build #[0 "\302 \303\211\211\211\205\261\304!\262\305!\262\306!\262\204`\203`\303\307\310#)\266\203\204`\305\311!!\262\211\312\230\203E\307\262\202\313!B\262\306\311!!\211\262\232\203\303\262\202\205\261\306\311!!\262\211A\262\242\314\315\"PPQ\316!\205\211\211\206\224\316!\205\224\211\203\250\317\320!\203\250\321 \210\322!\266\307\207\323 \210\324\325!\266\303\207" [locate-dominating-stop-dir-regexp inhibit-changing-match-data buffer-file-name nil abbreviate-file-name file-name-nondirectory file-name-directory t string-match directory-file-name "_build" file-name-as-directory apply concat file-readable-p y-or-n-p "File in _build. Switch to corresponding file outside _build? " kill-buffer find-file read-only-mode message "File in _build. C-x C-q to edit."] 13 (#$ . 97008)]) #@228 Execute FORM but only when F is `fboundp' (because it's a macro). If F is not bound yet, then keep the code un-expanded and perform the expansion at run-time, if the run-time version of Emacs does know this macro. (fn F FORM) (defalias 'tuareg--eval-when-macrop '(macro . #[514 "\300!\203\207\301\300\302DD\303\302DDE\207" [fboundp if quote eval] 7 (#$ . 98096)])) (byte-code "\300\301\302\303#\210\304\301\305\306#\300\207" [put tuareg--eval-when-macrop edebug-form-spec (symbolp body) function-put lisp-indent-function 1] 4) #@54 Recognize "fun ..args.. ->" at EOL as being hanging. (defalias 'tuareg--hanging-eolp-advice #[0 "\300\301!\205\302 \210\303\304\305!8\306\232\205\302 \207" [looking-at "fun\\_>" smie-indent-forward-token 2 smie-forward-sexp "-dlpd-" "->"] 3 (#$ . 98635)]) (defalias 'tuareg--common-mode-setup #[0 "\306\300!\210\307\306\301!\210\310\311\n\312\313\314\315\316&\210\317\320!\203%\321\322\323\324B\325\326$\210\327\330\331\326\310$\210\327\330\332\326\310$\210\306\303!\210\333\f\203E\334 %\"\202F &\335'\306\336!\210\326\327\337\340\326\310$\210\327\341\342\326\310$\210\327\343\344\326\310$\207" [syntax-propertize-function parse-sexp-ignore-comments tuareg-smie-grammar add-log-current-defun-function tuareg-prettify-symbols-full tuareg-prettify-symbols-basic-alist make-local-variable tuareg-syntax-propertize t smie-setup tuareg-smie-rules :forward-token tuareg-smie-forward-token :backward-token tuareg-smie-backward-token boundp smie--hanging-eolp-function advice--add-function :before #[0 "\300\301!\207" [advice--buffer-local smie--hanging-eolp-function] 2] #[257 "\300\301\"\207" [advice--set-buffer-local smie--hanging-eolp-function] 4 "\n\n(fn GV--VAL)"] tuareg--hanging-eolp-advice nil add-hook smie-indent-functions tuareg-smie--args tuareg-smie--inside-string tuareg-current-fun-name append tuareg--prettify-symbols-compose-p open-paren-in-column-0-is-defun-start completion-at-point-functions tuareg-completion-at-point electric-indent-functions tuareg--electric-indent-predicate post-self-insert-hook tuareg--electric-close-vector tuareg-prettify-symbols-extra-alist prettify-symbols-alist prettify-symbols-compose-predicate] 7]) (defvar tuareg-mode-hook nil) (byte-code "\300\301N\204\f\302\300\301\303#\210\304\305!\204\302\305\306\307#\210\300\207" [tuareg-mode-hook variable-documentation put "Hook run after entering Tuareg mode.\nNo problems result if this variable is not bound.\n`add-hook' automatically binds it. (This is true for all hook variables.)" boundp tuareg-mode-map definition-name tuareg-mode] 4) (defvar tuareg-mode-map (make-sparse-keymap)) (byte-code "\301\302N\204\303\301\302\304\305!#\210\306\307!\204\303\307\310\311#\210\312\313 !\210\307\302N\204-\303\307\302\304\314!#\210\306\300!\204B\303\300\310\311#\210\315\316\300\317\"\210!\210\300\302N\204P\303\300\302\304\320!#\210\303\311\321\322#\207" [tuareg-mode-abbrev-table tuareg-mode-map variable-documentation put purecopy "Keymap for `tuareg-mode'." boundp tuareg-mode-syntax-table definition-name tuareg-mode (lambda (#1=#:def-tmp-var) (defvar tuareg-mode-syntax-table #1#)) make-syntax-table "Syntax table for `tuareg-mode'." (lambda (#1#) (defvar tuareg-mode-abbrev-table #1#)) define-abbrev-table nil "Abbrev table for `tuareg-mode'." derived-mode-parent prog-mode] 5) #@1465 Major mode for editing OCaml code. Dedicated to Emacs and XEmacs, version 21 and higher. Provides automatic indentation and compilation interface. Performs font/color highlighting using Font-Lock. It is designed for OCaml but handles Caml Light as well. The Font-Lock minor-mode is used according to your customization options. You have better byte-compile tuareg.el. For customization purposes, you should use `tuareg-mode-hook' (run for every file) or `tuareg-load-hook' (run once) and not patch the mode itself. You should add to your configuration file something like: (add-hook 'tuareg-mode-hook (lambda () ... ; your customization code )) For example you can change the indentation of some keywords, the `electric' flags, Font-Lock colors... Every customizable variable is documented, use `C-h-v' or look at the mode's source code. `dot-emacs.el' is a sample customization file for standard changes. You can append it to your `.emacs' or use it as a tutorial. `M-x ocamldebug' FILE starts the OCaml debugger ocamldebug on the executable FILE, with input and output in an Emacs buffer named *ocamldebug-FILE*. A Tuareg Interactive Mode to evaluate expressions in a REPL (aka toplevel) is included. Type `M-x tuareg-run-ocaml' or simply `M-x run-ocaml' or see special-keys below. Short cuts for the Tuareg mode: \{tuareg-mode-map} Short cuts for interactions with the REPL: \{tuareg-interactive-mode-map} (defalias 'tuareg-mode #[0 "\306\300!\210\307\310 \210\311\312\310\313N\203\314\311\313\310\313N#\210\315 !\204'\316 \317 \"\210\320\f!\211\2035\211\321 =\203;\322\f\323 \"\210\210\324 \325\"\204R 6=\204R\326 \3256C#\210\327 !\210\330\f!\210 6\331 \204\316\332 \210\306\333!\210\3347P\306\335!\210\306\336!\2108\306\337!\210\340\306\341!\210\342!\306\343!\210\344#\306\345!\210\346%\306\347!\210\350'\306\351!\210\352\211)9\353:;<\354 \210\355 \210\306\356!\210\357.\306\360!\210\3610\362=\363\364!\210)\363\365!\207" [delay-mode-hooks major-mode mode-name tuareg-mode-map tuareg-mode-syntax-table tuareg-mode-abbrev-table make-local-variable t prog-mode tuareg-mode "Tuareg" mode-class put keymap-parent set-keymap-parent current-local-map char-table-parent standard-syntax-table set-char-table-parent syntax-table abbrev-table-get :parents abbrev-table-put use-local-map set-syntax-table tuareg--switch-outside-build tuareg-build-menu paragraph-start "^[ ]*$\\|\\*)$\\|" paragraph-separate require-final-newline comment-start "(* " comment-end " *)" comment-start-skip "(\\*+[ ]*" comment-style multi-line compilation-first-column 0 compilation-error-screen-columns nil (".") tuareg--common-mode-setup tuareg--install-font-lock beginning-of-defun-function tuareg-beginning-of-defun end-of-defun-function tuareg-end-of-defun tuareg-imenu-create-index run-mode-hooks tuareg-load-hook tuareg-mode-hook local-abbrev-table page-delimiter mode-require-final-newline indent-tabs-mode ff-search-directories tuareg-other-file-alist ff-other-file-alist imenu-create-index-function] 6 (#$ . 101442) nil]) (require 'compile) #@77 Regular expression matching the error messages produced by ocamlc/ocamlopt. (defconst tuareg--error-regexp "^ *\\(File \\(\"?\\)\\([^,\" \n <>]+\\)\\2, lines? \\([0-9]+\\)-?\\([0-9]+\\)?\\(?:, characters? \\([0-9]+\\)-?\\([0-9]+\\)?\\)?:\\)\\(?:\n[ ]*\\(?:\\(?:[0-9]+ | .*\\|\\^+\\)\n[ ]*\\)*\\(Warning\\(?: [0-9]+\\)?\\):\\)?" (#$ . 104567)) (byte-code "\303\301!\203\304\305BB B\303\302!\203\304\nB\306\307\310\"\210\311\312\313\"\210\311\314\313\"\210\311\315\313\"\207" [tuareg--error-regexp compilation-error-regexp-alist-alist compilation-error-regexp-alist boundp ocaml (3 (4 . 5) (6 . 7) (8) 1 (8 font-lock-function-name-face)) eval-after-load caml #[0 "\301\302\"\302B\211\207" [compilation-error-regexp-alist delete ocaml] 3] autoload ocaml-module-alist "caml-help" ocaml-visible-modules ocaml-module-symbols] 3) (defalias 'tuareg-completion-at-point #[0 "\212\301\302!\210`)\212\303\302!\210`)\304=\206??\205E\207" [tuareg-with-caml-mode-p skip-syntax-backward "w_" skip-syntax-forward #[771 "\302\303\304\305#)\266\203\306 B\242\307=\2036\307\203\"T\202#\310\311A\303\304\305#)\266\203BB\202n\211\204Q\312\313\314\315\316\317 \"\315\320\321 \"#$\202n\322\310TO\320\323\310O\317 \"!T\303O%)\207" [inhibit-changing-match-data display-buffer-alist "\\.[^.]*\\'" nil t string-match ("^\\*caml-help\\*$" (display-buffer-reuse-window display-buffer-pop-up-window) (reusable-frames) (window-height . 0.25)) boundaries 0 "\\." complete-with-action apply append mapcar #[257 "\211@\300P\207" ["."] 3 "\n\n(fn MOD)"] ocaml-module-alist ocaml-module-symbols ocaml-visible-modules completion-table-with-context assoc] 13 "\n\n(fn STRING PRED ACTION)"]] 6]) (autoload 'caml-complete "caml-help") #@50 Completes qualified ocaml identifiers. (fn ARG) (defalias 'tuareg-complete #[257 "\301\302\303#\210\304\216\305!)\207" [tuareg-mode-syntax-table modify-syntax-entry 95 "w" #[0 "\301\302\303#\207" [tuareg-mode-syntax-table modify-syntax-entry 95 "_"] 4] caml-complete] 5 (#$ . 106329) "p"]) (put 'tuareg-insert-class-form 'no-self-insert t) #@596 Insert a nicely formatted class-end form, leaving a mark after end. This is a skeleton command (see `skeleton-insert'). Normally the skeleton text is inserted at point, with nothing "inside". If there is a highlighted region, the skeleton text is wrapped around the region text. A prefix argument ARG says to wrap the skeleton around the next ARG words. A prefix argument of -1 says to wrap around region, even if not highlighted. A prefix argument of zero says to wrap around zero words---that is, nothing. This is a way of overriding the use of a highlighted region. (fn &optional STR ARG) (defalias 'tuareg-insert-class-form #[512 "\304 \305\211\305C\306\307#\216\310!\210\311\312#\313\240\210,\207" [most-positive-fixnum undo-strong-limit undo-limit undo-outer-limit prepare-change-group nil make-closure #[0 "\301\242\203 \302\300!\207\303\300!\207" [V0 V1 accept-change-group cancel-change-group] 2] activate-change-group skeleton-proxy-new (nil n "class " @ " = object (self)" > n "inherit " > _ " as super" n "end;;" > n) t] 11 (#$ . 106680) "*P\nP"]) (put 'tuareg-insert-begin-form 'no-self-insert t) #@596 Insert a nicely formatted begin-end form, leaving a mark after end. This is a skeleton command (see `skeleton-insert'). Normally the skeleton text is inserted at point, with nothing "inside". If there is a highlighted region, the skeleton text is wrapped around the region text. A prefix argument ARG says to wrap the skeleton around the next ARG words. A prefix argument of -1 says to wrap around region, even if not highlighted. A prefix argument of zero says to wrap around zero words---that is, nothing. This is a way of overriding the use of a highlighted region. (fn &optional STR ARG) (defalias 'tuareg-insert-begin-form #[512 "\304 \305\211\305C\306\307#\216\310!\210\311\312#\313\240\210,\207" [most-positive-fixnum undo-strong-limit undo-limit undo-outer-limit prepare-change-group nil make-closure #[0 "\301\242\203 \302\300!\207\303\300!\207" [V0 V1 accept-change-group cancel-change-group] 2] activate-change-group skeleton-proxy-new (nil n "begin" > n _ n "end" > n) t] 11 (#$ . 107817) "*P\nP"]) (put 'tuareg-insert-for-form 'no-self-insert t) #@599 Insert a nicely formatted for-to-done form, leaving a mark after done. This is a skeleton command (see `skeleton-insert'). Normally the skeleton text is inserted at point, with nothing "inside". If there is a highlighted region, the skeleton text is wrapped around the region text. A prefix argument ARG says to wrap the skeleton around the next ARG words. A prefix argument of -1 says to wrap around region, even if not highlighted. A prefix argument of zero says to wrap around zero words---that is, nothing. This is a way of overriding the use of a highlighted region. (fn &optional STR ARG) (defalias 'tuareg-insert-for-form #[512 "\304 \305\211\305C\306\307#\216\310!\210\311\312#\313\240\210,\207" [most-positive-fixnum undo-strong-limit undo-limit undo-outer-limit prepare-change-group nil make-closure #[0 "\301\242\203 \302\300!\207\303\300!\207" [V0 V1 accept-change-group cancel-change-group] 2] activate-change-group skeleton-proxy-new (nil n "for " - " do" > n _ n "done" > n) t] 11 (#$ . 108903) "*P\nP"]) (put 'tuareg-insert-while-form 'no-self-insert t) #@599 Insert a nicely formatted for-to-done form, leaving a mark after done. This is a skeleton command (see `skeleton-insert'). Normally the skeleton text is inserted at point, with nothing "inside". If there is a highlighted region, the skeleton text is wrapped around the region text. A prefix argument ARG says to wrap the skeleton around the next ARG words. A prefix argument of -1 says to wrap around region, even if not highlighted. A prefix argument of zero says to wrap around zero words---that is, nothing. This is a way of overriding the use of a highlighted region. (fn &optional STR ARG) (defalias 'tuareg-insert-while-form #[512 "\304 \305\211\305C\306\307#\216\310!\210\311\312#\313\240\210,\207" [most-positive-fixnum undo-strong-limit undo-limit undo-outer-limit prepare-change-group nil make-closure #[0 "\301\242\203 \302\300!\207\303\300!\207" [V0 V1 accept-change-group cancel-change-group] 2] activate-change-group skeleton-proxy-new (nil n "while " - " do" > n _ n "done" > n) t] 11 (#$ . 110000) "*P\nP"]) (put 'tuareg-insert-if-form 'no-self-insert t) #@600 Insert a nicely formatted if-then-else form, leaving a mark after else. This is a skeleton command (see `skeleton-insert'). Normally the skeleton text is inserted at point, with nothing "inside". If there is a highlighted region, the skeleton text is wrapped around the region text. A prefix argument ARG says to wrap the skeleton around the next ARG words. A prefix argument of -1 says to wrap around region, even if not highlighted. A prefix argument of zero says to wrap around zero words---that is, nothing. This is a way of overriding the use of a highlighted region. (fn &optional STR ARG) (defalias 'tuareg-insert-if-form #[512 "\304 \305\211\305C\306\307#\216\310!\210\311\312#\313\240\210,\207" [most-positive-fixnum undo-strong-limit undo-limit undo-outer-limit prepare-change-group nil make-closure #[0 "\301\242\203 \302\300!\207\303\300!\207" [V0 V1 accept-change-group cancel-change-group] 2] activate-change-group skeleton-proxy-new (nil n "if" > n _ n "then" > n @ n "else" n @) t] 11 (#$ . 111098) "*P\nP"]) (put 'tuareg-insert-match-form 'no-self-insert t) #@597 Insert a nicely formatted math-with form, leaving a mark after with. This is a skeleton command (see `skeleton-insert'). Normally the skeleton text is inserted at point, with nothing "inside". If there is a highlighted region, the skeleton text is wrapped around the region text. A prefix argument ARG says to wrap the skeleton around the next ARG words. A prefix argument of -1 says to wrap around region, even if not highlighted. A prefix argument of zero says to wrap around zero words---that is, nothing. This is a way of overriding the use of a highlighted region. (fn &optional STR ARG) (defalias 'tuareg-insert-match-form #[512 "\304 \305\211\305C\306\307#\216\310!\210\311\312#\313\240\210,\207" [most-positive-fixnum undo-strong-limit undo-limit undo-outer-limit prepare-change-group nil make-closure #[0 "\301\242\203 \302\300!\207\303\300!\207" [V0 V1 accept-change-group cancel-change-group] 2] activate-change-group skeleton-proxy-new (nil n "match" > n _ n "with" > n) t] 11 (#$ . 112200) "*P\nP"]) (put 'tuareg-insert-let-form 'no-self-insert t) #@592 Insert a nicely formatted let-in form, leaving a mark after in. This is a skeleton command (see `skeleton-insert'). Normally the skeleton text is inserted at point, with nothing "inside". If there is a highlighted region, the skeleton text is wrapped around the region text. A prefix argument ARG says to wrap the skeleton around the next ARG words. A prefix argument of -1 says to wrap around region, even if not highlighted. A prefix argument of zero says to wrap around zero words---that is, nothing. This is a way of overriding the use of a highlighted region. (fn &optional STR ARG) (defalias 'tuareg-insert-let-form #[512 "\304 \305\211\305C\306\307#\216\310!\210\311\312#\313\240\210,\207" [most-positive-fixnum undo-strong-limit undo-limit undo-outer-limit prepare-change-group nil make-closure #[0 "\301\242\203 \302\300!\207\303\300!\207" [V0 V1 accept-change-group cancel-change-group] 2] activate-change-group skeleton-proxy-new (nil n "let " > _ " in" > n) t] 11 (#$ . 113288) "*P\nP"]) (put 'tuareg-insert-try-form 'no-self-insert t) #@596 Insert a nicely formatted try-with form, leaving a mark after with. This is a skeleton command (see `skeleton-insert'). Normally the skeleton text is inserted at point, with nothing "inside". If there is a highlighted region, the skeleton text is wrapped around the region text. A prefix argument ARG says to wrap the skeleton around the next ARG words. A prefix argument of -1 says to wrap around region, even if not highlighted. A prefix argument of zero says to wrap around zero words---that is, nothing. This is a way of overriding the use of a highlighted region. (fn &optional STR ARG) (defalias 'tuareg-insert-try-form #[512 "\304 \305\211\305C\306\307#\216\310!\210\311\312#\313\240\210,\207" [most-positive-fixnum undo-strong-limit undo-limit undo-outer-limit prepare-change-group nil make-closure #[0 "\301\242\203 \302\300!\207\303\300!\207" [V0 V1 accept-change-group cancel-change-group] 2] activate-change-group skeleton-proxy-new (nil n "try" > n _ n "with" > n) t] 11 (#$ . 114363) "*P\nP"]) (byte-code "\304\301!\210\203 \203 \305P\306\307\310\311#\210\312\304\313!\207" [tuareg-opam-insinuate tuareg-opam tuareg-interactive-program merlin-command require " config exec -- ocaml" advice-add compile :before tuareg--compile-opam opam comint] 4) (defvar tuareg-interactive-mode-map (byte-code "\301!\302\303\304#\210\302\305\306#\210\302\307\310#\210\302\311\310#\210\302\312\313#\210\302\314\315#\210\302\316\315#\210\302\317\315#\210\207" [comint-mode-map copy-keymap define-key " " tuareg-interrupt-ocaml " " tuareg-kill-ocaml "`" tuareg-interactive-next-error-repl "?" " " tuareg-interactive-send-input [(shift return)] tuareg-interactive-send-input-end-of-phrase [(ctrl return)] [kp-enter]] 5)) (defconst tuareg-interactive-buffer-name "*OCaml*") #@66 Regexp matching the char numbers in OCaml REPL's error messages. (defconst tuareg-interactive-error-range-regexp "[ ]*Characters \\([0-9]+\\)-\\([1-9][0-9]*\\):\n" (#$ . 116176)) (defconst tuareg-interactive-error-regexp "\n\\(Error: [^#]*\\)") (defconst tuareg-interactive-exception-regexp "\\(Exception: [^#]*\\)") (defvar tuareg-interactive-last-phrase-pos-in-source 0) (defvar tuareg-interactive-last-phrase-pos-in-repl 0) #@13 (fn TEXT) (defalias 'tuareg-interactive-filter #[257 "\306=\205\223\212 \nY\205\222 \203\307\n \310\311D#\210\f\203& \203&\312\n \"\210\203=\212db\210\313 \311#\210\307 `\314#\210)\205\222\212 b\210\315!\203~\316\317\320!!\316\317\321!!\322\n\\\n\\\323\324$\266 b\210\325\326\311#\205\221\320\224\320\225\322\323\327$\266\202\202\221\315!\205\221\320\224\320\225\322\323\327$\266\202))\207" [major-mode comint-last-input-end comint-last-input-start tuareg-interactive-read-only-input font-lock-mode tuareg-interactive-input-font-lock tuareg-interactive-mode add-text-properties read-only t font-lock-fontify-region re-search-backward (font-lock-face tuareg-font-lock-interactive-output-face) looking-at string-to-number match-string-no-properties 1 2 put-text-property font-lock-face tuareg-font-lock-error-face re-search-forward nil tuareg-font-lock-interactive-error-face tuareg-interactive-output-font-lock comint-prompt-regexp tuareg-interactive-error-font-lock tuareg-interactive-error-range-regexp tuareg-interactive-error-regexp tuareg-interactive-exception-regexp] 8 (#$ . 116610)]) #@31 Tuareg Interactive Mode Menu. (defvar tuareg-interactive-mode-menu nil (#$ . 117741)) (easy-menu-do-define 'tuareg-interactive-mode-menu tuareg-interactive-mode-map "Tuareg Interactive Mode Menu." '("Tuareg" ("Interactive Mode" ["Run OCaml REPL" tuareg-run-ocaml t] ["Interrupt OCaml REPL" tuareg-interrupt-ocaml :active (comint-check-proc tuareg-interactive-buffer-name)] ["Kill OCaml REPL" tuareg-kill-ocaml :active (comint-check-proc tuareg-interactive-buffer-name)] ["Evaluate Region" tuareg-eval-region :active (region-active-p)] ["Evaluate Phrase" tuareg-eval-phrase t] ["Evaluate Buffer" tuareg-eval-buffer t]) "---" ["Customize Tuareg Mode..." (customize-group 'tuareg) t] ("Tuareg Options" ["Dummy" nil t]) ("Tuareg Interactive Options" ["Dummy" nil t]) "---" ["About" tuareg-about t] ["Help" tuareg-interactive-help t])) (defvar tuareg-interactive-mode-hook nil) (byte-code "\300\301N\204\f\302\300\301\303#\210\304\305!\204\302\305\306\307#\210\300\207" [tuareg-interactive-mode-hook variable-documentation put "Hook run after entering Tuareg-Interactive mode.\nNo problems result if this variable is not bound.\n`add-hook' automatically binds it. (This is true for all hook variables.)" boundp tuareg-interactive-mode-map definition-name tuareg-interactive-mode] 4) (defvar tuareg-interactive-mode-map (make-sparse-keymap)) (byte-code "\301\302N\204\303\301\302\304\305!#\210\306\307!\204\303\307\310\311#\210\312\313 !\210\307\302N\204-\303\307\302\304\314!#\210\306\300!\204B\303\300\310\311#\210\315\316\300\317\"\210!\210\300\302N\204P\303\300\302\304\320!#\210\303\311\321\322#\207" [tuareg-interactive-mode-abbrev-table tuareg-interactive-mode-map variable-documentation put purecopy "Keymap for `tuareg-interactive-mode'." boundp tuareg-interactive-mode-syntax-table definition-name tuareg-interactive-mode (lambda (#1=#:def-tmp-var) (defvar tuareg-interactive-mode-syntax-table #1#)) make-syntax-table "Syntax table for `tuareg-interactive-mode'." (lambda (#1#) (defvar tuareg-interactive-mode-abbrev-table #1#)) define-abbrev-table nil "Abbrev table for `tuareg-interactive-mode'." derived-mode-parent comint-mode] 5) #@487 Major mode for interacting with an OCaml process. Runs an OCaml REPL as a subprocess of Emacs, with I/O through an Emacs buffer. A history of input phrases is maintained. Phrases can be sent from another buffer in tuareg mode. Short cuts for interactions with the REPL: \{tuareg-interactive-mode-map} In addition to any hooks its parent mode `comint-mode' might have run, this mode runs the hook `tuareg-interactive-mode-hook', as the final or penultimate step during initialization. (defalias 'tuareg-interactive-mode #[0 "\306\300!\210\307\310 \210\311\312\310\313N\203\314\311\313\310\313N#\210\315 !\204'\316 \317 \"\210\320\f!\211\2035\211\321 =\203;\322\f\323 \"\210\210\324 \325\"\204R .=\204R\326 \325.C#\210\327 !\210\330\f!\210 .\331\332\333\"\210\334/\3350\336123\3304!\210\306\337!\210\340\306\341!\210\342!\306\343!\210\344#\306\345!\210\307%\346 \210\347\307!\2105\204\2466\204\2467\203\252\350\351!\210\3528!\210\353 \210)\354\355!\207" [delay-mode-hooks major-mode mode-name tuareg-interactive-mode-map tuareg-interactive-mode-syntax-table tuareg-interactive-mode-abbrev-table make-local-variable t comint-mode tuareg-interactive-mode "Tuareg-Interactive" mode-class put keymap-parent set-keymap-parent current-local-map char-table-parent standard-syntax-table set-char-table-parent syntax-table abbrev-table-get :parents abbrev-table-put use-local-map set-syntax-table add-hook comint-output-filter-functions tuareg-interactive-filter "^# *" nil tuareg-interactive-get-old-input comment-start "(* " comment-end " *)" comment-start-skip "(\\*+[ ]*" comint-prompt-read-only tuareg--common-mode-setup tuareg--install-font-lock font-lock-mode 1 easy-menu-add tuareg-update-options-menu run-mode-hooks tuareg-interactive-mode-hook local-abbrev-table comint-prompt-regexp comint-process-echoes comint-get-old-input tuareg-interactive-scroll-to-bottom-on-output comint-scroll-to-bottom-on-output tuareg-mode-syntax-table tuareg-interactive-input-font-lock tuareg-interactive-output-font-lock tuareg-interactive-error-font-lock tuareg-interactive-mode-menu] 5 (#$ . 119899) nil]) #@55 Run an OCaml REPL process. I/O via buffer `*OCaml*'. (defalias 'tuareg-run-ocaml #[0 "\301 \210\302!\207" [tuareg-interactive-buffer-name tuareg-run-process-if-needed display-buffer] 2 (#$ . 122029) nil]) (byte-code "\300\301\302\"\210\303\304\305\"\210\303\304\306\"\207" [defalias run-ocaml tuareg-run-ocaml add-to-list interpreter-mode-alist ("ocamlrun" . tuareg-mode) ("ocaml" . tuareg-mode)] 3) #@115 Run an OCaml REPL process if needed, with an optional command name. I/O via buffer `*OCaml*'. (fn &optional CMD) (defalias 'tuareg-run-process-if-needed #[256 "\211\203 \211\202\303 !\204\304\305\"\303 !?\2054\306!\307\310\311\312@\313A%q\210\314 \210\315\316!)\262\207" [tuareg-interactive-program tuareg-interactive-buffer-name process-connection-type comint-check-proc read-shell-command "OCaml REPL to run: " tuareg--split-args t apply make-comint "OCaml" nil tuareg-interactive-mode sleep-for 1] 8 (#$ . 122438)]) #@13 (fn ARGS) (defalias 'tuareg--split-args #[257 "\3001 \301!0\207\210\302\303\"\210\304\207" [(error) split-string-and-unquote message "Arguments ‘%s’ ill quoted. Ignored." nil] 4 (#$ . 122978)]) (defalias 'tuareg-interactive-get-old-input #[0 "\212`\301e\302#\210\303!\203\304!\210\305`\"\262)\207" [comint-prompt-regexp re-search-backward t looking-at re-search-forward buffer-substring-no-properties] 5]) (defconst tuareg-interactive--send-warning "Note: REPL processing requires a terminating `;;', or use S-return.") (defalias 'tuareg-interactive--indent-line #[0 "\301c\210\302 \210\303!\207" [tuareg-interactive--send-warning "\n" indent-according-to-mode message] 2]) #@186 Send the current phrase to the OCaml REPL or insert a newline. If the point is next to ";;", the phrase is sent to the REPL, otherwise a newline is inserted and the lines are indented. (defalias 'tuareg-interactive-send-input #[0 "\301 \203\302 \207\212\303\304 8)\305\232\204\306\307\310!)\262\203\"\311 \207\302 \207" [inhibit-changing-match-data tuareg-in-literal-or-comment-p tuareg-interactive--indent-line 2 smie-backward-sexp ";;" "[ \n ]*;;" t looking-at comint-send-input] 3 (#$ . 123677) nil]) (defalias 'tuareg-interactive-send-input-end-of-phrase #[0 "db\210\212\300\301 8)\302\232\204\302c\210\303 \207" [2 smie-backward-sexp ";;" comint-send-input] 2 nil nil]) #@142 Send the region between START and END to the OCaml REPL. It is assumed that the range START-END delimit valid OCaml phrases. (fn START END) (defalias 'tuareg-interactive--send-region #[514 "\212\304 \210)\305 \210\306\"\307\310\311#\211\312P\311\230\203\"\313\314!\266\202Drq\210db\210`\315\"\210`\316 \210\n\203@\212\211b\210c\210)\210)\266 \205K\317!\207" [tuareg-interactive-buffer-name tuareg-interactive-last-phrase-pos-in-repl tuareg-interactive-echo-phrase tuareg-display-buffer-on-eval tuareg-run-process-if-needed comint-preinput-scroll-to-bottom buffer-substring-no-properties replace-regexp-in-string "[ \n]*\\(;;[ \n]*\\)?\\'" "" ";;" message "Cannot send empty commands to OCaml REPL!" comint-send-string comint-send-input display-buffer] 8 (#$ . 124370)]) #@60 Eval the current region in the OCaml REPL. (fn START END) (defalias 'tuareg-eval-region #[514 "\212b\210\301 \210`\262\302!A\262\211\203\303\"\202 \304\305!)\207" [tuareg-interactive-last-phrase-pos-in-source tuareg-backward-beginning-of-defun tuareg-region-of-defun tuareg-interactive--send-region message "The expression after the point is not well braced."] 5 (#$ . 125165) "r"]) (byte-code "\300\301\302\303#\210\304\301\302\305#\207" [defalias tuareg-narrow-to-phrase narrow-to-defun nil make-obsolete "Apr 10, 2019"] 4) #@65 Eval the surrounding OCaml phrase (or block) in the OCaml REPL. (defalias 'tuareg-eval-phrase #[0 "`\301 \3028\203\3038Sb\210\210\304 \211\203.\305@A@\"\210\203+\211AA@b\210\306 \207b\207\307\310!\207" [tuareg-skip-after-eval-phrase syntax-ppss 4 8 tuareg-discover-phrase tuareg-interactive--send-region tuareg-skip-blank-and-comments message "The expression after the point is not well braced."] 5 (#$ . 125709) nil]) #@52 Send the buffer to the Tuareg Interactive process. (defalias 'tuareg-eval-buffer #[0 "\300ed\"\207" [tuareg-interactive--send-region] 3 (#$ . 126144) nil]) (defvar tuareg-interactive-next-error-olv (byte-code "\300\301\211\"\207" [make-overlay 1] 3)) (byte-code "\301\302\303#\210\304!\207" [tuareg-interactive-next-error-olv overlay-put face tuareg-font-lock-error-face delete-overlay] 4) (defalias 'tuareg-interactive-next-error-source #[0 "\305\306\211rq\210 b\210\307\nd\310#\262\203#\311\312\313!!\262\311\312\314!!\262)\204,\315\316!\207 \\\262 \\\262b\210\317\f#\210\320\216\321\322\310\")\207" [tuareg-interactive-buffer-name tuareg-interactive-last-phrase-pos-in-repl tuareg-interactive-error-range-regexp tuareg-interactive-last-phrase-pos-in-source tuareg-interactive-next-error-olv nil 0 re-search-forward t string-to-number match-string-no-properties 1 2 message "No syntax or typing error in last phrase." move-overlay #[0 "\301!\207" [tuareg-interactive-next-error-olv delete-overlay] 2] sit-for 60] 7 nil nil]) (defalias 'tuareg-interactive-next-error-repl #[0 "\303\304\211\212b\210\305 d\306#\262\203 \307\310\311!!\262\307\310\312!!\262)\204)\313\314!\207\\\262\\\262\315\n#\210\316\216\317\320\306\"\210)b\207" [tuareg-interactive-last-phrase-pos-in-repl tuareg-interactive-error-range-regexp tuareg-interactive-next-error-olv nil 0 re-search-forward t string-to-number match-string-no-properties 1 2 message "No syntax or typing error in last phrase." move-overlay #[0 "\301!\207" [tuareg-interactive-next-error-olv delete-overlay] 2] sit-for 60] 7 nil nil]) (defalias 'tuareg-interrupt-ocaml #[0 "\301!\205 rq\210\302 )\207" [tuareg-interactive-buffer-name comint-check-proc comint-interrupt-subjob] 2 nil nil]) (defalias 'tuareg-kill-ocaml #[0 "\301!\205 rq\210\302 )\207" [tuareg-interactive-buffer-name comint-check-proc comint-kill-subjob] 2 nil nil]) (defalias 'tuareg-about #[0 "\300\301!\207" [describe-variable tuareg-mode-version] 2 nil nil]) #@128 Short cuts for the Tuareg mode: \{tuareg-mode-map} Short cuts for interaction within the REPL: \{tuareg-interactive-mode-map} (defalias 'tuareg-short-cuts #[0 "\300\301!\207" [describe-function tuareg-short-cuts] 2 (#$ . 128167) nil]) (defalias 'tuareg-help #[0 "\300\301!\207" [describe-function tuareg-mode] 2 nil nil]) (defalias 'tuareg-interactive-help #[0 "\300\301!\207" [describe-function tuareg-interactive-mode] 2 nil nil]) (defalias 'tuareg-build-menu #[0 "\302\303!\210\304\301C\305\306$\210\307 !\210\310 \207" [tuareg-mode-map tuareg-mode-menu (lambda (#1=#:def-tmp-var) (defvar tuareg-mode-menu #1# #2="Tuareg Mode Menu.")) nil easy-menu-do-define #2# ("Tuareg" ("Interactive Mode" ["Run OCaml REPL" tuareg-run-ocaml t] ["Interrupt OCaml REPL" tuareg-interrupt-ocaml :active (comint-check-proc tuareg-interactive-buffer-name)] ["Kill OCaml REPL" tuareg-kill-ocaml :active (comint-check-proc tuareg-interactive-buffer-name)] ["Evaluate Region" tuareg-eval-region :active mark-active] ["Evaluate Phrase" tuareg-eval-phrase t] ["Evaluate Buffer" tuareg-eval-buffer t]) ("OCaml Forms" ["try .. with .." tuareg-insert-try-form t] ["match .. with .." tuareg-insert-match-form t] ["let .. in .." tuareg-insert-let-form t] ["if .. then .. else .." tuareg-insert-if-form t] ["while .. do .. done" tuareg-insert-while-form t] ["for .. do .. done" tuareg-insert-for-form t] ["begin .. end" tuareg-insert-begin-form t]) ["Switch .ml/.mli" tuareg-find-alternate-file t] "---" ["Compile..." compile t] ["Reference Manual..." tuareg-browse-manual t] ["OCaml Library..." tuareg-browse-library t] "---" ["Show type at point" caml-types-show-type tuareg-with-caml-mode-p] ["Show fully qualified ident at point" caml-types-show-ident tuareg-with-caml-mode-p] ["Show the kind of call at point" caml-types-show-call tuareg-with-caml-mode-p] "---" ["Complete identifier" caml-complete tuareg-with-caml-mode-p] ["Help for identifier" caml-help tuareg-with-caml-mode-p] ["Add path for documentation" ocaml-add-path tuareg-with-caml-mode-p] ["Open module for documentation" ocaml-open-module tuareg-with-caml-mode-p] ["Close module for documentation" ocaml-close-module tuareg-with-caml-mode-p] "---" ["Customize Tuareg Mode..." (customize-group 'tuareg) t] ("Tuareg Options" ["Dummy" nil t]) ("Tuareg Interactive Options" ["Dummy" nil t]) "---" ["About" tuareg-about t] ["Short Cuts" tuareg-short-cuts] ["Help" tuareg-help t]) easy-menu-add tuareg-update-options-menu] 5]) #@15 (fn SYMBOL) (defalias 'tuareg-toggle-option #[257 "\211J?L\210\300 \207" [tuareg-update-options-menu] 3 (#$ . 130638) nil]) (defalias 'tuareg-update-options-menu #[0 "\302\303\304\305\306\"#\210\302\307\310\305\311 \"#\207" [tuareg-options-list tuareg-interactive-options-list easy-menu-change ("Tuareg") "Tuareg Options" mapcar #[257 "\211:\203\300@\301AD\302\303\304AA@\305\306&\207\207" [vector tuareg-toggle-option :style toggle :selected :active t] 10 "\n\n(fn PAIR)"] ("Tuareg") "Tuareg Interactive Options" #[257 "\211:\203\300@\301AD\302\303\304AA@\305\306&\207\207" [vector tuareg-toggle-option :style toggle :selected :active t] 10 "\n\n(fn PAIR)"]] 6]) #@33 *Browse OCaml reference manual. (defalias 'tuareg-browse-manual #[0 "\302\303\" !\207" [tuareg-manual-url tuareg-browser read-from-minibuffer "URL: "] 3 (#$ . -131326) nil]) (defvar tuareg-library-mode-map (byte-code "\300 \301!\210\302\303\304#\210\302\305\306#\210\207" [make-keymap suppress-keymap define-key [return] tuareg-library-find-file [mouse-2] tuareg-library-mouse-find-file] 5)) #@27 Browse the OCaml library. (defalias 'tuareg-browse-library #[0 "\306\307\310\"\311!\205\262\312!\205\262\211 r\313\314!q\210p\315 \210\306\211\316\211\316.\317 \210\320\321!\210+\211/\322/!\210r\314q\210\315 \210\323\300!\210\324\325\261\210\326c\210\327c\210\330\331P\332\316\306$\210\333c\210\330\334P\332\316\306$\210\335\336\337\"\210\335\340\337\"\210\335\341\337\"\210eb\210`dW\203\234\342\343!\210`\262\344\345e\346#\210\347`\350\351$\210Tb\210\202{\3520\3531\3542!\210\316\211)\355!\210)\266\202\207" [tuareg-library-path default-directory buffer-read-only buffer-file-name buffer-undo-list inhibit-modification-hooks nil read-from-minibuffer "Library path: " file-directory-p file-readable-p get-buffer-create "*ocaml-library*" kill-all-local-variables t erase-buffer run-hooks temp-buffer-setup-hook buffer-disable-undo make-local-variable "Directory \"" "\".\n" "Select a file with middle mouse button or RETURN.\n\n" "Interface files (.mli):\n\n" insert-directory "/*.mli" "-C" "\n\nImplementation files (.ml):\n\n" "/*.ml" modify-syntax-entry 46 "w" 95 45 re-search-forward "\\.ml.?\\>" re-search-backward "\\<" 1 put-text-property mouse-face highlight tuareg-library-mode "tuareg-library" use-local-map internal-temp-output-buffer-show inhibit-read-only standard-output major-mode mode-name tuareg-library-mode-map] 10 (#$ . 131730) nil]) #@41 Load the file whose name is near point. (defalias 'tuareg-library-find-file #[0 "\301`!\205\212\302\303\304!\210`\262\305\306!\210\307\310\311`\"\"!\262)\207" [tuareg-library-path text-properties-at nil re-search-backward "\\<" re-search-forward "\\>" find-file-read-only expand-file-name buffer-substring-no-properties] 6 (#$ . 133120) nil]) #@47 Visit the file name you click on. (fn EVENT) (defalias 'tuareg-library-mouse-find-file #[257 "\300 \301!\210\302 \210\303!\207" [selected-window mouse-set-point tuareg-library-find-file select-window] 4 (#$ . 133475) "e"]) #@111 Create an index alist for OCaml files using `merlin-imenu' or `caml-mode'. See `imenu-create-index-function'. (defalias 'tuareg-imenu-create-index #[0 "\301\302\303\304#\204\303\301\305\303\304#\210)\306\307!\203\307 \207\306\310!\203#\310 \207\311\312!\210\313\207" [abbrevs-changed require merlin-imenu nil t caml fboundp merlin-imenu-create-index caml-create-index-function message "Install Merlin or caml-mode." (("Install Merlin or caml-mode" . 0))] 4 (#$ . 133708)]) (byte-code "\301\302\303\304#\203\305\306!\210\307B\310B\311\312!\207" [speedbar-obj-alist require speedbar nil t speedbar-add-supported-extension (".ml" ".mli" ".mll" ".mly" ".mlp" ".ls") ("\\.mli$" . ".cmi") ("\\.ml$" . ".cmo") provide tuareg] 4)