c-primop.scm 718 B

1234567891011121314151617181920212223242526272829303132
  1. ; Part of Scheme 48 1.9. See file COPYING for notices and license.
  2. ; Authors: Richard Kelsey
  3. ; Code generation for primops.
  4. (define-record-type c-primop :c-primop
  5. (make-c-primop simple? generate)
  6. c-primop?
  7. (simple? c-primop-simple?)
  8. (generate c-primop-generate))
  9. (define (simple-c-primop? primop)
  10. (c-primop-simple? (primop-code-data primop)))
  11. (define (primop-generate-c primop call port indent)
  12. ((c-primop-generate (primop-code-data primop))
  13. call port indent))
  14. (define-syntax define-c-generator
  15. (lambda (exp r$ c$)
  16. (destructure (((ignore id simple? generate) exp))
  17. `(set-primop-code-data!
  18. (,(r$ 'get-prescheme-primop) ',id)
  19. (,(r$ 'make-c-primop)
  20. ,simple?
  21. ,generate
  22. )))))