Merge remote-tracking branch 'savannah/master' into HEAD
This commit is contained in:
commit
3d43d45755
19 changed files with 310 additions and 202 deletions
|
@ -4274,9 +4274,10 @@ a display specification has the form
|
|||
@noindent
|
||||
@var{fringe} is either the symbol @code{left-fringe} or
|
||||
@code{right-fringe}. @var{bitmap} is a symbol identifying the bitmap
|
||||
to display. The optional @var{face} names a face whose foreground
|
||||
color is used to display the bitmap; this face is automatically merged
|
||||
with the @code{fringe} face.
|
||||
to display. The optional @var{face} names a face whose foreground and
|
||||
background colors are to be used to display the bitmap; this face is
|
||||
automatically merged with the @code{fringe} face. If @var{face} is
|
||||
omitted, that means to use the @code{default} face.
|
||||
|
||||
For instance, to display an arrow in the left fringe, using the
|
||||
@code{warning} face, you could say something like:
|
||||
|
@ -4980,8 +4981,9 @@ Margins}).
|
|||
This display specification on any character of a line of text causes
|
||||
the specified @var{bitmap} be displayed in the left or right fringes
|
||||
for that line, instead of the characters that have the display
|
||||
specification. The optional @var{face} specifies the colors to be
|
||||
used for the bitmap. @xref{Fringe Bitmaps}, for the details.
|
||||
specification. The optional @var{face} specifies the face whose
|
||||
colors are to be used for the bitmap display. @xref{Fringe Bitmaps},
|
||||
for the details.
|
||||
|
||||
@item (space-width @var{factor})
|
||||
This display specification affects all the space characters within the
|
||||
|
|
|
@ -1599,12 +1599,13 @@ parameters represent the user's stated preference; otherwise, use
|
|||
This parameter specifies a relative position of the frame's
|
||||
window-system window in the stacking (Z-) order of the frame's display.
|
||||
|
||||
If this is @code{above}, the frame's window-system window is displayed
|
||||
above all other window-system windows that do not have the @code{above}
|
||||
property set. If this is @code{nil}, the frame's window is displayed below all
|
||||
windows that have the @code{above} property set and above all windows
|
||||
that have the @code{below} property set. If this is @code{below}, the
|
||||
frame's window is displayed below all windows that do not have the
|
||||
If this is @code{above}, the window-system will display the window
|
||||
that corresponds to the frame above all other window-system windows
|
||||
that do not have the @code{above} property set. If this is
|
||||
@code{nil}, the frame's window is displayed below all windows that
|
||||
have the @code{above} property set and above all windows that have the
|
||||
@code{below} property set. If this is @code{below}, the frame's
|
||||
window is displayed below all windows that do not have the
|
||||
@code{below} property set.
|
||||
|
||||
To position the frame above or below a specific other frame use the
|
||||
|
|
|
@ -1709,10 +1709,11 @@ Integration for LXD containers. A container is accessed via
|
|||
@item magit-tramp
|
||||
@cindex method @option{git}
|
||||
@cindex @option{git} method
|
||||
Browing git repositories with @code{magit}. A versioned file is accessed via
|
||||
@file{@trampfn{git,rev@@root-dir,/path/to/file}}. @samp{rev} is a git
|
||||
revision, and @samp{root-dir} is a virtual host name for the root
|
||||
directory, specified in @code{magit-tramp-hosts-alist}.
|
||||
Browsing git repositories with @code{magit}. A versioned file is
|
||||
accessed via @file{@trampfn{git,rev@@root-dir,/path/to/file}}.
|
||||
@samp{rev} is a git revision, and @samp{root-dir} is a virtual host
|
||||
name for the root directory, specified in
|
||||
@code{magit-tramp-hosts-alist}.
|
||||
|
||||
@item tramp-hdfs
|
||||
@cindex method @option{hdfs}
|
||||
|
|
|
@ -557,7 +557,10 @@
|
|||
(let ((args (mapcar #'byte-optimize-form (cdr form))))
|
||||
(if (and (get fn 'pure)
|
||||
(byte-optimize-all-constp args))
|
||||
(list 'quote (apply fn (mapcar #'eval args)))
|
||||
(let ((arg-values (mapcar #'eval args)))
|
||||
(condition-case nil
|
||||
(list 'quote (apply fn arg-values))
|
||||
(error (cons fn args))))
|
||||
(cons fn args)))))))
|
||||
|
||||
(defun byte-optimize-all-constp (list)
|
||||
|
@ -672,36 +675,18 @@
|
|||
(apply (car form) constants))
|
||||
form)))
|
||||
|
||||
;; Portable Emacs integers fall in this range.
|
||||
(defconst byte-opt--portable-max #x1fffffff)
|
||||
(defconst byte-opt--portable-min (- -1 byte-opt--portable-max))
|
||||
|
||||
;; True if N is a number that works the same on all Emacs platforms.
|
||||
;; Portable Emacs fixnums are exactly representable as floats on all
|
||||
;; Emacs platforms, and (except for -0.0) any floating-point number
|
||||
;; that equals one of these integers must be the same on all
|
||||
;; platforms. Although other floating-point numbers such as 0.5 are
|
||||
;; also portable, it can be tricky to characterize them portably so
|
||||
;; they are not optimized.
|
||||
(defun byte-opt--portable-numberp (n)
|
||||
(and (numberp n)
|
||||
(<= byte-opt--portable-min n byte-opt--portable-max)
|
||||
(= n (floor n))
|
||||
(not (and (floatp n) (zerop n)
|
||||
(condition-case () (< (/ n) 0) (error))))))
|
||||
|
||||
;; Use OP to reduce any leading prefix of portable numbers in the list
|
||||
;; (cons ACCUM ARGS) down to a single portable number, and return the
|
||||
;; Use OP to reduce any leading prefix of constant numbers in the list
|
||||
;; (cons ACCUM ARGS) down to a single number, and return the
|
||||
;; resulting list A of arguments. The idea is that applying OP to A
|
||||
;; is equivalent to (but likely more efficient than) applying OP to
|
||||
;; (cons ACCUM ARGS), on any Emacs platform. Do not make any special
|
||||
;; provision for (- X) or (/ X); for example, it is the caller’s
|
||||
;; responsibility that (- 1 0) should not be "optimized" to (- 1).
|
||||
(defun byte-opt--arith-reduce (op accum args)
|
||||
(when (byte-opt--portable-numberp accum)
|
||||
(when (numberp accum)
|
||||
(let (accum1)
|
||||
(while (and (byte-opt--portable-numberp (car args))
|
||||
(byte-opt--portable-numberp
|
||||
(while (and (numberp (car args))
|
||||
(numberp
|
||||
(setq accum1 (condition-case ()
|
||||
(funcall op accum (car args))
|
||||
(error))))
|
||||
|
@ -746,12 +731,11 @@
|
|||
;; (- x -1) --> (1+ x)
|
||||
((equal (cdr args) '(-1))
|
||||
(list '1+ (car args)))
|
||||
;; (- n) -> -n, where n and -n are portable numbers.
|
||||
;; (- n) -> -n, where n and -n are constant numbers.
|
||||
;; This must be done separately since byte-opt--arith-reduce
|
||||
;; is not applied to (- n).
|
||||
((and (null (cdr args))
|
||||
(byte-opt--portable-numberp (car args))
|
||||
(byte-opt--portable-numberp (- (car args))))
|
||||
(numberp (car args)))
|
||||
(- (car args)))
|
||||
;; not further optimized
|
||||
((equal args (cdr form)) form)
|
||||
|
@ -761,8 +745,7 @@
|
|||
(let ((args (cdr form)))
|
||||
(when (null (cdr args))
|
||||
(let ((n (car args)))
|
||||
(when (and (byte-opt--portable-numberp n)
|
||||
(byte-opt--portable-numberp (1+ n)))
|
||||
(when (numberp n)
|
||||
(setq form (1+ n))))))
|
||||
form)
|
||||
|
||||
|
@ -770,8 +753,7 @@
|
|||
(let ((args (cdr form)))
|
||||
(when (null (cdr args))
|
||||
(let ((n (car args)))
|
||||
(when (and (byte-opt--portable-numberp n)
|
||||
(byte-opt--portable-numberp (1- n)))
|
||||
(when (numberp n)
|
||||
(setq form (1- n))))))
|
||||
form)
|
||||
|
||||
|
@ -813,7 +795,7 @@
|
|||
(t ;; This can enable some lapcode optimizations.
|
||||
(list (car form) (nth 2 form) (nth 1 form)))))
|
||||
|
||||
(defun byte-optimize-predicate (form)
|
||||
(defun byte-optimize-constant-args (form)
|
||||
(let ((ok t)
|
||||
(rest (cdr form)))
|
||||
(while (and rest ok)
|
||||
|
@ -828,9 +810,6 @@
|
|||
(defun byte-optimize-identity (form)
|
||||
(if (and (cdr form) (null (cdr (cdr form))))
|
||||
(nth 1 form)
|
||||
(byte-compile-warn "identity called with %d arg%s, but requires 1"
|
||||
(length (cdr form))
|
||||
(if (= 1 (length (cdr form))) "" "s"))
|
||||
form))
|
||||
|
||||
(defun byte-optimize--constant-symbol-p (expr)
|
||||
|
@ -863,21 +842,27 @@
|
|||
;; Arity errors reported elsewhere.
|
||||
form))
|
||||
|
||||
(defun byte-optimize-assoc (form)
|
||||
;; Replace 2-argument `assoc' with `assq', `rassoc' with `rassq',
|
||||
;; if the first arg is a symbol.
|
||||
(if (and (= (length form) 3)
|
||||
(byte-optimize--constant-symbol-p (nth 1 form)))
|
||||
(cons (if (eq (car form) 'assoc) 'assq 'rassq)
|
||||
(cdr form))
|
||||
form))
|
||||
|
||||
(defun byte-optimize-memq (form)
|
||||
;; (memq foo '(bar)) => (and (eq foo 'bar) '(bar))
|
||||
(if (/= (length (cdr form)) 2)
|
||||
(byte-compile-warn "memq called with %d arg%s, but requires 2"
|
||||
(length (cdr form))
|
||||
(if (= 1 (length (cdr form))) "" "s"))
|
||||
(if (= (length (cdr form)) 2)
|
||||
(let ((list (nth 2 form)))
|
||||
(when (and (eq (car-safe list) 'quote)
|
||||
(if (and (eq (car-safe list) 'quote)
|
||||
(listp (setq list (cadr list)))
|
||||
(= (length list) 1))
|
||||
(setq form (byte-optimize-and
|
||||
`(and ,(byte-optimize-predicate
|
||||
`(eq ,(nth 1 form) ',(nth 0 list)))
|
||||
',list)))))
|
||||
(byte-optimize-predicate form)))
|
||||
`(and (eq ,(nth 1 form) ',(nth 0 list))
|
||||
',list)
|
||||
form))
|
||||
;; Arity errors reported elsewhere.
|
||||
form))
|
||||
|
||||
(defun byte-optimize-concat (form)
|
||||
"Merge adjacent constant arguments to `concat'."
|
||||
|
@ -910,6 +895,8 @@
|
|||
(put 'memq 'byte-optimizer 'byte-optimize-memq)
|
||||
(put 'memql 'byte-optimizer 'byte-optimize-member)
|
||||
(put 'member 'byte-optimizer 'byte-optimize-member)
|
||||
(put 'assoc 'byte-optimizer 'byte-optimize-assoc)
|
||||
(put 'rassoc 'byte-optimizer 'byte-optimize-assoc)
|
||||
|
||||
(put '+ 'byte-optimizer 'byte-optimize-plus)
|
||||
(put '* 'byte-optimizer 'byte-optimize-multiply)
|
||||
|
@ -925,31 +912,8 @@
|
|||
(put 'string= 'byte-optimizer 'byte-optimize-binary-predicate)
|
||||
(put 'string-equal 'byte-optimizer 'byte-optimize-binary-predicate)
|
||||
|
||||
(put '< 'byte-optimizer 'byte-optimize-predicate)
|
||||
(put '> 'byte-optimizer 'byte-optimize-predicate)
|
||||
(put '<= 'byte-optimizer 'byte-optimize-predicate)
|
||||
(put '>= 'byte-optimizer 'byte-optimize-predicate)
|
||||
(put '1+ 'byte-optimizer 'byte-optimize-1+)
|
||||
(put '1- 'byte-optimizer 'byte-optimize-1-)
|
||||
(put 'not 'byte-optimizer 'byte-optimize-predicate)
|
||||
(put 'null 'byte-optimizer 'byte-optimize-predicate)
|
||||
(put 'consp 'byte-optimizer 'byte-optimize-predicate)
|
||||
(put 'listp 'byte-optimizer 'byte-optimize-predicate)
|
||||
(put 'symbolp 'byte-optimizer 'byte-optimize-predicate)
|
||||
(put 'stringp 'byte-optimizer 'byte-optimize-predicate)
|
||||
(put 'string< 'byte-optimizer 'byte-optimize-predicate)
|
||||
(put 'string-lessp 'byte-optimizer 'byte-optimize-predicate)
|
||||
(put 'proper-list-p 'byte-optimizer 'byte-optimize-predicate)
|
||||
|
||||
(put 'logand 'byte-optimizer 'byte-optimize-predicate)
|
||||
(put 'logior 'byte-optimizer 'byte-optimize-predicate)
|
||||
(put 'logxor 'byte-optimizer 'byte-optimize-predicate)
|
||||
(put 'lognot 'byte-optimizer 'byte-optimize-predicate)
|
||||
|
||||
(put 'car 'byte-optimizer 'byte-optimize-predicate)
|
||||
(put 'cdr 'byte-optimizer 'byte-optimize-predicate)
|
||||
(put 'car-safe 'byte-optimizer 'byte-optimize-predicate)
|
||||
(put 'cdr-safe 'byte-optimizer 'byte-optimize-predicate)
|
||||
|
||||
(put 'concat 'byte-optimizer 'byte-optimize-concat)
|
||||
|
||||
|
@ -980,7 +944,7 @@
|
|||
nil))
|
||||
((null (cdr (cdr form)))
|
||||
(nth 1 form))
|
||||
((byte-optimize-predicate form))))
|
||||
((byte-optimize-constant-args form))))
|
||||
|
||||
(defun byte-optimize-or (form)
|
||||
;; Throw away nil's, and simplify if less than 2 args.
|
||||
|
@ -993,7 +957,7 @@
|
|||
(setq form (copy-sequence form)
|
||||
rest (setcdr (memq (car rest) form) nil))))
|
||||
(if (cdr (cdr form))
|
||||
(byte-optimize-predicate form)
|
||||
(byte-optimize-constant-args form)
|
||||
(nth 1 form))))
|
||||
|
||||
(defun byte-optimize-cond (form)
|
||||
|
@ -1140,7 +1104,7 @@
|
|||
(list 'car (if (zerop (nth 1 form))
|
||||
(nth 2 form)
|
||||
(list 'cdr (nth 2 form))))
|
||||
(byte-optimize-predicate form))
|
||||
form)
|
||||
form))
|
||||
|
||||
(put 'nthcdr 'byte-optimizer 'byte-optimize-nthcdr)
|
||||
|
@ -1152,7 +1116,7 @@
|
|||
(while (>= (setq count (1- count)) 0)
|
||||
(setq form (list 'cdr form)))
|
||||
form)
|
||||
(byte-optimize-predicate form))
|
||||
form)
|
||||
form))
|
||||
|
||||
;; Fixme: delete-char -> delete-region (byte-coded)
|
||||
|
@ -1295,9 +1259,9 @@
|
|||
;; Pure functions are side-effect free functions whose values depend
|
||||
;; only on their arguments, not on the platform. For these functions,
|
||||
;; calls with constant arguments can be evaluated at compile time.
|
||||
;; This may shift runtime errors to compile time. For example, logand
|
||||
;; is pure since its results are machine-independent, whereas ash is
|
||||
;; not pure because (ash 1 29)'s value depends on machine word size.
|
||||
;; For example, ash is pure since its results are machine-independent,
|
||||
;; whereas lsh is not pure because (lsh -1 -1)'s value depends on the
|
||||
;; fixnum range.
|
||||
;;
|
||||
;; When deciding whether a function is pure, do not worry about
|
||||
;; mutable strings or markers, as they are so unlikely in real code
|
||||
|
@ -1307,9 +1271,41 @@
|
|||
;; values if a marker is moved.
|
||||
|
||||
(let ((pure-fns
|
||||
'(% concat logand logcount logior lognot logxor
|
||||
regexp-opt regexp-quote
|
||||
string-to-char string-to-syntax symbol-name)))
|
||||
'(concat regexp-opt regexp-quote
|
||||
string-to-char string-to-syntax symbol-name
|
||||
eq eql
|
||||
= /= < <= => > min max
|
||||
+ - * / % mod abs ash 1+ 1- sqrt
|
||||
logand logior lognot logxor logcount
|
||||
copysign isnan ldexp float logb
|
||||
floor ceiling round truncate
|
||||
ffloor fceiling fround ftruncate
|
||||
string= string-equal string< string-lessp
|
||||
consp atom listp nlistp propert-list-p
|
||||
sequencep arrayp vectorp stringp bool-vector-p hash-table-p
|
||||
null not
|
||||
numberp integerp floatp natnump characterp
|
||||
integer-or-marker-p number-or-marker-p char-or-string-p
|
||||
symbolp keywordp
|
||||
type-of
|
||||
identity ignore
|
||||
|
||||
;; The following functions are pure up to mutation of their
|
||||
;; arguments. This is pure enough for the purposes of
|
||||
;; constant folding, but not necessarily for all kinds of
|
||||
;; code motion.
|
||||
car cdr car-safe cdr-safe nth nthcdr last
|
||||
equal
|
||||
length safe-length
|
||||
memq memql member
|
||||
;; `assoc' and `assoc-default' are excluded since they are
|
||||
;; impure if the test function is (consider `string-match').
|
||||
assq rassq rassoc
|
||||
plist-get lax-plist-get plist-member
|
||||
aref elt
|
||||
bool-vector-subsetp
|
||||
bool-vector-count-population bool-vector-count-consecutive
|
||||
)))
|
||||
(while pure-fns
|
||||
(put (car pure-fns) 'pure t)
|
||||
(setq pure-fns (cdr pure-fns)))
|
||||
|
@ -2194,7 +2190,7 @@ If FOR-EFFECT is non-nil, the return value is assumed to be of no importance."
|
|||
(or noninteractive (message "compiling %s...done" x)))
|
||||
'(byte-optimize-form
|
||||
byte-optimize-body
|
||||
byte-optimize-predicate
|
||||
byte-optimize-constant-args
|
||||
byte-optimize-binary-predicate
|
||||
;; Inserted some more than necessary, to speed it up.
|
||||
byte-optimize-form-code-walker
|
||||
|
|
|
@ -3138,23 +3138,29 @@ Of course, we really can't know that for sure, so it's just a heuristic."
|
|||
(cdr (assq sym byte-compile-macro-environment))))))
|
||||
|
||||
(pcase-dolist (`(,type . ,pred)
|
||||
'((null . null)
|
||||
;; Mostly kept in alphabetical order.
|
||||
'((array . arrayp)
|
||||
(atom . atom)
|
||||
(real . numberp)
|
||||
(fixnum . integerp)
|
||||
(base-char . characterp)
|
||||
(boolean . booleanp)
|
||||
(bool-vector . bool-vector-p)
|
||||
(buffer . bufferp)
|
||||
(character . natnump)
|
||||
;; "Obvious" mappings.
|
||||
(string . stringp)
|
||||
(list . listp)
|
||||
(char-table . char-table-p)
|
||||
(cons . consp)
|
||||
(symbol . symbolp)
|
||||
(fixnum . integerp)
|
||||
(float . floatp)
|
||||
(function . functionp)
|
||||
(integer . integerp)
|
||||
(float . floatp)
|
||||
(boolean . booleanp)
|
||||
(keyword . keywordp)
|
||||
(list . listp)
|
||||
(number . numberp)
|
||||
(null . null)
|
||||
(real . numberp)
|
||||
(sequence . sequencep)
|
||||
(string . stringp)
|
||||
(symbol . symbolp)
|
||||
(vector . vectorp)
|
||||
(array . arrayp)
|
||||
;; FIXME: Do we really want to consider this a type?
|
||||
(integer-or-marker . integer-or-marker-p)
|
||||
))
|
||||
|
|
|
@ -996,7 +996,11 @@ An \"apropos\" query with -k gives a buffer of matching page
|
|||
names or descriptions. The pattern argument is usually an
|
||||
\"grep -E\" style regexp.
|
||||
|
||||
-k pattern"
|
||||
-k pattern
|
||||
|
||||
Note that in some cases you will need to use \\[quoted-insert] to quote the
|
||||
SPC character in the above examples, because this command attempts
|
||||
to auto-complete your input based on the installed manual pages."
|
||||
|
||||
(interactive
|
||||
(list (let* ((default-entry (Man-default-man-entry))
|
||||
|
|
|
@ -1582,6 +1582,7 @@ comment at the start of cc-engine.el for more info."
|
|||
(save-excursion (backward-char)
|
||||
(looking-at "\\s("))
|
||||
(c-crosses-statement-barrier-p (point) end)))))
|
||||
(make-obsolete 'c-at-expression-start-p nil "5.35")
|
||||
|
||||
|
||||
;; A set of functions that covers various idiosyncrasies in
|
||||
|
@ -3186,6 +3187,24 @@ comment at the start of cc-engine.el for more info."
|
|||
c-semi-near-cache-limit (min c-semi-near-cache-limit pos)
|
||||
c-full-near-cache-limit (min c-full-near-cache-limit pos)))
|
||||
|
||||
(defun c-foreign-truncate-lit-pos-cache (beg _end)
|
||||
"Truncate CC Mode's literal cache.
|
||||
|
||||
This function should be added to the `before-change-functions'
|
||||
hook by major modes that use CC Mode's filling functionality
|
||||
without initializing CC Mode. Currently (2020-06) these are
|
||||
js-mode and mhtml-mode."
|
||||
(c-truncate-lit-pos-cache beg))
|
||||
|
||||
(defun c-foreign-init-lit-pos-cache ()
|
||||
"Initialize CC Mode's literal cache.
|
||||
|
||||
This function should be called from the mode functions of major
|
||||
modes which use CC Mode's filling functionality without
|
||||
initializing CC Mode. Currently (2020-06) these are js-mode and
|
||||
mhtml-mode."
|
||||
(c-truncate-lit-pos-cache 1))
|
||||
|
||||
|
||||
;; A system for finding noteworthy parens before the point.
|
||||
|
||||
|
@ -11877,17 +11896,6 @@ comment at the start of cc-engine.el for more info."
|
|||
(cons (list beg) type)))))
|
||||
(error nil))))
|
||||
|
||||
(defun c-looking-at-bos (&optional _lim)
|
||||
;; Return non-nil if between two statements or declarations, assuming
|
||||
;; point is not inside a literal or comment.
|
||||
;;
|
||||
;; Obsolete - `c-at-statement-start-p' or `c-at-expression-start-p'
|
||||
;; are recommended instead.
|
||||
;;
|
||||
;; This function might do hidden buffer changes.
|
||||
(c-at-statement-start-p))
|
||||
(make-obsolete 'c-looking-at-bos 'c-at-statement-start-p "22.1")
|
||||
|
||||
(defun c-looking-at-statement-block ()
|
||||
;; Point is at an opening brace. If this is a statement block (i.e. the
|
||||
;; elements in the block are terminated by semicolons, or the block is
|
||||
|
|
|
@ -1770,7 +1770,7 @@ ender."
|
|||
`comment-start-skip' is initialized from this."
|
||||
;; Default: Allow the last char of the comment starter(s) to be
|
||||
;; repeated, then allow any amount of horizontal whitespace.
|
||||
t (concat "\\("
|
||||
t (concat "\\(?:"
|
||||
(c-concat-separated
|
||||
(mapcar (lambda (cs)
|
||||
(when cs
|
||||
|
|
|
@ -2620,9 +2620,9 @@ comint mode, which see."
|
|||
(select-window
|
||||
(display-buffer
|
||||
(get-buffer-create (concat "*gud" filepart "*"))
|
||||
'(display-buffer-reuse-window
|
||||
'((display-buffer-reuse-window
|
||||
display-buffer-in-previous-window
|
||||
display-buffer-same-window display-buffer-pop-up-window)))
|
||||
display-buffer-same-window display-buffer-pop-up-window))))
|
||||
(when (and existing-buffer (get-buffer-process existing-buffer))
|
||||
(error "This program is already being debugged"))
|
||||
;; Set the dir, in case the buffer already existed with a different dir.
|
||||
|
|
|
@ -4570,7 +4570,7 @@ This function is intended for use in `after-change-functions'."
|
|||
|
||||
;; Comments
|
||||
(setq-local comment-start "// ")
|
||||
(setq-local comment-start-skip "\\(//+\\|/\\*+\\)\\s *")
|
||||
(setq-local comment-start-skip "\\(?://+\\|/\\*+\\)\\s *")
|
||||
(setq-local comment-end "")
|
||||
(setq-local fill-paragraph-function #'js-fill-paragraph)
|
||||
(setq-local normal-auto-fill-function #'js-do-auto-fill)
|
||||
|
@ -4591,6 +4591,8 @@ This function is intended for use in `after-change-functions'."
|
|||
(setq imenu-create-index-function #'js--imenu-create-index)
|
||||
|
||||
;; for filling, pretend we're cc-mode
|
||||
(c-foreign-init-lit-pos-cache)
|
||||
(add-hook 'before-change-functions #'c-foreign-truncate-lit-pos-cache nil t)
|
||||
(setq-local comment-line-break-function #'c-indent-new-comment-line)
|
||||
(setq-local comment-multi-line t)
|
||||
(setq-local electric-indent-chars
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
;;; project.el --- Operations on the current project -*- lexical-binding: t; -*-
|
||||
|
||||
;; Copyright (C) 2015-2020 Free Software Foundation, Inc.
|
||||
;; Version: 0.4.0
|
||||
;; Version: 0.5.0
|
||||
;; Package-Requires: ((emacs "26.3"))
|
||||
|
||||
;; This is a GNU ELPA :core package. Avoid using functionality that
|
||||
|
@ -294,11 +294,14 @@ The directory names should be absolute. Used in the VC project
|
|||
backend implementation of `project-external-roots'.")
|
||||
|
||||
(defun project-try-vc (dir)
|
||||
(let* ((backend (ignore-errors (vc-responsible-backend dir)))
|
||||
(let* ((backend
|
||||
;; FIXME: This is slow. Cache it.
|
||||
(ignore-errors (vc-responsible-backend dir)))
|
||||
(root
|
||||
(pcase backend
|
||||
('Git
|
||||
;; Don't stop at submodule boundary.
|
||||
;; FIXME: Cache for a shorter time.
|
||||
(or (vc-file-getprop dir 'project-git-root)
|
||||
(let ((root (vc-call-backend backend 'root dir)))
|
||||
(vc-file-setprop
|
||||
|
@ -800,10 +803,10 @@ Arguments the same as in `compile'."
|
|||
;;;###autoload
|
||||
(defun project-switch-to-buffer ()
|
||||
"Switch to another buffer that is related to the current project.
|
||||
A buffer is related to a project if its `default-directory'
|
||||
is inside the directory hierarchy of the project's root."
|
||||
A buffer is related to a project if `project-current' returns the
|
||||
same (equal) value when called in that buffer."
|
||||
(interactive)
|
||||
(let* ((root (project-root (project-current t)))
|
||||
(let* ((pr (project-current t))
|
||||
(current-buffer (current-buffer))
|
||||
(other-buffer (other-buffer current-buffer))
|
||||
(other-name (buffer-name other-buffer))
|
||||
|
@ -811,10 +814,9 @@ is inside the directory hierarchy of the project's root."
|
|||
(lambda (buffer)
|
||||
;; BUFFER is an entry (BUF-NAME . BUF-OBJ) of Vbuffer_alist.
|
||||
(and (cdr buffer)
|
||||
(not (eq (cdr buffer) current-buffer))
|
||||
(when-let ((file (buffer-local-value 'default-directory
|
||||
(cdr buffer))))
|
||||
(file-in-directory-p file root))))))
|
||||
(equal pr
|
||||
(with-current-buffer (cdr buffer)
|
||||
(project-current)))))))
|
||||
(switch-to-buffer
|
||||
(read-buffer
|
||||
"Switch to buffer: "
|
||||
|
@ -836,13 +838,12 @@ any of the conditions will not be killed."
|
|||
|
||||
(defun project--buffer-list (pr)
|
||||
"Return the list of all buffers in project PR."
|
||||
(let ((root (project-root pr))
|
||||
bufs)
|
||||
(let (bufs)
|
||||
(dolist (buf (buffer-list))
|
||||
(let ((filename (or (buffer-file-name buf)
|
||||
(buffer-local-value 'default-directory buf))))
|
||||
(when (and filename (file-in-directory-p filename root))
|
||||
(push buf bufs))))
|
||||
(when (equal pr
|
||||
(with-current-buffer buf
|
||||
(project-current)))
|
||||
(push buf bufs)))
|
||||
(nreverse bufs)))
|
||||
|
||||
;;;###autoload
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
;; Keywords: languages
|
||||
;; The "Version" is the date followed by the decimal rendition of the Git
|
||||
;; commit hex.
|
||||
;; Version: 2020.02.23.232634261
|
||||
;; Version: 2020.06.27.014326051
|
||||
|
||||
;; Yoni Rabkin <yoni@rabkins.net> contacted the maintainer of this
|
||||
;; file on 19/3/2008, and the maintainer agreed that when a bug is
|
||||
|
@ -124,7 +124,7 @@
|
|||
;;
|
||||
|
||||
;; This variable will always hold the version number of the mode
|
||||
(defconst verilog-mode-version "2020-02-23-dddb795-vpo-GNU"
|
||||
(defconst verilog-mode-version "2020-06-27-0da9923-vpo-GNU"
|
||||
"Version of this Verilog mode.")
|
||||
(defconst verilog-mode-release-emacs t
|
||||
"If non-nil, this version of Verilog mode was released with Emacs itself.")
|
||||
|
@ -1430,7 +1430,7 @@ See also `verilog-case-fold'."
|
|||
:type 'hook)
|
||||
|
||||
(defvar verilog-imenu-generic-expression
|
||||
'((nil "^\\s-*\\(?:m\\(?:odule\\|acromodule\\)\\|p\\(?:rimitive\\|rogram\\|ackage\\)\\)\\s-+\\([a-zA-Z0-9_.:]+\\)" 1)
|
||||
'((nil "^\\s-*\\(?:connectmodule\\|m\\(?:odule\\|acromodule\\)\\|p\\(?:rimitive\\|rogram\\|ackage\\)\\)\\s-+\\([a-zA-Z0-9_.:]+\\)" 1)
|
||||
("*Variables*" "^\\s-*\\(reg\\|wire\\|logic\\)\\s-+\\(\\|\\[[^]]+\\]\\s-+\\)\\([A-Za-z0-9_]+\\)" 3)
|
||||
("*Classes*" "^\\s-*\\(?:\\(?:virtual\\|interface\\)\\s-+\\)?class\\s-+\\([A-Za-z_][A-Za-z0-9_]+\\)" 1)
|
||||
("*Tasks*" "^\\s-*\\(?:\\(?:static\\|pure\\|virtual\\|local\\|protected\\)\\s-+\\)*task\\s-+\\(?:\\(?:static\\|automatic\\)\\s-+\\)?\\([A-Za-z_][A-Za-z0-9_:]+\\)" 1)
|
||||
|
@ -2515,11 +2515,13 @@ find the errors."
|
|||
(eval-when-compile
|
||||
(verilog-regexp-words
|
||||
'( "begin"
|
||||
"connectmodule"
|
||||
"else"
|
||||
"end"
|
||||
"endcase"
|
||||
"endclass"
|
||||
"endclocking"
|
||||
"endconnectmodule"
|
||||
"endgroup"
|
||||
"endfunction"
|
||||
"endmodule"
|
||||
|
@ -2562,6 +2564,7 @@ find the errors."
|
|||
"\\(sequence\\)\\|" ; 14
|
||||
"\\(clocking\\)\\|" ; 15
|
||||
"\\(property\\)\\|" ; 16
|
||||
"\\(connectmodule\\)\\|" ; 17
|
||||
"\\)\\>\\)"))
|
||||
(defconst verilog-end-block-re
|
||||
(eval-when-compile
|
||||
|
@ -2722,6 +2725,7 @@ find the errors."
|
|||
"endclass"
|
||||
"endclocking"
|
||||
"endconfig"
|
||||
"endconnectmodule"
|
||||
"endfunction"
|
||||
"endgenerate"
|
||||
"endgroup"
|
||||
|
@ -2740,7 +2744,7 @@ find the errors."
|
|||
(defconst verilog-declaration-opener
|
||||
(eval-when-compile
|
||||
(verilog-regexp-words
|
||||
'("module" "begin" "task" "function"))))
|
||||
'("connectmodule" "module" "begin" "task" "function"))))
|
||||
|
||||
(defconst verilog-declaration-prefix-re
|
||||
(eval-when-compile
|
||||
|
@ -2802,9 +2806,9 @@ find the errors."
|
|||
(defconst verilog-declaration-re-1-no-macro (concat "^" verilog-declaration-re-2-no-macro))
|
||||
|
||||
(defconst verilog-defun-re
|
||||
(eval-when-compile (verilog-regexp-words '("macromodule" "module" "class" "program" "interface" "package" "primitive" "config"))))
|
||||
(eval-when-compile (verilog-regexp-words '("macromodule" "connectmodule" "module" "class" "program" "interface" "package" "primitive" "config"))))
|
||||
(defconst verilog-end-defun-re
|
||||
(eval-when-compile (verilog-regexp-words '("endmodule" "endclass" "endprogram" "endinterface" "endpackage" "endprimitive" "endconfig"))))
|
||||
(eval-when-compile (verilog-regexp-words '("endconnectmodule" "endmodule" "endclass" "endprogram" "endinterface" "endpackage" "endprimitive" "endconfig"))))
|
||||
(defconst verilog-zero-indent-re
|
||||
(concat verilog-defun-re "\\|" verilog-end-defun-re))
|
||||
(defconst verilog-inst-comment-re
|
||||
|
@ -2836,7 +2840,7 @@ find the errors."
|
|||
"generate" "endgenerate"
|
||||
"initial"
|
||||
"interface" "endinterface"
|
||||
"module" "macromodule" "endmodule"
|
||||
"connectmodule" "module" "macromodule" "endconnectmodule" "endmodule"
|
||||
"package" "endpackage"
|
||||
"primitive" "endprimitive"
|
||||
"program" "endprogram"
|
||||
|
@ -2904,14 +2908,14 @@ find the errors."
|
|||
(defconst verilog-defun-level-not-generate-re
|
||||
(eval-when-compile
|
||||
(verilog-regexp-words
|
||||
'( "module" "macromodule" "primitive" "class" "program"
|
||||
'( "connectmodule" "module" "macromodule" "primitive" "class" "program"
|
||||
"interface" "package" "config"))))
|
||||
|
||||
(defconst verilog-defun-level-re
|
||||
(eval-when-compile
|
||||
(verilog-regexp-words
|
||||
(append
|
||||
'( "module" "macromodule" "primitive" "class" "program"
|
||||
'( "connectmodule" "module" "macromodule" "primitive" "class" "program"
|
||||
"interface" "package" "config")
|
||||
'( "initial" "final" "always" "always_comb" "always_ff"
|
||||
"always_latch" "endtask" "endfunction" )))))
|
||||
|
@ -2926,7 +2930,7 @@ find the errors."
|
|||
(eval-when-compile
|
||||
(verilog-regexp-words
|
||||
'(
|
||||
"endmodule" "endprimitive" "endinterface" "endpackage" "endprogram" "endclass"
|
||||
"endconnectmodule" "endmodule" "endprimitive" "endinterface" "endpackage" "endprogram" "endclass"
|
||||
))))
|
||||
|
||||
(defconst verilog-dpi-import-export-re
|
||||
|
@ -2947,7 +2951,7 @@ find the errors."
|
|||
(eval-when-compile
|
||||
(verilog-regexp-words
|
||||
'(
|
||||
"always" "assign" "always_latch" "always_ff" "always_comb" "constraint"
|
||||
"always" "assign" "always_latch" "always_ff" "always_comb" "connectmodule" "constraint"
|
||||
"import" "initial" "final" "module" "macromodule" "repeat" "randcase" "while"
|
||||
"if" "for" "forever" "foreach" "else" "parameter" "do" "localparam" "assert"
|
||||
))))
|
||||
|
@ -3065,6 +3069,8 @@ find the errors."
|
|||
"sync_reject_on" "unique0" "until" "until_with" "untyped" "weak"
|
||||
;; 1800-2012
|
||||
"implements" "interconnect" "nettype" "soft"
|
||||
;; AMS
|
||||
"connectmodule" "endconnectmodule"
|
||||
))
|
||||
"List of Verilog keywords.")
|
||||
|
||||
|
@ -3211,7 +3217,7 @@ See also `verilog-font-lock-extra-types'.")
|
|||
"atan2" "atanh" "branch" "ceil" "connect" "connectmodule"
|
||||
"connectrules" "continuous" "cos" "cosh" "ddt" "ddt_nature"
|
||||
"ddx" "discipline" "discrete" "domain" "driver_update"
|
||||
"endconnectrules" "enddiscipline" "endnature" "endparamset"
|
||||
"endconnectmodule" "endconnectrules" "enddiscipline" "endnature" "endparamset"
|
||||
"exclude" "exp" "final_step" "flicker_noise" "floor" "flow"
|
||||
"from" "ground" "hypot" "idt" "idt_nature" "idtmod" "inf"
|
||||
"initial_step" "laplace_nd" "laplace_np" "laplace_zd"
|
||||
|
@ -3290,9 +3296,9 @@ See also `verilog-font-lock-extra-types'.")
|
|||
(list
|
||||
;; Fontify module definitions
|
||||
(list
|
||||
"\\<\\(\\(macro\\)?module\\|primitive\\|class\\|program\\|interface\\|package\\|task\\)\\>\\s-*\\(\\sw+\\)"
|
||||
"\\<\\(\\(macro\\|connect\\)?module\\|primitive\\|class\\|program\\|interface\\|package\\|task\\)\\>\\s-*\\(\\sw+\\)"
|
||||
'(1 font-lock-keyword-face)
|
||||
'(3 font-lock-function-name-face 'prepend))
|
||||
'(3 font-lock-function-name-face prepend))
|
||||
;; Fontify function definitions
|
||||
(list
|
||||
(concat "\\<function\\>\\s-+\\(integer\\|real\\(time\\)?\\|time\\)\\s-+\\(\\sw+\\)" )
|
||||
|
@ -3302,7 +3308,16 @@ See also `verilog-font-lock-extra-types'.")
|
|||
(1 font-lock-keyword-face)
|
||||
(2 font-lock-constant-face append))
|
||||
'("\\<function\\>\\s-+\\(\\sw+\\)"
|
||||
1 'font-lock-constant-face append))))
|
||||
1 'font-lock-constant-face append)
|
||||
;; Fontify variable names in declarations
|
||||
(list ;; Implemented as an anchored-matcher
|
||||
(concat verilog-declaration-re
|
||||
" *\\(" verilog-range-re "\\)?")
|
||||
(list ;; anchored-highlighter
|
||||
(concat "\\_<\\(" verilog-symbol-re "\\)"
|
||||
" *\\(" verilog-range-re "\\)?*")
|
||||
nil nil '(1 font-lock-variable-name-face))))))
|
||||
|
||||
|
||||
(setq verilog-font-lock-keywords-2
|
||||
(append verilog-font-lock-keywords-1
|
||||
|
@ -3608,7 +3623,7 @@ Use filename, if current buffer being edited shorten to just buffer name."
|
|||
(setq found 't))))))
|
||||
((looking-at verilog-end-block-re)
|
||||
(verilog-leap-to-head))
|
||||
((looking-at "\\(endmodule\\>\\)\\|\\(\\<endprimitive\\>\\)\\|\\(\\<endclass\\>\\)\\|\\(\\<endprogram\\>\\)\\|\\(\\<endinterface\\>\\)\\|\\(\\<endpackage\\>\\)")
|
||||
((looking-at "\\(endmodule\\>\\)\\|\\(\\<endprimitive\\>\\)\\|\\(\\<endclass\\>\\)\\|\\(\\<endprogram\\>\\)\\|\\(\\<endinterface\\>\\)\\|\\(\\<endpackage\\>\\)\\|\\(\\<endconnectmodule\\>\\)")
|
||||
(cond
|
||||
((match-end 1)
|
||||
(verilog-re-search-backward "\\<\\(macro\\)?module\\>" nil 'move))
|
||||
|
@ -3622,6 +3637,8 @@ Use filename, if current buffer being edited shorten to just buffer name."
|
|||
(verilog-re-search-backward "\\<interface\\>" nil 'move))
|
||||
((match-end 6)
|
||||
(verilog-re-search-backward "\\<package\\>" nil 'move))
|
||||
((match-end 7)
|
||||
(verilog-re-search-backward "\\<connectmodule\\>" nil 'move))
|
||||
(t
|
||||
(goto-char st)
|
||||
(backward-sexp 1))))
|
||||
|
@ -3747,7 +3764,8 @@ Use filename, if current buffer being edited shorten to just buffer name."
|
|||
"\\(\\<class\\>\\)\\|"
|
||||
"\\(\\<program\\>\\)\\|"
|
||||
"\\(\\<interface\\>\\)\\|"
|
||||
"\\(\\<package\\>\\)"))
|
||||
"\\(\\<package\\>\\)\\|"
|
||||
"\\(\\<connectmodule\\>\\)"))
|
||||
(cond
|
||||
((match-end 1)
|
||||
(verilog-re-search-forward "\\<endmodule\\>" nil 'move))
|
||||
|
@ -3761,6 +3779,8 @@ Use filename, if current buffer being edited shorten to just buffer name."
|
|||
(verilog-re-search-forward "\\<endinterface\\>" nil 'move))
|
||||
((match-end 6)
|
||||
(verilog-re-search-forward "\\<endpackage\\>" nil 'move))
|
||||
((match-end 7)
|
||||
(verilog-re-search-forward "\\<endconnectmodule\\>" nil 'move))
|
||||
(t
|
||||
(goto-char st)
|
||||
(if (= (following-char) ?\) )
|
||||
|
@ -4568,13 +4588,13 @@ More specifically, point @ in the line foo : @ begin"
|
|||
(let ((nest 1))
|
||||
(while t
|
||||
(verilog-re-search-backward
|
||||
(concat "\\(\\<module\\>\\)\\|\\(\\<randcase\\>\\|\\<case[xz]?\\>[^:]\\)\\|"
|
||||
(concat "\\(\\<module\\>\\)\\|\\(\\<connectmodule\\>\\)\\|\\(\\<randcase\\>\\|\\<case[xz]?\\>[^:]\\)\\|"
|
||||
"\\(\\<endcase\\>\\)\\>")
|
||||
nil 'move)
|
||||
(cond
|
||||
((match-end 3)
|
||||
((match-end 4)
|
||||
(setq nest (1+ nest)))
|
||||
((match-end 2)
|
||||
((match-end 3)
|
||||
(if (= nest 1)
|
||||
(throw 'found 1))
|
||||
(setq nest (1- nest)))
|
||||
|
@ -4609,13 +4629,15 @@ More specifically, after a generate and before an endgenerate."
|
|||
(while (and
|
||||
(/= nest 0)
|
||||
(verilog-re-search-backward
|
||||
"\\<\\(module\\)\\|\\(generate\\)\\|\\(endgenerate\\)\\>" nil 'move)
|
||||
"\\<\\(module\\)\\|\\(connectmodule\\)\\|\\(generate\\)\\|\\(endgenerate\\)\\>" nil 'move)
|
||||
(cond
|
||||
((match-end 1) ; module - we have crawled out
|
||||
(throw 'done 1))
|
||||
((match-end 2) ; generate
|
||||
((match-end 2) ; connectmodule - we have crawled out
|
||||
(throw 'done 1))
|
||||
((match-end 3) ; generate
|
||||
(setq nest (1- nest)))
|
||||
((match-end 3) ; endgenerate
|
||||
((match-end 4) ; endgenerate
|
||||
(setq nest (1+ nest))))))))
|
||||
(= nest 0) )) ; return nest
|
||||
|
||||
|
@ -5078,6 +5100,8 @@ primitive or interface named NAME."
|
|||
(setq reg "\\(\\<clocking\\>\\)\\|\\<endclocking\\>"))
|
||||
((match-end 16) ; of verilog-end-block-ordered-re
|
||||
(setq reg "\\(\\<property\\>\\)\\|\\<endproperty\\>"))
|
||||
((match-end 17) ; of verilog-end-block-ordered-re
|
||||
(setq reg "\\(\\<connectmodule\\>\\)\\|\\<endconnectmodule\\>"))
|
||||
|
||||
(t (error "Problem in verilog-set-auto-endcomments")))
|
||||
(let (b e)
|
||||
|
@ -5103,7 +5127,7 @@ primitive or interface named NAME."
|
|||
(setq string (buffer-substring b e)))
|
||||
(t
|
||||
(ding 't)
|
||||
(setq string "unmatched end(function|task|module|primitive|interface|package|class|clocking)")))))
|
||||
(setq string "unmatched end(function|task|module|connectmodule|primitive|interface|package|class|clocking)")))))
|
||||
(end-of-line)
|
||||
(insert (concat " // " string )))
|
||||
))))))))))
|
||||
|
@ -5574,7 +5598,7 @@ Return a list of two elements: (INDENT-TYPE INDENT-LEVEL)."
|
|||
(case-fold-search nil)
|
||||
(par 0)
|
||||
(begin (looking-at "[ \t]*begin\\>"))
|
||||
(lim (save-excursion (verilog-re-search-backward "\\(\\<begin\\>\\)\\|\\(\\<module\\>\\)" nil t)))
|
||||
(lim (save-excursion (verilog-re-search-backward "\\(\\<begin\\>\\)\\|\\(\\<\\(connect\\)?module\\>\\)" nil t)))
|
||||
(structres nil)
|
||||
(type (catch 'nesting
|
||||
;; Keep working backwards until we can figure out
|
||||
|
@ -7127,7 +7151,7 @@ BASEIND is the base indent to offset everything."
|
|||
(let ((pos (point-marker))
|
||||
(lim (save-excursion
|
||||
;; (verilog-re-search-backward verilog-declaration-opener nil 'move)
|
||||
(verilog-re-search-backward "\\(\\<begin\\>\\)\\|\\(\\<module\\>\\)\\|\\(\\<task\\>\\)" nil 'move)
|
||||
(verilog-re-search-backward "\\(\\<begin\\>\\)\\|\\(\\<\\(connect\\)?module\\>\\)\\|\\(\\<task\\>\\)" nil 'move)
|
||||
(point)))
|
||||
(ind)
|
||||
(val)
|
||||
|
@ -7286,7 +7310,7 @@ it displays a list of all possible completions.")
|
|||
\(integer, real, reg...)")
|
||||
|
||||
(defvar verilog-cpp-keywords
|
||||
'("module" "macromodule" "primitive" "timescale" "define" "ifdef" "ifndef" "else"
|
||||
'("connectmodule" "module" "macromodule" "primitive" "timescale" "define" "ifdef" "ifndef" "else"
|
||||
"endif")
|
||||
"Keywords to complete when at first word of a line in declarative scope.
|
||||
\(initial, always, begin, assign...)
|
||||
|
@ -7297,7 +7321,7 @@ will be completed at runtime and should not be added to this list.")
|
|||
(append
|
||||
'(
|
||||
"always" "always_comb" "always_ff" "always_latch" "assign"
|
||||
"begin" "end" "generate" "endgenerate" "module" "endmodule"
|
||||
"begin" "end" "connectmodule" "endconnectmodule" "generate" "endgenerate" "module" "endmodule"
|
||||
"specify" "endspecify" "function" "endfunction" "initial" "final"
|
||||
"task" "endtask" "primitive" "endprimitive"
|
||||
)
|
||||
|
@ -7394,9 +7418,9 @@ TYPE is `module', `tf' for task or function, or t if unknown."
|
|||
(if (string= verilog-str "")
|
||||
(setq verilog-str "[a-zA-Z_]"))
|
||||
(let ((verilog-str (concat (cond
|
||||
((eq type 'module) "\\<\\(module\\)\\s +")
|
||||
((eq type 'module) "\\<\\(module\\|connectmodule\\)\\s +")
|
||||
((eq type 'tf) "\\<\\(task\\|function\\)\\s +")
|
||||
(t "\\<\\(task\\|function\\|module\\)\\s +"))
|
||||
(t "\\<\\(task\\|function\\|module\\|connectmodule\\)\\s +"))
|
||||
"\\<\\(" verilog-str "[a-zA-Z0-9_.]*\\)\\>"))
|
||||
match)
|
||||
|
||||
|
@ -7738,7 +7762,7 @@ If search fails, other files are checked based on
|
|||
(first 1)
|
||||
(prevpos (point-min))
|
||||
(final-context-start (make-marker))
|
||||
(regexp "\\(module\\s-+\\w+\\s-*(\\)\\|\\(\\w+\\s-+\\w+\\s-*(\\)"))
|
||||
(regexp "\\(\\(connect\\)?module\\s-+\\w+\\s-*(\\)\\|\\(\\w+\\s-+\\w+\\s-*(\\)"))
|
||||
(with-output-to-temp-buffer "*Occur*"
|
||||
(save-excursion
|
||||
(message "Searching for %s ..." regexp)
|
||||
|
@ -8459,7 +8483,8 @@ Optional NUM-PARAM and MAX-PARAM check for a specific number of parameters."
|
|||
(let ((olist))
|
||||
(save-excursion
|
||||
;; /*AUTOPUNT("parameter", "parameter")*/
|
||||
(backward-sexp 1)
|
||||
(when (not (eq (char-before) ?\*)) ; Not .*
|
||||
(backward-sexp 1))
|
||||
(while (looking-at "(?\\s *\"\\([^\"]*\\)\"\\s *,?")
|
||||
(setq olist (cons (match-string-no-properties 1) olist))
|
||||
(goto-char (match-end 0))))
|
||||
|
@ -9909,7 +9934,7 @@ Allows version control to check out the file if need be."
|
|||
(while (and
|
||||
;; It may be tempting to look for verilog-defun-re,
|
||||
;; don't, it slows things down a lot!
|
||||
(verilog-re-search-forward-quick "\\<\\(module\\|interface\\|program\\)\\>" nil t)
|
||||
(verilog-re-search-forward-quick "\\<\\(connectmodule\\|module\\|interface\\|program\\)\\>" nil t)
|
||||
(setq type (match-string-no-properties 0))
|
||||
(verilog-re-search-forward-quick "[(;]" nil t))
|
||||
(if (equal module (verilog-read-module-name))
|
||||
|
@ -10937,9 +10962,9 @@ shown) will make this into:
|
|||
;; Presume one module per file.
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(while (verilog-re-search-forward-quick "\\<module\\>" nil t)
|
||||
(while (verilog-re-search-forward-quick "\\<\\(connect\\)?module\\>" nil t)
|
||||
(let ((endmodp (save-excursion
|
||||
(verilog-re-search-forward-quick "\\<endmodule\\>" nil t)
|
||||
(verilog-re-search-forward-quick "\\<end\\(connect\\)?module\\>" nil t)
|
||||
(point))))
|
||||
;; See if there's already a comment .. inside a comment so not verilog-re-search
|
||||
(when (not (re-search-forward "/\\*AUTOARG\\*/" endmodp t))
|
||||
|
@ -11583,6 +11608,9 @@ Replace the pin connections to an instantiation or interface
|
|||
declaration with ones automatically derived from the module or
|
||||
interface header of the instantiated item.
|
||||
|
||||
You may also provide an optional regular expression, in which
|
||||
case only I/O matching the regular expression will be included.
|
||||
|
||||
If `verilog-auto-star-expand' is set, also expand SystemVerilog .* ports,
|
||||
and delete them before saving unless `verilog-auto-star-save' is set.
|
||||
See `verilog-auto-star' for more information.
|
||||
|
@ -11901,7 +11929,9 @@ For more information see the \\[verilog-faq] and forums at URL
|
|||
`https://www.veripool.org'."
|
||||
(save-excursion
|
||||
;; Find beginning
|
||||
(let* ((pt (point))
|
||||
(let* ((params (verilog-read-auto-params 0 1))
|
||||
(regexp (nth 0 params))
|
||||
(pt (point))
|
||||
(for-star (save-excursion (backward-char 2) (looking-at "\\.\\*")))
|
||||
(indent-pt (save-excursion (verilog-backward-open-paren)
|
||||
(1+ (current-column))))
|
||||
|
@ -11946,6 +11976,8 @@ For more information see the \\[verilog-faq] and forums at URL
|
|||
(verilog-decls-get-vars submoddecls)
|
||||
skip-pins)))
|
||||
(vl-dir "interfaced"))
|
||||
(when regexp
|
||||
(setq sig-list (verilog-signals-matching-regexp sig-list regexp)))
|
||||
(when (and sig-list
|
||||
verilog-auto-inst-interfaced-ports)
|
||||
;; Note these are searched for in verilog-read-sub-decls.
|
||||
|
@ -11956,6 +11988,8 @@ For more information see the \\[verilog-faq] and forums at URL
|
|||
(verilog-decls-get-interfaces submoddecls)
|
||||
skip-pins))
|
||||
(vl-dir "interface"))
|
||||
(when regexp
|
||||
(setq sig-list (verilog-signals-matching-regexp sig-list regexp)))
|
||||
(when sig-list
|
||||
;; Note these are searched for in verilog-read-sub-decls.
|
||||
(verilog-auto-inst-port-list "// Interfaces\n"
|
||||
|
@ -11965,6 +11999,8 @@ For more information see the \\[verilog-faq] and forums at URL
|
|||
(verilog-decls-get-outputs submoddecls)
|
||||
skip-pins))
|
||||
(vl-dir "output"))
|
||||
(when regexp
|
||||
(setq sig-list (verilog-signals-matching-regexp sig-list regexp)))
|
||||
(when sig-list
|
||||
(verilog-auto-inst-port-list "// Outputs\n"
|
||||
sig-list indent-pt moddecls
|
||||
|
@ -11973,6 +12009,8 @@ For more information see the \\[verilog-faq] and forums at URL
|
|||
(verilog-decls-get-inouts submoddecls)
|
||||
skip-pins))
|
||||
(vl-dir "inout"))
|
||||
(when regexp
|
||||
(setq sig-list (verilog-signals-matching-regexp sig-list regexp)))
|
||||
(when sig-list
|
||||
(verilog-auto-inst-port-list "// Inouts\n"
|
||||
sig-list indent-pt moddecls
|
||||
|
@ -11981,6 +12019,8 @@ For more information see the \\[verilog-faq] and forums at URL
|
|||
(verilog-decls-get-inputs submoddecls)
|
||||
skip-pins))
|
||||
(vl-dir "input"))
|
||||
(when regexp
|
||||
(setq sig-list (verilog-signals-matching-regexp sig-list regexp)))
|
||||
(when sig-list
|
||||
(verilog-auto-inst-port-list "// Inputs\n"
|
||||
sig-list indent-pt moddecls
|
||||
|
|
|
@ -1622,8 +1622,11 @@ display the result of expression evaluation."
|
|||
(let ((minibuffer-completing-symbol t))
|
||||
(minibuffer-with-setup-hook
|
||||
(lambda ()
|
||||
;; FIXME: call emacs-lisp-mode (see also
|
||||
;; `eldoc--eval-expression-setup')?
|
||||
;; FIXME: instead of just applying the syntax table, maybe
|
||||
;; use a special major mode tailored to reading Lisp
|
||||
;; expressions from the minibuffer? (`emacs-lisp-mode'
|
||||
;; doesn't preserve the necessary keybindings.)
|
||||
(set-syntax-table emacs-lisp-mode-syntax-table)
|
||||
(add-hook 'completion-at-point-functions
|
||||
#'elisp-completion-at-point nil t)
|
||||
(run-hooks 'eval-expression-minibuffer-setup-hook))
|
||||
|
|
|
@ -73,7 +73,9 @@ code();
|
|||
|
||||
(defconst mhtml--crucial-variable-prefix
|
||||
(regexp-opt '("comment-" "uncomment-" "electric-indent-"
|
||||
"smie-" "forward-sexp-function" "completion-" "major-mode"))
|
||||
"smie-" "forward-sexp-function" "completion-" "major-mode"
|
||||
"adaptive-fill-" "fill-" "normal-auto-fill-function"
|
||||
"paragraph-"))
|
||||
"Regexp matching the prefix of \"crucial\" buffer-locals we want to capture.")
|
||||
|
||||
(defconst mhtml--variable-prefix
|
||||
|
@ -255,17 +257,14 @@ This is used by `mhtml--pre-command'.")
|
|||
sgml-syntax-propertize-rules))
|
||||
|
||||
(defun mhtml-syntax-propertize (start end)
|
||||
(let ((submode (get-text-property start 'mhtml-submode)))
|
||||
;; First remove our special settings from the affected text. They
|
||||
;; will be re-applied as needed.
|
||||
(remove-list-of-text-properties start end
|
||||
'(syntax-table local-map mhtml-submode))
|
||||
(goto-char start)
|
||||
;; Be sure to look back one character, because START won't yet have
|
||||
;; been propertized.
|
||||
(unless (bobp)
|
||||
(let ((submode (get-text-property (1- (point)) 'mhtml-submode)))
|
||||
(if submode
|
||||
(mhtml--syntax-propertize-submode submode end))))
|
||||
(mhtml--syntax-propertize-submode submode end)))
|
||||
(sgml-syntax-propertize (point) end mhtml--syntax-propertize))
|
||||
|
||||
(defun mhtml-indent-line ()
|
||||
|
@ -333,6 +332,18 @@ the rules from `css-mode'."
|
|||
;: Hack
|
||||
(js--update-quick-match-re)
|
||||
|
||||
;; Setup the appropriate js-mode value of auto-fill-function.
|
||||
(setf (mhtml--submode-crucial-captured-locals mhtml--js-submode)
|
||||
(push (cons 'auto-fill-function
|
||||
(if (and (boundp 'auto-fill-function) auto-fill-function)
|
||||
#'js-do-auto-fill
|
||||
nil))
|
||||
(mhtml--submode-crucial-captured-locals mhtml--js-submode)))
|
||||
|
||||
;; This mode might be using CC Mode's filling functionality.
|
||||
(c-foreign-init-lit-pos-cache)
|
||||
(add-hook 'before-change-functions #'c-foreign-truncate-lit-pos-cache nil t)
|
||||
|
||||
;; This is sort of a prog-mode as well as a text mode.
|
||||
(run-hooks 'prog-mode-hook))
|
||||
|
||||
|
|
|
@ -365,6 +365,7 @@ lisp_to_json_toplevel_1 (Lisp_Object lisp,
|
|||
Lisp_Object key = HASH_KEY (h, i);
|
||||
if (!EQ (key, Qunbound))
|
||||
{
|
||||
CHECK_STRING (key);
|
||||
Lisp_Object ekey = json_encode (key);
|
||||
/* We can't specify the length, so the string must be
|
||||
NUL-terminated. */
|
||||
|
@ -975,6 +976,7 @@ usage: (json-parse-string STRING &rest ARGS) */)
|
|||
#endif
|
||||
|
||||
Lisp_Object string = args[0];
|
||||
CHECK_STRING (string);
|
||||
Lisp_Object encoded = json_encode (string);
|
||||
check_string_without_embedded_nuls (encoded);
|
||||
struct json_configuration conf =
|
||||
|
|
|
@ -10531,7 +10531,7 @@ The value is always a vector. */)
|
|||
DEFUN ("clear-this-command-keys", Fclear_this_command_keys,
|
||||
Sclear_this_command_keys, 0, 1, 0,
|
||||
doc: /* Clear out the vector that `this-command-keys' returns.
|
||||
Also clear the record of the last 100 events, unless optional arg
|
||||
Also clear the record of the last 300 input events, unless optional arg
|
||||
KEEP-RECORD is non-nil. */)
|
||||
(Lisp_Object keep_record)
|
||||
{
|
||||
|
|
19
src/xdisp.c
19
src/xdisp.c
|
@ -1872,10 +1872,13 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int *x, int *y,
|
|||
/* Account for line-number display, if IT3 still
|
||||
didn't. This can happen if START - 1 is the
|
||||
first or the last character on its display line. */
|
||||
if (!it3.line_number_produced_p)
|
||||
{
|
||||
if (it3.lnum_pixel_width > 0)
|
||||
top_x += it3.lnum_pixel_width;
|
||||
else if (it.line_number_produced_p)
|
||||
top_x += it.lnum_pixel_width;
|
||||
}
|
||||
/* Normally, we would exit the above loop because we
|
||||
found the display element whose character
|
||||
position is CHARPOS. For the contingency that we
|
||||
|
@ -26382,6 +26385,22 @@ decode_mode_spec (struct window *w, register int c, int field_width,
|
|||
startpos = marker_position (w->start);
|
||||
startpos_byte = marker_byte_position (w->start);
|
||||
height = WINDOW_TOTAL_LINES (w);
|
||||
/* We cannot cope with w->start being outside of the
|
||||
accessible portion of the buffer; in particular,
|
||||
display_count_lines call below will infloop if called with
|
||||
startpos_byte outside of the [BEGV_BYTE..ZV_BYTE] region.
|
||||
Such w->start means we were called in some "creative" way
|
||||
when the buffer's restriction was changed, but the window
|
||||
wasn't yet redisplayed after that. If that happens, we
|
||||
need to determine a new base line. */
|
||||
if (!(BUF_BEGV_BYTE (b) <= startpos_byte
|
||||
&& startpos_byte <= BUF_ZV_BYTE (b)))
|
||||
{
|
||||
startpos = BUF_BEGV (b);
|
||||
startpos_byte = BUF_BEGV_BYTE (b);
|
||||
w->base_line_pos = 0;
|
||||
w->base_line_number = 0;
|
||||
}
|
||||
|
||||
/* If we decided that this buffer isn't suitable for line numbers,
|
||||
don't forget that too fast. */
|
||||
|
|
|
@ -363,10 +363,10 @@ bytecompiled code, and their results compared.")
|
|||
(byte-compile-warnings nil)
|
||||
(v0 (condition-case nil
|
||||
(eval pat)
|
||||
(error nil)))
|
||||
(error 'bytecomp-check-error)))
|
||||
(v1 (condition-case nil
|
||||
(funcall (byte-compile (list 'lambda nil pat)))
|
||||
(error nil))))
|
||||
(error 'bytecomp-check-error))))
|
||||
(equal v0 v1)))
|
||||
|
||||
(put 'bytecomp-check-1 'ert-explainer 'bytecomp-explain-1)
|
||||
|
@ -374,10 +374,10 @@ bytecompiled code, and their results compared.")
|
|||
(defun bytecomp-explain-1 (pat)
|
||||
(let ((v0 (condition-case nil
|
||||
(eval pat)
|
||||
(error nil)))
|
||||
(error 'bytecomp-check-error)))
|
||||
(v1 (condition-case nil
|
||||
(funcall (byte-compile (list 'lambda nil pat)))
|
||||
(error nil))))
|
||||
(error 'bytecomp-check-error))))
|
||||
(format "Expression `%s' gives `%s' if directly evalled, `%s' if compiled."
|
||||
pat v0 v1)))
|
||||
|
||||
|
@ -402,10 +402,10 @@ Subtests signal errors if something goes wrong."
|
|||
(dolist (pat byte-opt-testsuite-arith-data)
|
||||
(condition-case nil
|
||||
(setq v0 (eval pat))
|
||||
(error (setq v0 nil)))
|
||||
(error (setq v0 'bytecomp-check-error)))
|
||||
(condition-case nil
|
||||
(setq v1 (funcall (byte-compile (list 'lambda nil pat))))
|
||||
(error (setq v1 nil)))
|
||||
(error (setq v1 'bytecomp-check-error)))
|
||||
(insert (format "%s" pat))
|
||||
(indent-to-column 65)
|
||||
(if (equal v0 v1)
|
||||
|
@ -561,11 +561,11 @@ bytecompiled code, and their results compared.")
|
|||
(byte-compile-warnings nil)
|
||||
(v0 (condition-case nil
|
||||
(eval pat t)
|
||||
(error nil)))
|
||||
(error 'bytecomp-check-error)))
|
||||
(v1 (condition-case nil
|
||||
(funcall (let ((lexical-binding t))
|
||||
(byte-compile `(lambda nil ,pat))))
|
||||
(error nil))))
|
||||
(error 'bytecomp-check-error))))
|
||||
(equal v0 v1)))
|
||||
|
||||
(put 'bytecomp-lexbind-check-1 'ert-explainer 'bytecomp-lexbind-explain-1)
|
||||
|
@ -573,11 +573,11 @@ bytecompiled code, and their results compared.")
|
|||
(defun bytecomp-lexbind-explain-1 (pat)
|
||||
(let ((v0 (condition-case nil
|
||||
(eval pat t)
|
||||
(error nil)))
|
||||
(error 'bytecomp-check-error)))
|
||||
(v1 (condition-case nil
|
||||
(funcall (let ((lexical-binding t))
|
||||
(byte-compile (list 'lambda nil pat))))
|
||||
(error nil))))
|
||||
(error 'bytecomp-check-error))))
|
||||
(format "Expression `%s' gives `%s' if directly evalled, `%s' if compiled."
|
||||
pat v0 v1)))
|
||||
|
||||
|
|
|
@ -296,5 +296,17 @@ Test with both unibyte and multibyte strings."
|
|||
(1+ most-positive-fixnum)
|
||||
(1- most-negative-fixnum)))))
|
||||
|
||||
(ert-deftest json-parse-string/wrong-type ()
|
||||
"Check that Bug#42113 is fixed."
|
||||
(skip-unless (fboundp 'json-parse-string))
|
||||
(should-error (json-parse-string 1) :type 'wrong-type-argument))
|
||||
|
||||
(ert-deftest json-serialize/wrong-hash-key-type ()
|
||||
"Check that Bug#42113 is fixed."
|
||||
(skip-unless (fboundp 'json-serialize))
|
||||
(let ((table (make-hash-table :test #'eq)))
|
||||
(puthash 1 2 table)
|
||||
(should-error (json-serialize table) :type 'wrong-type-argument)))
|
||||
|
||||
(provide 'json-tests)
|
||||
;;; json-tests.el ends here
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue