You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
typesetting/xenomorph/xenomorph/util.rkt

15 lines
542 B
Racket

6 years ago
#lang racket/base
(require racket/dict "number.rkt" "helper.rkt" "generic.rkt")
6 years ago
(provide (all-defined-out))
(define (length-resolvable? x)
(or (not x) (symbol? x) (xenomorphic? x) (procedure? x) (exact-nonnegative-integer? x)))
(define (resolve-length x port [parent #f])
6 years ago
(cond
[(not x) #f]
[(exact-nonnegative-integer? x) x]
[(procedure? x) (x parent)]
[(and parent (symbol? x)) (dict-ref parent x)]
6 years ago
[(and port (x:int? x)) (decode x port)]
6 years ago
[else (raise-argument-error 'resolve-length "fixed-size argument" x)]))