From a26670c009ae6c3aeb294454098fb1065d15b091 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Mon, 29 Oct 2018 17:12:58 -0700 Subject: [PATCH] split-metas --- pollen/private/split-metas.rkt | 24 +++++++++++++----------- pollen/private/ts.rktd | 2 +- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/pollen/private/split-metas.rkt b/pollen/private/split-metas.rkt index fc9df35..336f249 100644 --- a/pollen/private/split-metas.rkt +++ b/pollen/private/split-metas.rkt @@ -1,18 +1,20 @@ -#lang racket/base +#lang debug racket/base +(require racket/match + racket/list) (provide (all-defined-out)) (define (split-metas x meta-key) (apply hasheq - (let loop ([x (if (syntax? x) (syntax->datum x) x)]) - (cond - [(list? x) (cond - [(and (= (length x) 3) (eq? (car x) meta-key)) - (unless (symbol? (cadr x)) - (raise-argument-error 'define-meta "valid meta key" (cadr x))) - (cdr x)] ; list with meta key and meta value - [else (apply append (map loop x))])] - [else null])))) - + (let loop ([x ((if (syntax? x) syntax->datum values) x)]) + (match x + [(? list? xs) + (match xs + [(list (== meta-key eq?) key val) + (unless (symbol? key) + (raise-argument-error 'define-meta "valid meta key" key)) + (list key val)] + [_ (append-map loop xs)])] + [_ null])))) (module+ test (require rackunit) diff --git a/pollen/private/ts.rktd b/pollen/private/ts.rktd index d1e24ec..2755309 100644 --- a/pollen/private/ts.rktd +++ b/pollen/private/ts.rktd @@ -1 +1 @@ -1540858374 +1540858378