@@ -949,29 +949,22 @@ CL_DECLARE();
949949CL_DOCSTRING (R"dx( CLHS schar)dx" );
950950DOCGROUP (clasp);
951951CL_DEFUN Character_sp cl__schar (AbstractSimpleVector_sp str, size_t idx) {
952- if (SimpleBaseString_sp sb = str.asOrNull <SimpleBaseString_O>()) {
953- return clasp_make_character (sb[idx]);
954- } else if (SimpleCharacterString_sp sc = str.asOrNull <SimpleCharacterString_O>()) {
955- return clasp_make_character (sc[idx]);
956- }
957- TYPE_ERROR (str, cl::_sym_simple_string);
952+ if (str.isA <SimpleBaseString_O>()
953+ || str.isA <SimpleCharacterString_O>())
954+ return cl__rowMajorAref (str, idx);
955+ else
956+ TYPE_ERROR (str, cl::_sym_simple_string);
958957}
959958
960959CL_LAMBDA (str idx);
961960CL_DOCSTRING (R"dx( Common lisp char)dx" );
962961DOCGROUP (clasp);
963962CL_DEFUN Character_sp cl__char (String_sp str, size_t idx) {
964- /* Return the character at idx - ignore fill pointers */
965- if (SimpleBaseString_sp sb = str.asOrNull <SimpleBaseString_O>()) {
966- return clasp_make_character (sb[idx]);
967- } else if (Str8Ns_sp s8 = str.asOrNull <Str8Ns_O>()) {
968- return clasp_make_character (s8[idx]);
969- } else if (SimpleCharacterString_sp sc = str.asOrNull <SimpleCharacterString_O>()) {
970- return clasp_make_character (sc[idx]);
971- } else if (StrWNs_sp sw = str.asOrNull <StrWNs_O>()) {
972- return clasp_make_character (sw[idx]);
973- }
974- TYPE_ERROR (str, cl::_sym_string);
963+ if (str.isA <SimpleBaseString_O>() || str.isA <Str8Ns_O>()
964+ || str.isA <SimpleCharacterString_O>() || str.isA <StrWNs_O>())
965+ return cl__rowMajorAref (str, idx);
966+ else
967+ TYPE_ERROR (str, cl::_sym_string);
975968};
976969
977970CL_LISPIFY_NAME (" cl:char" );
@@ -980,18 +973,12 @@ CL_DECLARE();
980973CL_DOCSTRING (R"dx( CLHS (setf char))dx" );
981974DOCGROUP (clasp);
982975CL_DEFUN_SETF Character_sp core__char_set (Character_sp c, String_sp str, size_t idx) {
983- if (SimpleBaseString_sp sb = str.asOrNull <SimpleBaseString_O>()) {
984- sb[idx] = c.unsafe_character ();
985- } else if (Str8Ns_sp s8 = str.asOrNull <Str8Ns_O>()) {
986- s8[idx] = c.unsafe_character ();
987- } else if (SimpleCharacterString_sp sc = str.asOrNull <SimpleCharacterString_O>()) {
988- sc[idx] = c.unsafe_character ();
989- } else if (StrWNs_sp sw = str.asOrNull <StrWNs_O>()) {
990- sw[idx] = c.unsafe_character ();
991- } else {
976+ if (str.isA <SimpleBaseString_O>() || str.isA <Str8Ns_O>()
977+ || str.isA <SimpleCharacterString_O>() || str.isA <StrWNs_O>()) {
978+ core__rowMajorAset (c, str, idx);
979+ return c;
980+ } else
992981 TYPE_ERROR (str, cl::_sym_string);
993- }
994- return c;
995982};
996983
997984CL_LISPIFY_NAME (" cl:schar" );
@@ -1000,8 +987,12 @@ CL_DECLARE();
1000987CL_DOCSTRING (R"dx( CLHS (setf schar))dx" );
1001988DOCGROUP (clasp);
1002989CL_DEFUN_SETF Character_sp core__schar_set (Character_sp c, String_sp str, size_t idx) {
1003- str->rowMajorAset (idx, c);
1004- return c;
990+ if (str.isA <SimpleBaseString_O>()
991+ || str.isA <SimpleCharacterString_O>()) {
992+ core__rowMajorAset (c, str, idx);
993+ return c;
994+ } else
995+ TYPE_ERROR (str, cl::_sym_simple_string);
1005996};
1006997
1007998typedef enum { iinit, iwhite, inum, itrailspace, ijunk, idone } IntegerFSMState;
0 commit comments