*/
static int
format_typeof(
- const char *type,
- int usetvs UNUSED)
+ const char *type)
{
// allowed values: \0, h, l, L
char length_modifier = '\0';
default: break;
}
-# if defined(FEAT_EVAL)
- if (usetvs)
- {
- switch (fmt_spec)
- {
- case 'd': case 'u': case 'o': case 'x': case 'X':
- if (length_modifier == '\0')
- length_modifier = 'L';
- }
- }
-# endif
-
// get parameter value, do initial processing
switch (fmt_spec)
{
if (fmt_spec == 'p')
return TYPE_POINTER;
else if (fmt_spec == 'b' || fmt_spec == 'B')
- return TYPE_UNSIGNEDINT;
+ return TYPE_UNSIGNEDLONGLONGINT;
else if (fmt_spec == 'd')
{
// signed
format_typename(
const char *type)
{
- switch (format_typeof(type, FALSE))
+ switch (format_typeof(type))
{
case TYPE_INT:
return _(typename_int);
}
else
{
- if (format_typeof(type, FALSE) != format_typeof((*ap_types)[arg - 1], FALSE))
+ if (format_typeof(type) != format_typeof((*ap_types)[arg - 1]))
{
semsg(_( e_positional_arg_num_type_inconsistent_str_str), arg, format_typename(type), format_typename((*ap_types)[arg - 1]));
return FAIL;
va_list ap_start,
va_list *ap,
int *arg_idx,
- int *arg_cur)
+ int *arg_cur,
+ const char *fmt)
{
int arg_min = 0;
for (*arg_cur = arg_min; *arg_cur < *arg_idx - 1; ++*arg_cur)
{
- const char *p = ap_types[*arg_cur];
+ const char *p;
+
+ if (ap_types == NULL || ap_types[*arg_cur] == NULL)
+ {
+ semsg(e_aptypes_is_null_str_nr, fmt, *arg_cur);
+ return;
+ }
+
+ p = ap_types[*arg_cur];
- int fmt_type = format_typeof(p, TRUE);
+ int fmt_type = format_typeof(p);
// get parameter value, do initial processing
switch (fmt_type)
# if defined(FEAT_EVAL)
tvs != NULL ? tv_nr(tvs, &arg_idx) :
# endif
- (skip_to_arg(ap_types, ap_start, &ap, &arg_idx, &arg_cur),
+ (skip_to_arg(ap_types, ap_start, &ap, &arg_idx,
+ &arg_cur, fmt),
va_arg(ap, int));
if (j >= 0)
# if defined(FEAT_EVAL)
tvs != NULL ? tv_nr(tvs, &arg_idx) :
# endif
- (skip_to_arg(ap_types, ap_start, &ap, &arg_idx, &arg_cur),
+ (skip_to_arg(ap_types, ap_start, &ap, &arg_idx,
+ &arg_cur, fmt),
va_arg(ap, int));
if (j >= 0)
# if defined(FEAT_EVAL)
tvs != NULL ? tv_nr(tvs, &arg_idx) :
# endif
- (skip_to_arg(ap_types, ap_start, &ap, &arg_idx, &arg_cur),
+ (skip_to_arg(ap_types, ap_start, &ap, &arg_idx,
+ &arg_cur, fmt),
va_arg(ap, int));
// standard demands unsigned char
# if defined(FEAT_EVAL)
tvs != NULL ? tv_str(tvs, &arg_idx, &tofree) :
# endif
- (skip_to_arg(ap_types, ap_start, &ap, &arg_idx, &arg_cur),
+ (skip_to_arg(ap_types, ap_start, &ap, &arg_idx,
+ &arg_cur, fmt),
va_arg(ap, char *));
if (str_arg == NULL)
tvs != NULL ? (void *)tv_str(tvs, &arg_idx,
NULL) :
# endif
- (skip_to_arg(ap_types, ap_start, &ap, &arg_idx, &arg_cur),
+ (skip_to_arg(ap_types, ap_start, &ap, &arg_idx,
+ &arg_cur, fmt),
va_arg(ap, void *));
if (ptr_arg != NULL)
tvs != NULL ?
(uvarnumber_T)tv_nr(tvs, &arg_idx) :
# endif
- (skip_to_arg(ap_types, ap_start, &ap, &arg_idx, &arg_cur),
+ (skip_to_arg(ap_types, ap_start, &ap, &arg_idx,
+ &arg_cur, fmt),
va_arg(ap, uvarnumber_T));
if (bin_arg != 0)
# if defined(FEAT_EVAL)
tvs != NULL ? tv_nr(tvs, &arg_idx) :
# endif
- (skip_to_arg(ap_types, ap_start, &ap, &arg_idx, &arg_cur),
+ (skip_to_arg(ap_types, ap_start, &ap, &arg_idx,
+ &arg_cur, fmt),
va_arg(ap, int));
if (int_arg > 0)
# if defined(FEAT_EVAL)
tvs != NULL ? tv_nr(tvs, &arg_idx) :
# endif
- (skip_to_arg(ap_types, ap_start, &ap, &arg_idx, &arg_cur),
+ (skip_to_arg(ap_types, ap_start, &ap, &arg_idx,
+ &arg_cur, fmt),
va_arg(ap, long int));
if (long_arg > 0)
# if defined(FEAT_EVAL)
tvs != NULL ? tv_nr(tvs, &arg_idx) :
# endif
- (skip_to_arg(ap_types, ap_start, &ap, &arg_idx, &arg_cur),
+ (skip_to_arg(ap_types, ap_start, &ap, &arg_idx,
+ &arg_cur, fmt),
va_arg(ap, varnumber_T));
if (llong_arg > 0)
tvs != NULL ? (unsigned)
tv_nr(tvs, &arg_idx) :
# endif
- (skip_to_arg(ap_types, ap_start, &ap, &arg_idx, &arg_cur),
+ (skip_to_arg(ap_types, ap_start, &ap, &arg_idx,
+ &arg_cur, fmt),
va_arg(ap, unsigned int));
if (uint_arg != 0)
tvs != NULL ? (unsigned long)
tv_nr(tvs, &arg_idx) :
# endif
- (skip_to_arg(ap_types, ap_start, &ap, &arg_idx, &arg_cur),
+ (skip_to_arg(ap_types, ap_start, &ap, &arg_idx,
+ &arg_cur, fmt),
va_arg(ap, unsigned long int));
if (ulong_arg != 0)
tvs != NULL ? (uvarnumber_T)
tv_nr(tvs, &arg_idx) :
# endif
- (skip_to_arg(ap_types, ap_start, &ap, &arg_idx, &arg_cur),
+ (skip_to_arg(ap_types, ap_start, &ap, &arg_idx,
+ &arg_cur, fmt),
va_arg(ap, uvarnumber_T));
if (ullong_arg != 0)
# if defined(FEAT_EVAL)
tvs != NULL ? tv_float(tvs, &arg_idx) :
# endif
- (skip_to_arg(ap_types, ap_start, &ap, &arg_idx, &arg_cur),
+ (skip_to_arg(ap_types, ap_start, &ap, &arg_idx,
+ &arg_cur, fmt),
va_arg(ap, double));
abs_f = f < 0 ? -f : f;