resume in require transformer for Not2
parent
8f434331c1
commit
fd4297ddc8
@ -0,0 +1,11 @@
|
||||
#lang br
|
||||
(provide (prefix-out Fanout- (all-defined-out)))
|
||||
(require "helper.rkt")
|
||||
(define in (make-input))
|
||||
|
||||
|
||||
(define (outa)
|
||||
(in))
|
||||
|
||||
(define (outb)
|
||||
(in))
|
@ -0,0 +1,35 @@
|
||||
#lang racket/base
|
||||
(require (for-syntax racket/base racket/syntax "helper.rkt" racket/list))
|
||||
(provide (all-defined-out))
|
||||
|
||||
|
||||
(define-syntax (handle-require stx)
|
||||
(syntax-case stx ()
|
||||
[(_ prefix [suffix arg] ...)
|
||||
(with-syntax ([(prefix-suffix ...) (map (λ(s) (format-id s "~a-~a" #'prefix s)) (syntax->list #'(suffix ...)))]
|
||||
[module-name (format "~a.hdl.rkt" (syntax->datum #'prefix))])
|
||||
#'(begin
|
||||
(local-require module-name (for-syntax module-name))
|
||||
(handle-wires [prefix-suffix arg] ...)))]))
|
||||
|
||||
|
||||
(define-syntax (handle-part stx)
|
||||
(syntax-case stx ()
|
||||
[(_ prefix [suffix arg] ...)
|
||||
(with-syntax ([(prefix-suffix ...) (map (λ(s) (format-id s "~a-~a" #'prefix s)) (syntax->list #'(suffix ...)))]
|
||||
[module-name (format "~a.hdl.rkt" (syntax->datum #'prefix))])
|
||||
#'(begin
|
||||
(require module-name (for-syntax module-name))
|
||||
(handle-wires [prefix-suffix arg] ...)))]))
|
||||
|
||||
|
||||
(define-syntax (handle-wires stx)
|
||||
(syntax-case stx ()
|
||||
[(_ [wire arg] ...)
|
||||
(let ()
|
||||
(define-values (in-wires out-wires) (partition (λ(stx) (let ([wire (car (syntax->list stx))])
|
||||
(input-wire? (syntax-local-eval wire)))) (syntax->list #'([wire arg] ...))))
|
||||
(with-syntax ([([in-wire in-arg] ...) in-wires]
|
||||
[([out-wire out-arg] ...) out-wires])
|
||||
#'(begin
|
||||
(define out-arg (λ () (in-wire (in-arg)) ... (out-wire))) ...)))]))
|
@ -0,0 +1,21 @@
|
||||
#lang racket/base
|
||||
(provide (all-defined-out))
|
||||
|
||||
(define-values (input-wire input-wire? input-wire-get)
|
||||
(make-impersonator-property 'input-wire))
|
||||
|
||||
(define (make-input)
|
||||
(impersonate-procedure
|
||||
(let ([val #f])
|
||||
(λ ([arg #f])
|
||||
(if arg
|
||||
(set! val arg)
|
||||
val)))
|
||||
#f input-wire #t))
|
||||
|
||||
(module+ test
|
||||
(require rackunit)
|
||||
(define in-wire (make-input))
|
||||
(define other (λ () (+ 2 2)))
|
||||
(check-true (input-wire? in-wire))
|
||||
(check-false (input-wire? other)))
|
Loading…
Reference in New Issue