%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
;ELC ;;; Compiled ;;; in Emacs version 25.2.1 ;;; with all optimizations. ;;; This file uses dynamic docstrings, first added in Emacs 19.29. ;;; This file does not contain utf-8 non-ASCII characters, ;;; and so can be loaded in Emacs versions earlier than 23. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (byte-code "\300\301!\210\300\302!\207" [require cl-lib pcase] 2) (defvar cps--bindings nil) (defvar cps--states nil) (defvar cps--value-symbol nil) (defvar cps--state-symbol nil) (defvar cps--cleanup-table-symbol nil) (defvar cps--cleanup-function nil) (defalias 'cps--gensym '(macro . #[385 "\300\301B\302DE\207" [progn ignore make-symbol] 6 "\n\n(fn FMT &rest ARGS)"])) #@84 List of transformer functions to apply to atomic forms we evaluate in CPS context. (defvar cps--dynamic-wrappers '(identity) (#$ . 785)) #@81 List of special forms that we treat just like ordinary function applications. (defconst cps-standard-special-forms '(setq setq-default throw interactive) (#$ . 928)) (defalias 'cps--trace-funcall #[385 "\300\301#\210\302\"\300\303#\210\211\207" [message "%S: args=%S" apply "%S: result=%S"] 7 "\n\n(fn FUNC &rest ARGS)"]) (defalias 'cps--trace #[385 "\300\301\302\303P#!\207" [princ apply format "\n"] 7 "\n\n(fn FMT &rest ARGS)"]) #@71 Non-nil if and only if DEFINITION is a special form. (fn DEFINITION) (defalias 'cps--special-form-p #[257 "\2119\203 \300!\203 \301!\262\302!\205 \303!A\304=\207" [fboundp indirect-function subrp subr-arity unevalled] 3 (#$ . 1376)]) (defalias 'cps--define-unsupported '(macro . #[257 "\300\301\302\303\"!\304\305EE\207" [defun intern format "cps--transform-%s" error "%s not supported in generators"] 6 "\n\n(fn FUNCTION)"])) #@534 Continue generating CPS code with an atomic-form wrapper to the current stack of such wrappers. WRAPPER is a function that takes a form and returns a wrapped form. Whenever we generate an atomic form (i.e., a form that can't iter-yield), we first (before actually inserting that form in our generated code) pass that form through all the transformer functions. We use this facility to wrap forms that can transfer control flow non-locally in goo that diverts this control flow to the CPS state machinery. (fn WRAPPER &rest BODY) (defalias 'cps--with-value-wrapper '(macro . #[385 "\300\301\302\303BBDCBB\207" [let cps--dynamic-wrappers cons (cps--dynamic-wrappers)] 7 (#$ . 1821)])) (function-put 'cps--with-value-wrapper 'lisp-indent-function 1) (defalias 'cps--make-dynamic-binding-wrapper #[514 "\204 \301\300!\210\302\303\304\305\306\"\307\"\310\311%\207" [lexical-binding cl--assertion-failed make-byte-code 257 "\302\300\301DC\303\304\301\300EEF\207" vconcat vector [let unwind-protect setf] 8 "\n\n(fn FORM)"] 9 "\n\n(fn DYNAMIC-VAR STATIC-VAR)"]) #@136 Evaluate BODY such that generated atomic evaluations run with DYNAMIC-VAR bound to STATIC-VAR. (fn DYNAMIC-VAR STATIC-VAR &rest BODY) (defalias 'cps--with-dynamic-binding '(macro . #[642 "\300\301EBB\207" [cps--with-value-wrapper cps--make-dynamic-binding-wrapper] 7 (#$ . 2897)])) (function-put 'cps--with-dynamic-binding 'lisp-indent-function 2) #@84 Create a new CPS state with body BODY and return the state's name. (fn KIND BODY) (defalias 'cps--add-state #[514 "\303\304!\211E B\211\nB\211\207" [cps--cleanup-function cps--states cps--bindings make-symbol "cps-state-%s-"] 6 (#$ . 3255)]) (function-put 'cps--add-state 'lisp-indent-function 1) (defalias 'cps--add-binding #[257 "\301\302\303\"!B\211@\207" [cps--bindings make-symbol format "cps-binding-%s-"] 5 "\n\n(fn ORIGINAL-NAME)"]) (defalias 'cps--find-special-form-handler #[257 "\300\301\242\"\302!\303!\205 \211\207" [format "cps--transform-%s" intern-soft fboundp] 5 "\n\n(fn FORM)"]) #@67 When t, always rewrite forms into cps even when they don't yield. (defvar cps-inhibit-atomic-optimization nil (#$ . 3871)) #@56 Return whether the given form never yields. (fn FORM) (defalias 'cps--atomic-p #[257 "?\205 \303\304\305\306E\n\"\210 )?\207" [cps-inhibit-atomic-optimization cps--yield-seen macroexpand-all-environment nil macroexpand-all cl-macrolet ((cps-internal-yield (_val) (setf cps--yield-seen t)))] 5 (#$ . 4000)]) (defalias 'cps--make-atomic-state #[514 "\304\305EE \306:\203 @\262\211!\262A\262\202 \266\306\307\310\305E\")\207" [cps--state-symbol cps--dynamic-wrappers cps--cleanup-function cps--value-symbol prog1 setf nil cps--add-state "atom"] 8 "\n\n(fn FORM NEXT-STATE)"]) (defalias 'cps--transform-1 #[514 "\306\307\310!\204 :\204 \311\"\202n@\211\312=\203\364 A\211\204* \313\314\"\202\357 \211:\203a \211@A\211\204B \313 \"\262\202\\ \211\313\315\316\317\320 \313\312B\"FE\"\"\266\202\266\202\202\357 \321!\262\203\267 \211\n>?\262\203| \"\202\357 \211\211\322\314:\203\231 @\262:?\211\262\203\231 A\262\202\200 \211\205\236 \314\266\203?\262\203\256 #\202\357 \311\"\202\357 \211\211\322\314:\203\324 @\262:?\211\262\203\324 A\262\202\273 \211\205\331 \314\266\203?\262\203\351 #\202\357 \311\"\262\202l\211\323=\203\304A\211:\2031\211@A\211\324\325!\313\315\326\317 \327 \"B\313\330\fB\")\257\"\"\262\266\202\266\202\202\277\321!\262\203\207\211\n>?\262\203L\"\202\277\211\211\322\314:\203i@\262:?\211\262\203iA\262\202P\211\205n\314\266\203?\262\203~#\202\277\311\"\202\277\211\211\322\314:\203\244@\262:?\211\262\203\244A\262\202\213\211\205\251\314\266\203?\262\203\271#\202\277\311\"\262\202l\211\331=\203EA\211\204\330\313\322\"\202@\211:\203\262\211@\211:\203\211@A\211\204A\211\313\332\331BE\f\"\266\202\262\202A\211\313\320\330B\331BF \"\266\203\262\266\202\202\255\321!\262\203t\211\n>?\262\2038\"\202\255\211\322\314:\203U@\262:?\211\262\203UA\262\202<\211\205Z\314\266\203?\262\203k#\202\255\311\"\202\255\211\322\314:\203\221@\262:?\211\262\203\221A\262\202x\211\205\226\314\266\203?\262\203\247#\202\255\311\"\262\202@\321!\262\203\211\n>?\262\203\315\"\202@\211\211\322\314:\203\352@\262:?\211\262\203\352A\262\202\321\211\205\357\314\266\203?\262\203\377#\202@\311\"\202@\211\211\322\314:\203%@\262:?\211\262\203%A\262\202\f\211\205*\314\266\203?\262\203:#\202@\311\"\262\202l\211\333=\203\242A\211:\203\211@A\211:\203x\211@A\211\334 #B\313 \")\266\203\266\202\202\n\321!\262\203\320\211\n>?\262\203\223\"\202\n\211\322\314:\203\260@\262:?\211\262\203\260A\262\202\227\211\205\265\314\266\203?\262\203\307#\202\n\311\"\202\n\211\322\314:\203\355@\262:?\211\262\203\355A\262\202\324\211\205\362\314\266\203?\262\203#\202\n\311\"\266\202\202\235\321!\262\203e\211\n>?\262\203*\"\202\235\211\211\322\314:\203G@\262:?\211\262\203GA\262\202.\211\205L\314\266\203?\262\203\\#\202\235\311\"\202\235\211\211\322\314:\203\202@\262:?\211\262\203\202A\262\202i\211\205\207\314\266\203?\262\203\227#\202\235\311\"\262\202l\211\320=\203\nA\211:\203w\211@A\211:\203\340\211@A\211\313\315\335\317\320 \313\n\"\313\330 B\"FE\"\"\266\203\266\202\202r\321!\262\2038\211\n>?\262\203\373\"\202r\211\322\314:\203@\262:?\211\262\203A\262\202\377\211\205\314\266\203?\262\203/#\202r\311\"\202r\211\322\314:\203U@\262:?\211\262\203UA\262\202<\211\205Z\314\266\203?\262\203l#\202r\311\"\266\202\202\321!\262\203\315\211\n>?\262\203\222\"\202\211\211\322\314:\203\257@\262:?\211\262\203\257A\262\202\226\211\205\264\314\266\203?\262\203\304#\202\311\"\202\211\211\322\314:\203\352@\262:?\211\262\203\352A\262\202\321\211\205\357\314\266\203?\262\203\377#\202\311\"\262\202l\211\336=\203\341A\211\204\313\322\"\202\334\211:\203N\211@A\211\2048\313\n\"\266\202\202I\211\313\313\336B \"\"\266\203\266\202\202\334\321!\262\203\244\211\n>?\262\203i\"\202\334\211\211\322\314:\203\206@\262:?\211\262\203\206A\262\202m\211\205\213\314\266\203?\262\203\233#\202\334\311\"\202\334\211\211\322\314:\203\301@\262:?\211\262\203\301A\262\202\250\211\205\306\314\266\203?\262\203\326#\202\334\311\"\262\202l\211\330=\203\270A\211\204\365\313\322\"\202\263\211:\203%\211@A\211\204\313\n\"\266\202\202 \211\313\313\330B \"\"\266\203\266\202\202\263\321!\262\203{\211\n>?\262\203@\"\202\263\211\211\322\314:\203]@\262:?\211\262\203]A\262\202D\211\205b\314\266\203?\262\203r#\202\263\311\"\202\263\211\211\322\314:\203\230@\262:?\211\262\203\230A\262\202\211\205\235\314\266\203?\262\203\255#\202\263\311\"\262\202l\211\337=\203D A\211:\203\261\211@A\211\211\322\211:\203\356@\2629\203\342\322D\202\343B\262A\262\202\316\211\237\266\203\211\322\211\211\211:\203@\262\211A\262\242\262@\262\324!B\262A\262\202\367\211\237\266\205\313\340\341\322\211\211\322\211:\203]@\262\211A\262\242\262@\262:\203]@\262DB\262A\262A\262\202)\211\237\266\207\322\211\211\322\211:\203\234@\262\211A\262\242\262@\262:\203\234@\262DB\262A\262A\262\202i\211\237\266\207\"BB\f\"\266\202\266\202\266\202\202? \321!\262\203 \211\n>?\262\203\314\"\202? \211\211\322\314:\203\351@\262:?\211\262\203\351A\262\202\320\211\205\356\314\266\203?\262\203\376#\202? \311\"\202? \211\211\322\314:\203$ @\262:?\211\262\203$ A\262\202 \211\205) \314\266\203?\262\2039 #\202? \311\"\262\202l\211\340=\203\370\nA\211:\203e\n\211@\211\204h A\211\313\330B \"\262\262\202`\n\211:\203\320 \211@AA\211\2119\203 \211\202\201 \211@\243@\324!\313\315\342\317 \f\203\232 \343!\203\262 \344\n\"B\313\340BB\")\202\303 \313\345\f\340BB#\"\257\"\"\266\203\266\203\266\203\202`\n\321!\262\203'\n\211\n>?\262\203\353 \"\202`\n\211\322\314:\203\n@\262:?\211\262\203\nA\262\202\357 \211\205 \n\314\266\203?\262\203\n#\202`\n\311\"\202`\n\211\322\314:\203D\n@\262:?\211\262\203D\nA\262\202+\n\211\205I\n\314\266\203?\262\203Z\n#\202`\n\311\"\262\202\363\n\321!\262\203\273\n\211\n>?\262\203\200\n\"\202\363\n\211\211\322\314:\203\235\n@\262:?\211\262\203\235\nA\262\202\204\n\211\205\242\n\314\266\203?\262\203\262\n#\202\363\n\311\"\202\363\n\211\211\322\314:\203\330\n@\262:?\211\262\203\330\nA\262\202\277\n\211\205\335\n\314\266\203?\262\203\355\n#\202\363\n\311\"\262\202l\211\332=\203\326A\211\204\f\313\322\"\202\321\211:\203C\211@A\211\204$\313 \"\262\202>\211\313\315\346\317\320 \313\332\fB\"FE\"\"\266\202\266\202\202\321\321!\262\203\231\211\n>?\262\203^\"\202\321\211\211\322\314:\203{@\262:?\211\262\203{A\262\202b\211\205\200\314\266\203?\262\203\220#\202\321\311\"\202\321\211\211\322\314:\203\266@\262:?\211\262\203\266A\262\202\235\211\205\273\314\266\203?\262\203\313#\202\321\311\"\262\202l\211\347=\203\265\fA\211:\203\"\f\211@A\211\204\366\313 \"\262\202\f\211\313\324\350!\315\351\317 \313\330\fB\315\352\317 \f\257\"\"\257\"\262\"\266\202\266\202\202\260\f\321!\262\203x\f\211\n>?\262\203=\f\"\202\260\f\211\211\322\314:\203Z\f@\262:?\211\262\203Z\fA\262\202A\f\211\205_\f\314\266\203?\262\203o\f#\202\260\f\311\"\202\260\f\211\211\322\314:\203\225\f@\262:?\211\262\203\225\fA\262\202|\f\211\205\232\f\314\266\203?\262\203\252\f#\202\260\f\311\"\262\202l\211\353=\203A\211:\203} \211@A\211:\203\346\f\211@A\211\313\330\347BBE \"\266\203\266\202\202x \321!\262\203> \211\n>?\262\203 \"\202x \211\322\314:\203 @\262:?\211\262\203 A\262\202 \211\205# \314\266\203?\262\2035 #\202x \311\"\202x \211\322\314:\203[ @\262:?\211\262\203[ A\262\202B \211\205` \314\266\203?\262\203r #\202x \311\"\266\202\202\321!\262\203\323 \211\n>?\262\203\230 \"\202\211\211\322\314:\203\265 @\262:?\211\262\203\265 A\262\202\234 \211\205\272 \314\266\203?\262\203\312 #\202\311\"\202\211\211\322\314:\203\360 @\262:?\211\262\203\360 A\262\202\327 \211\205\365 \314\266\203?\262\203#\202\311\"\262\202l\211\354=\203\367A\211:\203d\211@A\211 \204+\355\356!\315\357\330\341\317EC\"B\">\322>\315\360\330\205H\361DBB\")>\362!B\313\"*\266\202\266\202\266\202\202\362\321!\262\203\272\211\n>?\262\203\"\202\362\211\211\322\314:\203\234@\262:?\211\262\203\234A\262\202\203\211\205\241\314\266\203?\262\203\261#\202\362\311\"\202\362\211\211\322\314:\203\327@\262:?\211\262\203\327A\262\202\276\211\205\334\314\266\203?\262\203\354#\202\362\311\"\262\202l\211\363=\203\320A\211:\203=\211@A\211\355\364!\313\"\330\317\320 \313\330\nB\"FED>E?B?@B@\266\203\266\202\266\202\202\313\321!\262\203\223\211\n>?\262\203X\"\202\313\211\211\322\314:\203u@\262:?\211\262\203uA\262\202\\\211\205z\314\266\203?\262\203\212#\202\313\311\"\202\313\211\211\322\314:\203\260@\262:?\211\262\203\260A\262\202\227\211\205\265\314\266\203?\262\203\305#\202\313\311\"\262\202l\211\365=\203\"A\211:\203\217\211@A\211\204\370\315\366\317 \365D \257\"\262\202\212\321!\262\203P\211\n>?\262\203\"\202\212\211\322\314:\2030@\262:?\211\262\2030A\262\202\211\2055\314\266\203?\262\203G#\202\212\311\"\202\212\211\322\314:\203m@\262:?\211\262\203mA\262\202T\211\205r\314\266\203?\262\203\204#\202\212\311\"\266\202\202\321!\262\203\345\211\n>?\262\203\252\"\202\211\211\322\314:\203\307@\262:?\211\262\203\307A\262\202\256\211\205\314\314\266\203?\262\203\334#\202\311\"\202\211\211\322\314:\203@\262:?\211\262\203A\262\202\351\211\205\314\266\203?\262\203#\202\311\"\262\202l\211\367=\203tA\211:\203\341\211@A\211\204J\315\370\317 \367D \257\"\262\202\334\321!\262\203\242\211\n>?\262\203e\"\202\334\211\322\314:\203\202@\262:?\211\262\203\202A\262\202i\211\205\207\314\266\203?\262\203\231#\202\334\311\"\202\334\211\322\314:\203\277@\262:?\211\262\203\277A\262\202\246\211\205\304\314\266\203?\262\203\326#\202\334\311\"\266\202\202o\321!\262\2037\211\n>?\262\203\374\"\202o\211\211\322\314:\203@\262:?\211\262\203A\262\202 \211\205\314\266\203?\262\203.#\202o\311\"\202o\211\211\322\314:\203T@\262:?\211\262\203TA\262\202;\211\205Y\314\266\203?\262\203i#\202o\311\"\262\202l\211\371=\203\332A\211:\203G\211@A\211\204\260\313\315\372\330\317>\203\241\315\373\317E\"\202\243E\374\375 EE\"\"\262\202B\321!\262\203\211\n>?\262\203\313\"\202B\211\322\314:\203\350@\262:?\211\262\203\350A\262\202\317\211\205\355\314\266\203?\262\203\377#\202B\311\"\202B\211\322\314:\203%@\262:?\211\262\203%A\262\202\f\211\205*\314\266\203?\262\203<#\202B\311\"\266\202\202\325\321!\262\203\235\211\n>?\262\203b\"\202\325\211\211\322\314:\203@\262:?\211\262\203A\262\202f\211\205\204\314\266\203?\262\203\224#\202\325\311\"\202\325\211\211\322\314:\203\272@\262:?\211\262\203\272A\262\202\241\211\205\277\314\266\203?\262\203\317#\202\325\311\"\262\202lA\321!\262\2032\211\n>?\262\203\367\"\202j\211\211\322\314:\203@\262:?\211\262\203A\262\202\373\211\205\314\266\203?\262\203)#\202j\311\"\202j\211\211\322\314:\203O@\262:?\211\262\203OA\262\2026\211\205T\314\266\203?\262\203d#\202j\311\"\262\262\207" [cps--state-symbol cps--value-symbol cps-standard-special-forms cps--dynamic-wrappers lexical-binding cps--cleanup-table-symbol #[514 "\300\301\"\207" [error "special form %S incorrect or not supported"] 5 "\n\n(fn FORM NAME)"] #[771 "\300\211:\203# @\262:\204 \202 \301\302!B\262A\262\202 \211\237\266\203\303\304\300\300\211:\203X @\262:\203X @\262=\204M DB\262A\262A\262\202. \211\237\266\205BE\"\207" [nil make-symbol "cps-argument-" cps--transform-1 let*] 13 "\n\n(fn NEXT-STATE ARGUMENTS FUNCTION)"] cps--atomic-p cps--make-atomic-state and cps--transform-1 t cps--add-state "and" setf if cps--special-form-p nil catch cps--add-binding "catch-tag" "cps-update-tag" cps--make-catch-wrapper progn cond or condition-case cps--make-condition-wrapper "if" inline let let* append "let*" special-variable-p cps--make-dynamic-binding-wrapper cps--replace-variable-references "or" prog1 "prog1-temp" "prog1" "prog1inner" prog2 unwind-protect make-symbol "cps-cleanup-table-" "unwind" "cleanup" funcall cps--make-unwind-wrapper while "cps-state-while-" quote "quote" function "function" cps-internal-yield "iter-yield" "after-yield" throw 'cps--yield cps--cleanup-function cps--states cps--bindings] 31 "\n\n(fn FORM NEXT-STATE)"]) (defalias 'cps--make-catch-wrapper #[514 "\300\301\302\303\304\"\305\"\306\307%\207" [make-byte-code 257 "\303\304!\305C\306\307\300\306\310\311BBEE\312\310\n\301EEEE\207" vconcat vector [cps--state-symbol make-symbol "cps-normal-exit-from-catch-" let prog1 catch setf (t) unless] 12 "\n\n(fn FORM)"] 9 "\n\n(fn TAG-BINDING NEXT-STATE)"]) (defalias 'cps--make-condition-wrapper #[771 "\300\301!\302\303!\304\211\211:\2036 @\262\211A\262\242\262\305\306 \307B#\n\"BB\262A\262\202\n \211\237\266\204\310\311\312\313\314#\315\"\316\317%\207" [cps--add-binding "condition-case-error" make-symbol "cps-lexical-error-" nil cps--transform-1 cps--replace-variable-references progn make-byte-code 257 "\304\301\302\305\211\211:\203- @\262\211A\262\242\262\306\300\301\257DB\262A\262\202 \211\237\266\204BBB\207" vconcat vector [cps--state-symbol condition-case nil setf] 14 "\n\n(fn FORM)"] 16 "\n\n(fn VAR NEXT-STATE HANDLERS)"]) #@161 Replace all non-shadowed references to VAR with NEW-VAR in FORM. This routine does not modify FORM. Instead, it returns a modified copy. (fn VAR NEW-VAR FORM) (defalias 'cps--replace-variable-references #[771 "\301\302DCE\"\207" [macroexpand-all-environment macroexpand-all cl-symbol-macrolet] 7 (#$ . 18585)]) (defalias 'cps--make-unwind-wrapper #[257 "\204 \301\300!\210\302\303\304\305\306!\307\"\310\311%\207" [lexical-binding cl--assertion-failed make-byte-code 257 "\301\302!\303C\304\305\306\307BBE\310\300BBEE\207" vconcat vector [make-symbol "cps-normal-exit-from-unwind-" let unwind-protect prog1 setf (t) unless] 10 "\n\n(fn FORM)"] 7 "\n\n(fn UNWIND-FORMS)"]) (byte-code "\300\301\302\303#\210\300\301\304\305#\207" [put iter-end-of-sequence error-conditions (iter-end-of-sequence) error-message "iteration terminated"] 4) (defalias 'cps--make-close-iterator-form #[257 "\203 \303\304\305\306 EDDC\307 \n\310BBBB\311BBB\207\307 \n\312BBBB\207" [cps--cleanup-table-symbol cps--state-symbol cps--value-symbol let cleanup cdr assq setf (nil) ((when cleanup (funcall cleanup))) (nil)] 8 "\n\n(fn TERMINAL-STATE)"]) (defalias 'cps-generate-evaluator #[257 "\306\211\306\307\310!\307\311!\306\312\313\314\315E\"\316\317\320\321BB2\"\" \205. \205. \307\322!\323\324\fD \2059 C\205? C \237$\324\237\306\211\211\211\211:\203\222 @\262\211A\262\242\262\211A\262\242\262@\262\325\326\306EEB\262\203\213 \204 \327\305!\210\330\331E EB\262A\262\202J \211\237\266\206\325\fE\323\332\326\333\334\324\205\263 \335\325 \336BBD\337 DD\340\341!D\342\325\343BB\323\344\345\346\347\350\351\352\353\fDEE\354BB\355\356\341!EEEE\357BB\"BEDC\205\347 \360\361BBBD\".BB\207" [cps--states cps--bindings cps--cleanup-function cps--value-symbol cps--state-symbol cps--cleanup-table-symbol nil make-symbol "cps-current-value-" "cps-current-state-" cps--add-state "terminal" signal 'iter-end-of-sequence cps--transform-1 macroexpand-all cl-macrolet ((iter-yield (value) `(cps-internal-yield ,value))) "cps-iterator-finalizer-" let append setf lambda cl--assertion-failed push cons iterator (op value) cond (eq op :stash-finalizer) (value) (eq op :get-finalizer) (eq op :close) cps--make-close-iterator-form (eq op :next) (value) ((yielded nil)) unwind-protect prog1 catch 'cps--yield while t funcall ((setf yielded t)) unless yielded ((t (error "unknown iterator operation %S" op))) (funcall iterator :stash-finalizer (make-finalizer (lambda nil (iter-close iterator)))) (iterator) macroexpand-all-environment] 30 "\n\n(fn BODY)"]) #@197 When used inside a generator, yield control to caller. The caller of `iter-next' receives VALUE, and the next call to `iter-next' resumes execution at the previous `iter-yield' point. (fn VALUE) (defalias 'iter-yield #[257 "\300\301!\207" [error "`iter-yield' used outside a generator"] 3 (#$ . 21178)]) #@329 When used inside a generator function, delegate to a sub-iterator. The values that the sub-iterator yields are passed directly to the caller, and values supplied to `iter-next' are sent to the sub-iterator. `iter-yield-from' evaluates to the value that the sub-iterator function returns via `iter-end-of-sequence'. (fn VALUE) (defalias 'iter-yield-from '(macro . #[257 "\300\301!\300\302!\303DC\304\305\303\306\307\310\311\312\313\314 \315BBDEEE\316\317 DDF\320DEE\207" [make-symbol "yield-from-result" "yield-from-value" let unwind-protect condition-case ((vs nil)) while t setf vs iter-yield iter-next (vs) iter-end-of-sequence cdr iter-close] 18 (#$ . 21490)])) #@248 Creates a generator NAME. When called as a function, NAME returns an iterator value that encapsulates the state of a computation that produces a sequence of values. Callers can retrieve each value using `iter-next'. (fn NAME ARGLIST &rest BODY) (defalias 'iter-defun '(macro . #[642 "\204 \301\300!\210\302!\211@A\303\304\305!C\"BBB\207" [lexical-binding cl--assertion-failed macroexp-parse-body defun append cps-generate-evaluator] 13 (#$ . 22170)])) (function-put 'iter-defun 'lisp-indent-function 'defun) #@113 Return a lambda generator. `iter-lambda' is to `iter-defun' as `lambda' is to `defun'. (fn ARGLIST &rest BODY) (defalias 'iter-lambda '(macro . #[385 "\204 \301\300!\210\302\303!E\207" [lexical-binding cl--assertion-failed lambda cps-generate-evaluator] 6 (#$ . 22698)])) (function-put 'iter-lambda 'lisp-indent-function 'defun) #@261 Extract a value from an iterator. YIELD-RESULT becomes the return value of `iter-yield' in the context of the generator. This routine raises the `iter-end-of-sequence' condition if the iterator cannot supply more values. (fn ITERATOR &optional YIELD-RESULT) (defalias 'iter-next #[513 "\300\"\207" [:next] 5 (#$ . 23039)]) #@121 Terminate an iterator early. Run any unwind-protect handlers in scope at the point ITERATOR is blocked. (fn ITERATOR) (defalias 'iter-close #[257 "\211\300\301\"\207" [:close nil] 4 (#$ . 23373)]) #@183 Loop over values from an iterator. Evaluate BODY with VAR bound to each value from ITERATOR. Return the value with which ITERATOR finished iteration. (fn (VAR ITERATOR) &rest BODY) (defalias 'iter-do '(macro . #[128 "\211\203 \211A\262\242\202 \300\301\302GD\"\211G\303U\203$ \211A\262\242\202+ \300\301\302GD\"@\304\305!\304\306!\304\307!\304\310!\311\312B DF\313\314D\315\316\f\317\nDE\320\316 \321 DE\316 \322BBEF\323 BBFF\266\204\207" [signal wrong-number-of-arguments iter-do 2 make-symbol "iter-do-iterator-done" "iter-do-condition" "iter-do-iterator" "iter-do-result" let (nil) while not condition-case setf iter-next iter-end-of-sequence cdr (t) unless] 20 (#$ . 23579)])) (function-put 'iter-do 'lisp-indent-function 1) (defalias 'cps--advance-for '(macro . #[257 "\300\301\302\303\304\305DDEE\306BBB\207" [condition-case nil progn setcar iter-next cdr ((iter-end-of-sequence nil))] 9 "\n\n(fn CONSCELL)"])) (defalias 'cps--initialize-for '(macro . #[257 "\300\301!\302\303\304EDC\305DE\207" [make-symbol "cps--loop-temp" let cons nil cps--advance-for] 7 "\n\n(fn ITERATOR)"])) #@42 Support `iter-by' in `loop'. (fn VAR) (defalias 'cps--handle-loop-for #[257 "\211A\242\301\302\303\304D\305BBBB\"\211\207" [cl--loop-args append for in cps--initialize-for (by 'cps--advance-for)] 8 (#$ . 24709)]) (byte-code "\300\301\302\303#\210\304\305\306\"\210\307\310!\207" [put iter-by cl-loop-for-handler cps--handle-loop-for eval-after-load elisp-mode #[0 "\300\301\302\"\207" [font-lock-add-keywords emacs-lisp-mode (("(\\(iter-defun\\)\\_>\\s *\\(\\(?:\\sw\\|\\s_\\)+\\)?" (1 font-lock-keyword-face nil t) (2 font-lock-function-name-face nil t)) ("(\\(iter-\\(?:next\\|lambda\\|yield\\|yield-from\\)\\)\\_>" (1 font-lock-keyword-face nil t)))] 3] provide generator] 4)