diff --git a/src/c/pathname.d b/src/c/pathname.d index b6c734478..5dc70a68d 100644 --- a/src/c/pathname.d +++ b/src/c/pathname.d @@ -410,6 +410,15 @@ L: } } +cl_object +cl_logical_pathname(cl_object x) +{ + x = cl_pathname(x); + if (!x->pathname.logical) + FEerror("~S cannot be coerced to a logical pathname.", 1, x); + return x; +} + /* * coerce_to_physical_pathname(P) converts P to a physical pathname, * for a file which is accesible in our filesystem. diff --git a/src/c/symbols_list.h b/src/c/symbols_list.h index 625561542..16b3285ee 100644 --- a/src/c/symbols_list.h +++ b/src/c/symbols_list.h @@ -458,7 +458,7 @@ cl_symbols[] = { {"LOGBITP", CL_ORDINARY, cl_logbitp, 2}, {"LOGCOUNT", CL_ORDINARY, cl_logcount, 1}, {"LOGEQV", CL_ORDINARY, cl_logeqv, -1}, -{"LOGICAL-PATHNAME", CL_ORDINARY, NULL, -1}, +{"LOGICAL-PATHNAME", CL_ORDINARY, cl_logical_pathname, 1}, {"LOGICAL-PATHNAME-TRANSLATIONS", CL_ORDINARY, NULL, -1}, {"LOGIOR", CL_ORDINARY, cl_logior, -1}, {"LOGNAND", CL_ORDINARY, cl_lognand, 2}, diff --git a/src/h/external.h b/src/h/external.h index 0fbf051be..2b1e10354 100644 --- a/src/h/external.h +++ b/src/h/external.h @@ -894,6 +894,7 @@ extern void init_package(void); /* pathname.c */ extern cl_object cl_pathname(cl_object name); +extern cl_object cl_logical_pathname(cl_object pname); extern cl_object cl_pathnamep(cl_object pname); extern cl_object cl_pathname_host(cl_object pname); extern cl_object cl_pathname_device(cl_object pname);