This file is indexed.

/usr/share/emacs/site-lisp/acl2/acl2-mode.el is in acl2-emacs 7.1-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
;; Copyright (C) 1985 Free Software Foundation, Inc.
;; Copyright (C) 1994 Free Software Foundation, Inc.

;; Author  : MKSmith (mksmith@cli.com)
;; Begun   : Feb 27 94 
;; Origin  : lisp-mode.el
;; Keywords: acl2, languages

;; This file is part of GNU Emacs.

;; GNU Emacs 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, or (at your option)
;; any later version.

;; GNU Emacs 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.

;;; Commentary:

;; The base major mode for editing Acl2 code.
;; This mode extends very slightly lisp-mode.el (documented in the Emacs manual).
;; See also inf-acl2.el inf-acl2-mouse.el and inf-acl2-menu.el

;;; Code:

(require 'lisp-mode)

(defvar acl2-mode-syntax-table nil "")
(defvar acl2-mode-abbrev-table nil "")

(if (not acl2-mode-syntax-table)
    (setq acl2-mode-syntax-table
	  (copy-syntax-table lisp-mode-syntax-table)))

(define-abbrev-table 'acl2-mode-abbrev-table ())

(defun acl2-mode-variables (acl2-syntax)
  (lisp-mode-variables nil)
  (cond (acl2-syntax
	  (set-syntax-table acl2-mode-syntax-table)))
  (setq local-abbrev-table acl2-mode-abbrev-table)
  (make-local-variable 'lisp-indent-function)
  (setq lisp-indent-function 'acl2-indent-function))

(defun acl2-shared-lisp-mode-map ()
  "Return the shared lisp-mode-map, independent of Emacs version."
  (if (boundp 'shared-lisp-mode-map)
      shared-lisp-mode-map
    lisp-mode-shared-map))

(defvar acl2-mode-map nil
  "Keymap for ordinary Acl2 mode.  All commands in 
`acl2-shared-lisp-mode-map' are inherited by this map.")

(if (not acl2-mode-map)
    (progn
      (setq acl2-mode-map (make-sparse-keymap))
      (set-keymap-parent acl2-mode-map (acl2-shared-lisp-mode-map))))

(defvar acl2-mode-hook nil)

(defun acl2-mode ()
  "Major mode for editing Acl2 code.
Commands:
Delete converts tabs to spaces as it moves back.
Blank lines separate paragraphs.  Semicolons start comments.
\\{acl2-mode-map}
Note that `run-acl2' may be used either to start an inferior Acl2 job
or to switch back to an existing one.

Entry to this mode calls the value of `acl2-mode-hook'
if that value is non-nil."
  (interactive)
  (kill-all-local-variables)
  (use-local-map acl2-mode-map)
  (setq major-mode 'acl2-mode)
  (setq mode-name "Acl2")
  (acl2-mode-variables t)
  (set-syntax-table acl2-mode-syntax-table)
  (run-hooks 'acl2-mode-hook))

;; Trying this as a local variable
;; See last entry in ACL2-MODE-VARIABLES function.
;; (defconst lisp-indent-function 'acl2-indent-function "")

(defvar last-sexp nil)

;; Identical to LISP-INDENT-FUNCTION except checks acl2-indent-hook
;; first for indentation.  Allows user to format Acl2 differently from
;; lisp.
(defun acl2-indent-function (indent-point state)
  (let ((normal-indent (current-column))
	(last-sexp (point)))
    (goto-char (1+ (elt state 1)))
    (parse-partial-sexp (point) last-sexp 0 t)
    (if (and (elt state 2)
             (not (looking-at "\\sw\\|\\s_")))
        ;; car of form doesn't seem to be a a symbol
        (progn
          (if (not (> (save-excursion (forward-line 1) (point))
                      last-sexp))
              (progn (goto-char last-sexp)
                     (beginning-of-line)
                     (parse-partial-sexp (point) last-sexp 0 t)))
          ;; Indent under the list or under the first sexp on the
          ;; same line as last-sexp.  Note that first thing on that
          ;; line has to be complete sexp since we are inside the
          ;; innermost containing sexp.
          (backward-prefix-chars)
          (current-column))
      (let ((function (buffer-substring (point)
					(progn (forward-sexp 1) (point))))
	    method)
	(setq method (or (get (intern-soft function) 'acl2-indent-hook)
			 (get (intern-soft function) 'lisp-indent-function)
			 ;; Why does -hook follow -function?
			 (get (intern-soft function) 'lisp-indent-hook)))
	(cond ((or (eq method 'defun)
		   (and (null method)
			(> (length function) 3)
			(string-match "\\`def" function)))
	       (lisp-indent-defform state indent-point))
	      ((integerp method)
	       (lisp-indent-specform method state
				     indent-point normal-indent))
	      (method
		(funcall method state indent-point)))))))

;; (put 'progn 'lisp-indent-function 0), say, causes progn to be indented
;; like defun if the first form is placed on the next line, otherwise
;; it is indented like any other form (i.e. forms line up under first).

(put 'if 'acl2-indent-hook nil)	;changed from 2 in lisp.
(put 'mv-let 'acl2-indent-hook 2)

(provide 'acl2-mode)

;;; acl2-mode.el ends here