changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate 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
291
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
1
 ;;; pan.lisp --- Pandoric macros
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
2
 
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
3
 ;;; Code:
437
83f8623a6ec3 std work, renamed :disabled in deftest to :skip
Richard Westhaver <ellis@rwest.io>
parents: 292
diff changeset
4
 (in-package :std/macs)
291
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
5
 (in-readtable :std)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
6
 
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
7
 (defun pandoriclet-get (letargs)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
8
   `(case sym
292
00d1c8afcdbb mostly done with std refactor, added sst-file-writer to rdb
Richard Westhaver <ellis@rwest.io>
parents: 291
diff changeset
9
      ,@(mapcar #`(((car ,a1)) (car ,a1))
291
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
10
         letargs)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
11
      (t (error
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
12
          "Unknown pandoric get: ~a"
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
13
          sym))))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
14
 
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
15
 (defun pandoriclet-set (letargs)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
16
   `(case sym
292
00d1c8afcdbb mostly done with std refactor, added sst-file-writer to rdb
Richard Westhaver <ellis@rwest.io>
parents: 291
diff changeset
17
      ,@(mapcar #`(((car ,a1))
00d1c8afcdbb mostly done with std refactor, added sst-file-writer to rdb
Richard Westhaver <ellis@rwest.io>
parents: 291
diff changeset
18
                   (setq (car ,a1) val))
291
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
19
         letargs)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
20
      (t (error
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
21
          "Unknown pandoric set: ~a"
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
22
          sym))))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
23
 
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
24
 (defmacro pandoriclet (letargs &rest body)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
25
   (let ((letargs (cons
594
5bd0eb9fa1fa rocksdb callbacks, missing symbol fixes
Richard Westhaver <ellis@rwest.io>
parents: 437
diff changeset
26
                   '(%a)
437
83f8623a6ec3 std work, renamed :disabled in deftest to :skip
Richard Westhaver <ellis@rwest.io>
parents: 292
diff changeset
27
                   (std/list:let-binding-transform
291
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
28
                    letargs))))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
29
     `(let (,@letargs)
594
5bd0eb9fa1fa rocksdb callbacks, missing symbol fixes
Richard Westhaver <ellis@rwest.io>
parents: 437
diff changeset
30
        (setq %a ,@(last body))
291
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
31
        ,@(butlast body)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
32
        (dlambda
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
33
         (:pandoric-get (sym)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
34
                        ,(pandoriclet-get letargs))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
35
         (:pandoric-set (sym val)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
36
                        ,(pandoriclet-set letargs))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
37
         (t (&rest args)
594
5bd0eb9fa1fa rocksdb callbacks, missing symbol fixes
Richard Westhaver <ellis@rwest.io>
parents: 437
diff changeset
38
            (apply %a args))))))
291
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
39
 
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
40
 (declaim (inline get-pandoric))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
41
 
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
42
 (defun get-pandoric (box sym)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
43
   (funcall box :pandoric-get sym))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
44
 
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
45
 (defsetf get-pandoric (box sym) (val)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
46
   `(progn
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
47
      (funcall ,box :pandoric-set ,sym ,val)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
48
      ,val))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
49
 
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
50
 (defmacro! with-pandoric (syms o!box &rest body)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
51
   `(symbol-macrolet
292
00d1c8afcdbb mostly done with std refactor, added sst-file-writer to rdb
Richard Westhaver <ellis@rwest.io>
parents: 291
diff changeset
52
        (,@(mapcar #`(,a1 (get-pandoric ,g!box ,a1))
291
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
53
                   syms))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
54
      ,@body))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
55
 
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
56
 ;; (defun pandoric-hotpatch (box new)
594
5bd0eb9fa1fa rocksdb callbacks, missing symbol fixes
Richard Westhaver <ellis@rwest.io>
parents: 437
diff changeset
57
 ;;   (with-pandoric (%a) box
5bd0eb9fa1fa rocksdb callbacks, missing symbol fixes
Richard Westhaver <ellis@rwest.io>
parents: 437
diff changeset
58
 ;;     (setq %a new)))
291
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
59
 
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
60
 (defmacro pandoric-recode (vars box new)
594
5bd0eb9fa1fa rocksdb callbacks, missing symbol fixes
Richard Westhaver <ellis@rwest.io>
parents: 437
diff changeset
61
   `(with-pandoric (%a ,@vars) ,box
5bd0eb9fa1fa rocksdb callbacks, missing symbol fixes
Richard Westhaver <ellis@rwest.io>
parents: 437
diff changeset
62
      (setq %a ,new)))
291
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
63
 
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
64
 (defmacro plambda (largs pargs &rest body)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
65
   (let ((pargs (mapcar #'list pargs)))
594
5bd0eb9fa1fa rocksdb callbacks, missing symbol fixes
Richard Westhaver <ellis@rwest.io>
parents: 437
diff changeset
66
     `(let (%a %p)
291
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
67
        (setq
594
5bd0eb9fa1fa rocksdb callbacks, missing symbol fixes
Richard Westhaver <ellis@rwest.io>
parents: 437
diff changeset
68
         %a (lambda ,largs ,@body)
5bd0eb9fa1fa rocksdb callbacks, missing symbol fixes
Richard Westhaver <ellis@rwest.io>
parents: 437
diff changeset
69
         %p (dlambda
291
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
70
               (:pandoric-get (sym)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
71
                              ,(pandoriclet-get pargs))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
72
               (:pandoric-set (sym val)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
73
                              ,(pandoriclet-set pargs))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
74
               (t (&rest args)
594
5bd0eb9fa1fa rocksdb callbacks, missing symbol fixes
Richard Westhaver <ellis@rwest.io>
parents: 437
diff changeset
75
                  (apply %a args)))))))
291
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
76
 
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
77
 (defvar pandoric-eval-tunnel)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
78
 
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
79
 (defmacro pandoric-eval (vars expr)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
80
   `(let ((pandoric-eval-tunnel
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
81
            (plambda () ,vars t)))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
82
      (eval `(with-pandoric
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
83
               ,',vars pandoric-eval-tunnel
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
84
               ,,expr))))