From dbabafa1475d5b17f559eba42d993b05fbe2973c Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 1 Jan 2019 13:14:07 -0700 Subject: [PATCH] cs: support second argument to `primitive-table` The two-argument mode is needed to support building RacketCs using RacketCS. --- racket/src/cs/expander.sls | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/racket/src/cs/expander.sls b/racket/src/cs/expander.sls index ff29d91be9..2f72f48560 100644 --- a/racket/src/cs/expander.sls +++ b/racket/src/cs/expander.sls @@ -44,20 +44,26 @@ ;; The expander needs various tables to set up primitive modules, and ;; the `primitive-table` function is the bridge between worlds - (define (primitive-table key) - (case key - [(|#%linklet|) linklet-table] - [(|#%kernel|) kernel-table] - [(|#%read|) (make-hasheq)] - [(|#%paramz|) paramz-table] - [(|#%unsafe|) unsafe-table] - [(|#%foreign|) foreign-table] - [(|#%futures|) futures-table] - [(|#%place|) place-table] - [(|#%flfxnum|) flfxnum-table] - [(|#%extfl|) extfl-table] - [(|#%network|) network-table] - [else #f])) + (define user-installed-tables (make-hasheq)) + + (define primitive-table + (case-lambda + [(key) + (case key + [(|#%linklet|) linklet-table] + [(|#%kernel|) kernel-table] + [(|#%read|) (make-hasheq)] + [(|#%paramz|) paramz-table] + [(|#%unsafe|) unsafe-table] + [(|#%foreign|) foreign-table] + [(|#%futures|) futures-table] + [(|#%place|) place-table] + [(|#%flfxnum|) flfxnum-table] + [(|#%extfl|) extfl-table] + [(|#%network|) network-table] + [else (hash-ref user-installed-tables key #f)])] + [(key table) + (hash-set! user-installed-tables key table)])) (define-syntax define-primitive-table (syntax-rules ()