From 83f6f11496a236c2ff0a436f01599cc61eeec452 Mon Sep 17 00:00:00 2001 From: Asumu Takikawa Date: Thu, 12 May 2016 18:23:38 -0400 Subject: [PATCH] Fix syntax depth calculation --- cover/strace.rkt | 12 +++++++----- cover/tests/bfs+define-syntax.rkt | 6 ++++++ cover/tests/do-bfs+module.rkt | 1 + 3 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 cover/tests/bfs+define-syntax.rkt diff --git a/cover/strace.rkt b/cover/strace.rkt index 479eb70..5ee5305 100644 --- a/cover/strace.rkt +++ b/cover/strace.rkt @@ -168,19 +168,21 @@ The module implements code coverage annotations as described in cover.rkt ;; Syntax -> Natural ;; Maxiumum depth of begin-for-syntaxes -(define (get-syntax-depth expr) - (kernel-syntax-case - (disarm expr) #f +(define (get-syntax-depth expr [phase 0]) + (kernel-syntax-case/phase + (disarm expr) phase [(module _ _ mb) (get-syntax-depth #'mb)] [(module* _ _ mb) (get-syntax-depth #'mb)] [(begin-for-syntax b ...) - (add1 (apply max 1 (map get-syntax-depth (syntax->list #'(b ...)))))] + (add1 (apply max 1 (for/list ([b (in-list (syntax->list #'(b ...)))]) + (get-syntax-depth b (add1 phase)))))] [(define-syntaxes a ...) 2] [(b ...) - (apply max 1 (map get-syntax-depth (syntax->list #'(b ...))))] + (apply max 1 (for/list ([b (in-list (syntax->list #'(b ...)))]) + (get-syntax-depth b phase)))] [_ 1])) ;; Natural PathString Symbol -> Syntax diff --git a/cover/tests/bfs+define-syntax.rkt b/cover/tests/bfs+define-syntax.rkt new file mode 100644 index 0000000..0258536 --- /dev/null +++ b/cover/tests/bfs+define-syntax.rkt @@ -0,0 +1,6 @@ +#lang racket/base + +(require (for-meta 1 racket/base) + (for-meta 2 racket/base)) + +(begin-for-syntax (define-syntax x #f)) diff --git a/cover/tests/do-bfs+module.rkt b/cover/tests/do-bfs+module.rkt index 3b58ffb..7ed46bb 100644 --- a/cover/tests/do-bfs+module.rkt +++ b/cover/tests/do-bfs+module.rkt @@ -6,6 +6,7 @@ (define-runtime-path-list others (list "bfs+module-nolex.rkt" "bfs+module.rkt" + "bfs+define-syntax.rkt" "lazy-require.rkt")) (test-case "begin-for-syntax with modules should be okay"