Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
emacs
emacs
Commits
70b8ef8f
Commit
70b8ef8f
authored
May 17, 2012
by
Stefan Monnier
Browse files
* lisp/emacs-lisp/cl-macs.el, lisp/emacs-lisp/cl.el: Move indent info.
parent
9abdc45d
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
39 additions
and
64 deletions
+39
-64
lisp/ChangeLog
lisp/ChangeLog
+4
-0
lisp/emacs-lisp/cl-macs.el
lisp/emacs-lisp/cl-macs.el
+35
-28
lisp/emacs-lisp/cl.el
lisp/emacs-lisp/cl.el
+0
-36
No files found.
lisp/ChangeLog
View file @
70b8ef8f
2012-05-17 Stefan Monnier <monnier@iro.umontreal.ca>
* emacs-lisp/cl-macs.el, emacs-lisp/cl.el: Move indent info.
2012-05-17 Stefan Monnier <monnier@iro.umontreal.ca>
* emacs-lisp/pcase.el (pcase--u1): Avoid ((lambda ...) ...).
...
...
lisp/emacs-lisp/cl-macs.el
View file @
70b8ef8f
...
...
@@ -226,7 +226,8 @@ and BODY is implicitly surrounded by (block NAME ...).
cl-lambda-list
cl-declarations-or-string
[&optional
(
"interactive"
interactive
)
]
def-body
)))
def-body
))
(
indent
2
))
(
let*
((
res
(
cl-transform-lambda
(
cons
args
body
)
name
))
(
form
(
list*
'defun
name
(
cdr
res
))))
(
if
(
car
res
)
(
list
'progn
(
car
res
)
form
)
form
)))
...
...
@@ -277,7 +278,8 @@ and BODY is implicitly surrounded by (block NAME ...).
\(fn NAME ARGLIST [DOCSTRING] BODY...)"
(
declare
(
debug
(
&define
name
cl-macro-list
cl-declarations-or-string
def-body
)))
(
&define
name
cl-macro-list
cl-declarations-or-string
def-body
))
(
indent
2
))
(
let*
((
res
(
cl-transform-lambda
(
cons
args
body
)
name
))
(
form
(
list*
'defmacro
name
(
cdr
res
))))
(
if
(
car
res
)
(
list
'progn
(
car
res
)
form
)
form
)))
...
...
@@ -555,7 +557,8 @@ It is a list of elements of the form either:
;;;###autoload
(
defmacro
destructuring-bind
(
args
expr
&rest
body
)
(
declare
(
debug
(
&define
cl-macro-list
def-form
cl-declarations
def-body
)))
(
declare
(
indent
2
)
(
debug
(
&define
cl-macro-list
def-form
cl-declarations
def-body
)))
(
let*
((
bind-lets
nil
)
(
bind-forms
nil
)
(
bind-inits
nil
)
(
bind-defs
nil
)
(
bind-block
'cl-none
)
(
bind-enquote
nil
))
(
cl-do-arglist
(
or
args
'
(
&aux
))
expr
)
...
...
@@ -576,7 +579,7 @@ If `load' is in WHEN, BODY is evaluated when loaded after top-level compile.
If `eval' is in WHEN, BODY is evaluated when interpreted or at non-top-level.
\(fn (WHEN...) BODY...)"
(
declare
(
debug
((
&rest
&or
"compile"
"load"
"eval"
)
body
)))
(
declare
(
indent
1
)
(
debug
((
&rest
&or
"compile"
"load"
"eval"
)
body
)))
(
if
(
and
(
fboundp
'cl-compiling-file
)
(
cl-compiling-file
)
(
not
cl-not-toplevel
)
(
not
(
boundp
'for-effect
)))
; horrible kludge
(
let
((
comp
(
or
(
memq
'compile
when
)
(
memq
:compile-toplevel
when
)))
...
...
@@ -635,7 +638,7 @@ place of a KEYLIST of one atom. A KEYLIST of t or `otherwise' is
allowed only in the final clause, and matches if no other keys match.
Key values are compared by `eql'.
\n(fn EXPR (KEYLIST BODY...)...)"
(
declare
(
debug
(
form
&rest
(
sexp
body
))))
(
declare
(
indent
1
)
(
debug
(
form
&rest
(
sexp
body
))))
(
let*
((
temp
(
if
(
cl-simple-expr-p
expr
3
)
expr
(
make-symbol
"--cl-var--"
)))
(
head-list
nil
)
(
body
(
cons
...
...
@@ -666,7 +669,7 @@ Key values are compared by `eql'.
"Like `case', but error if no case fits.
`otherwise'-clauses are not allowed.
\n(fn EXPR (KEYLIST BODY...)...)"
(
declare
(
debug
case
))
(
declare
(
indent
1
)
(
debug
case
))
(
list*
'case
expr
(
append
clauses
'
((
ecase-error-flag
)))))
;;;###autoload
...
...
@@ -677,7 +680,8 @@ satisfies TYPE, the corresponding BODY is evaluated. If no clause succeeds,
typecase returns nil. A TYPE of t or `otherwise' is allowed only in the
final clause, and matches if no other keys match.
\n(fn EXPR (TYPE BODY...)...)"
(
declare
(
debug
(
form
&rest
(
[&or
cl-type-spec
"otherwise"
]
body
))))
(
declare
(
indent
1
)
(
debug
(
form
&rest
(
[&or
cl-type-spec
"otherwise"
]
body
))))
(
let*
((
temp
(
if
(
cl-simple-expr-p
expr
3
)
expr
(
make-symbol
"--cl-var--"
)))
(
type-list
nil
)
(
body
(
cons
...
...
@@ -702,7 +706,7 @@ final clause, and matches if no other keys match.
"Like `typecase', but error if no case fits.
`otherwise'-clauses are not allowed.
\n(fn EXPR (TYPE BODY...)...)"
(
declare
(
debug
typecase
))
(
declare
(
indent
1
)
(
debug
typecase
))
(
list*
'typecase
expr
(
append
clauses
'
((
ecase-error-flag
)))))
...
...
@@ -718,7 +722,7 @@ quoted symbol or other form; and second, NAME is lexically rather than
dynamically scoped: Only references to it within BODY will work. These
references may appear inside macro expansions, but not inside functions
called from BODY."
(
declare
(
debug
(
symbolp
body
)))
(
declare
(
indent
1
)
(
debug
(
symbolp
body
)))
(
if
(
cl-safe-expr-p
(
cons
'progn
body
))
(
cons
'progn
body
)
(
list
'cl-block-wrapper
(
list*
'catch
(
list
'quote
(
intern
(
format
"--cl-block-%s--"
name
)))
...
...
@@ -738,7 +742,7 @@ This jumps out to the innermost enclosing `(block NAME ...)' form,
returning RESULT from that form (or nil if RESULT is omitted).
This is compatible with Common Lisp, but note that `defun' and
`defmacro' do not create implicit blocks as they do in Common Lisp."
(
declare
(
debug
(
symbolp
&optional
form
)))
(
declare
(
indent
1
)
(
debug
(
symbolp
&optional
form
)))
(
let
((
name2
(
intern
(
format
"--cl-block-%s--"
name
))))
(
list
'cl-block-throw
(
list
'quote
name2
)
result
)))
...
...
@@ -1479,7 +1483,8 @@ Valid clauses are:
"The Common Lisp `do' loop.
\(fn ((VAR INIT [STEP])...) (END-TEST [RESULT...]) BODY...)"
(
declare
(
debug
(
declare
(
indent
2
)
(
debug
((
&rest
&or
symbolp
(
symbolp
&optional
form
form
))
(
form
body
)
cl-declarations
body
)))
...
...
@@ -1490,7 +1495,7 @@ Valid clauses are:
"The Common Lisp `do*' loop.
\(fn ((VAR INIT [STEP])...) (END-TEST [RESULT...]) BODY...)"
(
declare
(
debug
do
))
(
declare
(
indent
2
)
(
debug
do
))
(
cl-expand-do-loop
steps
endtest
body
t
))
(
defun
cl-expand-do-loop
(
steps
endtest
body
star
)
...
...
@@ -1589,7 +1594,8 @@ Evaluate BODY with VAR bound to each interned symbol, or to each symbol
from OBARRAY.
\(fn (VAR [OBARRAY [RESULT]]) BODY...)"
(
declare
(
debug
((
symbolp
&optional
form
form
)
cl-declarations
body
)))
(
declare
(
indent
1
)
(
debug
((
symbolp
&optional
form
form
)
cl-declarations
body
)))
;; Apparently this doesn't have an implicit block.
(
list
'block
nil
(
list
'let
(
list
(
car
spec
))
...
...
@@ -1600,7 +1606,7 @@ from OBARRAY.
;;;###autoload
(
defmacro
do-all-symbols
(
spec
&rest
body
)
(
declare
(
debug
((
symbolp
&optional
form
)
cl-declarations
body
)))
(
declare
(
indent
1
)
(
debug
((
symbolp
&optional
form
)
cl-declarations
body
)))
(
list*
'do-symbols
(
list
(
car
spec
)
nil
(
cadr
spec
))
body
))
...
...
@@ -1627,7 +1633,7 @@ Each symbol in the first list is bound to the corresponding value in the
second list (or made unbound if VALUES is shorter than SYMBOLS); then the
BODY forms are executed and their result is returned. This is much like
a `let' form, except that the list of symbols can be computed at run-time."
(
declare
(
debug
(
form
form
body
)))
(
declare
(
indent
2
)
(
debug
(
form
form
body
)))
(
list
'let
'
((
cl-progv-save
nil
))
(
list
'unwind-protect
(
list*
'progn
(
list
'cl-progv-before
symbols
values
)
body
)
...
...
@@ -1643,7 +1649,7 @@ function definitions in place, then the definitions are undone (the FUNCs
go back to their previous definitions, or lack thereof).
\(fn ((FUNC ARGLIST BODY...) ...) FORM...)"
(
declare
(
debug
((
&rest
(
defun*
))
cl-declarations
body
)))
(
declare
(
indent
1
)
(
debug
((
&rest
(
defun*
))
cl-declarations
body
)))
(
list*
'letf*
(
mapcar
(
function
...
...
@@ -1676,7 +1682,7 @@ This is like `flet', except the bindings are lexical instead of dynamic.
Unlike
`
flet
',
this
macro
is
fully
compliant
with
the
Common
Lisp
standard.
\(fn
((
FUNC
ARGLIST
BODY...
)
...
)
FORM...
)
"
(declare (debug flet))
(declare
(indent 1)
(debug flet))
(let ((vars nil) (sets nil) (cl-macro-environment cl-macro-environment))
(while bindings
;; Use `gensym' rather than `make-symbol'. It's important that
...
...
@@ -1701,7 +1707,8 @@ Unlike `flet', this macro is fully compliant with the Common Lisp standard.
This
is
like
`
flet
',
but
for
macros
instead
of
functions.
\(fn
((
NAME
ARGLIST
BODY...
)
...
)
FORM...
)
"
(declare (debug
(declare (indent 1)
(debug
((&rest (&define name (&rest arg) cl-declarations-or-string
def-body))
cl-declarations body)))
...
...
@@ -1723,7 +1730,7 @@ Within the body FORMs, references to the variable NAME will be replaced
by
EXPANSION,
and
(
setq
NAME
...
)
will
act
like
(
setf
EXPANSION
...
)
.
\(fn
((
NAME
EXPANSION
)
...
)
FORM...
)
"
(declare (debug ((&rest (symbol sexp)) cl-declarations body)))
(declare
(indent 1)
(debug ((&rest (symbol sexp)) cl-declarations body)))
(if (cdr bindings)
(list 'symbol-macrolet
(list (car bindings)) (list* 'symbol-macrolet (cdr bindings) body))
...
...
@@ -1740,7 +1747,7 @@ by EXPANSION, and (setq NAME ...) will act like (setf EXPANSION ...).
The
main
visible
difference
is
that
lambdas
inside
BODY
will
create
lexical
closures
as
in
Common
Lisp.
\n
(
fn
BINDINGS
BODY
)
"
(declare (debug let))
(declare
(indent 1)
(debug let))
(let* ((cl-closure-vars cl-closure-vars)
(vars (mapcar (function
(lambda (x)
...
...
@@ -1793,7 +1800,7 @@ successive bindings within BINDINGS, will create lexical closures
as
in
Common
Lisp.
This
is
similar
to
the
behavior
of
`
let*
'
in
Common
Lisp.
\n
(
fn
BINDINGS
BODY
)
"
(declare (debug let))
(declare
(indent 1)
(debug let))
(if (null bindings) (cons 'progn body)
(setq bindings (reverse bindings))
(while bindings
...
...
@@ -1819,7 +1826,7 @@ simulate true multiple return values. For compatibility, (values A B C) is
a
synonym
for
(
list
A
B
C
)
.
\(fn
(
SYM...
)
FORM
BODY
)
"
(declare (debug ((&rest symbolp) form body)))
(declare
(indent 2)
(debug ((&rest symbolp) form body)))
(let ((temp (make-symbol "
--cl-var--
")) (n -1))
(list* 'let* (cons (list temp form)
(mapcar (function
...
...
@@ -1837,7 +1844,7 @@ each of the symbols SYM in turn. This is analogous to the Common Lisp
values.
For
compatibility,
(
values
A
B
C
)
is
a
synonym
for
(
list
A
B
C
)
.
\(fn
(
SYM...
)
FORM
)
"
(declare (debug ((&rest symbolp) form)))
(declare
(indent 1)
(debug ((&rest symbolp) form)))
(cond ((null vars) (list 'progn form nil))
((null (cdr vars)) (list 'setq (car vars) (list 'car form)))
(t
...
...
@@ -1862,7 +1869,7 @@ values. For compatibility, (values A B C) is a synonym for (list A B C).
(cons 'progn body))
;;;###autoload
(defmacro the (type form)
(declare (debug (cl-type-spec form)))
(declare
(indent 1)
(debug (cl-type-spec form)))
form)
(defvar cl-proclaim-history t) ; for future compilers
...
...
@@ -2444,7 +2451,7 @@ As a special case, if `(PLACE)' is used instead of `(PLACE VALUE)',
the
PLACE
is
not
modified
before
executing
BODY.
\(fn
((
PLACE
VALUE
)
...
)
BODY...
)
"
(declare (debug ((&rest (gate place &optional form)) body)))
(declare
(indent 1)
(debug ((&rest (gate place &optional form)) body)))
(if (and (not (cdr bindings)) (cdar bindings) (symbolp (caar bindings)))
(list* 'let bindings body)
(let ((lets nil) (sets nil)
...
...
@@ -2502,7 +2509,7 @@ As a special case, if `(PLACE)' is used instead of `(PLACE VALUE)',
the
PLACE
is
not
modified
before
executing
BODY.
\(fn
((
PLACE
VALUE
)
...
)
BODY...
)
"
(declare (debug letf))
(declare
(indent 1)
(debug letf))
(if (null bindings)
(cons 'progn body)
(setq bindings (reverse bindings))
...
...
@@ -2517,7 +2524,7 @@ FUNC should be an unquoted function name. PLACE may be a symbol,
or
any
generalized
variable
allowed
by
`
setf
'.
\(fn
FUNC
PLACE
ARGS...
)
"
(declare (debug (function* place &rest form)))
(declare
(indent 2)
(debug (function* place &rest form)))
(let* ((method (cl-setf-do-modify place (cons 'list args)))
(rargs (cons (nth 2 method) args)))
(list 'let* (car method)
...
...
@@ -2532,7 +2539,7 @@ or any generalized variable allowed by `setf'.
Like
`
callf
',
but
PLACE
is
the
second
argument
of
FUNC,
not
the
first.
\(fn
FUNC
ARG1
PLACE
ARGS...
)
"
(declare (debug (function* form place &rest form)))
(declare
(indent 3)
(debug (function* form place &rest form)))
(if (and (cl-safe-expr-p arg1) (cl-simple-expr-p place) (symbolp func))
(list 'setf place (list* func arg1 place args))
(let* ((method (cl-setf-do-modify place (cons 'list args)))
...
...
lisp/emacs-lisp/cl.el
View file @
70b8ef8f
...
...
@@ -651,42 +651,6 @@ If ALIST is non-nil, the new pairs are prepended to it."
;;; Miscellaneous.
;; Define data for indentation and edebug.
(
dolist
(
entry
'
(((
defun*
defmacro*
)
2
)
((
function*
)
nil
(
&or
symbolp
(
[&optional
'macro]
'lambda
(
&rest
sexp
)
&rest
form
)))
((
eval-when
)
1
(
sexp
&rest
form
))
((
declare
)
nil
(
&rest
sexp
))
((
the
)
1
(
sexp
&rest
form
))
((
case
ecase
typecase
etypecase
)
1
(
form
&rest
(
sexp
&rest
form
)))
((
block
return-from
)
1
(
sexp
&rest
form
))
((
return
)
nil
(
&optional
form
))
((
do
do*
)
2
((
&rest
&or
symbolp
(
symbolp
&optional
form
form
))
(
form
&rest
form
)
&rest
form
))
((
do-symbols
)
1
((
symbolp
form
&optional
form
form
)
&rest
form
))
((
do-all-symbols
)
1
((
symbolp
form
&optional
form
)
&rest
form
))
((
psetq
setf
psetf
)
nil
edebug-setq-form
)
((
progv
)
2
(
&rest
form
))
((
flet
labels
macrolet
)
1
((
&rest
(
sexp
sexp
&rest
form
))
&rest
form
))
((
symbol-macrolet
lexical-let
lexical-let*
)
1
((
&rest
&or
symbolp
(
symbolp
form
))
&rest
form
))
((
multiple-value-bind
)
2
((
&rest
symbolp
)
&rest
form
))
((
multiple-value-setq
)
1
((
&rest
symbolp
)
&rest
form
))
((
incf
decf
remf
pushnew
shiftf
rotatef
)
nil
(
&rest
form
))
((
letf
letf*
)
1
((
&rest
(
&rest
form
))
&rest
form
))
((
callf
destructuring-bind
)
2
(
sexp
form
&rest
form
))
((
callf2
)
3
(
sexp
form
form
&rest
form
))
((
loop
)
nil
(
&rest
&or
symbolp
form
))
((
ignore-errors
)
0
(
&rest
form
))))
(
dolist
(
func
(
car
entry
))
(
put
func
'lisp-indent-function
(
nth
1
entry
))
(
put
func
'lisp-indent-hook
(
nth
1
entry
))
(
or
(
get
func
'edebug-form-spec
)
(
put
func
'edebug-form-spec
(
nth
2
entry
)))))
;; Autoload the other portions of the package.
;; We want to replace the basic versions of dolist, dotimes, declare below.
(
fmakunbound
'dolist
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment