Skip to content

Commit bb8ef64

Browse files
committed
improve render-judgment-form and judgment-form->pict so they don't need to see the judgment form at compile time (ie, make them functions)
1 parent 5f7acb6 commit bb8ef64

File tree

4 files changed

+46
-39
lines changed

4 files changed

+46
-39
lines changed

redex-doc/redex/scribblings/ref/typesetting.scrbl

+3-4
Original file line numberDiff line numberDiff line change
@@ -369,8 +369,7 @@ This function sets @racket[dc-for-text-size]. See also
369369
@racket[relation->pict].
370370
}
371371

372-
@defform*[[(render-judgment-form judgment-form-name)
373-
(render-judgment-form judgment-form-name filename)]]{
372+
@defproc[(render-judgment-form [judgment-form judgment-form?] [filename (or/c path-string? #f)]) pict?]{
374373
Like @racket[render-metafunction] but for judgment forms. The
375374
@racket[judgment-form-cases] parameter can be used to control which clauses
376375
are rendered.
@@ -428,8 +427,8 @@ This function sets @racket[dc-for-text-size]. See also
428427
@racketmodname[pict]s.
429428
}
430429

431-
@defform[(judgment-form->pict judgment-form-name)]{
432-
This produces a pict, but without setting @racket[dc-for-text-size].
430+
@defproc[(judgment-form->pict [judgment-form judgment-form?]) pict?]{
431+
Produces a pict like @racket[render-judgment-form], but without setting @racket[dc-for-text-size].
433432
It is suitable for use in Slideshow or other libraries that combine
434433
@racketmodname[pict]s.
435434
}

redex-lib/redex/HISTORY.txt

+6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
v8.17
2+
3+
* render-judgment-form and judgment-form->pict are functions, making
4+
them suitable to abstract over (before, they required their
5+
arguments to be identifiers bound to judgment forms)
6+
17
v8.16
28

39
* bug fixes

redex-lib/redex/private/judgment-form.rkt

+12-4
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@
4545
compiled-output-contract-pat
4646
input-contract-pat
4747
output-contract-pat
48-
rule-names)
48+
rule-names
49+
lws
50+
relation?)
4951
#:methods gen:custom-write
5052
[(define (write-proc rjf port _mode)
5153
(if (runtime-judgment-form-mode rjf)
@@ -68,7 +70,9 @@
6870
original-contract-expression ;; (or/c #f (listof s-exp))
6971
input-contract-pat
7072
output-contract-pat
71-
(rule-names '()))
73+
rule-names
74+
lws
75+
relation?)
7276
(define cache (cons (box (make-hash)) (box (make-hash))))
7377
(make-runtime-judgment-form
7478
name proc mode cache lang
@@ -108,7 +112,9 @@
108112
x
109113
(string->symbol x)))]
110114
[else raw-name]))
111-
rule-names)))
115+
rule-names)
116+
lws
117+
relation?))
112118

113119
(define-for-syntax (prune-syntax stx)
114120
(datum->syntax
@@ -957,7 +963,9 @@
957963
original-contract-expression
958964
judgment-form-input-contract
959965
judgment-form-output-contract
960-
'#,rule-names))
966+
'#,rule-names
967+
jf-lws
968+
#,is-relation?))
961969
(define jf-cache (runtime-judgment-form-cache the-runtime-judgment-form))
962970
(define original-contract-expression-id
963971
(runtime-judgment-form-original-contract-expression the-runtime-judgment-form))

redex-pict-lib/redex/private/pict.rkt

+25-31
Original file line numberDiff line numberDiff line change
@@ -1604,6 +1604,9 @@
16041604
(make-pict))]))
16051605

16061606
(define judgment-form-show-rule-names (make-parameter #t))
1607+
1608+
;; inference-rules-pict : ?? ?? (listof (or/c #f string?)) ?? boolean? -> pict?
1609+
;; eqn-names is expected to be a list of all of the names in the jf/relation, in order
16071610
(define (inference-rules-pict name all-eqns eqn-names lang judgment-form?)
16081611
(define all-nts (language-nts lang))
16091612
(define (wrapper->pict lw) (lw->pict all-nts lw))
@@ -1695,37 +1698,28 @@
16951698
(define horizontal-bar-spacing (make-parameter 4))
16961699
(define relation-clauses-combine (make-parameter (λ (l) (apply vc-append 20 l))))
16971700

1698-
(define-for-syntax (inference-rules-pict/judgment-form form-name)
1699-
(define jf (syntax-local-value form-name))
1700-
(define-values (name lws rule-names lang relation?)
1701-
(values (judgment-form-name jf) (judgment-form-lws jf) (judgment-form-rule-names jf)
1702-
(judgment-form-lang jf) (judgment-form-relation? jf)))
1703-
(syntax-property
1704-
#`(inference-rules-pict '#,name
1705-
#,lws
1706-
'#,rule-names
1707-
#,lang
1708-
#,(not relation?))
1709-
'disappeared-use
1710-
(syntax-local-introduce form-name)))
1711-
1712-
(define-syntax (render-judgment-form stx)
1713-
(syntax-case stx ()
1714-
[(_ form-name . opt-arg)
1715-
(if (judgment-form-id? #'form-name)
1716-
(let ([save-as (syntax-case #'opt-arg ()
1717-
[() #'#f]
1718-
[(path) #'path])])
1719-
#`(render-pict (λ () #,(inference-rules-pict/judgment-form #'form-name))
1720-
#,save-as))
1721-
(raise-syntax-error #f "expected a judgment form name" stx #'form-name))]))
1722-
1723-
(define-syntax (judgment-form->pict stx)
1724-
(syntax-case stx ()
1725-
[(_ form-name)
1726-
(if (judgment-form-id? #'form-name)
1727-
(inference-rules-pict/judgment-form #'form-name)
1728-
(raise-syntax-error #f "expected a judgment form name" stx #'form-name))]))
1701+
(define (inference-rules-pict/judgment-form who jf save-as)
1702+
(unless (runtime-judgment-form? jf)
1703+
(error who "expected a judgment-form\n given: ~e" jf))
1704+
(render-pict
1705+
(λ ()
1706+
(inference-rules-pict (runtime-judgment-form-name jf)
1707+
(runtime-judgment-form-lws jf)
1708+
(for/list ([name (in-list (runtime-judgment-form-rule-names jf))])
1709+
(if (symbol? name)
1710+
(symbol->string name)
1711+
#f))
1712+
(runtime-judgment-form-lang jf)
1713+
(not (runtime-judgment-form-relation? jf))))
1714+
save-as))
1715+
1716+
(define (render-judgment-form jf [path #f])
1717+
(inference-rules-pict/judgment-form 'render-judgment-form
1718+
jf
1719+
path))
1720+
1721+
(define (judgment-form->pict jf)
1722+
(inference-rules-pict/judgment-form 'judgment-form->pict jf #f))
17291723

17301724
;
17311725
;

0 commit comments

Comments
 (0)