diff --git a/xenomorph/xenomorph/array.rkt b/xenomorph/xenomorph/array.rkt index fc6ed9b8..2d8ec25b 100644 --- a/xenomorph/xenomorph/array.rkt +++ b/xenomorph/xenomorph/array.rkt @@ -99,7 +99,7 @@ https://github.com/mbutterick/restructure/blob/master/src/Array.coffee (define (x:array? x) (is-a? x x:array%)) (module+ test - (require rackunit "generic.rkt") + (require rackunit "base.rkt") (check-equal? (decode (x:array uint16be 3) #"ABCDEF") '(16706 17220 17734)) (check-equal? (encode (x:array uint16be 3) '(16706 17220 17734) #f) #"ABCDEF") (check-equal? (size (x:array uint16be) '(1 2 3)) 6) diff --git a/xenomorph/xenomorph/base.rkt b/xenomorph/xenomorph/base.rkt index 3e7c9dd1..2637089d 100644 --- a/xenomorph/xenomorph/base.rkt +++ b/xenomorph/xenomorph/base.rkt @@ -1,7 +1,5 @@ #lang racket/base -(require racket/private/generic-methods - racket/class - "generic.rkt") +(require racket/class) (provide (all-defined-out)) (struct x:ptr (type val parent) #:transparent) @@ -30,29 +28,25 @@ (file-position p new-pos)) (file-position p)) -(define xenomorphic<%> - (interface* () - ([(generic-property gen:xenomorphic) - (generic-method-table - gen:xenomorphic - (define (decode xo [port-arg (current-input-port)] #:parent [parent #f]) - (define port - (cond - [(input-port? port-arg) port-arg] - [(bytes? port-arg) (open-input-bytes port-arg)] - [else (raise-argument-error 'decode "byte string or input port" port-arg)])) - (send xo decode port parent)) +(define (decode xo [port-arg (current-input-port)] #:parent [parent #f]) + (define port + (cond + [(input-port? port-arg) port-arg] + [(bytes? port-arg) (open-input-bytes port-arg)] + [else (raise-argument-error 'decode "byte string or input port" port-arg)])) + (send xo decode port parent)) - (define (encode xo val [port-arg (current-output-port)] - #:parent [parent #f]) - (define port (if (output-port? port-arg) port-arg (open-output-bytes))) - (send xo x:encode val port parent) - (unless port-arg (get-output-bytes port))) +(define (encode xo val [port-arg (current-output-port)] + #:parent [parent #f]) + (define port (if (output-port? port-arg) port-arg (open-output-bytes))) + (send xo x:encode val port parent) + (unless port-arg (get-output-bytes port))) - (define (size xo [val #f] #:parent [parent #f]) - (send xo x:size val parent)))]))) +(define (size xo [val #f] #:parent [parent #f]) + (send xo x:size val parent)) (define (xenomorphic-type? x) (is-a? x xenobase%)) +(define xenomorphic? xenomorphic-type?) (define-syntax-rule (generate-subclass CLASS PRE-ENCODE-PROC POST-DECODE-PROC) (cond @@ -72,7 +66,7 @@ [else CLASS])) (define xenobase% - (class* object% (xenomorphic<%>) + (class object% (super-new) (define/pubment (x:decode input-port [parent #f]) diff --git a/xenomorph/xenomorph/bitfield.rkt b/xenomorph/xenomorph/bitfield.rkt index 37482358..5cdaf169 100644 --- a/xenomorph/xenomorph/bitfield.rkt +++ b/xenomorph/xenomorph/bitfield.rkt @@ -41,7 +41,7 @@ https://github.com/mbutterick/restructure/blob/master/src/Bitfield.coffee (new (generate-subclass x:bitfield% pre-proc post-proc) [type type] [flags flags])) (module+ test - (require rackunit "number.rkt" "generic.rkt") + (require rackunit "number.rkt" "base.rkt") (define bfer (x:bitfield uint16be '(bold italic underline #f shadow condensed extended))) (define bf (decode bfer #"\0\25")) (check-equal? (length (hash-keys bf)) 6) ; omits #f flag diff --git a/xenomorph/xenomorph/generic.rkt b/xenomorph/xenomorph/generic.rkt deleted file mode 100644 index b5f07efa..00000000 --- a/xenomorph/xenomorph/generic.rkt +++ /dev/null @@ -1,8 +0,0 @@ -#lang racket/base -(require racket/generic) -(provide (all-defined-out)) - -(define-generics xenomorphic - (encode xenomorphic val [port] #:parent [parent]) - (decode xenomorphic [port] #:parent [parent]) - (size xenomorphic [item] #:parent [parent])) \ No newline at end of file diff --git a/xenomorph/xenomorph/lazy-array.rkt b/xenomorph/xenomorph/lazy-array.rkt index 8c2b463e..63c49371 100644 --- a/xenomorph/xenomorph/lazy-array.rkt +++ b/xenomorph/xenomorph/lazy-array.rkt @@ -50,7 +50,7 @@ https://github.com/mbutterick/restructure/blob/master/src/LazyArray.coffee [count-bytes? #false])) (module+ test - (require rackunit "number.rkt" "generic.rkt") + (require rackunit "number.rkt" "base.rkt") (define bstr #"ABCD1234") (define ds (open-input-bytes bstr)) (define la (x:lazy-array uint8 4)) diff --git a/xenomorph/xenomorph/main.rkt b/xenomorph/xenomorph/main.rkt index 18e847da..97af378b 100644 --- a/xenomorph/xenomorph/main.rkt +++ b/xenomorph/xenomorph/main.rkt @@ -8,7 +8,6 @@ "bitfield.rkt" "buffer.rkt" "enum.rkt" - "generic.rkt" "base.rkt" "lazy-array.rkt" "number.rkt" diff --git a/xenomorph/xenomorph/number.rkt b/xenomorph/xenomorph/number.rkt index 75b4192e..33a676ab 100644 --- a/xenomorph/xenomorph/number.rkt +++ b/xenomorph/xenomorph/number.rkt @@ -103,7 +103,7 @@ https://github.com/mbutterick/restructure/blob/master/src/Number.coffee (define uint32le (x:int 4 #:signed #f #:endian 'le)) (module+ test - (require rackunit "generic.rkt") + (require rackunit "base.rkt") (check-exn exn:fail:contract? (λ () (x:int 'not-a-valid-type))) (check-exn exn:fail:contract? (λ () (encode uint8 256 #f))) (check-not-exn (λ () (encode uint8 255 #f))) diff --git a/xenomorph/xenomorph/string.rkt b/xenomorph/xenomorph/string.rkt index 65db8122..3a5f5983 100644 --- a/xenomorph/xenomorph/string.rkt +++ b/xenomorph/xenomorph/string.rkt @@ -111,7 +111,7 @@ https://github.com/mbutterick/restructure/blob/master/src/String.coffee (new (generate-subclass x:symbol% pre-proc post-proc) [len len] [encoding encoding])) (module+ test - (require rackunit "generic.rkt") + (require rackunit "base.rkt") (define S-fixed (x:string 4 'utf8)) (check-equal? (encode S-fixed "Mike" #f) #"Mike") (check-exn exn:fail? (λ () (encode S-fixed "Mikes" #f))) ; too long for fixed string diff --git a/xenomorph/xenomorph/struct.rkt b/xenomorph/xenomorph/struct.rkt index 216c0343..18a97aca 100644 --- a/xenomorph/xenomorph/struct.rkt +++ b/xenomorph/xenomorph/struct.rkt @@ -102,7 +102,7 @@ https://github.com/mbutterick/restructure/blob/master/src/Struct.coffee (new (generate-subclass x:struct% pre-proc post-proc) [fields fields])) (module+ test - (require rackunit "number.rkt" "generic.rkt") + (require rackunit "number.rkt" "base.rkt") (define (random-pick xs) (list-ref xs (random (length xs)))) (check-exn exn:fail:contract? (λ () (x:struct 42))) (for ([i (in-range 20)]) diff --git a/xenomorph/xenomorph/test/array-test.rkt b/xenomorph/xenomorph/test/array-test.rkt index 41767017..9265b967 100644 --- a/xenomorph/xenomorph/test/array-test.rkt +++ b/xenomorph/xenomorph/test/array-test.rkt @@ -4,7 +4,6 @@ "../array.rkt" "../number.rkt" "../pointer.rkt" - "../generic.rkt" "../base.rkt" sugar/unstable/dict) diff --git a/xenomorph/xenomorph/test/bitfield-test.rkt b/xenomorph/xenomorph/test/bitfield-test.rkt index bf56fc4f..1c01b065 100644 --- a/xenomorph/xenomorph/test/bitfield-test.rkt +++ b/xenomorph/xenomorph/test/bitfield-test.rkt @@ -6,7 +6,7 @@ sugar/unstable/dict "../number.rkt" "../bitfield.rkt" - "../generic.rkt") + "../base.rkt") #| approximates diff --git a/xenomorph/xenomorph/test/buffer-test.rkt b/xenomorph/xenomorph/test/buffer-test.rkt index 160831a8..694c0f32 100644 --- a/xenomorph/xenomorph/test/buffer-test.rkt +++ b/xenomorph/xenomorph/test/buffer-test.rkt @@ -3,7 +3,7 @@ racket/class "../buffer.rkt" "../number.rkt" - "../generic.rkt") + "../base.rkt") #| approximates diff --git a/xenomorph/xenomorph/test/enum-test.rkt b/xenomorph/xenomorph/test/enum-test.rkt index 6e0c27a3..686ee8cd 100644 --- a/xenomorph/xenomorph/test/enum-test.rkt +++ b/xenomorph/xenomorph/test/enum-test.rkt @@ -3,7 +3,7 @@ racket/class "../number.rkt" "../enum.rkt" - "../generic.rkt") + "../base.rkt") #| approximates diff --git a/xenomorph/xenomorph/test/lazy-array-test.rkt b/xenomorph/xenomorph/test/lazy-array-test.rkt index 52c7fc7d..f5c8ecb6 100644 --- a/xenomorph/xenomorph/test/lazy-array-test.rkt +++ b/xenomorph/xenomorph/test/lazy-array-test.rkt @@ -6,7 +6,7 @@ "../base.rkt" "../number.rkt" "../lazy-array.rkt" - "../generic.rkt") + "../base.rkt") #| approximates diff --git a/xenomorph/xenomorph/test/number-test.rkt b/xenomorph/xenomorph/test/number-test.rkt index 9949b5e4..314440c0 100644 --- a/xenomorph/xenomorph/test/number-test.rkt +++ b/xenomorph/xenomorph/test/number-test.rkt @@ -2,7 +2,7 @@ (require rackunit racket/class "../number.rkt" - "../generic.rkt") + "../base.rkt") #| approximates diff --git a/xenomorph/xenomorph/test/optional-test.rkt b/xenomorph/xenomorph/test/optional-test.rkt index abeb81ca..97433938 100644 --- a/xenomorph/xenomorph/test/optional-test.rkt +++ b/xenomorph/xenomorph/test/optional-test.rkt @@ -4,7 +4,7 @@ "../base.rkt" "../number.rkt" "../optional.rkt" - "../generic.rkt") + "../base.rkt") #| approximates diff --git a/xenomorph/xenomorph/test/pointer-test.rkt b/xenomorph/xenomorph/test/pointer-test.rkt index d71ced8f..54f97b18 100644 --- a/xenomorph/xenomorph/test/pointer-test.rkt +++ b/xenomorph/xenomorph/test/pointer-test.rkt @@ -6,7 +6,7 @@ "../pointer.rkt" "../number.rkt" "../struct.rkt" - "../generic.rkt" + "../base.rkt" racket/promise sugar/unstable/dict) diff --git a/xenomorph/xenomorph/test/reserved-test.rkt b/xenomorph/xenomorph/test/reserved-test.rkt index dfa95d19..27b07141 100644 --- a/xenomorph/xenomorph/test/reserved-test.rkt +++ b/xenomorph/xenomorph/test/reserved-test.rkt @@ -4,7 +4,7 @@ "../number.rkt" "../base.rkt" "../reserved.rkt" - "../generic.rkt") + "../base.rkt") #| approximates diff --git a/xenomorph/xenomorph/test/string-test.rkt b/xenomorph/xenomorph/test/string-test.rkt index 67c2951d..fc18e332 100644 --- a/xenomorph/xenomorph/test/string-test.rkt +++ b/xenomorph/xenomorph/test/string-test.rkt @@ -4,7 +4,7 @@ "../base.rkt" "../string.rkt" "../number.rkt" - "../generic.rkt" + "../base.rkt" sugar/unstable/dict) #| diff --git a/xenomorph/xenomorph/test/struct-test.rkt b/xenomorph/xenomorph/test/struct-test.rkt index 294ea2dc..8538f154 100644 --- a/xenomorph/xenomorph/test/struct-test.rkt +++ b/xenomorph/xenomorph/test/struct-test.rkt @@ -6,7 +6,7 @@ "../string.rkt" "../pointer.rkt" "../number.rkt" - "../generic.rkt" + "../base.rkt" sugar/unstable/dict) #| diff --git a/xenomorph/xenomorph/test/versioned-struct-test.rkt b/xenomorph/xenomorph/test/versioned-struct-test.rkt index 1a3a66f1..e068fba2 100644 --- a/xenomorph/xenomorph/test/versioned-struct-test.rkt +++ b/xenomorph/xenomorph/test/versioned-struct-test.rkt @@ -7,7 +7,7 @@ "../string.rkt" "../pointer.rkt" "../struct.rkt" - "../generic.rkt" + "../base.rkt" "../versioned-struct.rkt") #| diff --git a/xenomorph/xenomorph/util.rkt b/xenomorph/xenomorph/util.rkt index 28faaace..79690330 100644 --- a/xenomorph/xenomorph/util.rkt +++ b/xenomorph/xenomorph/util.rkt @@ -1,5 +1,5 @@ #lang racket/base -(require racket/match racket/dict "number.rkt" "base.rkt" "generic.rkt") +(require racket/match racket/dict "number.rkt" "base.rkt") (provide (all-defined-out)) (define (length-resolvable? x)