diff options
author | Ludovic Court`es <ludovic.courtes@laas.fr> | 2005-04-27 09:36:52 +0000 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2008-04-25 19:09:30 +0200 |
commit | fa19602c28cf4a6d54860e98b3c4379b3a058d37 (patch) | |
tree | c33383692afb4b7ded15137b759f0b608647dcf7 /src/programs.c | |
parent | 054599f117f12ea183167c46b62c18cd590181c4 (diff) | |
download | guile-fa19602c28cf4a6d54860e98b3c4379b3a058d37.tar.gz |
Fixed the compiler, got the disassembler working.
* doc/guile-vm.texi: Texified and cleaned up.
* src/vm.c: Use `scm_from_locale_string ()' instead of `scm_makfrom0str ()'.
* src/vm_engine.c: Likewise.
* src/programs.c (scm_program_bytecode): Return a u8vector instead of a string.
* module/system/vm/conv.scm (make-byte-decoder): Fixed a few things wrt. to
the string to u8vector transition.
* src/objcodes.c (bytecode->objcode): Fixed a bug where the last 10 bytes of
the bytecode where ignored.
* module/system/vm/assemble.scm (dump-object!): Don't convert everything
to a u8vector, keep strings where it makes sense.
* module/system/vm/conv.scm (code->bytes): Accordingly, convert strings to
u8vectors when needed.
(make-byte-decoder): Accordingly too, when decoding instructions, return
variable-length instructions' argument as strings except for `load-program'.
* module/system/vm/disasm.scm: Export `disassemble-bytecode'.
git-archimport-id: lcourtes@laas.fr--2004-libre/guile-vm--revival--0.6--patch-4
Diffstat (limited to 'src/programs.c')
-rw-r--r-- | src/programs.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/programs.c b/src/programs.c index 5c1cb49c4..111f87f66 100644 --- a/src/programs.c +++ b/src/programs.c @@ -188,15 +188,26 @@ SCM_DEFINE (scm_program_external, "program-external", 1, 0, 0, SCM_DEFINE (scm_program_bytecode, "program-bytecode", 1, 0, 0, (SCM program), - "") + "Return a u8vector containing @var{program}'s bytecode.") #define FUNC_NAME s_scm_program_bytecode { + size_t size; + char *c_bytecode; + SCM_VALIDATE_PROGRAM (1, program); - return scm_makfromstr (SCM_PROGRAM_DATA (program)->base, - SCM_PROGRAM_DATA (program)->size, 0); + + size = SCM_PROGRAM_DATA (program)->size; + c_bytecode = malloc (size); + if (!c_bytecode) + return SCM_BOOL_F; + + memcpy (c_bytecode, SCM_PROGRAM_DATA (program)->base, size); + + return scm_take_u8vector (c_bytecode, size); } #undef FUNC_NAME + void scm_init_programs (void) |