;the macro (defmacro send-with-json-contents ((name uri) normal-func-args) (let ((x (gensym)) (y (gensym))) `(defun ,name ,normal-func-args (let ((,x (defun-args-to-strings ,normal-func-args)) (,y (extract-passed-var-no-nested ,normal-func-args '&keys))) (cl-json:decode-json-from-source (send ,uri (cl-json:encode-json (list-to-alist (join-two-lists ,x ,y))))))))) ;macroexpansions CLDAPI> (macroexpand-1 '(send-with-json-contents (modify-2 (comp-str "/channels/" channel-id)) (channel-id &keys name position topic nsfw rate-limit-per-user bitrate user-limit permission-overwrites parent-id))) (DEFUN MODIFY-2 (CHANNEL-ID &KEYS NAME POSITION TOPIC NSFW RATE-LIMIT-PER-USER BITRATE USER-LIMIT PERMISSION-OVERWRITES PARENT-ID) (LET ((#:G777 (DEFUN-ARGS-TO-STRINGS (CHANNEL-ID &KEYS NAME POSITION TOPIC NSFW RATE-LIMIT-PER-USER BITRATE USER-LIMIT PERMISSION-OVERWRITES PARENT-ID))) (#:G778 (EXTRACT-PASSED-VAR-NO-NESTED (CHANNEL-ID &KEYS NAME POSITION TOPIC NSFW RATE-LIMIT-PER-USER BITRATE USER-LIMIT PERMISSION-OVERWRITES PARENT-ID) '&KEYS))) (JSON:DECODE-JSON-FROM-SOURCE (SEND (COMP-STR "/channels/" CHANNEL-ID) (JSON:ENCODE-JSON (LIST-TO-ALIST (JOIN-TWO-LISTS #:G777 #:G778))))))) ;trying to actually use it (send-with-json-contents (modify-2 (comp-str "/channels/" channel-id)) (channel-id &keys name position topic nsfw rate-limit-per-user bitrate user-limit permission-overwrites parent-id)) ;error ; file: /tmp/slimebsioJz ; in: ; SEND-WITH-JSON-CONTENTS (MODIFY-2 (COMP-STR "/channels/" CHANNEL-ID)) ; (CL-DISCORD-API::SEND-WITH-JSON-CONTENTS ; (CL-DISCORD-API::MODIFY-2 ; (CL-DISCORD-API::COMP-STR "/channels/" CL-DISCORD-API::CHANNEL-ID)) ; (CL-DISCORD-API::CHANNEL-ID CL-DISCORD-API::&KEYS CL-DISCORD-API::NAME ; POSITION CL-DISCORD-API::TOPIC CL-DISCORD-API::NSFW ; CL-DISCORD-API::RATE-LIMIT-PER-USER CL-DISCORD-API::BITRATE ; CL-DISCORD-API::USER-LIMIT CL-DISCORD-API::PERMISSION-OVERWRITES ; CL-DISCORD-API::PARENT-ID)) ; --> DEFUN PROGN SB-IMPL::%DEFUN SB-IMPL::%DEFUN SB-INT:NAMED-LAMBDA ; ==> ; #'(SB-INT:NAMED-LAMBDA CL-DISCORD-API::MODIFY-2 ; (CL-DISCORD-API::CHANNEL-ID CL-DISCORD-API::&KEYS CL-DISCORD-API::NAME ; POSITION CL-DISCORD-API::TOPIC CL-DISCORD-API::NSFW ; CL-DISCORD-API::RATE-LIMIT-PER-USER CL-DISCORD-API::BITRATE ; CL-DISCORD-API::USER-LIMIT CL-DISCORD-API::PERMISSION-OVERWRITES ; CL-DISCORD-API::PARENT-ID) ; (DECLARE (SB-C::TOP-LEVEL-FORM)) ; (BLOCK CL-DISCORD-API::MODIFY-2 ; (LET ((#:G0 #) (#:G1 #)) ; (JSON:DECODE-JSON-FROM-SOURCE (CL-DISCORD-API::SEND # #))))) ; ; caught STYLE-WARNING: ; suspicious variable &KEYS in lambda list: (CHANNEL-ID &KEYS NAME POSITION TOPIC ; NSFW RATE-LIMIT-PER-USER BITRATE ; USER-LIMIT PERMISSION-OVERWRITES ; PARENT-ID). ; file: /tmp/slimebsioJz ; in: ; SEND-WITH-JSON-CONTENTS (MODIFY-2 (COMP-STR "/channels/" CHANNEL-ID)) ; (CL-DISCORD-API::CHANNEL-ID CL-DISCORD-API::&KEYS CL-DISCORD-API::NAME ; POSITION CL-DISCORD-API::TOPIC CL-DISCORD-API::NSFW ; CL-DISCORD-API::RATE-LIMIT-PER-USER CL-DISCORD-API::BITRATE ; CL-DISCORD-API::USER-LIMIT CL-DISCORD-API::PERMISSION-OVERWRITES ; CL-DISCORD-API::PARENT-ID) ; ; caught STYLE-WARNING: ; undefined function: CHANNEL-ID ; ; compilation unit finished ; Undefined function: ; CHANNEL-ID ; caught 2 STYLE-WARNING conditions ;calling the function CLDAPI> (modify-2) ; Debugger entered on # ;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;; ; file: /tmp/slimezTbmVo ; in: ; SEND-WITH-JSON-CONTENTS (MODIFY-2 (COMP-STR "/channels/" CHANNEL-ID)) ; (CL-DISCORD-API::SEND-WITH-JSON-CONTENTS ; (CL-DISCORD-API::MODIFY-2 ; (CL-DISCORD-API::COMP-STR "/channels/" CL-DISCORD-API::CHANNEL-ID)) ; (CL-DISCORD-API::CHANNEL-ID CL-DISCORD-API::&KEYS CL-DISCORD-API::NAME ; POSITION CL-DISCORD-API::TOPIC CL-DISCORD-API::NSFW ; CL-DISCORD-API::RATE-LIMIT-PER-USER CL-DISCORD-API::BITRATE ; CL-DISCORD-API::USER-LIMIT CL-DISCORD-API::PERMISSION-OVERWRITES ; CL-DISCORD-API::PARENT-ID)) ; --> DEFUN PROGN SB-IMPL::%DEFUN SB-IMPL::%DEFUN SB-INT:NAMED-LAMBDA ; ==> ; #'(SB-INT:NAMED-LAMBDA CL-DISCORD-API::MODIFY-2 ; (CL-DISCORD-API::CHANNEL-ID CL-DISCORD-API::&KEYS CL-DISCORD-API::NAME ; POSITION CL-DISCORD-API::TOPIC CL-DISCORD-API::NSFW ; CL-DISCORD-API::RATE-LIMIT-PER-USER CL-DISCORD-API::BITRATE ; CL-DISCORD-API::USER-LIMIT CL-DISCORD-API::PERMISSION-OVERWRITES ; CL-DISCORD-API::PARENT-ID) ; (DECLARE (SB-C::TOP-LEVEL-FORM)) ; (BLOCK CL-DISCORD-API::MODIFY-2 ; (LET ((#:G0 #) (#:G1 #)) ; (JSON:DECODE-JSON-FROM-SOURCE (CL-DISCORD-API::SEND # #))))) ; ; caught STYLE-WARNING: ; suspicious variable &KEYS in lambda list: (CHANNEL-ID &KEYS NAME POSITION TOPIC ; NSFW RATE-LIMIT-PER-USER BITRATE ; USER-LIMIT PERMISSION-OVERWRITES ; PARENT-ID). ; ; caught STYLE-WARNING: ; The variable &KEYS is defined but never used. ; ; caught STYLE-WARNING: ; The variable NAME is defined but never used. ; ; caught STYLE-WARNING: ; The variable POSITION is defined but never used. ; ; caught STYLE-WARNING: ; The variable TOPIC is defined but never used. ; ; caught STYLE-WARNING: ; The variable NSFW is defined but never used. ; ; caught STYLE-WARNING: ; The variable RATE-LIMIT-PER-USER is defined but never used. ; ; caught STYLE-WARNING: ; The variable BITRATE is defined but never used. ; ; caught STYLE-WARNING: ; The variable USER-LIMIT is defined but never used. ; ; caught STYLE-WARNING: ; The variable PERMISSION-OVERWRITES is defined but never used. ; ; caught STYLE-WARNING: ; The variable PARENT-ID is defined but never used. ; ; compilation unit finished ; caught 11 STYLE-WARNING conditions CLDAPI>