summaryrefslogtreecommitdiff
path: root/src/programs.c
diff options
context:
space:
mode:
authorLudovic Court`es <ludovic.courtes@laas.fr>2005-04-27 09:36:52 +0000
committerLudovic Courtès <ludo@gnu.org>2008-04-25 19:09:30 +0200
commitfa19602c28cf4a6d54860e98b3c4379b3a058d37 (patch)
treec33383692afb4b7ded15137b759f0b608647dcf7 /src/programs.c
parent054599f117f12ea183167c46b62c18cd590181c4 (diff)
downloadguile-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.c17
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)