static lref_t find_package(lref_t name) { _TCHAR *n = get_c_string(name); for (lref_t l = interp.fasl_package_list; CONSP(l); l = CDR(l)) { lref_t p = CAR(l); if (!PACKAGEP(p)) panic("damaged package list"); if (_tcscmp(n, get_c_string(p->as.package.name)) == 0) return p; } return boolcons(false); }
LispObj * LispFindPackage(LispObj *name) { char *string = NULL; if (PACKAGEP(name)) return (name); if (SYMBOLP(name)) string = ATOMID(name)->value; else if (STRINGP(name)) string = THESTR(name); else LispDestroy("FIND-PACKAGE: %s is not a string or symbol", STROBJ(name)); return (LispFindPackageFromString(string)); }
static void fast_read_symbol(lref_t reader, lref_t * retval) { lref_t print_name; fast_read(reader, &print_name, false); if (!STRINGP(print_name)) vmerror_fast_read("symbols must have string print names", reader, print_name); lref_t home; fast_read(reader, &home, false); if (!(PACKAGEP(home) || NULLP(home) || FALSEP(home))) vmerror_fast_read("a symbol must either have a package or NIL/#f for home", reader, home); if (NULLP(home) || FALSEP(home)) *retval = symcons(print_name, NIL); else *retval = simple_intern(print_name, home); if (*retval == NIL) vmerror_fast_read("internal error creating symbol", reader, print_name); }