(define-syntax construct (er-macro-transformer (lambda (form rename compare?) (let* ((superclass (second form)) (class (third form)) (args (drop form 3)) (classname (string->symbol (string-append "<" (symbol->string class) ">")))) `(begin (define-class ,classname (,superclass)) (define-method (initialize-instance (c ,classname)) ((setter ptr) c (#~,class ,@(map (lambda (x) `(alist-ref ,x (attributes c))) args) return: pointer:)) (call-next-method)))))))