mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-09 21:40:33 +02:00
source information for the interpreter
* module/ice-9/psyntax.scm: Try to propagate source information when generating output for the interpreter. * module/ice-9/psyntax-pp.scm: Regenerate.
This commit is contained in:
parent
f4bf64b4d4
commit
fc5b616b58
2 changed files with 4050 additions and 3800 deletions
File diff suppressed because it is too large
Load diff
|
@ -337,39 +337,46 @@
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
(define (decorate-source e s)
|
||||||
|
(if (and (pair? e) s)
|
||||||
|
(set-source-properties! e s))
|
||||||
|
e)
|
||||||
|
|
||||||
;;; output constructors
|
;;; output constructors
|
||||||
(define build-void
|
(define build-void
|
||||||
(lambda (source)
|
(lambda (source)
|
||||||
(case (fluid-ref *mode*)
|
(case (fluid-ref *mode*)
|
||||||
((c) ((@ (language tree-il) make-void) source))
|
((c) ((@ (language tree-il) make-void) source))
|
||||||
(else '(if #f #f)))))
|
(else (decorate-source '(if #f #f) source)))))
|
||||||
|
|
||||||
(define build-application
|
(define build-application
|
||||||
(lambda (source fun-exp arg-exps)
|
(lambda (source fun-exp arg-exps)
|
||||||
(case (fluid-ref *mode*)
|
(case (fluid-ref *mode*)
|
||||||
((c) ((@ (language tree-il) make-application) source fun-exp arg-exps))
|
((c) ((@ (language tree-il) make-application) source fun-exp arg-exps))
|
||||||
(else `(,fun-exp . ,arg-exps)))))
|
(else (decorate-source `(,fun-exp . ,arg-exps) source)))))
|
||||||
|
|
||||||
(define build-conditional
|
(define build-conditional
|
||||||
(lambda (source test-exp then-exp else-exp)
|
(lambda (source test-exp then-exp else-exp)
|
||||||
(case (fluid-ref *mode*)
|
(case (fluid-ref *mode*)
|
||||||
((c) ((@ (language tree-il) make-conditional)
|
((c) ((@ (language tree-il) make-conditional)
|
||||||
source test-exp then-exp else-exp))
|
source test-exp then-exp else-exp))
|
||||||
(else (if (equal? else-exp '(if #f #f))
|
(else (decorate-source
|
||||||
`(if ,test-exp ,then-exp)
|
(if (equal? else-exp '(if #f #f))
|
||||||
`(if ,test-exp ,then-exp ,else-exp))))))
|
`(if ,test-exp ,then-exp)
|
||||||
|
`(if ,test-exp ,then-exp ,else-exp))
|
||||||
|
source)))))
|
||||||
|
|
||||||
(define build-lexical-reference
|
(define build-lexical-reference
|
||||||
(lambda (type source name var)
|
(lambda (type source name var)
|
||||||
(case (fluid-ref *mode*)
|
(case (fluid-ref *mode*)
|
||||||
((c) ((@ (language tree-il) make-lexical-ref) source name var))
|
((c) ((@ (language tree-il) make-lexical-ref) source name var))
|
||||||
(else var))))
|
(else (decorate-source var source)))))
|
||||||
|
|
||||||
(define build-lexical-assignment
|
(define build-lexical-assignment
|
||||||
(lambda (source name var exp)
|
(lambda (source name var exp)
|
||||||
(case (fluid-ref *mode*)
|
(case (fluid-ref *mode*)
|
||||||
((c) ((@ (language tree-il) make-lexical-set) source name var exp))
|
((c) ((@ (language tree-il) make-lexical-set) source name var exp))
|
||||||
(else `(set! ,var ,exp)))))
|
(else (decorate-source `(set! ,var ,exp) source)))))
|
||||||
|
|
||||||
;; Before modules are booted, we can't expand into data structures from
|
;; Before modules are booted, we can't expand into data structures from
|
||||||
;; (language tree-il) -- we need to give the evaluator the
|
;; (language tree-il) -- we need to give the evaluator the
|
||||||
|
@ -403,11 +410,11 @@
|
||||||
(lambda (mod var public?)
|
(lambda (mod var public?)
|
||||||
(case (fluid-ref *mode*)
|
(case (fluid-ref *mode*)
|
||||||
((c) ((@ (language tree-il) make-module-ref) source mod var public?))
|
((c) ((@ (language tree-il) make-module-ref) source mod var public?))
|
||||||
(else (list (if public? '@ '@@) mod var))))
|
(else (decorate-source (list (if public? '@ '@@) mod var) source))))
|
||||||
(lambda (var)
|
(lambda (var)
|
||||||
(case (fluid-ref *mode*)
|
(case (fluid-ref *mode*)
|
||||||
((c) ((@ (language tree-il) make-toplevel-ref) source var))
|
((c) ((@ (language tree-il) make-toplevel-ref) source var))
|
||||||
(else var))))))
|
(else (decorate-source var source)))))))
|
||||||
|
|
||||||
(define build-global-assignment
|
(define build-global-assignment
|
||||||
(lambda (source var exp mod)
|
(lambda (source var exp mod)
|
||||||
|
@ -416,11 +423,11 @@
|
||||||
(lambda (mod var public?)
|
(lambda (mod var public?)
|
||||||
(case (fluid-ref *mode*)
|
(case (fluid-ref *mode*)
|
||||||
((c) ((@ (language tree-il) make-module-set) source mod var public? exp))
|
((c) ((@ (language tree-il) make-module-set) source mod var public? exp))
|
||||||
(else `(set! ,(list (if public? '@ '@@) mod var) ,exp))))
|
(else (decorate-source `(set! ,(list (if public? '@ '@@) mod var) ,exp) source))))
|
||||||
(lambda (var)
|
(lambda (var)
|
||||||
(case (fluid-ref *mode*)
|
(case (fluid-ref *mode*)
|
||||||
((c) ((@ (language tree-il) make-toplevel-set) source var exp))
|
((c) ((@ (language tree-il) make-toplevel-set) source var exp))
|
||||||
(else `(set! ,var ,exp)))))))
|
(else (decorate-source `(set! ,var ,exp) source)))))))
|
||||||
|
|
||||||
;; FIXME: there is a bug that prevents (set! ((@ (foo) bar) baz) quz)
|
;; FIXME: there is a bug that prevents (set! ((@ (foo) bar) baz) quz)
|
||||||
;; from working. Hack around it.
|
;; from working. Hack around it.
|
||||||
|
@ -439,7 +446,7 @@
|
||||||
((c)
|
((c)
|
||||||
(maybe-name-value! var exp)
|
(maybe-name-value! var exp)
|
||||||
((@ (language tree-il) make-toplevel-define) source var exp))
|
((@ (language tree-il) make-toplevel-define) source var exp))
|
||||||
(else `(define ,var ,exp)))))
|
(else (decorate-source `(define ,var ,exp) source)))))
|
||||||
|
|
||||||
(define build-lambda
|
(define build-lambda
|
||||||
(lambda (src ids vars docstring exp)
|
(lambda (src ids vars docstring exp)
|
||||||
|
@ -447,25 +454,29 @@
|
||||||
((c) ((@ (language tree-il) make-lambda) src ids vars
|
((c) ((@ (language tree-il) make-lambda) src ids vars
|
||||||
(if docstring `((documentation . ,docstring)) '())
|
(if docstring `((documentation . ,docstring)) '())
|
||||||
exp))
|
exp))
|
||||||
(else `(lambda ,vars ,@(if docstring (list docstring) '())
|
(else (decorate-source
|
||||||
,exp)))))
|
`(lambda ,vars ,@(if docstring (list docstring) '())
|
||||||
|
,exp)
|
||||||
|
src)))))
|
||||||
|
|
||||||
(define build-primref
|
(define build-primref
|
||||||
(lambda (src name)
|
(lambda (src name)
|
||||||
(if (equal? (module-name (current-module)) '(guile))
|
(if (equal? (module-name (current-module)) '(guile))
|
||||||
(case (fluid-ref *mode*)
|
(case (fluid-ref *mode*)
|
||||||
((c) ((@ (language tree-il) make-toplevel-ref) src name))
|
((c) ((@ (language tree-il) make-toplevel-ref) src name))
|
||||||
(else name))
|
(else (decorate-source name src)))
|
||||||
(case (fluid-ref *mode*)
|
(case (fluid-ref *mode*)
|
||||||
((c) ((@ (language tree-il) make-module-ref) src '(guile) name #f))
|
((c) ((@ (language tree-il) make-module-ref) src '(guile) name #f))
|
||||||
(else `(@@ (guile) ,name))))))
|
(else (decorate-source `(@@ (guile) ,name) src))))))
|
||||||
|
|
||||||
(define (build-data src exp)
|
(define (build-data src exp)
|
||||||
(case (fluid-ref *mode*)
|
(case (fluid-ref *mode*)
|
||||||
((c) ((@ (language tree-il) make-const) src exp))
|
((c) ((@ (language tree-il) make-const) src exp))
|
||||||
(else (if (and (self-evaluating? exp) (not (vector? exp)))
|
(else (decorate-source
|
||||||
exp
|
(if (and (self-evaluating? exp) (not (vector? exp)))
|
||||||
(list 'quote exp)))))
|
exp
|
||||||
|
(list 'quote exp))
|
||||||
|
src))))
|
||||||
|
|
||||||
(define build-sequence
|
(define build-sequence
|
||||||
(lambda (src exps)
|
(lambda (src exps)
|
||||||
|
@ -473,7 +484,7 @@
|
||||||
(car exps)
|
(car exps)
|
||||||
(case (fluid-ref *mode*)
|
(case (fluid-ref *mode*)
|
||||||
((c) ((@ (language tree-il) make-sequence) src exps))
|
((c) ((@ (language tree-il) make-sequence) src exps))
|
||||||
(else `(begin ,@exps))))))
|
(else (decorate-source `(begin ,@exps) src))))))
|
||||||
|
|
||||||
(define build-let
|
(define build-let
|
||||||
(lambda (src ids vars val-exps body-exp)
|
(lambda (src ids vars val-exps body-exp)
|
||||||
|
@ -483,7 +494,9 @@
|
||||||
((c)
|
((c)
|
||||||
(for-each maybe-name-value! ids val-exps)
|
(for-each maybe-name-value! ids val-exps)
|
||||||
((@ (language tree-il) make-let) src ids vars val-exps body-exp))
|
((@ (language tree-il) make-let) src ids vars val-exps body-exp))
|
||||||
(else `(let ,(map list vars val-exps) ,body-exp))))))
|
(else (decorate-source
|
||||||
|
`(let ,(map list vars val-exps) ,body-exp)
|
||||||
|
src))))))
|
||||||
|
|
||||||
(define build-named-let
|
(define build-named-let
|
||||||
(lambda (src ids vars val-exps body-exp)
|
(lambda (src ids vars val-exps body-exp)
|
||||||
|
@ -500,7 +513,9 @@
|
||||||
(list f-name) (list f) (list proc)
|
(list f-name) (list f) (list proc)
|
||||||
(build-application src (build-lexical-reference 'fun src f-name f)
|
(build-application src (build-lexical-reference 'fun src f-name f)
|
||||||
val-exps))))
|
val-exps))))
|
||||||
(else `(let ,f ,(map list vars val-exps) ,body-exp))))))
|
(else (decorate-source
|
||||||
|
`(let ,f ,(map list vars val-exps) ,body-exp)
|
||||||
|
src))))))
|
||||||
|
|
||||||
(define build-letrec
|
(define build-letrec
|
||||||
(lambda (src ids vars val-exps body-exp)
|
(lambda (src ids vars val-exps body-exp)
|
||||||
|
@ -510,7 +525,9 @@
|
||||||
((c)
|
((c)
|
||||||
(for-each maybe-name-value! ids val-exps)
|
(for-each maybe-name-value! ids val-exps)
|
||||||
((@ (language tree-il) make-letrec) src ids vars val-exps body-exp))
|
((@ (language tree-il) make-letrec) src ids vars val-exps body-exp))
|
||||||
(else `(letrec ,(map list vars val-exps) ,body-exp))))))
|
(else (decorate-source
|
||||||
|
`(letrec ,(map list vars val-exps) ,body-exp)
|
||||||
|
src))))))
|
||||||
|
|
||||||
;; FIXME: wingo: use make-lexical ?
|
;; FIXME: wingo: use make-lexical ?
|
||||||
(define-syntax build-lexical-var
|
(define-syntax build-lexical-var
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue