commit 2de609c523da5a9bf17c08e94d0f14a520387e61
parent 411c386bb189ab5924d81951ef03bf8438c71bc5
Author: Georges Dupéron <georges.duperon@gmail.com>
Date: Fri, 20 Jan 2017 00:28:47 +0100
Closes FB case 167 Catch the errors when first calling compute-graph-info. If there are any, parameterize check-remembered-node! to not lift errors
Diffstat:
4 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/graph-info.hl.rkt b/graph-info.hl.rkt
@@ -139,7 +139,7 @@ return the corresponding node can be written based on it.
@chunk[<node-info>
(struct+/contract node-info
- ([predicate? identifier?] ;; (expr/τ (→ Any Boolean : ?))
+ ([predicate? identifier?]
[field-order (listof identifier?)]
[fields (hash/c symbol? field-info? #:immutable #t)]
[promise-type stx-type/c]
diff --git a/graph-type.hl.rkt b/graph-type.hl.rkt
@@ -25,12 +25,14 @@
{~seq #:invariant a {~and op {~or ∈ ∋ ≡ ≢ ∉}} b} …
{~seq #:invariant p} …))))
- (define-for-syntax compute-graph-info
- (syntax-parser
- [:signature <graph-info>]))
+ (define-for-syntax (compute-graph-info stx)
+ (parameterize ([disable-remember-immediate-error #t])
+ (syntax-parse stx
+ [:signature
+ <graph-info>])))
(define-syntax/parse (define-graph-type . whole:signature)
- ;; fire off the eventual errors within macro-expansion.
- (compute-graph-info #'whole)
+ ;; fire off the eventual delayed errors added by compute-graph-info
+ (lift-maybe-delayed-errors)
#`(begin
(define-syntax whole.name
(compute-graph-info (quote-syntax whole)))))]
@@ -86,6 +88,7 @@
@chunk[<*>
(require racket/require
phc-toolkit
+ remember
(lib "phc-adt/tagged-structure-low-level.hl.rkt")
(for-syntax "graph-info.hl.rkt"
phc-toolkit/untyped
diff --git a/info.rkt b/info.rkt
@@ -13,7 +13,8 @@
"backport-template-pr1514"
"typed-map"
"scribble-lib"
- "pconvert-lib"))
+ "pconvert-lib"
+ "remember"))
(define build-deps '("scribble-lib"
"racket-doc"
"remember"
diff --git a/test/adt-pre-declarations.rkt b/test/adt-pre-declarations.rkt
@@ -14,3 +14,4 @@
(remembered! tagged-structure (| Street-incomplete| houses name))
(remembered! tagged-structure (| House-incomplete| owner))
(remembered! tagged-structure (| Person-incomplete| name))
+(remembered! tagged-structure (City name))