mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-03-13 16:30:32 -07:00
Changed reader/writer syntax for bytecodes so that shared constants remain shared.
This commit is contained in:
parent
bc0c5db519
commit
991bc3ab78
2 changed files with 36 additions and 45 deletions
|
|
@ -19,37 +19,6 @@
|
|||
#include <ecl/internal.h>
|
||||
#include <ecl/bytecodes.h>
|
||||
|
||||
void
|
||||
_ecl_write_bclosure(cl_object x, cl_object stream)
|
||||
{
|
||||
if (ecl_print_readably()) {
|
||||
cl_index i;
|
||||
cl_object lex = x->bclosure.lex;
|
||||
cl_object code_l=Cnil, data_l=Cnil;
|
||||
x = x->bclosure.code;
|
||||
for ( i=x->bytecodes.code_size-1 ; i<(cl_index)(-1l) ; i-- )
|
||||
code_l = ecl_cons(MAKE_FIXNUM(((cl_opcode*)(x->bytecodes.code))[i]), code_l);
|
||||
data_l = cl_funcall(3, @'concatenate', @'list',
|
||||
x->bytecodes.data);
|
||||
|
||||
writestr_stream("#Y", stream);
|
||||
si_write_ugly_object(cl_list(7, x->bytecodes.name, lex,
|
||||
Cnil /* x->bytecodes.definition */,
|
||||
code_l, data_l,
|
||||
x->bytecodes.file,
|
||||
x->bytecodes.file_position),
|
||||
stream);
|
||||
} else {
|
||||
cl_object name = x->bytecodes.name;
|
||||
writestr_stream("#<bytecompiled-closure ", stream);
|
||||
if (name != Cnil)
|
||||
si_write_ugly_object(name, stream);
|
||||
else
|
||||
_ecl_write_addr(x, stream);
|
||||
ecl_write_char('>', stream);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
_ecl_write_bytecodes(cl_object x, cl_object stream)
|
||||
{
|
||||
|
|
@ -59,12 +28,10 @@ _ecl_write_bytecodes(cl_object x, cl_object stream)
|
|||
cl_object code_l=Cnil, data_l=Cnil;
|
||||
for ( i=x->bytecodes.code_size-1 ; i<(cl_index)(-1l) ; i-- )
|
||||
code_l = ecl_cons(MAKE_FIXNUM(((cl_opcode*)(x->bytecodes.code))[i]), code_l);
|
||||
data_l = cl_funcall(3, @'concatenate', @'list',
|
||||
x->bytecodes.data);
|
||||
writestr_stream("#Y", stream);
|
||||
si_write_ugly_object(cl_list(7, x->bytecodes.name, lex,
|
||||
Cnil /* x->bytecodes.definition */,
|
||||
code_l, data_l,
|
||||
code_l, x->bytecodes.data,
|
||||
x->bytecodes.file,
|
||||
x->bytecodes.file_position),
|
||||
stream);
|
||||
|
|
@ -78,3 +45,26 @@ _ecl_write_bytecodes(cl_object x, cl_object stream)
|
|||
ecl_write_char('>', stream);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
_ecl_write_bclosure(cl_object x, cl_object stream)
|
||||
{
|
||||
if (ecl_print_readably()) {
|
||||
cl_object lex = x->bclosure.lex;
|
||||
if (Null(lex)) {
|
||||
_ecl_write_bytecodes(x->bclosure.code, stream);
|
||||
} else {
|
||||
writestr_stream("#Y", stream);
|
||||
si_write_ugly_object(cl_list(2, x->bclosure.code, lex),
|
||||
stream);
|
||||
}
|
||||
} else {
|
||||
cl_object name = x->bytecodes.name;
|
||||
writestr_stream("#<bytecompiled-closure ", stream);
|
||||
if (name != Cnil)
|
||||
si_write_ugly_object(name, stream);
|
||||
else
|
||||
_ecl_write_addr(x, stream);
|
||||
ecl_write_char('>', stream);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue