mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 11:50:28 +02:00
Delay loading CPS unless CPS compiler used
* module/language/tree-il/spec.scm: Remove #:compilers declaration; instead rely on choose-compiler. (choose-compiler): Load compilers on demand. * module/system/base/compile.scm (find-language-joint): Use next-pass instead of lookup-compilation-order, to avoid loading unused compilers. (read-and-compile): Adapt to find-language-joint change. (compute-compiler): Export. * module/scripts/compile.scm (compile): Use compute-compiler to load compiler modules.
This commit is contained in:
parent
44ad8fbde5
commit
cb8cabe85f
3 changed files with 25 additions and 28 deletions
|
@ -1,6 +1,6 @@
|
||||||
;;; Tree Intermediate Language
|
;;; Tree Intermediate Language
|
||||||
|
|
||||||
;; Copyright (C) 2009, 2010, 2011, 2013, 2015 Free Software Foundation, Inc.
|
;; Copyright (C) 2009-2011,2013,2015,2020 Free Software Foundation, Inc.
|
||||||
|
|
||||||
;;;; This library is free software; you can redistribute it and/or
|
;;;; This library is free software; you can redistribute it and/or
|
||||||
;;;; modify it under the terms of the GNU Lesser General Public
|
;;;; modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -22,8 +22,6 @@
|
||||||
#:use-module (system base language)
|
#:use-module (system base language)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (language tree-il)
|
#:use-module (language tree-il)
|
||||||
#:use-module (language tree-il compile-cps)
|
|
||||||
#:use-module (language tree-il compile-bytecode)
|
|
||||||
#:use-module ((language tree-il analyze) #:select (make-analyzer))
|
#:use-module ((language tree-il analyze) #:select (make-analyzer))
|
||||||
#:use-module ((language tree-il optimize) #:select (make-lowerer))
|
#:use-module ((language tree-il optimize) #:select (make-lowerer))
|
||||||
#:export (tree-il))
|
#:export (tree-il))
|
||||||
|
@ -40,11 +38,13 @@
|
||||||
(_ (error "what!" exps env))))
|
(_ (error "what!" exps env))))
|
||||||
|
|
||||||
(define (choose-compiler target optimization-level opts)
|
(define (choose-compiler target optimization-level opts)
|
||||||
|
(define (load-compiler compiler)
|
||||||
|
(module-ref (resolve-interface `(language tree-il ,compiler)) compiler))
|
||||||
(if (match (memq #:cps? opts)
|
(if (match (memq #:cps? opts)
|
||||||
((_ cps? . _) cps?)
|
((_ cps? . _) cps?)
|
||||||
(#f (<= 1 optimization-level)))
|
(#f (<= 1 optimization-level)))
|
||||||
(cons 'cps compile-cps)
|
(cons 'cps (load-compiler 'compile-bytecode))
|
||||||
(cons 'bytecode compile-bytecode)))
|
(cons 'bytecode (load-compiler 'compile-bytecode))))
|
||||||
|
|
||||||
(define-language tree-il
|
(define-language tree-il
|
||||||
#:title "Tree Intermediate Language"
|
#:title "Tree Intermediate Language"
|
||||||
|
@ -52,8 +52,6 @@
|
||||||
#:printer write-tree-il
|
#:printer write-tree-il
|
||||||
#:parser parse-tree-il
|
#:parser parse-tree-il
|
||||||
#:joiner join
|
#:joiner join
|
||||||
#:compilers `((cps . ,compile-cps)
|
|
||||||
(bytecode . ,compile-bytecode))
|
|
||||||
#:compiler-chooser choose-compiler
|
#:compiler-chooser choose-compiler
|
||||||
#:analyzer make-analyzer
|
#:analyzer make-analyzer
|
||||||
#:lowerer make-lowerer
|
#:lowerer make-lowerer
|
||||||
|
|
|
@ -29,8 +29,8 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (scripts compile)
|
(define-module (scripts compile)
|
||||||
#:use-module ((system base language) #:select (lookup-language))
|
#:use-module ((system base compile) #:select (compute-compiler
|
||||||
#:use-module ((system base compile) #:select (compile-file
|
compile-file
|
||||||
default-warning-level
|
default-warning-level
|
||||||
default-optimization-level))
|
default-optimization-level))
|
||||||
#:use-module (system base target)
|
#:use-module (system base target)
|
||||||
|
@ -250,12 +250,12 @@ Report bugs to <~A>.~%"
|
||||||
(when (assoc-ref options 'install-r7rs?)
|
(when (assoc-ref options 'install-r7rs?)
|
||||||
(install-r7rs!))
|
(install-r7rs!))
|
||||||
|
|
||||||
;; Load FROM and TO before we have changed the load path. That way, when
|
;; Compute a compiler before changing the load path, for its side
|
||||||
;; cross-compiling Guile itself, we can be sure we're loading our own
|
;; effects of loading compiler modules. That way, when
|
||||||
;; language modules and not those of the Guile being compiled, which may
|
;; cross-compiling Guile itself, we can be sure we're loading our
|
||||||
;; have incompatible .go files.
|
;; own language modules and not those of the Guile being compiled,
|
||||||
(lookup-language from)
|
;; which may have incompatible .go files.
|
||||||
(lookup-language to)
|
(compute-compiler from to optimization-level warning-level compile-opts)
|
||||||
|
|
||||||
(set! %load-path (append load-path %load-path))
|
(set! %load-path (append load-path %load-path))
|
||||||
(set! %load-should-auto-compile #f)
|
(set! %load-should-auto-compile #f)
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#:export (compiled-file-name
|
#:export (compiled-file-name
|
||||||
compile-file
|
compile-file
|
||||||
compile-and-load
|
compile-and-load
|
||||||
|
compute-compiler
|
||||||
read-and-compile
|
read-and-compile
|
||||||
compile
|
compile
|
||||||
decompile
|
decompile
|
||||||
|
@ -267,18 +268,16 @@
|
||||||
;; unit.
|
;; unit.
|
||||||
(values exp env cenv)))))))))
|
(values exp env cenv)))))))))
|
||||||
|
|
||||||
(define (find-language-joint from to)
|
(define (find-language-joint from to optimization-level opts)
|
||||||
(match (lookup-compilation-order from to)
|
(let ((from (ensure-language from))
|
||||||
(((langs . passes) ...)
|
(to (ensure-language to)))
|
||||||
(or (let lp ((langs langs))
|
(let lp ((lang from))
|
||||||
(match langs
|
(match (next-pass from lang to optimization-level opts)
|
||||||
(() #f)
|
(#f #f)
|
||||||
((lang . langs)
|
((next . pass)
|
||||||
(or (lp langs)
|
(or (lp next)
|
||||||
(and (language-joiner lang)
|
(and (language-joiner next)
|
||||||
lang)))))
|
next)))))))
|
||||||
to))
|
|
||||||
(_ (error "no way to compile" from "to" to))))
|
|
||||||
|
|
||||||
(define (default-language-joiner lang)
|
(define (default-language-joiner lang)
|
||||||
(lambda (exps env)
|
(lambda (exps env)
|
||||||
|
@ -305,7 +304,7 @@
|
||||||
(opts '()))
|
(opts '()))
|
||||||
(let* ((from (ensure-language from))
|
(let* ((from (ensure-language from))
|
||||||
(to (ensure-language to))
|
(to (ensure-language to))
|
||||||
(joint (find-language-joint from to)))
|
(joint (find-language-joint from to optimization-level opts)))
|
||||||
(parameterize ((current-language from))
|
(parameterize ((current-language from))
|
||||||
(let lp ((exps '()) (env #f) (cenv env) (from #f) (compile1 #f))
|
(let lp ((exps '()) (env #f) (cenv env) (from #f) (compile1 #f))
|
||||||
(match (read-and-parse (current-language) port cenv)
|
(match (read-and-parse (current-language) port cenv)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue