rework the vm support for wide strings
* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump.
* libguile/vm-engine.c (vm_error_bad_wide_string_length): New error
case.
* libguile/vm-i-loader.c (load-unsigned-integer, load-integer)
(load-keyword): Remove these instructions. The former two are
obsoleted by make-int64/make-uint64, the latter via make-keyword.
(load-string): Only handle narrow strings.
(load-symbol): Only handle narrow symbols. The wide case is handled
via make-symbol.
(load-wide-string): New instruction, for wide strings.
* libguile/vm-i-system.c (define): Move here from loaders.c, as now it
just takes a sym on the stack.
(make-keyword, make-symbol): New instructions.
* module/language/assembly.scm: Remove removed instructions. No more
width byte in load-string etc.
* module/language/assembly/compile-bytecode.scm (write-bytecode): Adapt
to change in instruction set.
* module/language/glil/compile-assembly.scm (glil->assembly): Compile
define by pushing the sym then emitting (define).
(dump-object): Dump narrow and wide strings differently. Use
make-keyword and make-symbol as appropriate.
* module/language/tree-il/compile-glil.scm (flatten): When compiling a
ref to a primitive (not a call), first see if the primitive is
actually bound in the root module. (That's not the case with e.g.
bytevector-u8-ref).
* module/system/xref.scm (program-callee-rev-vars): Don't parse out
"nexts".
* test-suite/tests/asm-to-bytecode.test ("compiler"): Adapt to bytecode
format change.
This commit is contained in:
parent
6cf4830798
commit
94ff26b96b
11 changed files with 101 additions and 201 deletions
|
|
@ -35,7 +35,7 @@
|
|||
(progv (make-vector (vector-length objects) #f))
|
||||
(asm (decompile (program-objcode prog) #:to 'assembly)))
|
||||
(pmatch asm
|
||||
((load-program ,nargs ,nrest ,nlocs ,next ,labels ,len . ,body)
|
||||
((load-program ,nargs ,nrest ,nlocs ,labels ,len . ,body)
|
||||
(for-each
|
||||
(lambda (x)
|
||||
(pmatch x
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue