;; sbcl-2.4.0 ;; compiled from a file, for example via slime's C-c C-c (defun foo () (lambda () 10)) CL-USER> (disassemble 'foo) ; disassembly for FOO ; Size: 17 bytes. Origin: #x54E9950B ; FOO ; 0B: 498B4510 MOV RAX, [R13+16] ; thread.binding-stack-pointer ; 0F: 488945F8 MOV [RBP-8], RAX ; 13: 8D1512000000 LEA EDX, [RIP+18] ; # ; 19: C9 LEAVE ; 1A: F8 CLC ; 1B: C3 RET NIL CL-USER> (disassemble (foo)) ; disassembly for (LAMBDA () :IN FOO) ; Size: 20 bytes. Origin: #x54E9953B ; (LAMBDA () ; :IN ; FOO) ; 3B: 498B4510 MOV RAX, [R13+16] ; thread.binding-stack-pointer ; 3F: 488945F0 MOV [RBP-16], RAX ; 43: BA14000000 MOV EDX, 20 ; 48: C9 LEAVE ; 49: F8 CLC ; 4A: C3 RET ; 4B: CC10 INT3 16 ; Invalid argument count trap ; 4D: CC10 INT3 16 ; Invalid argument count trap ;; In the first disassembly there is no "Invalid argument count trap"; but in the second there are two! ;; It is easy to reproduce the second part in REPL too: CL-USER> (disassemble (funcall (lambda () (lambda () 10)))) ; disassembly for (LAMBDA ()) ; Size: 20 bytes. Origin: #x54E9A30B ; (LAMBDA ()) ; 0B: 498B4510 MOV RAX, [R13+16] ; thread.binding-stack-pointer ; 0F: 488945F0 MOV [RBP-16], RAX ; 13: BA14000000 MOV EDX, 20 ; 18: C9 LEAVE ; 19: F8 CLC ; 1A: C3 RET ; 1B: CC10 INT3 16 ; Invalid argument count trap ; 1D: CC10 INT3 16 ; Invalid argument count trap ;; Let's take this to the extreme CL-USER> (defmacro wrap (n form) (assert (integerp n)) (if (<= n 0) form `(funcall (wrap ,(1- n) (lambda () ,form))))) WRAP CL-USER> (disassemble (wrap 100 (lambda () 10))) ; disassembly for (LAMBDA ()) ; Size: 223 bytes. Origin: #x54EA72C2 ; (LAMBDA ()) ; 2C2: 498B4510 MOV RAX, [R13+16] ; thread.binding-stack-pointer ; 2C6: 488985D0FCFFFF MOV [RBP-816], RAX ; 2CD: BA14000000 MOV EDX, 20 ; 2D2: C9 LEAVE ; 2D3: F8 CLC ; 2D4: C3 RET ; 2D5: CC10 INT3 16 ; Invalid argument count trap ; 2D7: CC10 INT3 16 ; Invalid argument count trap ; 2D9: CC10 INT3 16 ; Invalid argument count trap ; 2DB: CC10 INT3 16 ; Invalid argument count trap ; 2DD: CC10 INT3 16 ; Invalid argument count trap ; 2DF: CC10 INT3 16 ; Invalid argument count trap ; 2E1: CC10 INT3 16 ; Invalid argument count trap ; 2E3: CC10 INT3 16 ; Invalid argument count trap ; 2E5: CC10 INT3 16 ; Invalid argument count trap ; 2E7: CC10 INT3 16 ; Invalid argument count trap ; 2E9: CC10 INT3 16 ; Invalid argument count trap ; 2EB: CC10 INT3 16 ; Invalid argument count trap ; 2ED: CC10 INT3 16 ; Invalid argument count trap ; 2EF: CC10 INT3 16 ; Invalid argument count trap ; 2F1: CC10 INT3 16 ; Invalid argument count trap ; 2F3: CC10 INT3 16 ; Invalid argument count trap ; 2F5: CC10 INT3 16 ; Invalid argument count trap ; 2F7: CC10 INT3 16 ; Invalid argument count trap ; 2F9: CC10 INT3 16 ; Invalid argument count trap ; 2FB: CC10 INT3 16 ; Invalid argument count trap ; 2FD: CC10 INT3 16 ; Invalid argument count trap ; 2FF: CC10 INT3 16 ; Invalid argument count trap ; 301: CC10 INT3 16 ; Invalid argument count trap ; 303: CC10 INT3 16 ; Invalid argument count trap ; 305: CC10 INT3 16 ; Invalid argument count trap ; 307: CC10 INT3 16 ; Invalid argument count trap ; 309: CC10 INT3 16 ; Invalid argument count trap ; 30B: CC10 INT3 16 ; Invalid argument count trap ; 30D: CC10 INT3 16 ; Invalid argument count trap ; 30F: CC10 INT3 16 ; Invalid argument count trap ; 311: CC10 INT3 16 ; Invalid argument count trap ; 313: CC10 INT3 16 ; Invalid argument count trap ; 315: CC10 INT3 16 ; Invalid argument count trap ; 317: CC10 INT3 16 ; Invalid argument count trap ; 319: CC10 INT3 16 ; Invalid argument count trap ; 31B: CC10 INT3 16 ; Invalid argument count trap ; 31D: CC10 INT3 16 ; Invalid argument count trap ; 31F: CC10 INT3 16 ; Invalid argument count trap ; 321: CC10 INT3 16 ; Invalid argument count trap ; 323: CC10 INT3 16 ; Invalid argument count trap ; 325: CC10 INT3 16 ; Invalid argument count trap ; 327: CC10 INT3 16 ; Invalid argument count trap ; 329: CC10 INT3 16 ; Invalid argument count trap ; 32B: CC10 INT3 16 ; Invalid argument count trap ; 32D: CC10 INT3 16 ; Invalid argument count trap ; 32F: CC10 INT3 16 ; Invalid argument count trap ; 331: CC10 INT3 16 ; Invalid argument count trap ; 333: CC10 INT3 16 ; Invalid argument count trap ; 335: CC10 INT3 16 ; Invalid argument count trap ; 337: CC10 INT3 16 ; Invalid argument count trap ; 339: CC10 INT3 16 ; Invalid argument count trap ; 33B: CC10 INT3 16 ; Invalid argument count trap ; 33D: CC10 INT3 16 ; Invalid argument count trap ; 33F: CC10 INT3 16 ; Invalid argument count trap ; 341: CC10 INT3 16 ; Invalid argument count trap ; 343: CC10 INT3 16 ; Invalid argument count trap ; 345: CC10 INT3 16 ; Invalid argument count trap ; 347: CC10 INT3 16 ; Invalid argument count trap ; 349: CC10 INT3 16 ; Invalid argument count trap ; 34B: CC10 INT3 16 ; Invalid argument count trap ; 34D: CC10 INT3 16 ; Invalid argument count trap ; 34F: CC10 INT3 16 ; Invalid argument count trap ; 351: CC10 INT3 16 ; Invalid argument count trap ; 353: CC10 INT3 16 ; Invalid argument count trap ; 355: CC10 INT3 16 ; Invalid argument count trap ; 357: CC10 INT3 16 ; Invalid argument count trap ; 359: CC10 INT3 16 ; Invalid argument count trap ; 35B: CC10 INT3 16 ; Invalid argument count trap ; 35D: CC10 INT3 16 ; Invalid argument count trap ; 35F: CC10 INT3 16 ; Invalid argument count trap ; 361: CC10 INT3 16 ; Invalid argument count trap ; 363: CC10 INT3 16 ; Invalid argument count trap ; 365: CC10 INT3 16 ; Invalid argument count trap ; 367: CC10 INT3 16 ; Invalid argument count trap ; 369: CC10 INT3 16 ; Invalid argument count trap ; 36B: CC10 INT3 16 ; Invalid argument count trap ; 36D: CC10 INT3 16 ; Invalid argument count trap ; 36F: CC10 INT3 16 ; Invalid argument count trap ; 371: CC10 INT3 16 ; Invalid argument count trap ; 373: CC10 INT3 16 ; Invalid argument count trap ; 375: CC10 INT3 16 ; Invalid argument count trap ; 377: CC10 INT3 16 ; Invalid argument count trap ; 379: CC10 INT3 16 ; Invalid argument count trap ; 37B: CC10 INT3 16 ; Invalid argument count trap ; 37D: CC10 INT3 16 ; Invalid argument count trap ; 37F: CC10 INT3 16 ; Invalid argument count trap ; 381: CC10 INT3 16 ; Invalid argument count trap ; 383: CC10 INT3 16 ; Invalid argument count trap ; 385: CC10 INT3 16 ; Invalid argument count trap ; 387: CC10 INT3 16 ; Invalid argument count trap ; 389: CC10 INT3 16 ; Invalid argument count trap ; 38B: CC10 INT3 16 ; Invalid argument count trap ; 38D: CC10 INT3 16 ; Invalid argument count trap ; 38F: CC10 INT3 16 ; Invalid argument count trap ; 391: CC10 INT3 16 ; Invalid argument count trap ; 393: CC10 INT3 16 ; Invalid argument count trap ; 395: CC10 INT3 16 ; Invalid argument count trap ; 397: CC10 INT3 16 ; Invalid argument count trap ; 399: CC10 INT3 16 ; Invalid argument count trap ; 39B: CC10 INT3 16 ; Invalid argument count trap ; 39D: CC10 INT3 16 ; Invalid argument count trap ; 39F: CC10 INT3 16 ; Invalid argument count trap NIL