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);
83 va_start (args, format);
84 std::string
string = string_vprintf (format, args);
86 scm_puts (
string.c_str (), port);
94 SCM port = scm_current_output_port ();
96 scm_display (obj, port);
98 scm_force_output (port);
106 SCM port = scm_current_output_port ();
108 scm_write (obj, port);
110 scm_force_output (port);
121 if (keywords == NULL)
123 for (i = 0; keywords[i] != SCM_BOOL_F; ++i)
137 int length = strlen (format);
138 int optional_position = -1;
139 int keyword_position = -1;
142 gdb_assert (length > 0);
144 for (p = format; *p !=
'\0'; ++p)
159 gdb_assert (keyword_position < 0);
160 gdb_assert (optional_position < 0);
161 optional_position = p - format;
164 gdb_assert (keyword_position < 0);
165 keyword_position = p - format;
168 gdb_assert (p[1] ==
'\0');
172 gdb_assert_not_reached (
"invalid argument format character");
180#define CHECK_TYPE(ok, arg, position, func_name, expected_type) \
184 return gdbscm_make_type_error ((func_name), (position), (arg), \
196 const char *func_name,
int position)
202 char **arg_ptr = (
char **) argp;
205 func_name, _(
"string"));
211 int *arg_ptr = (
int *) argp;
221 int *arg_ptr = (
int *) argp;
223 CHECK_TYPE (scm_is_signed_integer (arg, INT_MIN, INT_MAX),
224 arg, position, func_name, _(
"int"));
225 *arg_ptr = scm_to_int (arg);
230 int *arg_ptr = (
int *) argp;
232 CHECK_TYPE (scm_is_unsigned_integer (arg, 0, UINT_MAX),
233 arg, position, func_name, _(
"unsigned int"));
234 *arg_ptr = scm_to_uint (arg);
239 long *arg_ptr = (
long *) argp;
241 CHECK_TYPE (scm_is_signed_integer (arg, LONG_MIN, LONG_MAX),
242 arg, position, func_name, _(
"long"));
243 *arg_ptr = scm_to_long (arg);
248 unsigned long *arg_ptr = (
unsigned long *) argp;
250 CHECK_TYPE (scm_is_unsigned_integer (arg, 0, ULONG_MAX),
251 arg, position, func_name, _(
"unsigned long"));
252 *arg_ptr = scm_to_ulong (arg);
257 LONGEST *arg_ptr = (LONGEST *) argp;
259 CHECK_TYPE (scm_is_signed_integer (arg, INT64_MIN, INT64_MAX),
260 arg, position, func_name, _(
"LONGEST"));
266 ULONGEST *arg_ptr = (ULONGEST *) argp;
268 CHECK_TYPE (scm_is_unsigned_integer (arg, 0, UINT64_MAX),
269 arg, position, func_name, _(
"ULONGEST"));
275 SCM *arg_ptr = (SCM *) argp;
281 gdb_assert_not_reached (
"invalid argument format character");
297 while (keyword_list[i] != SCM_BOOL_F)
299 if (scm_is_eq (keyword_list[i],
keyword))
315 int beginning_arg_pos,
317 const char *format, va_list args)
320 int i, have_rest, num_keywords, position;
321 int have_optional = 0;
325 std::vector<char *> allocated_strings;
331 position = beginning_arg_pos;
335 while (*p && *p !=
'#' && *p !=
'.')
347 arg = va_arg (args, SCM);
348 if (!have_optional || !SCM_UNBNDP (arg))
350 arg_ptr = va_arg (args,
void *);
355 allocated_strings.push_back (*(
char **) arg_ptr);
363 if (have_rest || num_keywords > 0)
364 rest = va_arg (args, SCM);
366 if (num_keywords > 0)
368 SCM *keyword_args = XALLOCAVEC (SCM, num_keywords);
369 int *keyword_positions = XALLOCAVEC (
int, num_keywords);
371 gdb_assert (*p ==
'#');
374 for (i = 0; i < num_keywords; ++i)
376 keyword_args[i] = SCM_UNSPECIFIED;
377 keyword_positions[i] = -1;
380 while (scm_is_pair (rest)
381 && scm_is_keyword (scm_car (rest)))
389 _(
"Unrecognized keyword: ~a"),
393 if (!scm_is_pair (scm_cdr (rest)))
396 (scm_arg_type_key, func_name,
397 _(
"Missing value for keyword argument"),
401 keyword_args[i] = scm_cadr (rest);
402 keyword_positions[i] = position + 1;
403 rest = scm_cddr (rest);
407 for (i = 0; i < num_keywords; ++i)
409 int *arg_pos_ptr = va_arg (args,
int *);
410 void *arg_ptr = va_arg (args,
void *);
411 SCM arg = keyword_args[i];
413 if (! scm_is_eq (arg, SCM_UNSPECIFIED))
415 *arg_pos_ptr = keyword_positions[i];
417 keyword_positions[i]);
421 allocated_strings.push_back (*(
char **) arg_ptr);
430 if (num_keywords > 0)
432 SCM *rest_ptr = va_arg (args, SCM *);
439 if (! scm_is_null (rest))
442 _(
"Too many arguments"),
443 SCM_EOL, SCM_BOOL_F);
452 for (
char *ptr : allocated_strings)
529 int beginning_arg_pos,
531 const char *format, ...)
534 va_start (args, format);
537 beginning_arg_pos, keywords, format, args);
548 return scm_from_int64 (l);
559 return scm_to_int64 (l);
567 return scm_from_uint64 (l);
578 return scm_to_uint64 (u);
586 scm_dynwind_unwind_handler (
xfree, ptr, SCM_F_WIND_EXPLICITLY);
602 size_t len = strlen (str);
604 = (
char *) scm_gc_malloc_pointerless (len + 1,
"gdbscm_gc_xstrdup");
606 strcpy (result, str);
619 for (len = 0, string_space = 0; argv[len] != NULL; ++len)
620 string_space += strlen (argv[len]) + 1;
624 result = (
char **) scm_gc_malloc_pointerless (((len + 1) *
sizeof (
char *))
626 "parameter enum list");
627 p = (
char *) &result[len + 1];
629 for (i = 0; i < len; ++i)
637 return (
const char *
const *) result;
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t int status
#define gdbscm_is_true(scm)
SCM gdbscm_wrap(Function &&func, Args &&... args)
int gdbscm_guile_minor_version
SCM gdbscm_documentation_symbol
#define gdbscm_is_false(scm)
#define gdbscm_is_bool(scm)
int gdbscm_guile_major_version
gdb::unique_xmalloc_ptr< char > gdbscm_scm_to_c_string(SCM string)
int gdbscm_guile_micro_version
SCM gdbscm_make_error(SCM key, const char *subr, const char *message, SCM args, SCM data)
SCM gdbscm_scm_from_c_string(const char *string)
void gdbscm_debug_write(SCM obj)
static SCM extract_arg(char format_char, SCM arg, void *argp, const char *func_name, int position)
#define CHECK_TYPE(ok, arg, position, func_name, expected_type)
static int validate_arg_format(const char *format)
static int count_keywords(const SCM *keywords)
int gdbscm_is_procedure(SCM proc)
void gdbscm_printf(SCM port, const char *format,...)
void gdbscm_dynwind_xfree(void *ptr)
SCM gdbscm_scm_from_longest(LONGEST l)
void gdbscm_parse_function_args(const char *func_name, int beginning_arg_pos, const SCM *keywords, const char *format,...)
ULONGEST gdbscm_scm_to_ulongest(SCM u)
static int lookup_keyword(const SCM *keyword_list, SCM keyword)
void gdbscm_define_functions(const scheme_function *functions, int is_public)
LONGEST gdbscm_scm_to_longest(SCM l)
SCM gdbscm_scm_from_ulongest(ULONGEST l)
void gdbscm_define_variables(const scheme_variable *variables, int is_public)
int gdbscm_guile_version_is_at_least(int major, int minor, int micro)
void gdbscm_debug_display(SCM obj)
const char *const * gdbscm_gc_dup_argv(char **argv)
char * gdbscm_gc_xstrdup(const char *str)
static SCM gdbscm_parse_function_args_1(const char *func_name, int beginning_arg_pos, const SCM *keywords, const char *format, va_list args)
void gdbscm_define_integer_constants(const scheme_integer_constant *constants, int is_public)