Mercurial > core / lisp/std/macs/pan.lisp
changeset 594: |
5bd0eb9fa1fa |
parent: |
83f8623a6ec3
|
author: |
Richard Westhaver <ellis@rwest.io> |
date: |
Wed, 14 Aug 2024 21:49:56 -0400 |
permissions: |
-rw-r--r-- |
description: |
rocksdb callbacks, missing symbol fixes |
1 ;;; pan.lisp --- Pandoric macros 7 (defun pandoriclet-get (letargs) 9 ,@(mapcar #`(((car ,a1)) (car ,a1)) 12 "Unknown pandoric get: ~a" 15 (defun pandoriclet-set (letargs) 17 ,@(mapcar #`(((car ,a1)) 21 "Unknown pandoric set: ~a" 24 (defmacro pandoriclet (letargs &rest body) 27 (std/list:let-binding-transform 30 (setq %a ,@(last body)) 34 ,(pandoriclet-get letargs)) 35 (:pandoric-set (sym val) 36 ,(pandoriclet-set letargs)) 40 (declaim (inline get-pandoric)) 42 (defun get-pandoric (box sym) 43 (funcall box :pandoric-get sym)) 45 (defsetf get-pandoric (box sym) (val) 47 (funcall ,box :pandoric-set ,sym ,val) 50 (defmacro! with-pandoric (syms o!box &rest body) 52 (,@(mapcar #`(,a1 (get-pandoric ,g!box ,a1)) 56 ;; (defun pandoric-hotpatch (box new) 57 ;; (with-pandoric (%a) box 60 (defmacro pandoric-recode (vars box new) 61 `(with-pandoric (%a ,@vars) ,box 64 (defmacro plambda (largs pargs &rest body) 65 (let ((pargs (mapcar #'list pargs))) 68 %a (lambda ,largs ,@body) 71 ,(pandoriclet-get pargs)) 72 (:pandoric-set (sym val) 73 ,(pandoriclet-set pargs)) 77 (defvar pandoric-eval-tunnel) 79 (defmacro pandoric-eval (vars expr) 80 `(let ((pandoric-eval-tunnel 81 (plambda () ,vars t))) 83 ,',vars pandoric-eval-tunnel