mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-02 21:10:27 +02:00
fixes so that typing asdfadfasff in the repl doesn't error
Before: > ,c (set! x 3) 0 (make-int8 3) ;; 3 2 (link "x") 5 (variable-set) > ,c (define x 3) 0 (make-int8 3) ;; 3 2 (link "x") 5 (variable-set) After: > ,c (define x 3) 0 (make-int8 3) ;; 3 2 (define "x") 5 (variable-set) * src/vm_loader.c (link): `link' now errors if the variable is undefined. This corresponds with desired behavior, for both `ref' and `set' operations, for scheme. It's not what elisp wants, though. Perhaps elisp linking needs another instruction. (define): New instruction, the same as calling scm_define(), basically. * module/language/scheme/translate.scm (trans-pair): Don't try to look up an existing variable definition when translating `define'; instead use the special-purpose lookup from ghil.scm's `ghil-define'. * module/system/il/compile.scm (codegen): Compile to a different kind of variable access from `set!', specifically via passing 'define as the op to `make-glil-var'. * module/system/il/ghil.scm (ghil-lookup): Don't add to the module table when compiling variable sets via `set!'. (ghil-define): New procedure, for looking up variables for `define'. * module/system/vm/assemble.scm (<vdefine>): New record: a new instruction type. (codegen): Compile `define' module vars into <vdefine>. (dump-object!): <vdefine> == `define'.
This commit is contained in:
parent
859f639074
commit
cd9d95d760
5 changed files with 41 additions and 26 deletions
|
@ -191,7 +191,8 @@
|
|||
(pmatch tail
|
||||
;; (define NAME VAL)
|
||||
((,name ,val) (guard (symbol? name) (ghil-env-toplevel? e))
|
||||
(make-ghil-define e l (ghil-lookup e name) (trans:x val)))
|
||||
(make-ghil-define e l (ghil-define (ghil-env-parent e) name)
|
||||
(trans:x val)))
|
||||
|
||||
;; (define (NAME FORMALS...) BODY...)
|
||||
(((,name . ,formals) . ,body) (guard (symbol? name))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue