LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

Как?

(define-for-syntax types (make-hash))

(define-syntax-rule (ctype type var)
   (begin-for-syntax
      (hash-set! types 'var 'type))
   @c{@type @var;})

(define-syntax-rule (macro-print-type var)   
   @c{printf("%s\n", "@(begin-for-syntax (hash-ref types 'var))")})

Для литералов действительно понадобится немножко магии — проверка того, что var — не символ и ручной (через case) выбор правильного типа С.

Исправление monk, :

Как?

(define-for-syntax types (make-hash))

(define-syntax-rule (ctype type var)
   (begin-for-syntax
      (hash-set! types 'var 'type))
   @c{@type @var;})

(define-syntax-rule (macro-print-type var)   
   @c{printf("%s\n", "@(hash-ref types 'var)")})

Для литералов действительно понадобится немножко магии — проверка того, что var — не символ и ручной (через case) выбор правильного типа С.

Исходная версия monk, :

Как?

(define-for-syntax types (make-hash))

(define-syntax-rule (ctype type var)
   (begin-for-syntax
      (hash-set! types var type))
   @c{@type @var;})

(define-syntax-rule (macro-print-type var)   
   @c{printf("%s\n", "@(hash-ref types var)")})