ikarus-fasl.c plays along with the rtd-symbol game by setting and

referencing rtd symbols.
This commit is contained in:
Abdulaziz Ghuloum 2006-12-26 11:46:23 +03:00
parent 81b2f217a3
commit 0b38b1ff30
3 changed files with 17 additions and 9 deletions

Binary file not shown.

View File

@ -339,15 +339,23 @@ static ikp do_read(ikpcb* pcb, fasl_port* p){
ptr -= pair_size; ptr -= pair_size;
ref(ptr, off_cdr) = null_object; ref(ptr, off_cdr) = null_object;
} }
ikp rtd = ik_alloc(pcb, align(rtd_size)) + vector_tag; ikp gensym_val = ref(symb, off_symbol_value);
ikp base_sym = ik_cstring_to_symbol("$base-rtd", pcb); ikp rtd;
ikp base_rtd = ref(base_sym, off_symbol_system_value); if(gensym_val == unbound_object){
ref(rtd, off_rtd_rtd) = base_rtd; rtd = ik_alloc(pcb, align(rtd_size)) + vector_tag;
ref(rtd, off_rtd_name) = name; ikp base_sym = ik_cstring_to_symbol("$base-rtd", pcb);
ref(rtd, off_rtd_length) = fix(n); ikp base_rtd = ref(base_sym, off_symbol_system_value);
ref(rtd, off_rtd_fields) = fields; ref(rtd, off_rtd_rtd) = base_rtd;
ref(rtd, off_rtd_printer) = false_object; ref(rtd, off_rtd_name) = name;
ref(rtd, off_rtd_symbol) = symb; ref(rtd, off_rtd_length) = fix(n);
ref(rtd, off_rtd_fields) = fields;
ref(rtd, off_rtd_printer) = false_object;
ref(rtd, off_rtd_symbol) = symb;
ref(symb, off_symbol_value) = rtd;
pcb->dirty_vector[page_index(symb+off_symbol_value)] = -1;
} else {
rtd = gensym_val;
}
if(put_mark_index){ if(put_mark_index){
p->marks[put_mark_index] = rtd; p->marks[put_mark_index] = rtd;
} }

Binary file not shown.