From 14b208185cfe8811ac46f11bc69ec62eecdcb623 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 4 Nov 2011 13:37:58 +0100 Subject: [PATCH] resolve-primitives! does not primitivize local definitions * module/language/tree-il/primitives.scm (resolve-primitives!): Don't resolve toplevels defined in the same compilation unit to primitives, as it could be that the module doesn't have those bindings yet. --- module/language/tree-il/primitives.scm | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/module/language/tree-il/primitives.scm b/module/language/tree-il/primitives.scm index 2f03ab7b9..20e04212c 100644 --- a/module/language/tree-il/primitives.scm +++ b/module/language/tree-il/primitives.scm @@ -232,12 +232,25 @@ (hashq-ref *singly-valued-primitive-table* prim)) (define (resolve-primitives! x mod) + (define local-definitions + (make-hash-table)) + + (let collect-local-definitions ((x x)) + (record-case x + (( name) + (hashq-set! local-definitions name #t)) + (( head tail) + (collect-local-definitions head) + (collect-local-definitions tail)) + (else #f))) + (post-order! (lambda (x) (record-case x (( src name) - (and=> (hashq-ref *interesting-primitive-vars* - (module-variable mod name)) + (and=> (and (not (hashq-ref local-definitions name)) + (hashq-ref *interesting-primitive-vars* + (module-variable mod name))) (lambda (name) (make-primitive-ref src name)))) (( src mod name public?) ;; for the moment, we're disabling primitive resolution for