LispObj find_symbol_in_range(LispObj *start, LispObj *end, char *name) { LispObj header; int n = strlen(name); char *s = name, *p; while (start < end) { header = *start; if (header_subtag(header) == subtag_symbol) { LispObj pname = deref(start, 1), pname_header = header_of(pname); if ((header_subtag(pname_header) == subtag_simple_base_string) && (header_element_count(pname_header) == n)) { p = (char *) (pname + misc_data_offset); if (strncmp(p, s, n) == 0) { return ((LispObj)start)+fulltag_misc; } } } if (fulltag_of(header) == fulltag_nodeheader) { start += (~1 & (2 + header_element_count(header))); } else if (fulltag_of(header) == fulltag_immheader) { start = (LispObj *) skip_over_ivector((unsigned)start, header); } else { start += 2; } } return (LispObj)NULL; }
LispObj find_symbol_in_range(LispObj *start, LispObj *end, char *name) { LispObj header, tag; int n = strlen(name); char *s = name; lisp_char_code *p; while (start < end) { header = *start; tag = fulltag_of(header); if (header_subtag(header) == subtag_symbol) { LispObj pname = deref(ptr_to_lispobj(start), 1), pname_header = header_of(pname); if ((header_subtag(pname_header) == subtag_simple_base_string) && (header_element_count(pname_header) == n)) { p = (lisp_char_code *) ptr_from_lispobj(pname + misc_data_offset); if (compare_lisp_string_to_c_string(p, s, n) == 0) { return (ptr_to_lispobj(start))+fulltag_misc; } } } if (nodeheader_tag_p(tag)) { start += (~1 & (2 + header_element_count(header))); } else if (immheader_tag_p(tag)) { start = (LispObj *) skip_over_ivector((natural)start, header); } else { start += 2; } } return (LispObj)NULL; }