From dd7aa58359e45497e7ff0d5aa646d8db5dfe0aae Mon Sep 17 00:00:00 2001 From: Jay McCarthy Date: Thu, 4 Jan 2018 16:48:07 -0500 Subject: [PATCH] pull out --- buffer.rkt | 2 +- info.rkt | 1 + lux-chaos.rkt | 2 +- struct-define.rkt | 53 ----------------------------------------------- 4 files changed, 3 insertions(+), 55 deletions(-) delete mode 100644 struct-define.rkt diff --git a/buffer.rkt b/buffer.rkt index 63f0659..1664601 100644 --- a/buffer.rkt +++ b/buffer.rkt @@ -3,7 +3,7 @@ racket/match racket/contract/base (prefix-in A: ansi) - "struct-define.rkt") + struct-define) (define-generics buffer (buffer-resize! buffer rows cols) diff --git a/info.rkt b/info.rkt index 6212f2f..4b88621 100644 --- a/info.rkt +++ b/info.rkt @@ -2,6 +2,7 @@ (define collection "raart") (define deps '("reprovide-lang" "ansi" + "struct-define" "base")) (define build-deps '()) (define version "0.1") diff --git a/lux-chaos.rkt b/lux-chaos.rkt index b29c65b..66a6779 100644 --- a/lux-chaos.rkt +++ b/lux-chaos.rkt @@ -10,7 +10,7 @@ lux/chaos raart/draw raart/buffer - "struct-define.rkt") + struct-define) (provide (all-from-out (submod ansi/lcd-terminal event-structs))) (struct term (f in out)) diff --git a/struct-define.rkt b/struct-define.rkt deleted file mode 100644 index 3ac78ff..0000000 --- a/struct-define.rkt +++ /dev/null @@ -1,53 +0,0 @@ -#lang racket/base -(require (for-syntax racket/base - racket/struct-info - syntax/parse)) - -(begin-for-syntax - (define (make-field-name-transformer instace-id-stx field-ref-stx field-set!-stx) - (make-set!-transformer - (lambda (stx) - (syntax-case stx (set!) - [(set! id v) - (if (syntax->datum field-set!-stx) - (quasisyntax/loc stx - (#,field-set!-stx #,instace-id-stx v)) - (raise-syntax-error 'set! "field not mutable" stx #'id))] - [id (identifier? #'id) - (quasisyntax/loc stx - (#,field-ref-stx #,instace-id-stx))]))))) - -(define-syntax (struct-define stx) - (syntax-parse stx - [(_ the-struct the-instance:expr) - #:declare the-struct - (static struct-info? "structure type transformer binding") - #:do [(define struct+-len - (add1 (string-length (symbol->string (syntax->datum #'the-struct))))) - (define si (extract-struct-info (attribute the-struct.value)))] - #:with ([field-name field-ref field-set!] ...) - (for/list ([field-ref (in-list (list-ref si 3))] - [field-set (in-list (list-ref si 4))]) - (define field-ref-s - (symbol->string (syntax->datum field-ref))) - (define field-name-s - (substring field-ref-s struct+-len)) - (define field-name - (datum->syntax #'the-instance (string->symbol field-name-s))) - (list field-name field-ref field-set)) - #:with (field-val-id ...) - (generate-temporaries #'(field-name ...)) - - (syntax/loc stx - (begin (define the-instance-id the-instance) - (define-syntax field-name - (make-field-name-transformer #'the-instance-id - #'field-ref #'field-set!)) - ...))])) - -(define-syntax-rule (define-struct-define the-struct the-struct-define) - (define-syntax-rule (the-struct-define instance-id) - (struct-define the-struct instance-id))) - -(provide struct-define - define-struct-define)