return i1 < SCHARS (s2) ? Qt : Qnil;
}
\f
+enum concat_target_type
+ {
+ concat_cons,
+ concat_string,
+ concat_vector
+ };
+
static Lisp_Object concat (ptrdiff_t nargs, Lisp_Object *args,
- enum Lisp_Type target_type, bool last_special);
+ enum concat_target_type target_type, bool last_special);
/* ARGSUSED */
Lisp_Object
Lisp_Object args[2];
args[0] = s1;
args[1] = s2;
- return concat (2, args, Lisp_String, 0);
+ return concat (2, args, concat_string, 0);
}
/* ARGSUSED */
args[0] = s1;
args[1] = s2;
args[2] = s3;
- return concat (3, args, Lisp_String, 0);
+ return concat (3, args, concat_string, 0);
}
DEFUN ("append", Fappend, Sappend, 0, MANY, 0,
usage: (append &rest SEQUENCES) */)
(ptrdiff_t nargs, Lisp_Object *args)
{
- return concat (nargs, args, Lisp_Cons, 1);
+ return concat (nargs, args, concat_cons, 1);
}
DEFUN ("concat", Fconcat, Sconcat, 0, MANY, 0,
usage: (concat &rest SEQUENCES) */)
(ptrdiff_t nargs, Lisp_Object *args)
{
- return concat (nargs, args, Lisp_String, 0);
+ return concat (nargs, args, concat_string, 0);
}
DEFUN ("vconcat", Fvconcat, Svconcat, 0, MANY, 0,
usage: (vconcat &rest SEQUENCES) */)
(ptrdiff_t nargs, Lisp_Object *args)
{
- return concat (nargs, args, Lisp_Vectorlike, 0);
+ return concat (nargs, args, concat_vector, 0);
}
return val;
}
- if (!CONSP (arg) && !VECTORP (arg) && !STRINGP (arg))
+ if (CONSP (arg))
+ return concat (1, &arg, concat_cons, 0);
+ else if (STRINGP (arg))
+ return concat (1, &arg, concat_string, 0);
+ else if (VECTORP (arg))
+ return concat (1, &arg, concat_vector, 0);
+ else
wrong_type_argument (Qsequencep, arg);
-
- return concat (1, &arg, XTYPE (arg), 0);
}
/* This structure holds information of an argument of `concat' that is
static Lisp_Object
concat (ptrdiff_t nargs, Lisp_Object *args,
- enum Lisp_Type target_type, bool last_special)
+ enum concat_target_type target_type, bool last_special)
{
Lisp_Object val;
Lisp_Object tail;
EMACS_INT len;
this = args[argnum];
len = XFASTINT (Flength (this));
- if (target_type == Lisp_String)
+ if (target_type == concat_string)
{
/* We must count the number of bytes needed in the string
as well as the number of characters. */
result_len_byte = result_len;
/* Create the output object. */
- if (target_type == Lisp_Cons)
+ if (target_type == concat_cons)
val = Fmake_list (make_number (result_len), Qnil);
- else if (target_type == Lisp_Vectorlike)
+ else if (target_type == concat_vector)
val = Fmake_vector (make_number (result_len), Qnil);
else if (some_multibyte)
val = make_uninit_multibyte_string (result_len, result_len_byte);
val = make_uninit_string (result_len);
/* In `append', if all but last arg are nil, return last arg. */
- if (target_type == Lisp_Cons && EQ (val, Qnil))
+ if (target_type == concat_cons && EQ (val, Qnil))
return last_tail;
/* Copy the contents of the args into the result. */
CHECK_LIST (alist);
if (NILP (alist))
return alist;
- alist = concat (1, &alist, Lisp_Cons, 0);
+ alist = concat (1, &alist, concat_cons, 0);
for (tem = alist; CONSP (tem); tem = XCDR (tem))
{
register Lisp_Object car;