Advertisement
Shinmera

Triple Macro Madness

Dec 23rd, 2013
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.98 KB | None | 0 0
  1. ;; radiance/implement.lisp / macro define-implementation / flet interface-function / ln114:
  2.  
  3.                ;; AAA WTFFF
  4.                
  5.                `(let ((,pkg-function (find-symbol ,(format NIL "~a" funcname) ',name))
  6.                       (,pkg-method (intern ,(format NIL "I-~a" funcname) ',name)))
  7.                   `(progn
  8.                      (defmacro ,,pkg-function (,@',argsfun)
  9.                        ,',documentation
  10.                        ,,(ecase type
  11.                                 ((:macro 'macro)
  12.                                  ``(apply #',pkg-method ,',pkg-impl-var ,',wholesymb))
  13.                                 ((:function 'function NIL)
  14.                                  ```(apply #',,,pkg-method ,',',pkg-impl-var ,,',wholesymb))))
  15.                      (defgeneric ,,pkg-method (,@',argsgeneric)))))))
  16.  
  17. ;; Sample macroexpand:
  18. RADIANCE> (macroexpand-1 '(define-implementation db (insert (table data &key (replace "a") &rest a) (:type :macro))))
  19. (PROGN
  20.  (DEFPACKAGE :ORG.TYMOONNEXT.RADIANCE.INTERFACE.DB
  21.    (:USE :CL)
  22.    (:NICKNAMES :DB)
  23.    (:EXPORT #:*IMPLEMENTATION* #:IMPLEMENTATION #:INSERT))
  24.  (DEFMACRO DEFINE-DB-IMPLEMENTATION ()
  25.    (LET ((#:PKG-IMPL-VAR1925 (FIND-SYMBOL "*IMPLEMENTATION*" 'DB))
  26.          (#:PKG-IMPL-FUN1926 (FIND-SYMBOL "IMPLEMENTATION" 'DB)))
  27.      `(PROGN
  28.        (DEFVAR ,#:PKG-IMPL-VAR1925)
  29.        (DECLARE (INLINE ,#:PKG-IMPL-FUN1926))
  30.        (DEFUN ,#:PKG-IMPL-FUN1926 ,NIL ,#:PKG-IMPL-VAR1925)
  31.        ,(LET ((#:PKG-FUNCTION1927 (FIND-SYMBOL "INSERT" 'DB))
  32.               (#:PKG-METHOD1928 (INTERN "I-INSERT" 'DB)))
  33.           `(PROGN
  34.             (DEFMACRO ,#:PKG-FUNCTION1927
  35.                       (&WHOLE #:WHOLE1931 TABLE DATA
  36.                        &KEY (REPLACE "a")
  37.                        &REST A)
  38.               NIL
  39.               (APPLY #',PKG-METHOD #:PKG-IMPL-VAR1925 #:WHOLE1931))
  40.             (DEFGENERIC ,#:PKG-METHOD1928
  41.                 (#:PKG-MODULE1929 TABLE DATA &KEY REPLACE &REST A)))))))
  42.  (DEFINE-DB-IMPLEMENTATION))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement