Commit graph

5123 commits

Author SHA1 Message Date
Vibhav Pant
44c95c58b2 bytecomp.el: Don't store non-keyword symbols in jump-tables.
* lisp/emacs-lisp/bytecomp.el (byte-compile-cond-valid-obj2-p) return
  nil when OBJ is a non-keyword symbol (i.e a variable), as the jump
  table can only be used when comparing variables with constant values.
2017-02-05 15:37:43 +05:30
Vibhav Pant
de456d1e4a Revert "Use maphash instead of cl-loop."
This reverts commit bfa8852013.
2017-02-03 23:23:28 +05:30
Vibhav Pant
bfa8852013 Use maphash instead of cl-loop.
* lisp/emacs-lisp/bytecomp.el: (byte-compile-lapcode) Use maphash
  instead of cl-loop
2017-02-01 18:15:59 +05:30
Vibhav Pant
f441451658 * lisp/emacs-lisp/bytecomp.el: Create jump tables with :purecopy t 2017-01-30 19:22:09 +05:30
Vibhav Pant
bf7f7c0d82 Merge remote-tracking branch 'origin/master' into feature/byte-switch 2017-01-30 18:35:43 +05:30
Noam Postavsky
9bf94639b8 Don't warn about obsolete defgenerics when defining them
* lisp/emacs-lisp/cl-generic.el (cl-defgeneric): The declaration code
should run after the definition code (Bug#25556).
2017-01-29 11:16:06 -05:00
Vibhav Pant
25d38a06ec * lisp/emacs-lisp/bytecomp.el:(bc-cond-jump-table-info)add docstring 2017-01-26 23:03:02 +05:30
Vibhav Pant
a7e4870f16 * lisp/emacs-lisp/bytecomp.el: Use correct function to push nil
* lisp/emacs-lisp/bytecomp.el: (byte-compile-cond-jump-table) Use
  byte-compile-constant instead of byte-compile-form to push nil.
2017-01-26 14:31:16 +05:30
Vibhav Pant
6a82d19db1 * lisp/emacs-lisp/disass.el: Fix spacing while showing jump tables 2017-01-26 14:28:23 +05:30
Vibhav Pant
4e6140b283 * lisp/emacs-lisp/disass.el: Display jump tables for switch. 2017-01-26 01:02:16 +05:30
Vibhav Pant
19cb3985a3 * lisp/emacs-lisp/bytecomp.el:Use correct size for switch jump-table 2017-01-26 01:00:41 +05:30
Vibhav Pant
c52a9b6ddd * lisp/emacs-lisp/bytecomp.el: Simplify b-c-cond-valid-obj2-p 2017-01-26 00:58:36 +05:30
Vibhav Pant
8189b97e5c * lisp/emacs-lisp/bytecomp.el: Fix byte-switch codegen with symbols. 2017-01-26 00:57:10 +05:30
Vibhav Pant
0d3c57dcf3 * lisp/emacs-lisp/byte-opt.el: Add support for decompiling switch
* lisp/emacs-lisp/byte-opt.el: (byte-decompile-bytecode-1) When the
  constant encountered precedes a byte-switch op, replace all the
  addresses in the jump table with tags.
2017-01-26 00:54:59 +05:30
Mark Oteiza
43eba49553 Move cXXXr and cXXXXr to subr.el
* etc/NEWS: Mention new core Elisp.
* doc/lispref/lists.texi (List Elements): Document and index the new
functions.
* doc/misc/cl.texi (List Functions): Change "defines" to "aliases".
* lisp/subr.el (caaar, caadr, cadar, caddr, cdaar, cdadr, cddar)
(cdddr, caaaar caaadr, caadar, caaddr, cadaar, cadadr, caddar):
(cadddr, cdaaar, cdaadr, cdadar, cdaddr, cddaar, cddadr, cdddar):
(cddddr): New functions.
* lisp/emacs-lisp/cl-lib.el (cl-caaar, cl-caadr, cl-cadar, cl-caddr):
(cl-cdaar, cl-cdadr, cl-cddar cl-cdddr, cl-caaaar cl-caaadr):
(cl-caadar, cl-caaddr, cl-cadaar, cl-cadadr, cl-caddar, cl-cadddr):
(cl-cdaaar, cl-cdaadr, cl-cdadar, cl-cdaddr, cl-cddaar, cl-cddadr):
(cl-cdddar, cl-cddddr): Alias to new subr functions.
* lisp/emacs-lisp/cl.el (cl-unload-function): Remove cXXXr and cXXXXr
elements.
2017-01-25 14:21:10 -05:00
Alan Mackenzie
0c31ff43b6 Give , and .@ doc strings. Fixes bug #24561.
Also make *Help* links to ``' possible.  Also make usable as such doc strings
on the function-documentation property of a symbol.

* lisp/emacs-lisp/backquote.el (top-level): Give , and '@ doc strings on the
function-documentation property.  Also give these symbols a reader-construct
property.

* lisp/help-fns.el (describe-function): Allow the function-documentation
property to work.  Use princ rather than prin1 to print the function's name
when it has a reader-construct property.
(help-fns-signature): Don't insert `high-usage' for a reader-construct.
(describe-function-1): Adapt to process documentation on the
function-documentation property.  Print "a reader construct" when appropriate.

* lisp/help-mode.el (help-xref-symbol-regexp): Amend this regexp also to match
``'.
2017-01-23 19:00:49 +00:00
Tino Calancha
ade0652cc2 Prevent to use tabulated-list--near-rows unbound
* lisp/emacs-lisp/tabulated-list.el (tabulated-list-print-entry):
Make sure 'tabulated-list--near-rows' is bound before use it (Bug#25506).
2017-01-22 14:23:45 +09:00
Vibhav Pant
23a130ee0d * lisp/emacs-lisp/bytecomp.el: Remove unused debugging statements. 2017-01-21 11:37:20 +05:30
Noam Postavsky
82a5e4dc88 Fix free var FOO-mode-{syntax,abbrev}-table warnings
* lisp/emacs-lisp/derived.el (define-derived-mode): Unconditionally
defvar the syntax and abbrev tables so that the compiler will know that
they are dynamically bound variables (Bug#25446).
2017-01-19 20:15:18 -05:00
Vibhav Pant
fbe6b90b0c * lisp/emacs-lisp/bytecomp.el: Fix errors with matching quoted forms
* lisp/emacs-lisp/bytecomp.el: (byte-compile-cond-jump-table-info)
  eval obj2 to avoid quoted forms being stored as is.
2017-01-19 23:13:53 +05:30
Vibhav Pant
5f3379b338 lisp/emacs-lisp/bytecomp.el: Use byte-switch only for quoted symbols 2017-01-19 23:13:13 +05:30
Vibhav Pant
46193d5209 * lisp/emacs-lisp/bytecomp.el: Add default-case for last cond clause.
* lisp/emacs-lisp/bytecomp.el: (byte-compile-cond-jump-table) Add
default-case for last cond clause.
2017-01-19 23:12:09 +05:30
Vibhav Pant
1fcbd352f8 Use byte-switch for all symbols.
* lisp/emacs-lisp/bytecomp.el: (byte-compile-cond-valid-obj2-p) Return
  t for all symbols (instead for just keywords)
2017-01-19 18:02:40 +05:30
Vibhav Pant
309b46420e * lisp/emacs-lisp/byte-opt.el: Optimize how tags are checked for use.
* byte-opt.el: (byte-optimize-lapcode): Return nil instantly on
  finding the tag in a jump table.
2017-01-15 21:38:31 +05:30
Vibhav Pant
8c0f326ea2 * lisp/emacs-lisp/bytecomp.el: Add documentation, remove code duplication 2017-01-15 19:36:26 +05:30
Vibhav Pant
88549ec38e Add new 'switch' byte-code.
'switch' takes two arguments from the stack: the variable to test, and
a jump table (implemented as a hash-table with the appropriate :test
function). By looking up the value of the variable in the hash table,
the interpreter can jump to the label pointed to by the value, if any.
This implementation can only be used for `cond' forms of the type
`(cond ((test x 'foo) 'bar) ...)`, such that the function `test` and
variable `x` is same for all clauses.

* lisp/emacs-lisp/bytecomp.el:

  * Add (byte-compile-cond-valid-obj2-p), (byte-compile-cond-vars),
    (byte-compile-cond-jump-table-info), (byte-compile-jump-table-add-tag),
    (byte-compile-cond-jump-table), byte-compile-jump-tables.

  * Add defcustom `byte-compile-cond-use-jump-table'.

  * (byte-compile-cond): Use them.

  * (byte-compile-lapcode): Patch tags present in jump tables, if any.

* lisp/emacs-lisp//byte-opt.el: (byte-optimize-lapcode): Add checks to
  some peephole optimizations to prevent them from messing up any code
  involving `byte-switch`.

* src/bytecode.c: (exec_byte_code): Add bytecode Bswitch.
2017-01-15 01:26:04 +05:30
Stefan Monnier
e28c99082a (cl-defstruct): Improve error message for slots w/o value (bug#25312)
* lisp/emacs-lisp/cl-macs.el (cl-defstruct): Don't signal an error but
emit a warning for those coders who forgot to put a default value in
their slot.
2017-01-03 16:07:44 -05:00
Paul Eggert
e6a782ee1a Update copyright year to 2017 in master
Run admin/update-copyright in the master branch.  This fixes files
that were not already fixed in the emacs-25 branch before it was
merged here.
2017-01-01 01:48:59 -08:00
Paul Eggert
bcf244ef9b Merge from origin/emacs-25
2e2a806 Fix copyright years by hand
5badc81 Update copyright year to 2017
2017-01-01 01:10:47 -08:00
Paul Eggert
4f7a90bf6c Merge from origin/emacs-25
9adb101 Document 'describe-fontset'
229315c ; Add missing symbol quoting.
3d94931 Repair desktop restoration on text terminals
43022f9 Ignore forward-sexp-function in js-mode indentation code
b19fb49 Improve documentation of 'define-coding-system'
467768f Fix Bug#25162
6db78ae Fix a typo in define-abbrev-table
5f7d906 Bump makeinfo requirement from 4.7 to 4.13
442e2f6 Fixes related to select-enable-clipboard
e4ac450 Define struct predicate before acccesors
08decbd Doc fix for vc-git
5531e75 Further improve make-dist checking
953bf67 Improve previous make-dist change
129645a Make make-dist --snapshot do some sanity checks

# Conflicts:
#	lisp/menu-bar.el
2017-01-01 01:02:45 -08:00
Alan Mackenzie
620e5a3cd4 Give eval-and-compile a correct edebug spec. Fixes bug #16184 properly.
* lisp/emacs-lisp/edebug.el (edebug_offset_indices): Revert abortive commit
from Thu Dec 29 09:22:36 2016 +0000 which didn't really fix the bug.

* lisp/emacs-lisp/byte-run.el (eval-and-compile): Change the edebug spec from
t to (&rest def-form).
2017-01-01 08:28:04 +00:00
Paul Eggert
2e2a806803 Fix copyright years by hand
These are dates that admin/update-copyright did not update, or
updated incorrectly.
2017-01-01 04:01:41 +00:00
Paul Eggert
5badc81c1c Update copyright year to 2017
Run admin/update-copyright.
2016-12-31 19:42:26 -08:00
Philipp Stephani
4bbd5424a2 Checkdoc: use syntax functions instead of regex
In checkdoc.el, get rid of the error-prone regex to find definition
forms, and use existing syntax-based navigation functions instead.
This fixes a corner case with one-argument `defvar' forms.

* lisp/emacs-lisp/checkdoc.el (checkdoc--next-docstring): New function.
(checkdoc-next-docstring, checkdoc-defun): Use it.
* test/lisp/emacs-lisp/checkdoc-tests.el (checkdoc-tests--next-docstring):
Add unit test.
2016-12-31 17:30:46 +01:00
Alan Mackenzie
0d19e69184 Initialize edebug-offset-indices to a cons, not nil. Fixes bug #16184.
This is because there are times when this variable is changed by setcar before
an atom is pushed onto it by debug-enter.  This happens, for example, whilst
instrumenting c-font-lock-declarations in .../lisp/progmodes/cc-fonts.el.

* lisp/emacs-lisp/edebug.el (edebug-offset-indices): initialize to '(0).
2016-12-29 09:22:36 +00:00
Stefan Monnier
af1b1026dd * lisp/emacs-lisp/inline.el: Fix apply-conversion (bug#25280)
(inline--dont-quote): Quote the function with #' when passing it to `apply'.
Cherry picked from commit e6161f6489.
2016-12-28 11:50:02 -05:00
Stefan Monnier
e6161f6489 * lisp/emacs-lisp/inline.el: Fix apply-conversion (bug#25280)
(inline--dont-quote): Quote the function with #' when passing it to `apply'.
2016-12-27 12:44:32 -05:00
Philipp Stephani
65b997b95e Checkdoc: Don't require a space before an arg list
See Bug#24998.

* lisp/emacs-lisp/checkdoc.el (checkdoc-defun-regexp): Don't require a
space before a argument list.
* test/lisp/emacs-lisp/checkdoc-tests.el (checkdoc-tests--bug-24998):
Add unit test.
2016-12-26 21:13:26 +01:00
Stefan Monnier
a6063ffe5a * src/data.c (Fmake_variable_frame_local): Remove
* src/lisp.h (struct Lisp_Buffer_Local_Value): Remove `frame_local'.

* src/data.c (swap_in_symval_forwarding, set_internal)
(set_symbol_trapped_write, make_blv, Fmake_variable_buffer_local)
(Fmake_local_variable, Fkill_local_variable, Flocal_variable_p):
Don't pay attention to ->frame_local any more.
(syms_of_data): Remove Qtrapping_frame_local and don't defsubr
Smake_variable_frame_local.

* etc/NEWS (Incompatible Lisp Changes in Emacs 26.1): Announce removal
of make-variable-frame-local.

* lisp/help-fns.el (describe-variable): Don't handle the now impossible
frame-local case.

* lisp/subr.el (make-variable-frame-local): Remove obsolescence data.

* src/frame.c (store_frame_param):
* src/eval.c (specbind): Don't pay attention to ->frame_local any more.

* src/widget.c (first_frame_p): Remove, unused.
2016-12-21 15:07:43 -05:00
Noam Postavsky
a7523ba955 Fix rx-any with range with ?\] and ?-
* lisp/emacs-lisp/rx.el: Make sure not to produce a circular
list (Bug#25123).
* test/lisp/emacs-lisp/rx-tests.el (rx-char-any): New test.
2016-12-18 08:44:45 -05:00
Nicolas Petton
fb2fdb1435 Make seq-into return the sequence when no conversion needed
* lisp/emacs-lisp/seq.el (seq-into): Do not convert the sequence when
  no conversion is needed.
* test/lisp/emacs-lisp/seq-tests.el (test-seq-into-and-identity): Add
  a regression test checking for identity.
2016-12-16 11:22:00 +01:00
Nicolas Petton
09a66ceb5e Fix circular list handling in seq-mapn
* lisp/emacs-lisp/seq.el (seq-mapn): Do not copy list arguments.
* test/lisp/emacs-lisp/seq-tests.el (test-seq-mapn-circular-lists):
  Add a regression test.
2016-12-15 10:26:11 +01:00
Phillip Lord
c27b645956 Replace ldefs-boot with a much smaller file
* Makefile.in (bootstrap-build,generate-ldefs-boot): New targets.
   (bootstrap): Depend on bootstrap-build.
 * admin/ldefs-clean.el: New file.
 * lisp/Makefile.in (compile-first): Depend on loaddefs.el
 * lisp/ldefs-boot.el: Remove.
 * lisp/ldefs-boot-auto.el: New file.
 * lisp/ldefs-boot-manual.el: New file.
 * lisp/loadup.el: Load ldefs-boot-manual.el.
 * src/emacs.c (generating_ldefs_boot): New variable.
   (main): Check whether we are generating ldefs.
 * src/eval.c (autoload-do-load): Dump autoload forms to stderr when
   requested.
 * src/lisp.h (generating_ldefs_boot): New variable.
 * admin/gitmerge.el, admin/make-tarball.txt, admin/notes/copyright,
   lisp/Makefile.in, lisp/cus-dep.el, lisp/emacs-lisp/elint.el,
   lisp/finder.el, lisp/loadup.el, msdos/mainmake.v2: Update reference to
   ldefs-boot.
 * admin/update_autogen: Alter mechanism for ldefs-boot generation.
2016-12-13 22:15:32 +00:00
Glenn Morris
8db7b65d66 Minor fix for define-derived-mode
* lisp/emacs-lisp/derived.el (define-derived-mode):
Do not let eg eval-defun reset the values of syntax or abbrev tables,
since they might have been defined externally.  (Bug#16160)
2016-12-12 20:03:20 -05:00
Clément Pit--Claudel
27cada035a Move backtrace to ELisp using a new mapbacktrace primitive
* src/eval.c (get_backtrace_starting_at, backtrace_frame_apply)
(Fmapbacktrace, Fbacktrace_frame_internal): New functions.
(get_backtrace_frame, Fbacktrace_debug): Use `get_backtrace_starting_at'.

* lisp/subr.el (backtrace--print-frame): New function.
(backtrace): Reimplement using `backtrace--print-frame' and `mapbacktrace'.
(backtrace-frame): Reimplement using `backtrace-frame--internal'.

* lisp/emacs-lisp/debug.el (debugger-setup-buffer): Pass a base to
`mapbacktrace' instead of searching for "(debug" in the output of
`backtrace'.

* test/lisp/subr-tests.el (subr-test-backtrace-simple-tests)
(subr-test-backtrace-integration-test): New tests.

* doc/lispref/debugging.texi (Internals of Debugger): Document
`mapbacktrace' and missing argument BASE of `backtrace-frame'.
2016-12-12 17:41:27 -05:00
Glenn Morris
61f8c2386c Minor advice.el fix
* lisp/emacs-lisp/advice.el (ad-preactivate-advice):
Avoid setting the function definition of nil.
This was happening during bootstrap of org-compat.el,
apparently due to eager macro expansion of code behind
a (featurep 'xemacs) test.
2016-12-12 15:20:39 -05:00
Glenn Morris
ba8e883fa3 Do not allow nil to be defined as a function
* lisp/emacs-lisp/byte-run.el (defun):
* src/data.c (Ffset): Do not allow "nil".  (Bug#25110)
2016-12-10 18:58:24 -08:00
Nicolas Richard
0107336165 Add some sanity checking of defun arglist
* lisp/emacs-lisp/byte-run.el (defun):
Check for malformed argument lists.  (Bug#15715)
2016-12-10 17:48:10 -08:00
Noam Postavsky
e4ac450796 Define struct predicate before acccesors
The accessor functions use the predicate function, which causes problems
when reloading after unload-feature: the compiler-macro property is
still present on the predicate symbol, and the compiler fails to find
the definition when trying to inline it into the accessor
function (Bug#25088).

* lisp/emacs-lisp/cl-macs.el (cl-defstruct): Move predicate definition
before field accessor definitions.
2016-12-10 16:00:01 -05:00
Glenn Morris
a6776f0823 Retain message logging in map-y-or-n-p
* lisp/emacs-lisp/map-ynp.el (map-y-or-n-p):
Stop disabling logging to Messages buffer.  (Bug#13326)
2016-12-07 20:25:36 -05:00