Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;; radiance/implement.lisp / macro define-implementation / flet interface-function / ln114:
- ;; AAA WTFFF
- `(let ((,pkg-function (find-symbol ,(format NIL "~a" funcname) ',name))
- (,pkg-method (intern ,(format NIL "I-~a" funcname) ',name)))
- `(progn
- (defmacro ,,pkg-function (,@',argsfun)
- ,',documentation
- ,,(ecase type
- ((:macro 'macro)
- ``(apply #',pkg-method ,',pkg-impl-var ,',wholesymb))
- ((:function 'function NIL)
- ```(apply #',,,pkg-method ,',',pkg-impl-var ,,',wholesymb))))
- (defgeneric ,,pkg-method (,@',argsgeneric)))))))
- ;; Sample macroexpand:
- RADIANCE> (macroexpand-1 '(define-implementation db (insert (table data &key (replace "a") &rest a) (:type :macro))))
- (PROGN
- (DEFPACKAGE :ORG.TYMOONNEXT.RADIANCE.INTERFACE.DB
- (:USE :CL)
- (:NICKNAMES :DB)
- (:EXPORT #:*IMPLEMENTATION* #:IMPLEMENTATION #:INSERT))
- (DEFMACRO DEFINE-DB-IMPLEMENTATION ()
- (LET ((#:PKG-IMPL-VAR1925 (FIND-SYMBOL "*IMPLEMENTATION*" 'DB))
- (#:PKG-IMPL-FUN1926 (FIND-SYMBOL "IMPLEMENTATION" 'DB)))
- `(PROGN
- (DEFVAR ,#:PKG-IMPL-VAR1925)
- (DECLARE (INLINE ,#:PKG-IMPL-FUN1926))
- (DEFUN ,#:PKG-IMPL-FUN1926 ,NIL ,#:PKG-IMPL-VAR1925)
- ,(LET ((#:PKG-FUNCTION1927 (FIND-SYMBOL "INSERT" 'DB))
- (#:PKG-METHOD1928 (INTERN "I-INSERT" 'DB)))
- `(PROGN
- (DEFMACRO ,#:PKG-FUNCTION1927
- (&WHOLE #:WHOLE1931 TABLE DATA
- &KEY (REPLACE "a")
- &REST A)
- NIL
- (APPLY #',PKG-METHOD #:PKG-IMPL-VAR1925 #:WHOLE1931))
- (DEFGENERIC ,#:PKG-METHOD1928
- (#:PKG-MODULE1929 TABLE DATA &KEY REPLACE &REST A)))))))
- (DEFINE-DB-IMPLEMENTATION))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement