prefer-suffix)
all-names)))
- (define (skip? s)
- (or
- ;; Skip double variants if we have a float variant.
- ;; (http://www.opengl.org/wiki/Common_Mistakes#GL_DOUBLE).
- (redundant-variant? s "d" "f")
-
- ;; Skip byte variants if there is a short variant.
- (redundant-variant? s "b" "s")
-
- ;; Skip short variants if there is an int variant.
- (redundant-variant? s "s" "i")
-
- ;; Skip packed setters like glVertex3fv if e.g. glVertex3f exists.
- (redundant-variant? s "v" "")
- (redundant-variant? s "dv" "fv")
- (redundant-variant? s "bv" "sv")
- (redundant-variant? s "sv" "iv")))
-
(filter-map
(lambda (sxml)
(match sxml
- (('funcprototype ('funcdef return-type ('function (? skip?)))
- . _)
- #f)
(('funcprototype ('funcdef return-type ('function name))
('paramdef ('parameter "void")))
`(,(string->symbol name)
(expansion valid-directions))
(let ((direction (string->symbol str)))
(cond
- ((eq? direction '*)
+ ((and (eq? direction '*) expansion)
expansion)
- ((memq direction expansion)
+ ((memq direction valid-directions)
(list direction))
(else
(error "unknown direction" str)))))
(expansion valid-transfer-types))
(let ((trans (string->symbol str)))
(cond
- ((eq? trans '*)
+ ((and (eq? trans '*) expansion)
expansion)
- ((memq trans expansion)
+ ((memq trans valid-transfer-types)
(list trans))
(else
(error "unknown transfer-type" str)))))