(define-syntax (collect stx) (syntax-case stx (define) [(_ (define id val) rest ...) #'(let ([id val]) (collect rest ...))] [(_ (macro arg ...) rest ...) (syntax-local-value #'macro (lambda () #f)) (let ([expanded (local-expand #'(macro arg ...) 'expression (list #'define))]) (println expanded) #`(collect #,expanded rest ...))] [(_ a rest ...) #'(cons a (collect rest ...))] [(_) #'(list)]))
(define-syntax-rule (my-define stuff ...) (define stuff ...))
(collect 1 2 (define x 3) x 4)
(define-syntax-rule (define-foo) (define/public (foo) (list this 'foo)))
(define my-class% (class* object% () (super-new) (define-foo)))
(define c (new my-class%))(send c foo)