%PDF- %PDF-
Direktori : /usr/local/share/emacs/27.2/lisp/emacs-lisp/ |
Current File : //usr/local/share/emacs/27.2/lisp/emacs-lisp/cconv.elc |
;ELC ;;; Compiled ;;; in Emacs version 27.2 ;;; with all optimizations. ;;; This file contains utf-8 non-ASCII characters, ;;; and so cannot be loaded into Emacs 22 or earlier. (and (boundp 'emacs-version) (< (aref emacs-version (1- (length emacs-version))) ?A) (string-lessp emacs-version "23") (error "`%s' was compiled for Emacs 23 or later" #$)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; #@96 Try to do lambda lifting if the number of arguments + free variables is less than this number. (defconst cconv-liftwhen 6 (#$ . 408)) #@252 Main entry point for closure conversion. -- FORM is a piece of Elisp code after macroexpansion. -- TOPLEVEL(optional) is a boolean variable, true if we are at the root of AST Returns a form where all lambdas don't have any free variables. (fn FORM) (defalias 'cconv-closure-convert #[257 "\303\211\211\304\303\"\210\n\237\305\303\211#\n\203 \306\307!\210+\207" [cconv-captured+mutated cconv-lambda-candidates cconv-freevars-alist nil cconv-analyze-form cconv-convert cl--assertion-failed (null cconv-freevars-alist)] 5 (#$ . 549)]) #@70 Add the warnings that closure conversion would encounter. (fn FORM) (defalias 'cconv-warnings-only #[257 "\303\211\211\304\303\"\210+\207" [cconv-captured+mutated cconv-lambda-candidates cconv-freevars-alist nil cconv-analyze-form] 4 (#$ . 1096)]) (defconst cconv--dummy-var (make-symbol "ignored")) #@63 Return elements of set S1 that are not in set S2. (fn S1 S2) (defalias 'cconv--set-diff #[514 "\300\211\203 \211@\211>\204 \211B\262A\266\202\202 \210\211\237\207" [nil] 7 (#$ . 1407)]) #@60 Return elements of set S that are not in Dom(M). (fn S M) (defalias 'cconv--set-diff-map #[514 "\300\211\203 \211@\211\236\204 \211B\262A\266\202\202 \210\211\237\207" [nil] 7 (#$ . 1608)]) #@67 Return the submap of map M1 that has Dom(M2) removed. (fn M1 M2) (defalias 'cconv--map-diff #[514 "\300\211\203 \211@\211@\236\204 \211B\262A\266\202\202 \210\211\237\207" [nil] 7 (#$ . 1813)]) #@53 Return the map M minus any mapping for X. (fn M X) (defalias 'cconv--map-diff-elem #[514 "\211\236\211\203 \300\"\202 \236\203 \301\302!\210\207" [remq cl--assertion-failed (null (assq x res))] 6 (#$ . 2022)]) #@65 Return the map M minus any mapping for elements of S. (fn M S) (defalias 'cconv--map-diff-set #[514 "\300\211\203 \211@\211@>\204 \211B\262A\266\202\202 \210\211\237\207" [nil] 7 (#$ . 2248)]) #@53 (fn ARGS BODY ENV PARENTFORM &optional DOCSTRING) (defalias 'cconv--convert-function #[1284 "@@\232\204\f \301\302!\210\211A\242A\303\211C\304C\303C\211\203\247 \211@\211\n\236A\206) \211\305:\203\213 @\211\306=\203z A\211:\203_ \211@\211\n\f\242B\240\210\306\307 \242DE\n\242B\240\266\202v \n\242B\240\210\307\n\242E\242B\240\210\210\202\207 %\210\210\202\230 \211%\210\266\211\242T\240\210A\266\202\202 \210\211\242\237\240\210\211\242\237\240\210\310\n\n\242\n$\262\242\204\325 \204\325 \311\312BBD\202\342 \313\n\242BBBB\207" [cconv-freevars-alist cl--assertion-failed (equal body (caar cconv-freevars-alist)) nil 0 #[1285 "\242B\240\210\300\242E\242B\240\207" [internal-get-closed-var] 9 "\n\n(fn ENVECTOR I NEW-ENV FV EXP)"] car-safe internal-get-closed-var cconv--convert-funcbody function lambda internal-make-closure] 23 (#$ . 2456)]) #@30 (fn NEW-ENV VAR CLOSEDSYM) (defalias 'cconv--remap-llv #[771 "\300\301\302\303\304\305\"\306\"\307\310%\"\207" [mapcar make-byte-code 257 "\211A@\302=\204 \207\211@\3038=\204 \304\305!\210\211@\302@\306\307\310\311\312\313\300\301\"\314\"\315\316%\315\233\"BBB\207" vconcat vector [apply-partially 2 cl--assertion-failed (eq (car mapping) (nth 2 mapping)) mapcar make-byte-code 257 "\300=\203 \301\207\207" vconcat vector [] 3 "\n\n(fn ARG)"] 12 "\n\n(fn MAPPING)"] 11 (#$ . 3390)]) #@319 Run `cconv-convert' on FUNCBODY, the forms of a lambda expression. PARENTFORM is the form containing the lambda expression. ENV is a lexical environment (same format as for `cconv-convert'), not including FUNARGS, the function's argument list. Return a list of converted forms. (fn FUNARGS FUNCBODY ENV PARENTFORM) (defalias 'cconv--convert-funcbody #[1028 "C\301\211\203? \211@\211CB\235\204% \211\242\236\2038 C\242B\240\210\2028 \302E\242B\240\210\211\303DDB\262A\266\202\202 \210\304\305\306\307\310\311!\312\"\313\314%\"\262\211\203\203 \301@;\204f @\242\315>\203s \211A\262\242B\262\202X \316\237\317 BBC\"\262\202\204 \262\207" [cconv-captured+mutated nil car-safe list mapcar make-byte-code 257 "\301\300\242\302#\207" vconcat vector [cconv-convert nil] 5 "\n\n(fn FORM)" (interactive declare) append let] 13 (#$ . 3895)]) #@1040 Return FORM with all its lambdas changed so they are closed. ENV is a lexical environment mapping variables to the expression used to get its value. This is used for variables that are copied into closures, moved into cons cells, ... ENV is a list where each entry takes the shape either: (VAR . (car-safe EXP)): VAR has been moved into the car of a cons-cell, and EXP is an expression that evaluates to this cons-cell. (VAR . (internal-get-closed-var N)): VAR has been copied into the closure environment's Nth slot. (VAR . (apply-partially F ARG1 ARG2 ..)): VAR has been λ-lifted and takes additional arguments ARGs. (VAR . nil): VAR is accessed normally. This is the same as VAR being absent from ENV, but an explicit nil entry is useful for shadowing VAR for a specific scope. EXTEND is a list of variables which might need to be accessed even from places where they are shadowed, because some part of ENV causes them to be used at places where they originally did not directly appear. (fn FORM ENV EXTEND) (defalias 'cconv-convert #[771 "\211CC\305\306\307\310\311\312\313\314 !\315\"\316\317%\242\"\"\203 \320\321!\210\322\323\324\325\326\327\n:\203\n@\211\330>\203\236A\211:\2032\211@A\211\306\242C\242C\211\203\314\211@\306:\204a \211C\262\202u AA\203n \331\332#\210A@\262@B\235\2035@\333=\203\216 A@@\334=\204\222 \320\335!\210A@AA @@\232\204\242 \320\336!\210 @AA@\211A@\337\"\205\267 \nGY\266\204\2035 \211A\242AA@\211A@\337\"AA\306\340 BBB \242B\240\210\211\203\211@\211\341\242\"\204\374 \242B\240\210\210\211\242\236A\242\342=\203\211>\204\211\342EB\262A\266\202\202\343 \210\333\334\343$BBD\266\206\202qB\235\203W\342E\242B\240\210\344\345\242\242#D\202q\211\242\236\203hC\242B\240\210\345\242\242#\346=\203\246\242>\203\246\347\350\351\"!\352 \242#\240\210\353\n\242\"B\240\210\211D B\262 \210DB\262\346=\203\303\242\240\210\242\240\210\266A\266\202\202M \210\346=\204\211\203\211@\211\242\242>\203 \211\242\347\350\351\"!\352\242#\240\210\353\242\"B\240\210\211DB\262\266A\266\202\202\324\210\237\307\310\311\354\313\314 \"\355\"\356\357% \"BB\266\203\266\203\266\202\202\231:\203Y@\211\334=\203K\n\f$\202T\n\f$\262\202\231\360\267\202\221 #\202\231\361\362!\202\231\f\202\231\f\202\231 \n\f$\202\231!\202\231\f\202\231 $\262\202\211:\203\317\211@\211\334=\203\274\fA\n\f$\262\202\312\fA\n\f$\262\262\202\211\363\267\202\366A #\262\202A\211:\203H\211@\211:\203A\211@\211\334=\203:A\211:\2033\211@A\211@\242\364=\205 \345\211A\262\242A@\242\242#\365\242%\262\266\202\266\202\2025\262\202<\262\202C \262\202J\f\262\202\361\362!\202\202A\211:\203\206\211@A\211\211:\205}\345@\242\242#ABBB\266\203\266\202\202\254\366\267\202\244 \n\f$\202\254!\202\254\f\202\254 $\262\202A\211:\203i\211@A\211:\203[\211@A\f\203\371\211\365\306C\242$\367\370\307\310\311\371\313\314\f#\372\"\373\374%\"BBB\262\266\203\202V\211\367\345\242\242#\205CB\235\211\203\"\375E\242B\2026\242\236\2033C\242B\2026\242\307\310\311\376\313\314\f $\377\"\201@ \374% \"\266\202BBB\266\203\266\202\202d $\266\202\202q $\262\202\f\203\243A\211:\203\226\211@A %\266\202\202\236 $\262\202A $\262\202A\211:\203\317\211@A %\266\202\202\327 $\262\202A \n\f$\262\202A\211:\203\304\211@A\211\242\236A\201A :\203\255@\211\340=\203\234A\211:\203\213\211A\211:\203j\211A@=\2040\320\201B !\210\337\307\310\311\201C \313\314!\201D \"\373\201E %\"\307\310\311\354\313\314\"\201F \"\356\201G %\"\"BB\262\202\206\307\310\311\354\313\314\"\201H \"\356\201G % B\"B\262\202\227 %\262\202\250%\262\202\271\211%\262\262\266\203\266\202\202\340\201I \267\202\330!\202\340\f\202\340 $\262\202A!\262\202\202A $\262\262\202\n\242\236A\206\n\266\206\207" [cconv-lambda-candidates cconv-freevars-alist cconv-liftwhen cconv-captured+mutated byte-compile--use-old-handlers delq nil mapcar make-byte-code 257 "\211A@\301=\205 \302AAA\300\242\"\207" vconcat vector [apply-partially cconv--set-diff] 4 "\n\n(fn MAPPING)" cl--assertion-failed (not (delq nil (mapcar (lambda (mapping) (if (eq (cadr mapping) 'apply-partially) (cconv--set-diff (cdr (cddr mapping)) extend))) env))) #[1285 "\211\300\242\242#\301\302\303\n\242$F\207" [cconv-convert :fun-body cconv--convert-function nil] 13 "\n\n(fn ENV EXTEND BODY FORM HEAD)"] #[257 "\300\301\302\"B\207" [interactive mapcar #[257 "\300\301\211#\207" [cconv-convert nil] 5 "\n\n(fn FORM)"]] 5 "\n\n(fn FORMS)"] #[1028 "\300G\301\"\301U\203\f \207\302\203{ \211A\262\242\211\242\236A\206 \211\303\211A\262\242\242\242#9\203: \304E\202t :\203s @\211\305=\203m A\211:\203g \211@A\211\204a \306E\262\202b \266\202\202h \262\202n \262\202t \211B\266\204\202 \211A\203\207 \307\237B\202\211 \211@\207" [logand 1 nil cconv-convert setq car-safe setcar progn] 16 "\n\n(fn FORM ENV EXTEND FORMS)"] #[771 "\300\301\302\303\304\305\306 \"\307\"\310\311%\"B\207" [cond mapcar make-byte-code 257 "\302\303\304\305\306\307\300\301\"\310\"\311\312%\"\207" vconcat vector [mapcar make-byte-code 257 "\302\300\242\301\242#\207" vconcat vector [cconv-convert] 5 "\n\n(fn FORM)"] 9 "\n\n(fn BRANCH)"] 12 "\n\n(fn ENV EXTEND COND-FORMS)"] #[1028 "\300\301\302D\242\242#\303\304\305\306\307\310\"\311\"\312\313%\"BB\207" [funcall cconv-convert function mapcar make-byte-code 257 "\302\300\242\301\242#\207" vconcat vector [cconv-convert] 5 "\n\n(fn FORM)"] 14 "\n\n(fn ENV EXTEND ARGS FUN)"] #[1028 "\211\300\301\302\303\304\305\n\n\"\306\"\307\310%\"B\207" [mapcar make-byte-code 257 "\302\300\242\301\242#\207" vconcat vector [cconv-convert] 5 "\n\n(fn FORM)"] 13 "\n\n(fn ENV EXTEND FORMS FUNC)"] (let let*) byte-compile-warn "Malformed `%S' binding: %S" function lambda (and (eq (car value) 'function) (eq (car (cadr value)) 'lambda)) (equal (cddr (cadr value)) (caar cconv-freevars-alist)) append apply-partially memql car-safe cconv--convert-funcbody list cconv-convert let* make-symbol format "closed-%s" cconv--remap-llv remq "\302\300\242\301\242#\207" [cconv-convert] 5 "\n\n(fn FORM)" #s(hash-table size 7 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (cond 607 internal-make-closure 617 quote 623 function 628 setq 633 interactive 645 declare 652)) byte-compile-report-error "Internal error in compiler: cconv called twice?" #s(hash-table size 14 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (cond 725 function 740 internal-make-closure 847 quote 853 defvar 858 defconst 858 condition-case 945 catch 1142 unwind-protect 1203 setq 1244 apply 1261 funcall 1261 interactive 1509 declare 1521)) :documentation cconv--convert-function #s(hash-table size 3 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (setq 908 interactive 920 declare 927)) condition-case :fun-body "\211@\304\302\206 CA\301\242\300$D\207" [cconv--dummy-var cconv--convert-function] 7 "\n\n(fn HANDLER)" car-save "\211@\304\305\306\307\310\311\300\303\"\312\"\313\314%A\"\302\204 \211\202&