I want to show that different optimisations are being
applied by ecl itself and its invocation of the cc.
In a nutshell I'm pretty sure that quoted objects end up in
read-only memory when seen by #'compile-file.
Reiterating from last time a little,
(defun foo () '(1 2 3))
(disassemble 'foo)
/* function definition for FOO */
/* optimize speed 3, debug 0, space 0, safety 2 */
static cl_object L1foo()
{
cl_object env0 = ECL_NIL;
const cl_env_ptr cl_env_copy = ecl_process_env();
cl_object value0;
ecl_cs_check(cl_env_copy,value0);
{
TTL:
value0 = VV[1];
cl_env_copy->nvalues = 1;
return value0;
}
}
And now I want to see how this ends up when compiling an ecl
source file. Which involves a little bit of undocumented ecl
features.
```foo.ecl
(defun foo () '(1 2 3))
```
(ext:install-compiler)
(setq c::*delete-files* nil)
(compile-file #p\"foo.ecl\")
Now we have the left overs:
foo.c
foo.data
foo.ecl
foo.eclh
foo.fas
foo.o
Then, the foo.data include is
static const struct ecl_base_string compiler_data_text1[] =
{ (int8_t)t_base_string, 0, ecl_aet_bc, 0,
ECL_NIL, (cl_index)100, (cl_index)100,
(ecl_base_char*)
"common-lisp-user::foo (1 2 3) 0 (defun
common-lisp-user::foo) (#P\"foo.ecl\" . 0)" };
static const cl_object compiler_data_text[] = {
(cl_object)compiler_data_text1,
NULL};
So I think the ecl compiler does compilation between the
READ and invoking the cc.