33 for (sv = variables; sv->
name != NULL; ++sv)
37 scm_c_export (sv->
name, NULL);
48 for (sf = functions; sf->
name != NULL; ++sf)
56 scm_c_export (sf->
name, NULL);
68 for (sc = constants; sc->
name != NULL; ++sc)
70 scm_c_define (sc->
name, scm_from_int (sc->
value));
72 scm_c_export (sc->
name, NULL);
84 va_start (args, format);
87 scm_puts (
string, port);
96 SCM port = scm_current_output_port ();
98 scm_display (obj, port);
100 scm_force_output (port);
108 SCM port = scm_current_output_port ();
110 scm_write (obj, port);
112 scm_force_output (port);
123 if (keywords == NULL)
125 for (i = 0; keywords[i] != SCM_BOOL_F; ++i)
139 int length = strlen (format);
140 int optional_position = -1;
141 int keyword_position = -1;
146 for (p = format; *p !=
'\0'; ++p)
163 optional_position = p - format;
167 keyword_position = p - format;
182 #define CHECK_TYPE(ok, arg, position, func_name, expected_type) \
186 return gdbscm_make_type_error ((func_name), (position), (arg), \
198 const char *func_name,
int position)
204 char **arg_ptr = argp;
207 func_name,
_(
"string"));
226 arg, position, func_name,
_(
"int"));
227 *arg_ptr = scm_to_int (arg);
235 arg, position, func_name,
_(
"unsigned int"));
236 *arg_ptr = scm_to_uint (arg);
241 long *arg_ptr = argp;
244 arg, position, func_name,
_(
"long"));
245 *arg_ptr = scm_to_long (arg);
250 unsigned long *arg_ptr = argp;
253 arg, position, func_name,
_(
"unsigned long"));
254 *arg_ptr = scm_to_ulong (arg);
261 CHECK_TYPE (scm_is_signed_integer (arg, INT64_MIN, INT64_MAX),
262 arg, position, func_name,
_(
"LONGEST"));
270 CHECK_TYPE (scm_is_unsigned_integer (arg, 0, UINT64_MAX),
271 arg, position, func_name,
_(
"ULONGEST"));
299 while (keyword_list[i] != SCM_BOOL_F)
301 if (scm_is_eq (keyword_list[i], keyword))
378 int beginning_arg_pos,
380 const char *format, ...)
384 int i, have_rest, num_keywords,
length, position;
385 int have_optional = 0;
395 va_start (args, format);
398 position = beginning_arg_pos;
402 while (*p && *p !=
'#' && *p !=
'.')
414 arg = va_arg (args, SCM);
415 if (!have_optional || !SCM_UNBNDP (arg))
417 arg_ptr = va_arg (args,
void *);
418 status =
extract_arg (*p, arg, arg_ptr, func_name, position);
430 if (have_rest || num_keywords > 0)
431 rest = va_arg (args, SCM);
433 if (num_keywords > 0)
435 SCM *keyword_args = (SCM *) alloca (num_keywords *
sizeof (SCM));
436 int *keyword_positions = (
int *) alloca (num_keywords *
sizeof (
int));
441 for (i = 0; i < num_keywords; ++i)
443 keyword_args[i] = SCM_UNSPECIFIED;
444 keyword_positions[i] = -1;
447 while (scm_is_pair (rest)
448 && scm_is_keyword (scm_car (rest)))
456 _(
"Unrecognized keyword: ~a"),
457 scm_list_1 (keyword), keyword);
460 if (!scm_is_pair (scm_cdr (rest)))
463 (scm_arg_type_key, func_name,
464 _(
"Missing value for keyword argument"),
465 scm_list_1 (keyword), keyword);
468 keyword_args[i] = scm_cadr (rest);
469 keyword_positions[i] = position + 1;
470 rest = scm_cddr (rest);
474 for (i = 0; i < num_keywords; ++i)
476 int *arg_pos_ptr = va_arg (args,
int *);
477 void *arg_ptr = va_arg (args,
void *);
478 SCM arg = keyword_args[i];
480 if (! scm_is_eq (arg, SCM_UNSPECIFIED))
482 *arg_pos_ptr = keyword_positions[i];
483 status =
extract_arg (p[i], arg, arg_ptr, func_name,
484 keyword_positions[i]);
500 if (num_keywords > 0)
502 SCM *rest_ptr = va_arg (args, SCM *);
509 if (! scm_is_null (rest))
512 _(
"Too many arguments"),
513 SCM_EOL, SCM_BOOL_F);
535 return scm_from_int64 (l);
546 return scm_to_int64 (l);
554 return scm_from_uint64 (l);
565 return scm_to_uint64 (u);
573 scm_dynwind_unwind_handler (
xfree, ptr, SCM_F_WIND_EXPLICITLY);
589 size_t len = strlen (str);
590 char *result = scm_gc_malloc_pointerless (len + 1,
"gdbscm_gc_xstrdup");
592 strcpy (result, str);
605 for (len = 0, string_space = 0; argv[
len] != NULL; ++
len)
606 string_space += strlen (argv[len]) + 1;
610 result = scm_gc_malloc_pointerless (((len + 1) *
sizeof (
char *))
611 + string_space,
"parameter enum list");
612 p = (
char *) &result[len + 1];
614 for (i = 0; i <
len; ++i)
622 return (
const char *
const *) result;
#define CHECK_TYPE(ok, arg, position, func_name, expected_type)
void gdbscm_dynwind_xfree(void *ptr)
int gdbscm_guile_major_version
void gdbscm_parse_function_args(const char *func_name, int beginning_arg_pos, const SCM *keywords, const char *format,...)
SCM gdbscm_scm_from_longest(LONGEST l)
static int validate_arg_format(const char *format)
char * xstrvprintf(const char *format, va_list ap)
static int lookup_keyword(const SCM *keyword_list, SCM keyword)
char * gdbscm_scm_to_c_string(SCM string)
void gdbscm_define_integer_constants(const scheme_integer_constant *constants, int is_public)
#define VEC_safe_push(T, V, O)
#define gdbscm_is_bool(scm)
static int count_keywords(const SCM *keywords)
void gdbscm_define_variables(const scheme_variable *variables, int is_public)
#define gdbscm_is_true(scm)
char * gdbscm_gc_xstrdup(const char *str)
int gdbscm_guile_minor_version
void gdbscm_define_functions(const scheme_function *functions, int is_public)
#define VEC_iterate(T, V, I, P)
SCM gdbscm_scm_from_c_string(const char *string)
#define gdbscm_is_false(scm)
mach_port_t mach_port_t name mach_port_t mach_port_t name error_t int status
#define gdb_assert_not_reached(message)
void gdbscm_throw(SCM exception) ATTRIBUTE_NORETURN
const char *const * gdbscm_gc_dup_argv(char **argv)
void gdbscm_debug_display(SCM obj)
int gdbscm_guile_version_is_at_least(int major, int minor, int micro)
static SCM extract_arg(char format_char, SCM arg, void *argp, const char *func_name, int position)
void gdbscm_printf(SCM port, const char *format,...)
int gdbscm_is_procedure(SCM proc)
SCM gdbscm_documentation_symbol
SCM gdbscm_scm_from_ulongest(ULONGEST l)
unsigned long long ULONGEST
SCM gdbscm_make_error(SCM key, const char *subr, const char *message, SCM args, SCM data)
ULONGEST gdbscm_scm_to_ulongest(SCM u)
void gdbscm_debug_write(SCM obj)
int gdbscm_guile_micro_version
const ULONGEST const LONGEST len
LONGEST gdbscm_scm_to_longest(SCM l)