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;
ref(ptr, off_cdr) = null_object;
}
ikp rtd = ik_alloc(pcb, align(rtd_size)) + vector_tag;
ikp base_sym = ik_cstring_to_symbol("$base-rtd", pcb);
ikp base_rtd = ref(base_sym, off_symbol_system_value);
ref(rtd, off_rtd_rtd) = base_rtd;
ref(rtd, off_rtd_name) = name;
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;
ikp gensym_val = ref(symb, off_symbol_value);
ikp rtd;
if(gensym_val == unbound_object){
rtd = ik_alloc(pcb, align(rtd_size)) + vector_tag;
ikp base_sym = ik_cstring_to_symbol("$base-rtd", pcb);
ikp base_rtd = ref(base_sym, off_symbol_system_value);
ref(rtd, off_rtd_rtd) = base_rtd;
ref(rtd, off_rtd_name) = name;
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){
p->marks[put_mark_index] = rtd;
}

Binary file not shown.