mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-14 09:39:42 +00:00
* Sandbox syncronous libgccjit invocation on interactive sessions
Avoid unnecessary memory fragmentation/leakeage * lisp/emacs-lisp/comp.el (comp-final1): New function. (comp-final): Invoke `comp-final1' in a child process if in an interactive session or directly otherwhise.
This commit is contained in:
parent
5a8be1719a
commit
69c32e0187
@ -2475,8 +2475,7 @@ Prepare every function for final compilation and drive the C back-end."
|
|||||||
(unless comp-dry-run
|
(unless comp-dry-run
|
||||||
(comp--compile-ctxt-to-file name))))
|
(comp--compile-ctxt-to-file name))))
|
||||||
|
|
||||||
(defun comp-final (_)
|
(defun comp-final1 ()
|
||||||
"Final pass driving the C back-end for code emission."
|
|
||||||
(let (compile-result)
|
(let (compile-result)
|
||||||
(comp--init-ctxt)
|
(comp--init-ctxt)
|
||||||
(unwind-protect
|
(unwind-protect
|
||||||
@ -2485,6 +2484,45 @@ Prepare every function for final compilation and drive the C back-end."
|
|||||||
(and (comp--release-ctxt)
|
(and (comp--release-ctxt)
|
||||||
compile-result))))
|
compile-result))))
|
||||||
|
|
||||||
|
(defun comp-final (_)
|
||||||
|
"Final pass driving the C back-end for code emission."
|
||||||
|
(if noninteractive
|
||||||
|
(comp-final1)
|
||||||
|
;; Call comp-final1 in a child process.
|
||||||
|
(let* ((output (comp-ctxt-output comp-ctxt))
|
||||||
|
(print-escape-newlines t)
|
||||||
|
(print-length nil)
|
||||||
|
(print-level nil)
|
||||||
|
(print-quoted t)
|
||||||
|
(print-gensym t)
|
||||||
|
(print-circle t)
|
||||||
|
(expr `(progn
|
||||||
|
(require 'comp)
|
||||||
|
(setf comp-speed ,comp-speed
|
||||||
|
comp-debug ,comp-debug
|
||||||
|
comp-verbose ,comp-verbose
|
||||||
|
comp-ctxt ,comp-ctxt
|
||||||
|
comp-eln-load-path ',comp-eln-load-path
|
||||||
|
comp-native-driver-options
|
||||||
|
',comp-native-driver-options
|
||||||
|
load-path ',load-path)
|
||||||
|
,comp-async-env-modifier-form
|
||||||
|
(message "Compiling %s..." ',output)
|
||||||
|
(comp-final1)))
|
||||||
|
(temp-file (make-temp-file
|
||||||
|
(concat "emacs-int-comp-"
|
||||||
|
(file-name-base output) "-")
|
||||||
|
nil ".el")))
|
||||||
|
(with-temp-file temp-file
|
||||||
|
(insert (prin1-to-string expr)))
|
||||||
|
(with-temp-buffer
|
||||||
|
(if (zerop
|
||||||
|
(call-process (expand-file-name invocation-name
|
||||||
|
invocation-directory)
|
||||||
|
nil t t "--batch" "-l" temp-file))
|
||||||
|
output
|
||||||
|
(signal 'native-compiler-error (buffer-string)))))))
|
||||||
|
|
||||||
|
|
||||||
;;; Compiler type hints.
|
;;; Compiler type hints.
|
||||||
;; Public entry points to be used by user code to give comp
|
;; Public entry points to be used by user code to give comp
|
||||||
|
Loading…
Reference in New Issue
Block a user