mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
Add ,optimize-cps REPL meta-command
* module/system/repl/command.scm (*command-table*): Add optimize-cps / optx. (optimize-cps): Define meta-command. * module/system/repl/common.scm (optimize*): New helper. (repl-optimize): Use helper. (repl-optimize-cps): New public function.
This commit is contained in:
parent
426867ac7d
commit
c803566a17
2 changed files with 23 additions and 10 deletions
|
@ -57,7 +57,7 @@
|
||||||
(module (module m) (import use) (load l) (reload re) (binding b) (in))
|
(module (module m) (import use) (load l) (reload re) (binding b) (in))
|
||||||
(language (language L))
|
(language (language L))
|
||||||
(compile (compile c) (compile-file cc)
|
(compile (compile c) (compile-file cc)
|
||||||
(expand exp) (optimize opt)
|
(expand exp) (optimize opt) (optimize-cps optx)
|
||||||
(disassemble x) (disassemble-file xx))
|
(disassemble x) (disassemble-file xx))
|
||||||
(profile (time t) (profile pr) (trace tr))
|
(profile (time t) (profile pr) (trace tr))
|
||||||
(debug (backtrace bt) (up) (down) (frame fr)
|
(debug (backtrace bt) (up) (down) (frame fr)
|
||||||
|
@ -490,6 +490,11 @@ Run the optimizer on a piece of code and print the result."
|
||||||
(run-hook before-print-hook x)
|
(run-hook before-print-hook x)
|
||||||
(pp x)))
|
(pp x)))
|
||||||
|
|
||||||
|
(define-meta-command (optimize-cps repl (form))
|
||||||
|
"optimize-cps EXP
|
||||||
|
Run the CPS optimizer on a piece of code and print the result."
|
||||||
|
(repl-optimize-cps repl (repl-parse repl form)))
|
||||||
|
|
||||||
(define-meta-command (disassemble repl (form))
|
(define-meta-command (disassemble repl (form))
|
||||||
"disassemble EXP
|
"disassemble EXP
|
||||||
Disassemble a compiled procedure."
|
Disassemble a compiled procedure."
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
repl-tm-stats repl-gc-stats repl-debug
|
repl-tm-stats repl-gc-stats repl-debug
|
||||||
repl-welcome repl-prompt
|
repl-welcome repl-prompt
|
||||||
repl-read repl-compile repl-prepare-eval-thunk repl-eval
|
repl-read repl-compile repl-prepare-eval-thunk repl-eval
|
||||||
repl-expand repl-optimize
|
repl-expand repl-optimize repl-optimize-cps
|
||||||
repl-parse repl-print repl-option-ref repl-option-set!
|
repl-parse repl-print repl-option-ref repl-option-set!
|
||||||
repl-default-option-set! repl-default-prompt-set!
|
repl-default-option-set! repl-default-prompt-set!
|
||||||
puts ->string user-error
|
puts ->string user-error
|
||||||
|
@ -204,7 +204,7 @@ See <http://www.gnu.org/licenses/lgpl.html>, for more details.")
|
||||||
#:env (current-module))
|
#:env (current-module))
|
||||||
#:from lang #:to from)))
|
#:from lang #:to from)))
|
||||||
|
|
||||||
(define* (repl-optimize repl form #:key (lang 'tree-il))
|
(define (optimize* repl form lang print)
|
||||||
(let ((from (repl-language repl))
|
(let ((from (repl-language repl))
|
||||||
(make-lower (language-lowerer (lookup-language lang)))
|
(make-lower (language-lowerer (lookup-language lang)))
|
||||||
(optimization-level (repl-optimization-level repl))
|
(optimization-level (repl-optimization-level repl))
|
||||||
|
@ -212,13 +212,21 @@ See <http://www.gnu.org/licenses/lgpl.html>, for more details.")
|
||||||
(opts (repl-compile-options repl)))
|
(opts (repl-compile-options repl)))
|
||||||
(unless make-lower
|
(unless make-lower
|
||||||
(error "language has no optimizer" lang))
|
(error "language has no optimizer" lang))
|
||||||
(decompile ((make-lower optimization-level opts)
|
(print ((make-lower optimization-level opts)
|
||||||
(compile form #:from from #:to lang #:opts opts
|
(compile form #:from from #:to lang #:opts opts
|
||||||
#:optimization-level optimization-level
|
#:optimization-level optimization-level
|
||||||
#:warning-level warning-level
|
#:warning-level warning-level
|
||||||
#:env (current-module))
|
#:env (current-module))
|
||||||
(current-module))
|
(current-module)))))
|
||||||
#:from lang #:to from)))
|
|
||||||
|
(define* (repl-optimize repl form #:key (lang 'tree-il))
|
||||||
|
(optimize* repl form lang
|
||||||
|
(lambda (exp)
|
||||||
|
(decompile exp #:from lang #:to (repl-language repl)))))
|
||||||
|
|
||||||
|
(define* (repl-optimize-cps repl form)
|
||||||
|
(optimize* repl form 'cps
|
||||||
|
(module-ref (resolve-interface '(language cps dump)) 'dump)))
|
||||||
|
|
||||||
(define (repl-parse repl form)
|
(define (repl-parse repl form)
|
||||||
(let ((parser (language-parser (repl-language repl))))
|
(let ((parser (language-parser (repl-language repl))))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue