From 87192caa57acc62e7223c45c69e01241becab6a4 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 12 Jan 2018 15:13:52 -0700 Subject: [PATCH] add racket/private/primitive-table Like `racket/private/check`, this module simplifies a "racket7" bootstrap. --- .../racket/private/primitive-table.rkt | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 racket/collects/racket/private/primitive-table.rkt diff --git a/racket/collects/racket/private/primitive-table.rkt b/racket/collects/racket/private/primitive-table.rkt new file mode 100644 index 0000000000..0a0f0592ec --- /dev/null +++ b/racket/collects/racket/private/primitive-table.rkt @@ -0,0 +1,23 @@ +#lang racket/base +(require (only-in '#%linklet primitive-table)) + +;; By using only `primitive-table` directly, that's the only function +;; needed for bootstrapping situations (that might even replace the +;; linklet implementation otherwise). + +(provide import-from-primitive-table) + +(define-syntax import-from-primitive-table + (syntax-rules () + [(_ (table-name ...) [id import-id]) + ;; Linklet-flattening tools can recognize this specific pattern + ;; to substitute a static reference for a dynamic lookup + (define import-id (hash-ref (or (primitive-table 'table-name) ...) 'id #f))] + [(_ table-name [id import-id]) + (import-from-primitive-table (table-name) [id import-id])] + [(_ tables id) + (import-from-primitive-table tables [id id])] + [(_ tables bind ...) + (begin + (import-from-primitive-table tables bind) + ...)]))