mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-15 18:20:42 +02:00
use #:keywords in module/*.scm, not :keywords
* module/system/base/syntax.scm (keywords): Don't enable :keywords, it breaks code that may assume that ':foo is a symbol, like boot-9. * module/*.scm: Don't use :keywords, use #:keywords. The user can decide if she wants #:keywords in their .guile, and :keywords might make us compile modules differently.
This commit is contained in:
parent
13906f976e
commit
1a1a10d3a5
29 changed files with 191 additions and 193 deletions
|
@ -2752,6 +2752,11 @@ module '(ice-9 q) '(make-q q-length))}."
|
||||||
;; Return a list of expressions that evaluate to the appropriate
|
;; Return a list of expressions that evaluate to the appropriate
|
||||||
;; arguments for resolve-interface according to SPEC.
|
;; arguments for resolve-interface according to SPEC.
|
||||||
|
|
||||||
|
(eval-case
|
||||||
|
((compile-toplevel)
|
||||||
|
(if (memq 'prefix (read-options))
|
||||||
|
(error "boot-9 must be compiled with #:kw, not :kw"))))
|
||||||
|
|
||||||
(define (compile-interface-spec spec)
|
(define (compile-interface-spec spec)
|
||||||
(define (make-keyarg sym key quote?)
|
(define (make-keyarg sym key quote?)
|
||||||
(cond ((or (memq sym spec)
|
(cond ((or (memq sym spec)
|
||||||
|
|
|
@ -20,8 +20,8 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (lang elisp spec)
|
(define-module (lang elisp spec)
|
||||||
:use-module (system lang language)
|
#:use-module (system lang language)
|
||||||
:export (elisp))
|
#:export (elisp))
|
||||||
|
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
|
|
|
@ -20,13 +20,13 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (language ghil spec)
|
(define-module (language ghil spec)
|
||||||
:use-module (system base language)
|
#:use-module (system base language)
|
||||||
:export (ghil))
|
#:export (ghil))
|
||||||
|
|
||||||
(define-language ghil
|
(define-language ghil
|
||||||
:title "Guile High Intermediate Language (GHIL)"
|
#:title "Guile High Intermediate Language (GHIL)"
|
||||||
:version "0.3"
|
#:version "0.3"
|
||||||
:reader read
|
#:reader read
|
||||||
:printer write
|
#:printer write
|
||||||
;; :environment (make-vmodule)
|
;; #:environment (make-vmodule)
|
||||||
)
|
)
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (language r5rs expand)
|
(define-module (language r5rs expand)
|
||||||
:export (expand void
|
#:export (expand void
|
||||||
identifier? free-identifier=? bound-identifier=?
|
identifier? free-identifier=? bound-identifier=?
|
||||||
generate-temporaries datum->syntax-object syntax-object->datum))
|
generate-temporaries datum->syntax-object syntax-object->datum))
|
||||||
|
|
||||||
|
|
|
@ -20,10 +20,10 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (language r5rs spec)
|
(define-module (language r5rs spec)
|
||||||
:use-module (system base language)
|
#:use-module (system base language)
|
||||||
:use-module (language r5rs expand)
|
#:use-module (language r5rs expand)
|
||||||
:use-module (language r5rs translate)
|
#:use-module (language r5rs translate)
|
||||||
:export (r5rs))
|
#:export (r5rs))
|
||||||
|
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
|
@ -54,11 +54,11 @@
|
||||||
;;;
|
;;;
|
||||||
|
|
||||||
(define-language r5rs
|
(define-language r5rs
|
||||||
:title "Standard Scheme (R5RS + syntax-case)"
|
#:title "Standard Scheme (R5RS + syntax-case)"
|
||||||
:version "0.3"
|
#:version "0.3"
|
||||||
:reader read
|
#:reader read
|
||||||
:expander expand
|
#:expander expand
|
||||||
:translator translate
|
#:translator translate
|
||||||
:printer write
|
#:printer write
|
||||||
;; :environment (global-ref 'Language::R5RS::core)
|
;; #:environment (global-ref 'Language::R5RS::core)
|
||||||
)
|
)
|
||||||
|
|
|
@ -20,9 +20,9 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (language scheme spec)
|
(define-module (language scheme spec)
|
||||||
:use-module (language scheme translate)
|
#:use-module (language scheme translate)
|
||||||
:use-module (system base language)
|
#:use-module (system base language)
|
||||||
:export (scheme))
|
#:export (scheme))
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
;;; Reader
|
;;; Reader
|
||||||
|
@ -41,10 +41,10 @@
|
||||||
;;;
|
;;;
|
||||||
|
|
||||||
(define-language scheme
|
(define-language scheme
|
||||||
:title "Guile Scheme"
|
#:title "Guile Scheme"
|
||||||
:version "0.5"
|
#:version "0.5"
|
||||||
:reader read
|
#:reader read
|
||||||
:read-file read-file
|
#:read-file read-file
|
||||||
:translator translate
|
#:translator translate
|
||||||
:printer write
|
#:printer write
|
||||||
)
|
)
|
||||||
|
|
|
@ -20,14 +20,14 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (language scheme translate)
|
(define-module (language scheme translate)
|
||||||
:use-module (system base pmatch)
|
#:use-module (system base pmatch)
|
||||||
:use-module (system base language)
|
#:use-module (system base language)
|
||||||
:use-module (system il ghil)
|
#:use-module (system il ghil)
|
||||||
:use-module (system il inline)
|
#:use-module (system il inline)
|
||||||
:use-module (ice-9 receive)
|
#:use-module (ice-9 receive)
|
||||||
:use-module (srfi srfi-39)
|
#:use-module (srfi srfi-39)
|
||||||
:use-module ((system base compile) :select (syntax-error))
|
#:use-module ((system base compile) #:select (syntax-error))
|
||||||
:export (translate))
|
#:export (translate))
|
||||||
|
|
||||||
|
|
||||||
(define (translate x e)
|
(define (translate x e)
|
||||||
|
|
|
@ -20,15 +20,15 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system base compile)
|
(define-module (system base compile)
|
||||||
:use-syntax (system base syntax)
|
#:use-syntax (system base syntax)
|
||||||
:use-module (system base language)
|
#:use-module (system base language)
|
||||||
:use-module (system il compile)
|
#:use-module (system il compile)
|
||||||
:use-module (system il glil)
|
#:use-module (system il glil)
|
||||||
:use-module (system vm objcode)
|
#:use-module (system vm objcode)
|
||||||
:use-module (system vm vm) ;; for compile-time evaluation
|
#:use-module (system vm vm) ;; for compile-time evaluation
|
||||||
:use-module (system vm assemble)
|
#:use-module (system vm assemble)
|
||||||
:use-module (ice-9 regex)
|
#:use-module (ice-9 regex)
|
||||||
:export (syntax-error compile-file load-source-file load-file
|
#:export (syntax-error compile-file load-source-file load-file
|
||||||
compiled-file-name
|
compiled-file-name
|
||||||
scheme-eval read-file-in compile-in
|
scheme-eval read-file-in compile-in
|
||||||
load/compile))
|
load/compile))
|
||||||
|
@ -82,7 +82,7 @@
|
||||||
(let* ((source (read-file-in file scheme))
|
(let* ((source (read-file-in file scheme))
|
||||||
(objcode (apply compile-in source (current-module)
|
(objcode (apply compile-in source (current-module)
|
||||||
scheme opts)))
|
scheme opts)))
|
||||||
(if (memq :c opts)
|
(if (memq #:c opts)
|
||||||
(pprint-glil objcode port)
|
(pprint-glil objcode port)
|
||||||
(uniform-vector-write (objcode->u8vector objcode) port)))))
|
(uniform-vector-write (objcode->u8vector objcode) port)))))
|
||||||
(format #t "wrote `~A'\n" comp))))
|
(format #t "wrote `~A'\n" comp))))
|
||||||
|
@ -136,13 +136,13 @@
|
||||||
(lambda ()
|
(lambda ()
|
||||||
;; expand
|
;; expand
|
||||||
(set! x ((language-expander lang) x e))
|
(set! x ((language-expander lang) x e))
|
||||||
(if (memq :e opts) (throw 'result x))
|
(if (memq #:e opts) (throw 'result x))
|
||||||
;; translate
|
;; translate
|
||||||
(set! x ((language-translator lang) x e))
|
(set! x ((language-translator lang) x e))
|
||||||
(if (memq :t opts) (throw 'result x))
|
(if (memq #:t opts) (throw 'result x))
|
||||||
;; compile
|
;; compile
|
||||||
(set! x (apply compile x e opts))
|
(set! x (apply compile x e opts))
|
||||||
(if (memq :c opts) (throw 'result x))
|
(if (memq #:c opts) (throw 'result x))
|
||||||
;; assemble
|
;; assemble
|
||||||
(apply assemble x e opts))
|
(apply assemble x e opts))
|
||||||
(lambda (key val) val)))))
|
(lambda (key val) val)))))
|
||||||
|
|
|
@ -20,8 +20,8 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system base language)
|
(define-module (system base language)
|
||||||
:use-syntax (system base syntax)
|
#:use-syntax (system base syntax)
|
||||||
:export (define-language lookup-language make-language
|
#:export (define-language lookup-language make-language
|
||||||
language-name language-title language-version language-reader
|
language-name language-title language-version language-reader
|
||||||
language-printer language-read-file language-expander
|
language-printer language-read-file language-expander
|
||||||
language-translator language-evaluator language-environment))
|
language-translator language-evaluator language-environment))
|
||||||
|
@ -39,7 +39,7 @@
|
||||||
))
|
))
|
||||||
|
|
||||||
(define-macro (define-language name . spec)
|
(define-macro (define-language name . spec)
|
||||||
`(define ,name (make-language :name ',name ,@spec)))
|
`(define ,name (make-language #:name ',name ,@spec)))
|
||||||
|
|
||||||
(define (lookup-language name)
|
(define (lookup-language name)
|
||||||
(let ((m (resolve-module `(language ,name spec))))
|
(let ((m (resolve-module `(language ,name spec))))
|
||||||
|
|
|
@ -20,17 +20,10 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system base syntax)
|
(define-module (system base syntax)
|
||||||
:export (%compute-initargs)
|
#:export (%compute-initargs)
|
||||||
:export-syntax (define-type define-record record-case))
|
#:export-syntax (define-type define-record record-case))
|
||||||
(export-syntax |) ;; emacs doesn't like the |
|
(export-syntax |) ;; emacs doesn't like the |
|
||||||
|
|
||||||
|
|
||||||
;;;
|
|
||||||
;;; Keywords by `:KEYWORD
|
|
||||||
;;;
|
|
||||||
|
|
||||||
(read-set! keywords 'prefix)
|
|
||||||
|
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
;;; Type
|
;;; Type
|
||||||
|
|
|
@ -20,14 +20,14 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system il compile)
|
(define-module (system il compile)
|
||||||
:use-syntax (system base syntax)
|
#:use-syntax (system base syntax)
|
||||||
:use-module (system il glil)
|
#:use-module (system il glil)
|
||||||
:use-module (system il ghil)
|
#:use-module (system il ghil)
|
||||||
:use-module (ice-9 common-list)
|
#:use-module (ice-9 common-list)
|
||||||
:export (compile))
|
#:export (compile))
|
||||||
|
|
||||||
(define (compile x e . opts)
|
(define (compile x e . opts)
|
||||||
(if (memq :O opts) (set! x (optimize x)))
|
(if (memq #:O opts) (set! x (optimize x)))
|
||||||
(codegen x))
|
(codegen x))
|
||||||
|
|
||||||
|
|
||||||
|
@ -330,10 +330,10 @@
|
||||||
;; compile body
|
;; compile body
|
||||||
(comp body #t #f)
|
(comp body #t #f)
|
||||||
;; create GLIL
|
;; create GLIL
|
||||||
(let ((vars (make-glil-vars :nargs (length vars)
|
(let ((vars (make-glil-vars #:nargs (length vars)
|
||||||
:nrest (if rest 1 0)
|
#:nrest (if rest 1 0)
|
||||||
:nlocs (length locs)
|
#:nlocs (length locs)
|
||||||
:nexts (length exts))))
|
#:nexts (length exts))))
|
||||||
(make-glil-asm vars meta (reverse! stack))))))))
|
(make-glil-asm vars meta (reverse! stack))))))))
|
||||||
|
|
||||||
(define (finalize-index! list)
|
(define (finalize-index! list)
|
||||||
|
|
|
@ -20,9 +20,9 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system il ghil)
|
(define-module (system il ghil)
|
||||||
:use-syntax (system base syntax)
|
#:use-syntax (system base syntax)
|
||||||
:use-module (ice-9 regex)
|
#:use-module (ice-9 regex)
|
||||||
:export
|
#:export
|
||||||
(<ghil-void> make-ghil-void ghil-void?
|
(<ghil-void> make-ghil-void ghil-void?
|
||||||
ghil-void-env ghil-void-loc
|
ghil-void-env ghil-void-loc
|
||||||
|
|
||||||
|
|
|
@ -20,8 +20,8 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system il glil)
|
(define-module (system il glil)
|
||||||
:use-syntax (system base syntax)
|
#:use-syntax (system base syntax)
|
||||||
:export
|
#:export
|
||||||
(pprint-glil
|
(pprint-glil
|
||||||
<glil-vars> make-glil-vars
|
<glil-vars> make-glil-vars
|
||||||
glil-vars-nargs glil-vars-nrest glil-vars-nlocs glil-vars-nexts
|
glil-vars-nargs glil-vars-nrest glil-vars-nlocs glil-vars-nexts
|
||||||
|
|
|
@ -20,10 +20,10 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system il inline)
|
(define-module (system il inline)
|
||||||
:use-module (system base syntax)
|
#:use-module (system base syntax)
|
||||||
:use-module (system il ghil)
|
#:use-module (system il ghil)
|
||||||
:use-module (srfi srfi-16)
|
#:use-module (srfi srfi-16)
|
||||||
:export (*inline-table* define-inline try-inline try-inline-with-env))
|
#:export (*inline-table* define-inline try-inline try-inline-with-env))
|
||||||
|
|
||||||
(define *inline-table* '())
|
(define *inline-table* '())
|
||||||
|
|
||||||
|
|
|
@ -20,24 +20,24 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system repl command)
|
(define-module (system repl command)
|
||||||
:use-syntax (system base syntax)
|
#:use-syntax (system base syntax)
|
||||||
:use-module (system base pmatch)
|
#:use-module (system base pmatch)
|
||||||
:use-module (system base compile)
|
#:use-module (system base compile)
|
||||||
:use-module (system repl common)
|
#:use-module (system repl common)
|
||||||
:use-module (system vm objcode)
|
#:use-module (system vm objcode)
|
||||||
:use-module (system vm program)
|
#:use-module (system vm program)
|
||||||
:use-module (system vm vm)
|
#:use-module (system vm vm)
|
||||||
:autoload (system base language) (lookup-language)
|
#:autoload (system base language) (lookup-language)
|
||||||
:autoload (system il glil) (pprint-glil)
|
#:autoload (system il glil) (pprint-glil)
|
||||||
:autoload (system vm disasm) (disassemble-program disassemble-objcode)
|
#:autoload (system vm disasm) (disassemble-program disassemble-objcode)
|
||||||
:autoload (system vm debug) (vm-debugger vm-backtrace)
|
#:autoload (system vm debug) (vm-debugger vm-backtrace)
|
||||||
:autoload (system vm trace) (vm-trace vm-trace-on vm-trace-off)
|
#:autoload (system vm trace) (vm-trace vm-trace-on vm-trace-off)
|
||||||
:autoload (system vm profile) (vm-profile)
|
#:autoload (system vm profile) (vm-profile)
|
||||||
:use-module (ice-9 format)
|
#:use-module (ice-9 format)
|
||||||
:use-module (ice-9 session)
|
#:use-module (ice-9 session)
|
||||||
:use-module (ice-9 documentation)
|
#:use-module (ice-9 documentation)
|
||||||
:use-module (ice-9 and-let-star)
|
#:use-module (ice-9 and-let-star)
|
||||||
:export (meta-command))
|
#:export (meta-command))
|
||||||
|
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
|
@ -122,7 +122,7 @@
|
||||||
(not (eq? (string-ref (symbol->string (car args)) 0) #\-)))
|
(not (eq? (string-ref (symbol->string (car args)) 0) #\-)))
|
||||||
(let ((c (lookup-command key)))
|
(let ((c (lookup-command key)))
|
||||||
(if c
|
(if c
|
||||||
(cond ((memq :h opts) (display-command c))
|
(cond ((memq #:h opts) (display-command c))
|
||||||
(else (apply (command-procedure c)
|
(else (apply (command-procedure c)
|
||||||
repl (append! args (reverse! opts)))))
|
repl (append! args (reverse! opts)))))
|
||||||
(user-error "Unknown meta command: ~A" key))))))))
|
(user-error "Unknown meta command: ~A" key))))))))
|
||||||
|
@ -229,7 +229,7 @@ Load a file in the current module.
|
||||||
|
|
||||||
-f Load source file (see `compile')"
|
-f Load source file (see `compile')"
|
||||||
(let* ((file (->string file))
|
(let* ((file (->string file))
|
||||||
(objcode (if (memq :f opts)
|
(objcode (if (memq #:f opts)
|
||||||
(apply load-source-file file opts)
|
(apply load-source-file file opts)
|
||||||
(apply load-file file opts))))
|
(apply load-file file opts))))
|
||||||
(vm-load (repl-vm repl) objcode)))
|
(vm-load (repl-vm repl) objcode)))
|
||||||
|
@ -267,8 +267,8 @@ Generate compiled code.
|
||||||
-O Enable optimization
|
-O Enable optimization
|
||||||
-D Add debug information"
|
-D Add debug information"
|
||||||
(let ((x (apply repl-compile repl form opts)))
|
(let ((x (apply repl-compile repl form opts)))
|
||||||
(cond ((or (memq :e opts) (memq :t opts)) (puts x))
|
(cond ((or (memq #:e opts) (memq #:t opts)) (puts x))
|
||||||
((memq :c opts) (pprint-glil x))
|
((memq #:c opts) (pprint-glil x))
|
||||||
(else (disassemble-objcode x)))))
|
(else (disassemble-objcode x)))))
|
||||||
|
|
||||||
(define guile:compile-file compile-file)
|
(define guile:compile-file compile-file)
|
||||||
|
|
|
@ -20,11 +20,11 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system repl common)
|
(define-module (system repl common)
|
||||||
:use-syntax (system base syntax)
|
#:use-syntax (system base syntax)
|
||||||
:use-module (system base compile)
|
#:use-module (system base compile)
|
||||||
:use-module (system base language)
|
#:use-module (system base language)
|
||||||
:use-module (system vm vm)
|
#:use-module (system vm vm)
|
||||||
:export (<repl> make-repl repl-vm repl-language repl-options
|
#:export (<repl> make-repl repl-vm repl-language repl-options
|
||||||
repl-tm-stats repl-gc-stats repl-vm-stats
|
repl-tm-stats repl-gc-stats repl-vm-stats
|
||||||
repl-welcome repl-prompt repl-read repl-compile repl-eval
|
repl-welcome repl-prompt repl-read repl-compile repl-eval
|
||||||
repl-print repl-option-ref repl-option-set!
|
repl-print repl-option-ref repl-option-set!
|
||||||
|
@ -42,12 +42,12 @@
|
||||||
|
|
||||||
(define %make-repl make-repl)
|
(define %make-repl make-repl)
|
||||||
(define (make-repl lang)
|
(define (make-repl lang)
|
||||||
(%make-repl :vm (the-vm)
|
(%make-repl #:vm (the-vm)
|
||||||
:language (lookup-language lang)
|
#:language (lookup-language lang)
|
||||||
:options repl-default-options
|
#:options repl-default-options
|
||||||
:tm-stats (times)
|
#:tm-stats (times)
|
||||||
:gc-stats (gc-stats)
|
#:gc-stats (gc-stats)
|
||||||
:vm-stats (vm-stats (the-vm))))
|
#:vm-stats (vm-stats (the-vm))))
|
||||||
|
|
||||||
(define (repl-welcome repl)
|
(define (repl-welcome repl)
|
||||||
(let ((language (repl-language repl)))
|
(let ((language (repl-language repl)))
|
||||||
|
|
|
@ -20,11 +20,11 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system repl describe)
|
(define-module (system repl describe)
|
||||||
:use-module (oop goops)
|
#:use-module (oop goops)
|
||||||
:use-module (ice-9 regex)
|
#:use-module (ice-9 regex)
|
||||||
:use-module (ice-9 format)
|
#:use-module (ice-9 format)
|
||||||
:use-module (ice-9 and-let-star)
|
#:use-module (ice-9 and-let-star)
|
||||||
:export (describe))
|
#:export (describe))
|
||||||
|
|
||||||
(define-method (describe (symbol <symbol>))
|
(define-method (describe (symbol <symbol>))
|
||||||
(format #t "`~s' is " symbol)
|
(format #t "`~s' is " symbol)
|
||||||
|
|
|
@ -20,16 +20,16 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system repl repl)
|
(define-module (system repl repl)
|
||||||
:use-syntax (system base syntax)
|
#:use-syntax (system base syntax)
|
||||||
:use-module (system base pmatch)
|
#:use-module (system base pmatch)
|
||||||
:use-module (system base compile)
|
#:use-module (system base compile)
|
||||||
:use-module (system base language)
|
#:use-module (system base language)
|
||||||
:use-module (system repl common)
|
#:use-module (system repl common)
|
||||||
:use-module (system repl command)
|
#:use-module (system repl command)
|
||||||
:use-module (system vm vm)
|
#:use-module (system vm vm)
|
||||||
:use-module (system vm debug)
|
#:use-module (system vm debug)
|
||||||
:use-module (ice-9 rdelim)
|
#:use-module (ice-9 rdelim)
|
||||||
:export (start-repl call-with-backtrace))
|
#:export (start-repl call-with-backtrace))
|
||||||
|
|
||||||
(define meta-command-token (cons 'meta 'command))
|
(define meta-command-token (cons 'meta 'command))
|
||||||
|
|
||||||
|
|
|
@ -20,17 +20,17 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system vm assemble)
|
(define-module (system vm assemble)
|
||||||
:use-syntax (system base syntax)
|
#:use-syntax (system base syntax)
|
||||||
:use-module (system il glil)
|
#:use-module (system il glil)
|
||||||
:use-module (system vm instruction)
|
#:use-module (system vm instruction)
|
||||||
:use-module (system vm objcode)
|
#:use-module (system vm objcode)
|
||||||
:use-module ((system vm program) :select (make-binding))
|
#:use-module ((system vm program) #:select (make-binding))
|
||||||
:use-module (system vm conv)
|
#:use-module (system vm conv)
|
||||||
:use-module (ice-9 regex)
|
#:use-module (ice-9 regex)
|
||||||
:use-module (ice-9 common-list)
|
#:use-module (ice-9 common-list)
|
||||||
:use-module (srfi srfi-4)
|
#:use-module (srfi srfi-4)
|
||||||
:use-module ((srfi srfi-1) :select (append-map))
|
#:use-module ((srfi srfi-1) #:select (append-map))
|
||||||
:export (preprocess codegen assemble))
|
#:export (preprocess codegen assemble))
|
||||||
|
|
||||||
(define (assemble glil env . opts)
|
(define (assemble glil env . opts)
|
||||||
(codegen (preprocess glil #f) #t))
|
(codegen (preprocess glil #f) #t))
|
||||||
|
@ -55,9 +55,9 @@
|
||||||
(define (preprocess x e)
|
(define (preprocess x e)
|
||||||
(record-case x
|
(record-case x
|
||||||
((<glil-asm> vars meta body)
|
((<glil-asm> vars meta body)
|
||||||
(let* ((venv (make-venv :parent e :nexts (glil-vars-nexts vars) :closure? #f))
|
(let* ((venv (make-venv #:parent e #:nexts (glil-vars-nexts vars) #:closure? #f))
|
||||||
(body (map (lambda (x) (preprocess x venv)) body)))
|
(body (map (lambda (x) (preprocess x venv)) body)))
|
||||||
(make-vm-asm :venv venv :glil x :body body)))
|
(make-vm-asm #:venv venv #:glil x #:body body)))
|
||||||
((<glil-external> op depth index)
|
((<glil-external> op depth index)
|
||||||
(do ((d depth (- d 1))
|
(do ((d depth (- d 1))
|
||||||
(e e (venv-parent e)))
|
(e e (venv-parent e)))
|
||||||
|
@ -86,9 +86,9 @@
|
||||||
(push (code->bytes code) stack))
|
(push (code->bytes code) stack))
|
||||||
(dump-object! push-code! `(,bindings ,sources ,@tail))
|
(dump-object! push-code! `(,bindings ,sources ,@tail))
|
||||||
(push-code! '(return))
|
(push-code! '(return))
|
||||||
(make-bytespec :vars (make-glil-vars 0 0 0 0)
|
(make-bytespec #:vars (make-glil-vars 0 0 0 0)
|
||||||
:bytes (stack->bytes (reverse! stack) '())
|
#:bytes (stack->bytes (reverse! stack) '())
|
||||||
:meta #f :objs #f :closure? #f))))
|
#:meta #f #:objs #f #:closure? #f))))
|
||||||
|
|
||||||
(define (codegen glil toplevel)
|
(define (codegen glil toplevel)
|
||||||
(record-case glil
|
(record-case glil
|
||||||
|
@ -171,12 +171,12 @@
|
||||||
((ref set)
|
((ref set)
|
||||||
(cond
|
(cond
|
||||||
(toplevel
|
(toplevel
|
||||||
(push-object! (make-vlink-now :name name))
|
(push-object! (make-vlink-now #:name name))
|
||||||
(push-code! (case op
|
(push-code! (case op
|
||||||
((ref) '(variable-ref))
|
((ref) '(variable-ref))
|
||||||
((set) '(variable-set)))))
|
((set) '(variable-set)))))
|
||||||
(else
|
(else
|
||||||
(let* ((var (make-vlink-later :module module :name name))
|
(let* ((var (make-vlink-later #:module module #:name name))
|
||||||
(i (cond ((object-assoc var object-alist) => cdr)
|
(i (cond ((object-assoc var object-alist) => cdr)
|
||||||
(else
|
(else
|
||||||
(let ((i (length object-alist)))
|
(let ((i (length object-alist)))
|
||||||
|
@ -186,7 +186,7 @@
|
||||||
((ref) `(late-variable-ref ,i))
|
((ref) `(late-variable-ref ,i))
|
||||||
((set) `(late-variable-set ,i))))))))
|
((set) `(late-variable-set ,i))))))))
|
||||||
((define)
|
((define)
|
||||||
(push-object! (make-vdefine :module module :name name))
|
(push-object! (make-vdefine #:module module #:name name))
|
||||||
(push-code! '(variable-set)))
|
(push-code! '(variable-set)))
|
||||||
(else
|
(else
|
||||||
(error "unknown toplevel var kind" op name))))
|
(error "unknown toplevel var kind" op name))))
|
||||||
|
@ -214,13 +214,13 @@
|
||||||
(let ((bytes (stack->bytes (reverse! stack) label-alist)))
|
(let ((bytes (stack->bytes (reverse! stack) label-alist)))
|
||||||
(if toplevel
|
(if toplevel
|
||||||
(bytecode->objcode bytes (glil-vars-nlocs vars) (glil-vars-nexts vars))
|
(bytecode->objcode bytes (glil-vars-nlocs vars) (glil-vars-nexts vars))
|
||||||
(make-bytespec :vars vars :bytes bytes
|
(make-bytespec #:vars vars #:bytes bytes
|
||||||
:meta (make-meta (reverse! binding-alist)
|
#:meta (make-meta (reverse! binding-alist)
|
||||||
(reverse! source-alist)
|
(reverse! source-alist)
|
||||||
meta)
|
meta)
|
||||||
:objs (let ((objs (map car (reverse! object-alist))))
|
#:objs (let ((objs (map car (reverse! object-alist))))
|
||||||
(if (null? objs) #f (list->vector objs)))
|
(if (null? objs) #f (list->vector objs)))
|
||||||
:closure? (venv-closure? venv))))))))))
|
#:closure? (venv-closure? venv))))))))))
|
||||||
|
|
||||||
(define (object-assoc x alist)
|
(define (object-assoc x alist)
|
||||||
(record-case x
|
(record-case x
|
||||||
|
|
|
@ -20,12 +20,12 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system vm conv)
|
(define-module (system vm conv)
|
||||||
:use-module (system vm instruction)
|
#:use-module (system vm instruction)
|
||||||
:use-module (system base pmatch)
|
#:use-module (system base pmatch)
|
||||||
:use-module (ice-9 regex)
|
#:use-module (ice-9 regex)
|
||||||
:use-module (srfi srfi-4)
|
#:use-module (srfi srfi-4)
|
||||||
:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
||||||
:export (code-pack code-unpack object->code code->object code->bytes
|
#:export (code-pack code-unpack object->code code->object code->bytes
|
||||||
make-byte-decoder))
|
make-byte-decoder))
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
|
|
|
@ -20,11 +20,11 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system vm debug)
|
(define-module (system vm debug)
|
||||||
:use-syntax (system base syntax)
|
#:use-syntax (system base syntax)
|
||||||
:use-module (system vm vm)
|
#:use-module (system vm vm)
|
||||||
:use-module (system vm frame)
|
#:use-module (system vm frame)
|
||||||
:use-module (ice-9 format)
|
#:use-module (ice-9 format)
|
||||||
:export (vm-debugger vm-backtrace))
|
#:export (vm-debugger vm-backtrace))
|
||||||
|
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
|
@ -38,7 +38,7 @@
|
||||||
(if (null? chain)
|
(if (null? chain)
|
||||||
(display "Nothing to debug\n")
|
(display "Nothing to debug\n")
|
||||||
(debugger-repl (make-debugger
|
(debugger-repl (make-debugger
|
||||||
:vm vm :chain chain :index (length chain))))))
|
#:vm vm #:chain chain #:index (length chain))))))
|
||||||
|
|
||||||
(define (debugger-repl db)
|
(define (debugger-repl db)
|
||||||
(let loop ()
|
(let loop ()
|
||||||
|
|
|
@ -20,14 +20,14 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system vm disasm)
|
(define-module (system vm disasm)
|
||||||
:use-module (system base pmatch)
|
#:use-module (system base pmatch)
|
||||||
:use-module (system vm objcode)
|
#:use-module (system vm objcode)
|
||||||
:use-module (system vm program)
|
#:use-module (system vm program)
|
||||||
:use-module (system vm conv)
|
#:use-module (system vm conv)
|
||||||
:use-module (ice-9 regex)
|
#:use-module (ice-9 regex)
|
||||||
:use-module (ice-9 format)
|
#:use-module (ice-9 format)
|
||||||
:use-module (ice-9 receive)
|
#:use-module (ice-9 receive)
|
||||||
:export (disassemble-objcode disassemble-program disassemble-bytecode))
|
#:export (disassemble-objcode disassemble-program disassemble-bytecode))
|
||||||
|
|
||||||
(define (disassemble-objcode objcode . opts)
|
(define (disassemble-objcode objcode . opts)
|
||||||
(let* ((prog (objcode->program objcode))
|
(let* ((prog (objcode->program objcode))
|
||||||
|
|
|
@ -20,10 +20,10 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system vm frame)
|
(define-module (system vm frame)
|
||||||
:use-module (system vm program)
|
#:use-module (system vm program)
|
||||||
:use-module (system vm instruction)
|
#:use-module (system vm instruction)
|
||||||
:use-module ((srfi srfi-1) :select (fold))
|
#:use-module ((srfi srfi-1) #:select (fold))
|
||||||
:export (frame-number frame-address
|
#:export (frame-number frame-address
|
||||||
make-frame-chain
|
make-frame-chain
|
||||||
print-frame print-frame-chain-as-backtrace
|
print-frame print-frame-chain-as-backtrace
|
||||||
frame-arguments frame-local-variables frame-external-variables
|
frame-arguments frame-local-variables frame-external-variables
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system vm instruction)
|
(define-module (system vm instruction)
|
||||||
:export (instruction-list
|
#:export (instruction-list
|
||||||
instruction? instruction-length
|
instruction? instruction-length
|
||||||
instruction-pops instruction-pushes
|
instruction-pops instruction-pushes
|
||||||
instruction->opcode opcode->instruction))
|
instruction->opcode opcode->instruction))
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system vm objcode)
|
(define-module (system vm objcode)
|
||||||
:export (objcode->u8vector objcode? objcode->program bytecode->objcode
|
#:export (objcode->u8vector objcode? objcode->program bytecode->objcode
|
||||||
load-objcode))
|
load-objcode))
|
||||||
|
|
||||||
(dynamic-call "scm_init_objcodes" (dynamic-link "libguile"))
|
(dynamic-call "scm_init_objcodes" (dynamic-link "libguile"))
|
||||||
|
|
|
@ -20,9 +20,9 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system vm profile)
|
(define-module (system vm profile)
|
||||||
:use-module (system vm vm)
|
#:use-module (system vm vm)
|
||||||
:use-module (ice-9 format)
|
#:use-module (ice-9 format)
|
||||||
:export (vm-profile))
|
#:export (vm-profile))
|
||||||
|
|
||||||
(define (vm-profile vm objcode . opts)
|
(define (vm-profile vm objcode . opts)
|
||||||
(let ((flag (vm-option vm 'debug)))
|
(let ((flag (vm-option vm 'debug)))
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system vm program)
|
(define-module (system vm program)
|
||||||
:export (arity:nargs arity:nrest arity:nlocs arity:nexts
|
#:export (arity:nargs arity:nrest arity:nlocs arity:nexts
|
||||||
make-binding binding:name binding:extp binding:index
|
make-binding binding:name binding:extp binding:index
|
||||||
source:addr source:line source:column source:file
|
source:addr source:line source:column source:file
|
||||||
program-bindings program-sources
|
program-bindings program-sources
|
||||||
|
|
|
@ -20,11 +20,11 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system vm trace)
|
(define-module (system vm trace)
|
||||||
:use-syntax (system base syntax)
|
#:use-syntax (system base syntax)
|
||||||
:use-module (system vm vm)
|
#:use-module (system vm vm)
|
||||||
:use-module (system vm frame)
|
#:use-module (system vm frame)
|
||||||
:use-module (ice-9 format)
|
#:use-module (ice-9 format)
|
||||||
:export (vm-trace vm-trace-on vm-trace-off))
|
#:export (vm-trace vm-trace-on vm-trace-off))
|
||||||
|
|
||||||
(define (vm-trace vm objcode . opts)
|
(define (vm-trace vm objcode . opts)
|
||||||
(dynamic-wind
|
(dynamic-wind
|
||||||
|
@ -34,13 +34,13 @@
|
||||||
|
|
||||||
(define (vm-trace-on vm . opts)
|
(define (vm-trace-on vm . opts)
|
||||||
(set-vm-option! vm 'trace-first #t)
|
(set-vm-option! vm 'trace-first #t)
|
||||||
(if (memq :b opts) (add-hook! (vm-next-hook vm) trace-next))
|
(if (memq #:b opts) (add-hook! (vm-next-hook vm) trace-next))
|
||||||
(set-vm-option! vm 'trace-options opts)
|
(set-vm-option! vm 'trace-options opts)
|
||||||
(add-hook! (vm-apply-hook vm) trace-apply)
|
(add-hook! (vm-apply-hook vm) trace-apply)
|
||||||
(add-hook! (vm-return-hook vm) trace-return))
|
(add-hook! (vm-return-hook vm) trace-return))
|
||||||
|
|
||||||
(define (vm-trace-off vm . opts)
|
(define (vm-trace-off vm . opts)
|
||||||
(if (memq :b opts) (remove-hook! (vm-next-hook vm) trace-next))
|
(if (memq #:b opts) (remove-hook! (vm-next-hook vm) trace-next))
|
||||||
(remove-hook! (vm-apply-hook vm) trace-apply)
|
(remove-hook! (vm-apply-hook vm) trace-apply)
|
||||||
(remove-hook! (vm-return-hook vm) trace-return))
|
(remove-hook! (vm-return-hook vm) trace-return))
|
||||||
|
|
||||||
|
|
|
@ -20,9 +20,9 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define-module (system vm vm)
|
(define-module (system vm vm)
|
||||||
:use-module (system vm frame)
|
#:use-module (system vm frame)
|
||||||
:use-module (system vm objcode)
|
#:use-module (system vm objcode)
|
||||||
:export (vm? the-vm make-vm vm-version
|
#:export (vm? the-vm make-vm vm-version
|
||||||
vm:ip vm:sp vm:fp vm:last-ip
|
vm:ip vm:sp vm:fp vm:last-ip
|
||||||
|
|
||||||
vm-load vm-return-value
|
vm-load vm-return-value
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue