(Ada) problem printing renaming which references a subprogram parameter
[binutils-gdb.git] / gdb / guile / scm-value.c
blob581625933025d4e86690cd9ef145ce82f464a1b6
1 /* Scheme interface to values.
3 Copyright (C) 2008-2018 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20 /* See README file in this directory for implementation notes, coding
21 conventions, et.al. */
23 #include "defs.h"
24 #include "arch-utils.h"
25 #include "charset.h"
26 #include "cp-abi.h"
27 #include "target-float.h"
28 #include "infcall.h"
29 #include "symtab.h" /* Needed by language.h. */
30 #include "language.h"
31 #include "valprint.h"
32 #include "value.h"
33 #include "guile-internal.h"
35 /* The <gdb:value> smob. */
37 typedef struct _value_smob
39 /* This always appears first. */
40 gdb_smob base;
42 /* Doubly linked list of values in values_in_scheme.
43 IWBN to use a chained_gdb_smob instead, which is doable, it just requires
44 a bit more casting than normal. */
45 struct _value_smob *next;
46 struct _value_smob *prev;
48 struct value *value;
50 /* These are cached here to avoid making multiple copies of them.
51 Plus computing the dynamic_type can be a bit expensive.
52 We use #f to indicate that the value doesn't exist (e.g. value doesn't
53 have an address), so we need another value to indicate that we haven't
54 computed the value yet. For this we use SCM_UNDEFINED. */
55 SCM address;
56 SCM type;
57 SCM dynamic_type;
58 } value_smob;
60 static const char value_smob_name[] = "gdb:value";
62 /* The tag Guile knows the value smob by. */
63 static scm_t_bits value_smob_tag;
65 /* List of all values which are currently exposed to Scheme. It is
66 maintained so that when an objfile is discarded, preserve_values
67 can copy the values' types if needed. */
68 static value_smob *values_in_scheme;
70 /* Keywords used by Scheme procedures in this file. */
71 static SCM type_keyword;
72 static SCM encoding_keyword;
73 static SCM errors_keyword;
74 static SCM length_keyword;
76 /* Possible #:errors values. */
77 static SCM error_symbol;
78 static SCM escape_symbol;
79 static SCM substitute_symbol;
81 /* Administrivia for value smobs. */
83 /* Iterate over all the <gdb:value> objects, calling preserve_one_value on
84 each.
85 This is the extension_language_ops.preserve_values "method". */
87 void
88 gdbscm_preserve_values (const struct extension_language_defn *extlang,
89 struct objfile *objfile, htab_t copied_types)
91 value_smob *iter;
93 for (iter = values_in_scheme; iter; iter = iter->next)
94 preserve_one_value (iter->value, objfile, copied_types);
97 /* Helper to add a value_smob to the global list. */
99 static void
100 vlscm_remember_scheme_value (value_smob *v_smob)
102 v_smob->next = values_in_scheme;
103 if (v_smob->next)
104 v_smob->next->prev = v_smob;
105 v_smob->prev = NULL;
106 values_in_scheme = v_smob;
109 /* Helper to remove a value_smob from the global list. */
111 static void
112 vlscm_forget_value_smob (value_smob *v_smob)
114 /* Remove SELF from the global list. */
115 if (v_smob->prev)
116 v_smob->prev->next = v_smob->next;
117 else
119 gdb_assert (values_in_scheme == v_smob);
120 values_in_scheme = v_smob->next;
122 if (v_smob->next)
123 v_smob->next->prev = v_smob->prev;
126 /* The smob "free" function for <gdb:value>. */
128 static size_t
129 vlscm_free_value_smob (SCM self)
131 value_smob *v_smob = (value_smob *) SCM_SMOB_DATA (self);
133 vlscm_forget_value_smob (v_smob);
134 value_free (v_smob->value);
136 return 0;
139 /* The smob "print" function for <gdb:value>. */
141 static int
142 vlscm_print_value_smob (SCM self, SCM port, scm_print_state *pstate)
144 value_smob *v_smob = (value_smob *) SCM_SMOB_DATA (self);
145 struct value_print_options opts;
147 if (pstate->writingp)
148 gdbscm_printf (port, "#<%s ", value_smob_name);
150 get_user_print_options (&opts);
151 opts.deref_ref = 0;
153 /* pstate->writingp = zero if invoked by display/~A, and nonzero if
154 invoked by write/~S. What to do here may need to evolve.
155 IWBN if we could pass an argument to format that would we could use
156 instead of writingp. */
157 opts.raw = !!pstate->writingp;
161 string_file stb;
163 common_val_print (v_smob->value, &stb, 0, &opts, current_language);
164 scm_puts (stb.c_str (), port);
166 CATCH (except, RETURN_MASK_ALL)
168 GDBSCM_HANDLE_GDB_EXCEPTION (except);
170 END_CATCH
172 if (pstate->writingp)
173 scm_puts (">", port);
175 scm_remember_upto_here_1 (self);
177 /* Non-zero means success. */
178 return 1;
181 /* The smob "equalp" function for <gdb:value>. */
183 static SCM
184 vlscm_equal_p_value_smob (SCM v1, SCM v2)
186 const value_smob *v1_smob = (value_smob *) SCM_SMOB_DATA (v1);
187 const value_smob *v2_smob = (value_smob *) SCM_SMOB_DATA (v2);
188 int result = 0;
192 result = value_equal (v1_smob->value, v2_smob->value);
194 CATCH (except, RETURN_MASK_ALL)
196 GDBSCM_HANDLE_GDB_EXCEPTION (except);
198 END_CATCH
200 return scm_from_bool (result);
203 /* Low level routine to create a <gdb:value> object. */
205 static SCM
206 vlscm_make_value_smob (void)
208 value_smob *v_smob = (value_smob *)
209 scm_gc_malloc (sizeof (value_smob), value_smob_name);
210 SCM v_scm;
212 /* These must be filled in by the caller. */
213 v_smob->value = NULL;
214 v_smob->prev = NULL;
215 v_smob->next = NULL;
217 /* These are lazily computed. */
218 v_smob->address = SCM_UNDEFINED;
219 v_smob->type = SCM_UNDEFINED;
220 v_smob->dynamic_type = SCM_UNDEFINED;
222 v_scm = scm_new_smob (value_smob_tag, (scm_t_bits) v_smob);
223 gdbscm_init_gsmob (&v_smob->base);
225 return v_scm;
228 /* Return non-zero if SCM is a <gdb:value> object. */
231 vlscm_is_value (SCM scm)
233 return SCM_SMOB_PREDICATE (value_smob_tag, scm);
236 /* (value? object) -> boolean */
238 static SCM
239 gdbscm_value_p (SCM scm)
241 return scm_from_bool (vlscm_is_value (scm));
244 /* Create a new <gdb:value> object that encapsulates VALUE.
245 The value is released from the all_values chain so its lifetime is not
246 bound to the execution of a command. */
249 vlscm_scm_from_value (struct value *value)
251 /* N.B. It's important to not cause any side-effects until we know the
252 conversion worked. */
253 SCM v_scm = vlscm_make_value_smob ();
254 value_smob *v_smob = (value_smob *) SCM_SMOB_DATA (v_scm);
256 v_smob->value = value;
257 release_value_or_incref (value);
258 vlscm_remember_scheme_value (v_smob);
260 return v_scm;
263 /* Returns the <gdb:value> object in SELF.
264 Throws an exception if SELF is not a <gdb:value> object. */
266 static SCM
267 vlscm_get_value_arg_unsafe (SCM self, int arg_pos, const char *func_name)
269 SCM_ASSERT_TYPE (vlscm_is_value (self), self, arg_pos, func_name,
270 value_smob_name);
272 return self;
275 /* Returns a pointer to the value smob of SELF.
276 Throws an exception if SELF is not a <gdb:value> object. */
278 static value_smob *
279 vlscm_get_value_smob_arg_unsafe (SCM self, int arg_pos, const char *func_name)
281 SCM v_scm = vlscm_get_value_arg_unsafe (self, arg_pos, func_name);
282 value_smob *v_smob = (value_smob *) SCM_SMOB_DATA (v_scm);
284 return v_smob;
287 /* Return the value field of V_SCM, an object of type <gdb:value>.
288 This exists so that we don't have to export the struct's contents. */
290 struct value *
291 vlscm_scm_to_value (SCM v_scm)
293 value_smob *v_smob;
295 gdb_assert (vlscm_is_value (v_scm));
296 v_smob = (value_smob *) SCM_SMOB_DATA (v_scm);
297 return v_smob->value;
300 /* Value methods. */
302 /* (make-value x [#:type type]) -> <gdb:value> */
304 static SCM
305 gdbscm_make_value (SCM x, SCM rest)
307 struct gdbarch *gdbarch = get_current_arch ();
308 const struct language_defn *language = current_language;
309 const SCM keywords[] = { type_keyword, SCM_BOOL_F };
310 int type_arg_pos = -1;
311 SCM type_scm = SCM_UNDEFINED;
312 SCM except_scm, result;
313 type_smob *t_smob;
314 struct type *type = NULL;
315 struct value *value;
316 struct cleanup *cleanups;
318 gdbscm_parse_function_args (FUNC_NAME, SCM_ARG2, keywords, "#O", rest,
319 &type_arg_pos, &type_scm);
321 if (type_arg_pos > 0)
323 t_smob = tyscm_get_type_smob_arg_unsafe (type_scm, type_arg_pos,
324 FUNC_NAME);
325 type = tyscm_type_smob_type (t_smob);
328 cleanups = make_cleanup_value_free_to_mark (value_mark ());
330 value = vlscm_convert_typed_value_from_scheme (FUNC_NAME, SCM_ARG1, x,
331 type_arg_pos, type_scm, type,
332 &except_scm,
333 gdbarch, language);
334 if (value == NULL)
336 do_cleanups (cleanups);
337 gdbscm_throw (except_scm);
340 result = vlscm_scm_from_value (value);
342 do_cleanups (cleanups);
344 if (gdbscm_is_exception (result))
345 gdbscm_throw (result);
346 return result;
349 /* (make-lazy-value <gdb:type> address) -> <gdb:value> */
351 static SCM
352 gdbscm_make_lazy_value (SCM type_scm, SCM address_scm)
354 type_smob *t_smob;
355 struct type *type;
356 ULONGEST address;
357 struct value *value = NULL;
358 SCM result;
359 struct cleanup *cleanups;
361 t_smob = tyscm_get_type_smob_arg_unsafe (type_scm, SCM_ARG1, FUNC_NAME);
362 type = tyscm_type_smob_type (t_smob);
364 gdbscm_parse_function_args (FUNC_NAME, SCM_ARG2, NULL, "U",
365 address_scm, &address);
367 cleanups = make_cleanup_value_free_to_mark (value_mark ());
369 /* There's no (current) need to wrap this in a TRY_CATCH, but for consistency
370 and future-proofing we do. */
373 value = value_from_contents_and_address (type, NULL, address);
375 CATCH (except, RETURN_MASK_ALL)
377 GDBSCM_HANDLE_GDB_EXCEPTION_WITH_CLEANUPS (except, cleanups);
379 END_CATCH
381 result = vlscm_scm_from_value (value);
383 do_cleanups (cleanups);
385 if (gdbscm_is_exception (result))
386 gdbscm_throw (result);
387 return result;
390 /* (value-optimized-out? <gdb:value>) -> boolean */
392 static SCM
393 gdbscm_value_optimized_out_p (SCM self)
395 value_smob *v_smob
396 = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
397 struct value *value = v_smob->value;
398 int opt = 0;
402 opt = value_optimized_out (value);
404 CATCH (except, RETURN_MASK_ALL)
406 GDBSCM_HANDLE_GDB_EXCEPTION (except);
408 END_CATCH
410 return scm_from_bool (opt);
413 /* (value-address <gdb:value>) -> integer
414 Returns #f if the value doesn't have one. */
416 static SCM
417 gdbscm_value_address (SCM self)
419 value_smob *v_smob
420 = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
421 struct value *value = v_smob->value;
423 if (SCM_UNBNDP (v_smob->address))
425 struct cleanup *cleanup
426 = make_cleanup_value_free_to_mark (value_mark ());
427 SCM address = SCM_BOOL_F;
431 address = vlscm_scm_from_value (value_addr (value));
433 CATCH (except, RETURN_MASK_ALL)
436 END_CATCH
438 do_cleanups (cleanup);
440 if (gdbscm_is_exception (address))
441 gdbscm_throw (address);
443 v_smob->address = address;
446 return v_smob->address;
449 /* (value-dereference <gdb:value>) -> <gdb:value>
450 Given a value of a pointer type, apply the C unary * operator to it. */
452 static SCM
453 gdbscm_value_dereference (SCM self)
455 value_smob *v_smob
456 = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
457 struct value *value = v_smob->value;
458 SCM result;
459 struct value *res_val = NULL;
460 struct cleanup *cleanups;
462 cleanups = make_cleanup_value_free_to_mark (value_mark ());
466 res_val = value_ind (value);
468 CATCH (except, RETURN_MASK_ALL)
470 GDBSCM_HANDLE_GDB_EXCEPTION_WITH_CLEANUPS (except, cleanups);
472 END_CATCH
474 result = vlscm_scm_from_value (res_val);
476 do_cleanups (cleanups);
478 if (gdbscm_is_exception (result))
479 gdbscm_throw (result);
481 return result;
484 /* (value-referenced-value <gdb:value>) -> <gdb:value>
485 Given a value of a reference type, return the value referenced.
486 The difference between this function and gdbscm_value_dereference is that
487 the latter applies * unary operator to a value, which need not always
488 result in the value referenced.
489 For example, for a value which is a reference to an 'int' pointer ('int *'),
490 gdbscm_value_dereference will result in a value of type 'int' while
491 gdbscm_value_referenced_value will result in a value of type 'int *'. */
493 static SCM
494 gdbscm_value_referenced_value (SCM self)
496 value_smob *v_smob
497 = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
498 struct value *value = v_smob->value;
499 SCM result;
500 struct value *res_val = NULL;
501 struct cleanup *cleanups;
503 cleanups = make_cleanup_value_free_to_mark (value_mark ());
507 switch (TYPE_CODE (check_typedef (value_type (value))))
509 case TYPE_CODE_PTR:
510 res_val = value_ind (value);
511 break;
512 case TYPE_CODE_REF:
513 res_val = coerce_ref (value);
514 break;
515 default:
516 error (_("Trying to get the referenced value from a value which is"
517 " neither a pointer nor a reference"));
520 CATCH (except, RETURN_MASK_ALL)
522 GDBSCM_HANDLE_GDB_EXCEPTION_WITH_CLEANUPS (except, cleanups);
524 END_CATCH
526 result = vlscm_scm_from_value (res_val);
528 do_cleanups (cleanups);
530 if (gdbscm_is_exception (result))
531 gdbscm_throw (result);
533 return result;
536 /* (value-type <gdb:value>) -> <gdb:type> */
538 static SCM
539 gdbscm_value_type (SCM self)
541 value_smob *v_smob
542 = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
543 struct value *value = v_smob->value;
545 if (SCM_UNBNDP (v_smob->type))
546 v_smob->type = tyscm_scm_from_type (value_type (value));
548 return v_smob->type;
551 /* (value-dynamic-type <gdb:value>) -> <gdb:type> */
553 static SCM
554 gdbscm_value_dynamic_type (SCM self)
556 value_smob *v_smob
557 = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
558 struct value *value = v_smob->value;
559 struct type *type = NULL;
561 if (! SCM_UNBNDP (v_smob->dynamic_type))
562 return v_smob->dynamic_type;
566 struct cleanup *cleanup
567 = make_cleanup_value_free_to_mark (value_mark ());
569 type = value_type (value);
570 type = check_typedef (type);
572 if (((TYPE_CODE (type) == TYPE_CODE_PTR)
573 || (TYPE_CODE (type) == TYPE_CODE_REF))
574 && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT))
576 struct value *target;
577 int was_pointer = TYPE_CODE (type) == TYPE_CODE_PTR;
579 if (was_pointer)
580 target = value_ind (value);
581 else
582 target = coerce_ref (value);
583 type = value_rtti_type (target, NULL, NULL, NULL);
585 if (type)
587 if (was_pointer)
588 type = lookup_pointer_type (type);
589 else
590 type = lookup_lvalue_reference_type (type);
593 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
594 type = value_rtti_type (value, NULL, NULL, NULL);
595 else
597 /* Re-use object's static type. */
598 type = NULL;
601 do_cleanups (cleanup);
603 CATCH (except, RETURN_MASK_ALL)
605 GDBSCM_HANDLE_GDB_EXCEPTION (except);
607 END_CATCH
609 if (type == NULL)
610 v_smob->dynamic_type = gdbscm_value_type (self);
611 else
612 v_smob->dynamic_type = tyscm_scm_from_type (type);
614 return v_smob->dynamic_type;
617 /* A helper function that implements the various cast operators. */
619 static SCM
620 vlscm_do_cast (SCM self, SCM type_scm, enum exp_opcode op,
621 const char *func_name)
623 value_smob *v_smob
624 = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
625 struct value *value = v_smob->value;
626 type_smob *t_smob
627 = tyscm_get_type_smob_arg_unsafe (type_scm, SCM_ARG2, FUNC_NAME);
628 struct type *type = tyscm_type_smob_type (t_smob);
629 SCM result;
630 struct value *res_val = NULL;
631 struct cleanup *cleanups;
633 cleanups = make_cleanup_value_free_to_mark (value_mark ());
637 if (op == UNOP_DYNAMIC_CAST)
638 res_val = value_dynamic_cast (type, value);
639 else if (op == UNOP_REINTERPRET_CAST)
640 res_val = value_reinterpret_cast (type, value);
641 else
643 gdb_assert (op == UNOP_CAST);
644 res_val = value_cast (type, value);
647 CATCH (except, RETURN_MASK_ALL)
649 GDBSCM_HANDLE_GDB_EXCEPTION_WITH_CLEANUPS (except, cleanups);
651 END_CATCH
653 gdb_assert (res_val != NULL);
654 result = vlscm_scm_from_value (res_val);
656 do_cleanups (cleanups);
658 if (gdbscm_is_exception (result))
659 gdbscm_throw (result);
661 return result;
664 /* (value-cast <gdb:value> <gdb:type>) -> <gdb:value> */
666 static SCM
667 gdbscm_value_cast (SCM self, SCM new_type)
669 return vlscm_do_cast (self, new_type, UNOP_CAST, FUNC_NAME);
672 /* (value-dynamic-cast <gdb:value> <gdb:type>) -> <gdb:value> */
674 static SCM
675 gdbscm_value_dynamic_cast (SCM self, SCM new_type)
677 return vlscm_do_cast (self, new_type, UNOP_DYNAMIC_CAST, FUNC_NAME);
680 /* (value-reinterpret-cast <gdb:value> <gdb:type>) -> <gdb:value> */
682 static SCM
683 gdbscm_value_reinterpret_cast (SCM self, SCM new_type)
685 return vlscm_do_cast (self, new_type, UNOP_REINTERPRET_CAST, FUNC_NAME);
688 /* (value-field <gdb:value> string) -> <gdb:value>
689 Given string name of an element inside structure, return its <gdb:value>
690 object. */
692 static SCM
693 gdbscm_value_field (SCM self, SCM field_scm)
695 value_smob *v_smob
696 = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
697 struct value *value = v_smob->value;
698 char *field = NULL;
699 struct value *res_val = NULL;
700 SCM result;
701 struct cleanup *cleanups;
703 SCM_ASSERT_TYPE (scm_is_string (field_scm), field_scm, SCM_ARG2, FUNC_NAME,
704 _("string"));
706 cleanups = make_cleanup_value_free_to_mark (value_mark ());
708 field = gdbscm_scm_to_c_string (field_scm);
709 make_cleanup (xfree, field);
713 struct value *tmp = value;
715 res_val = value_struct_elt (&tmp, NULL, field, NULL,
716 "struct/class/union");
718 CATCH (except, RETURN_MASK_ALL)
720 GDBSCM_HANDLE_GDB_EXCEPTION_WITH_CLEANUPS (except, cleanups);
722 END_CATCH
724 gdb_assert (res_val != NULL);
725 result = vlscm_scm_from_value (res_val);
727 do_cleanups (cleanups);
729 if (gdbscm_is_exception (result))
730 gdbscm_throw (result);
732 return result;
735 /* (value-subscript <gdb:value> integer|<gdb:value>) -> <gdb:value>
736 Return the specified value in an array. */
738 static SCM
739 gdbscm_value_subscript (SCM self, SCM index_scm)
741 value_smob *v_smob
742 = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
743 struct value *value = v_smob->value;
744 struct value *index = NULL;
745 struct value *res_val = NULL;
746 struct type *type = value_type (value);
747 struct gdbarch *gdbarch;
748 SCM result, except_scm;
749 struct cleanup *cleanups;
751 /* The sequencing here, as everywhere else, is important.
752 We can't have existing cleanups when a Scheme exception is thrown. */
754 SCM_ASSERT (type != NULL, self, SCM_ARG2, FUNC_NAME);
755 gdbarch = get_type_arch (type);
757 cleanups = make_cleanup_value_free_to_mark (value_mark ());
759 index = vlscm_convert_value_from_scheme (FUNC_NAME, SCM_ARG2, index_scm,
760 &except_scm,
761 gdbarch, current_language);
762 if (index == NULL)
764 do_cleanups (cleanups);
765 gdbscm_throw (except_scm);
770 struct value *tmp = value;
772 /* Assume we are attempting an array access, and let the value code
773 throw an exception if the index has an invalid type.
774 Check the value's type is something that can be accessed via
775 a subscript. */
776 tmp = coerce_ref (tmp);
777 type = check_typedef (value_type (tmp));
778 if (TYPE_CODE (type) != TYPE_CODE_ARRAY
779 && TYPE_CODE (type) != TYPE_CODE_PTR)
780 error (_("Cannot subscript requested type"));
782 res_val = value_subscript (tmp, value_as_long (index));
784 CATCH (except, RETURN_MASK_ALL)
786 GDBSCM_HANDLE_GDB_EXCEPTION_WITH_CLEANUPS (except, cleanups);
788 END_CATCH
790 gdb_assert (res_val != NULL);
791 result = vlscm_scm_from_value (res_val);
793 do_cleanups (cleanups);
795 if (gdbscm_is_exception (result))
796 gdbscm_throw (result);
798 return result;
801 /* (value-call <gdb:value> arg-list) -> <gdb:value>
802 Perform an inferior function call on the value. */
804 static SCM
805 gdbscm_value_call (SCM self, SCM args)
807 value_smob *v_smob
808 = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
809 struct value *function = v_smob->value;
810 struct value *mark = value_mark ();
811 struct type *ftype = NULL;
812 long args_count;
813 struct value **vargs = NULL;
814 SCM result = SCM_BOOL_F;
818 ftype = check_typedef (value_type (function));
820 CATCH (except, RETURN_MASK_ALL)
822 GDBSCM_HANDLE_GDB_EXCEPTION (except);
824 END_CATCH
826 SCM_ASSERT_TYPE (TYPE_CODE (ftype) == TYPE_CODE_FUNC, self,
827 SCM_ARG1, FUNC_NAME,
828 _("function (value of TYPE_CODE_FUNC)"));
830 SCM_ASSERT_TYPE (gdbscm_is_true (scm_list_p (args)), args,
831 SCM_ARG2, FUNC_NAME, _("list"));
833 args_count = scm_ilength (args);
834 if (args_count > 0)
836 struct gdbarch *gdbarch = get_current_arch ();
837 const struct language_defn *language = current_language;
838 SCM except_scm;
839 long i;
841 vargs = XALLOCAVEC (struct value *, args_count);
842 for (i = 0; i < args_count; i++)
844 SCM arg = scm_car (args);
846 vargs[i] = vlscm_convert_value_from_scheme (FUNC_NAME,
847 GDBSCM_ARG_NONE, arg,
848 &except_scm,
849 gdbarch, language);
850 if (vargs[i] == NULL)
851 gdbscm_throw (except_scm);
853 args = scm_cdr (args);
855 gdb_assert (gdbscm_is_true (scm_null_p (args)));
860 struct cleanup *cleanup = make_cleanup_value_free_to_mark (mark);
861 struct value *return_value;
863 return_value = call_function_by_hand (function, NULL, args_count, vargs);
864 result = vlscm_scm_from_value (return_value);
865 do_cleanups (cleanup);
867 CATCH (except, RETURN_MASK_ALL)
869 GDBSCM_HANDLE_GDB_EXCEPTION (except);
871 END_CATCH
873 if (gdbscm_is_exception (result))
874 gdbscm_throw (result);
876 return result;
879 /* (value->bytevector <gdb:value>) -> bytevector */
881 static SCM
882 gdbscm_value_to_bytevector (SCM self)
884 value_smob *v_smob
885 = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
886 struct value *value = v_smob->value;
887 struct type *type;
888 size_t length = 0;
889 const gdb_byte *contents = NULL;
890 SCM bv;
892 type = value_type (value);
896 type = check_typedef (type);
897 length = TYPE_LENGTH (type);
898 contents = value_contents (value);
900 CATCH (except, RETURN_MASK_ALL)
902 GDBSCM_HANDLE_GDB_EXCEPTION (except);
904 END_CATCH
906 bv = scm_c_make_bytevector (length);
907 memcpy (SCM_BYTEVECTOR_CONTENTS (bv), contents, length);
909 return bv;
912 /* Helper function to determine if a type is "int-like". */
914 static int
915 is_intlike (struct type *type, int ptr_ok)
917 return (TYPE_CODE (type) == TYPE_CODE_INT
918 || TYPE_CODE (type) == TYPE_CODE_ENUM
919 || TYPE_CODE (type) == TYPE_CODE_BOOL
920 || TYPE_CODE (type) == TYPE_CODE_CHAR
921 || (ptr_ok && TYPE_CODE (type) == TYPE_CODE_PTR));
924 /* (value->bool <gdb:value>) -> boolean
925 Throws an error if the value is not integer-like. */
927 static SCM
928 gdbscm_value_to_bool (SCM self)
930 value_smob *v_smob
931 = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
932 struct value *value = v_smob->value;
933 struct type *type;
934 LONGEST l = 0;
936 type = value_type (value);
940 type = check_typedef (type);
942 CATCH (except, RETURN_MASK_ALL)
944 GDBSCM_HANDLE_GDB_EXCEPTION (except);
946 END_CATCH
948 SCM_ASSERT_TYPE (is_intlike (type, 1), self, SCM_ARG1, FUNC_NAME,
949 _("integer-like gdb value"));
953 if (TYPE_CODE (type) == TYPE_CODE_PTR)
954 l = value_as_address (value);
955 else
956 l = value_as_long (value);
958 CATCH (except, RETURN_MASK_ALL)
960 GDBSCM_HANDLE_GDB_EXCEPTION (except);
962 END_CATCH
964 return scm_from_bool (l != 0);
967 /* (value->integer <gdb:value>) -> integer
968 Throws an error if the value is not integer-like. */
970 static SCM
971 gdbscm_value_to_integer (SCM self)
973 value_smob *v_smob
974 = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
975 struct value *value = v_smob->value;
976 struct type *type;
977 LONGEST l = 0;
979 type = value_type (value);
983 type = check_typedef (type);
985 CATCH (except, RETURN_MASK_ALL)
987 GDBSCM_HANDLE_GDB_EXCEPTION (except);
989 END_CATCH
991 SCM_ASSERT_TYPE (is_intlike (type, 1), self, SCM_ARG1, FUNC_NAME,
992 _("integer-like gdb value"));
996 if (TYPE_CODE (type) == TYPE_CODE_PTR)
997 l = value_as_address (value);
998 else
999 l = value_as_long (value);
1001 CATCH (except, RETURN_MASK_ALL)
1003 GDBSCM_HANDLE_GDB_EXCEPTION (except);
1005 END_CATCH
1007 if (TYPE_UNSIGNED (type))
1008 return gdbscm_scm_from_ulongest (l);
1009 else
1010 return gdbscm_scm_from_longest (l);
1013 /* (value->real <gdb:value>) -> real
1014 Throws an error if the value is not a number. */
1016 static SCM
1017 gdbscm_value_to_real (SCM self)
1019 value_smob *v_smob
1020 = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
1021 struct value *value = v_smob->value;
1022 struct type *type;
1023 double d = 0;
1024 struct value *check = nullptr;
1026 type = value_type (value);
1030 type = check_typedef (type);
1032 CATCH (except, RETURN_MASK_ALL)
1034 GDBSCM_HANDLE_GDB_EXCEPTION (except);
1036 END_CATCH
1038 SCM_ASSERT_TYPE (is_intlike (type, 0) || TYPE_CODE (type) == TYPE_CODE_FLT,
1039 self, SCM_ARG1, FUNC_NAME, _("number"));
1043 if (is_floating_value (value))
1045 d = target_float_to_host_double (value_contents (value), type);
1046 check = allocate_value (type);
1047 target_float_from_host_double (value_contents_raw (check), type, d);
1049 else if (TYPE_UNSIGNED (type))
1051 d = (ULONGEST) value_as_long (value);
1052 check = value_from_ulongest (type, (ULONGEST) d);
1054 else
1056 d = value_as_long (value);
1057 check = value_from_longest (type, (LONGEST) d);
1060 CATCH (except, RETURN_MASK_ALL)
1062 GDBSCM_HANDLE_GDB_EXCEPTION (except);
1064 END_CATCH
1066 /* TODO: Is there a better way to check if the value fits? */
1067 if (!value_equal (value, check))
1068 gdbscm_out_of_range_error (FUNC_NAME, SCM_ARG1, self,
1069 _("number can't be converted to a double"));
1071 return scm_from_double (d);
1074 /* (value->string <gdb:value>
1075 [#:encoding encoding]
1076 [#:errors #f | 'error | 'substitute]
1077 [#:length length])
1078 -> string
1079 Return Unicode string with value's contents, which must be a string.
1081 If ENCODING is not given, the string is assumed to be encoded in
1082 the target's charset.
1084 ERRORS is one of #f, 'error or 'substitute.
1085 An error setting of #f means use the default, which is Guile's
1086 %default-port-conversion-strategy when using Guile >= 2.0.6, or 'error if
1087 using an earlier version of Guile. Earlier versions do not properly
1088 support obtaining the default port conversion strategy.
1089 If the default is not one of 'error or 'substitute, 'substitute is used.
1090 An error setting of "error" causes an exception to be thrown if there's
1091 a decoding error. An error setting of "substitute" causes invalid
1092 characters to be replaced with "?".
1094 If LENGTH is provided, only fetch string to the length provided.
1095 LENGTH must be a Scheme integer, it can't be a <gdb:value> integer. */
1097 static SCM
1098 gdbscm_value_to_string (SCM self, SCM rest)
1100 value_smob *v_smob
1101 = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
1102 struct value *value = v_smob->value;
1103 const SCM keywords[] = {
1104 encoding_keyword, errors_keyword, length_keyword, SCM_BOOL_F
1106 int encoding_arg_pos = -1, errors_arg_pos = -1, length_arg_pos = -1;
1107 char *encoding = NULL;
1108 SCM errors = SCM_BOOL_F;
1109 int length = -1;
1110 gdb_byte *buffer = NULL;
1111 const char *la_encoding = NULL;
1112 struct type *char_type = NULL;
1113 SCM result;
1114 struct cleanup *cleanups;
1116 /* The sequencing here, as everywhere else, is important.
1117 We can't have existing cleanups when a Scheme exception is thrown. */
1119 gdbscm_parse_function_args (FUNC_NAME, SCM_ARG2, keywords, "#sOi", rest,
1120 &encoding_arg_pos, &encoding,
1121 &errors_arg_pos, &errors,
1122 &length_arg_pos, &length);
1124 cleanups = make_cleanup (xfree, encoding);
1126 if (errors_arg_pos > 0
1127 && errors != SCM_BOOL_F
1128 && !scm_is_eq (errors, error_symbol)
1129 && !scm_is_eq (errors, substitute_symbol))
1131 SCM excp
1132 = gdbscm_make_out_of_range_error (FUNC_NAME, errors_arg_pos, errors,
1133 _("invalid error kind"));
1135 do_cleanups (cleanups);
1136 gdbscm_throw (excp);
1138 if (errors == SCM_BOOL_F)
1140 /* N.B. scm_port_conversion_strategy in Guile versions prior to 2.0.6
1141 will throw a Scheme error when passed #f. */
1142 if (gdbscm_guile_version_is_at_least (2, 0, 6))
1143 errors = scm_port_conversion_strategy (SCM_BOOL_F);
1144 else
1145 errors = error_symbol;
1147 /* We don't assume anything about the result of scm_port_conversion_strategy.
1148 From this point on, if errors is not 'errors, use 'substitute. */
1152 LA_GET_STRING (value, &buffer, &length, &char_type, &la_encoding);
1154 CATCH (except, RETURN_MASK_ALL)
1156 GDBSCM_HANDLE_GDB_EXCEPTION_WITH_CLEANUPS (except, cleanups);
1158 END_CATCH
1160 /* If errors is "error" scm_from_stringn may throw a Scheme exception.
1161 Make sure we don't leak. This is done via scm_dynwind_begin, et.al. */
1162 discard_cleanups (cleanups);
1164 scm_dynwind_begin ((scm_t_dynwind_flags) 0);
1166 gdbscm_dynwind_xfree (encoding);
1167 gdbscm_dynwind_xfree (buffer);
1169 result = scm_from_stringn ((const char *) buffer,
1170 length * TYPE_LENGTH (char_type),
1171 (encoding != NULL && *encoding != '\0'
1172 ? encoding
1173 : la_encoding),
1174 scm_is_eq (errors, error_symbol)
1175 ? SCM_FAILED_CONVERSION_ERROR
1176 : SCM_FAILED_CONVERSION_QUESTION_MARK);
1178 scm_dynwind_end ();
1180 return result;
1183 /* (value->lazy-string <gdb:value> [#:encoding encoding] [#:length length])
1184 -> <gdb:lazy-string>
1185 Return a Scheme object representing a lazy_string_object type.
1186 A lazy string is a pointer to a string with an optional encoding and length.
1187 If ENCODING is not given, the target's charset is used.
1188 If LENGTH is provided then the length parameter is set to LENGTH.
1189 Otherwise if the value is an array of known length then the array's length
1190 is used. Otherwise the length will be set to -1 (meaning first null of
1191 appropriate with).
1192 LENGTH must be a Scheme integer, it can't be a <gdb:value> integer. */
1194 static SCM
1195 gdbscm_value_to_lazy_string (SCM self, SCM rest)
1197 value_smob *v_smob
1198 = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
1199 struct value *value = v_smob->value;
1200 const SCM keywords[] = { encoding_keyword, length_keyword, SCM_BOOL_F };
1201 int encoding_arg_pos = -1, length_arg_pos = -1;
1202 char *encoding = NULL;
1203 int length = -1;
1204 SCM result = SCM_BOOL_F; /* -Wall */
1205 struct cleanup *cleanups;
1206 struct gdb_exception except = exception_none;
1208 /* The sequencing here, as everywhere else, is important.
1209 We can't have existing cleanups when a Scheme exception is thrown. */
1211 gdbscm_parse_function_args (FUNC_NAME, SCM_ARG2, keywords, "#si", rest,
1212 &encoding_arg_pos, &encoding,
1213 &length_arg_pos, &length);
1215 if (length < -1)
1217 gdbscm_out_of_range_error (FUNC_NAME, length_arg_pos,
1218 scm_from_int (length),
1219 _("invalid length"));
1222 cleanups = make_cleanup (xfree, encoding);
1226 struct cleanup *inner_cleanup
1227 = make_cleanup_value_free_to_mark (value_mark ());
1228 struct type *type, *realtype;
1229 CORE_ADDR addr;
1231 type = value_type (value);
1232 realtype = check_typedef (type);
1234 switch (TYPE_CODE (realtype))
1236 case TYPE_CODE_ARRAY:
1238 LONGEST array_length = -1;
1239 LONGEST low_bound, high_bound;
1241 /* PR 20786: There's no way to specify an array of length zero.
1242 Record a length of [0,-1] which is how Ada does it. Anything
1243 we do is broken, but this one possible solution. */
1244 if (get_array_bounds (realtype, &low_bound, &high_bound))
1245 array_length = high_bound - low_bound + 1;
1246 if (length == -1)
1247 length = array_length;
1248 else if (array_length == -1)
1250 type = lookup_array_range_type (TYPE_TARGET_TYPE (realtype),
1251 0, length - 1);
1253 else if (length != array_length)
1255 /* We need to create a new array type with the
1256 specified length. */
1257 if (length > array_length)
1258 error (_("length is larger than array size"));
1259 type = lookup_array_range_type (TYPE_TARGET_TYPE (type),
1260 low_bound,
1261 low_bound + length - 1);
1263 addr = value_address (value);
1264 break;
1266 case TYPE_CODE_PTR:
1267 /* If a length is specified we defer creating an array of the
1268 specified width until we need to. */
1269 addr = value_as_address (value);
1270 break;
1271 default:
1272 /* Should flag an error here. PR 20769. */
1273 addr = value_address (value);
1274 break;
1277 result = lsscm_make_lazy_string (addr, length, encoding, type);
1279 do_cleanups (inner_cleanup);
1281 CATCH (ex, RETURN_MASK_ALL)
1283 except = ex;
1285 END_CATCH
1287 do_cleanups (cleanups);
1288 GDBSCM_HANDLE_GDB_EXCEPTION (except);
1290 if (gdbscm_is_exception (result))
1291 gdbscm_throw (result);
1293 return result;
1296 /* (value-lazy? <gdb:value>) -> boolean */
1298 static SCM
1299 gdbscm_value_lazy_p (SCM self)
1301 value_smob *v_smob
1302 = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
1303 struct value *value = v_smob->value;
1305 return scm_from_bool (value_lazy (value));
1308 /* (value-fetch-lazy! <gdb:value>) -> unspecified */
1310 static SCM
1311 gdbscm_value_fetch_lazy_x (SCM self)
1313 value_smob *v_smob
1314 = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
1315 struct value *value = v_smob->value;
1319 if (value_lazy (value))
1320 value_fetch_lazy (value);
1322 CATCH (except, RETURN_MASK_ALL)
1324 GDBSCM_HANDLE_GDB_EXCEPTION (except);
1326 END_CATCH
1328 return SCM_UNSPECIFIED;
1331 /* (value-print <gdb:value>) -> string */
1333 static SCM
1334 gdbscm_value_print (SCM self)
1336 value_smob *v_smob
1337 = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
1338 struct value *value = v_smob->value;
1339 struct value_print_options opts;
1341 get_user_print_options (&opts);
1342 opts.deref_ref = 0;
1344 string_file stb;
1348 common_val_print (value, &stb, 0, &opts, current_language);
1350 CATCH (except, RETURN_MASK_ALL)
1352 GDBSCM_HANDLE_GDB_EXCEPTION (except);
1354 END_CATCH
1356 /* Use SCM_FAILED_CONVERSION_QUESTION_MARK to ensure this doesn't
1357 throw an error if the encoding fails.
1358 IWBN to use scm_take_locale_string here, but we'd have to temporarily
1359 override the default port conversion handler because contrary to
1360 documentation it doesn't necessarily free the input string. */
1361 return scm_from_stringn (stb.c_str (), stb.size (), host_charset (),
1362 SCM_FAILED_CONVERSION_QUESTION_MARK);
1365 /* (parse-and-eval string) -> <gdb:value>
1366 Parse a string and evaluate the string as an expression. */
1368 static SCM
1369 gdbscm_parse_and_eval (SCM expr_scm)
1371 char *expr_str;
1372 struct value *res_val = NULL;
1373 SCM result;
1374 struct cleanup *cleanups;
1376 /* The sequencing here, as everywhere else, is important.
1377 We can't have existing cleanups when a Scheme exception is thrown. */
1379 gdbscm_parse_function_args (FUNC_NAME, SCM_ARG1, NULL, "s",
1380 expr_scm, &expr_str);
1382 cleanups = make_cleanup_value_free_to_mark (value_mark ());
1383 make_cleanup (xfree, expr_str);
1387 res_val = parse_and_eval (expr_str);
1389 CATCH (except, RETURN_MASK_ALL)
1391 GDBSCM_HANDLE_GDB_EXCEPTION_WITH_CLEANUPS (except, cleanups);
1393 END_CATCH
1395 gdb_assert (res_val != NULL);
1396 result = vlscm_scm_from_value (res_val);
1398 do_cleanups (cleanups);
1400 if (gdbscm_is_exception (result))
1401 gdbscm_throw (result);
1403 return result;
1406 /* (history-ref integer) -> <gdb:value>
1407 Return the specified value from GDB's value history. */
1409 static SCM
1410 gdbscm_history_ref (SCM index)
1412 int i;
1413 struct value *res_val = NULL; /* Initialize to appease gcc warning. */
1415 gdbscm_parse_function_args (FUNC_NAME, SCM_ARG1, NULL, "i", index, &i);
1419 res_val = access_value_history (i);
1421 CATCH (except, RETURN_MASK_ALL)
1423 GDBSCM_HANDLE_GDB_EXCEPTION (except);
1425 END_CATCH
1427 return vlscm_scm_from_value (res_val);
1430 /* (history-append! <gdb:value>) -> index
1431 Append VALUE to GDB's value history. Return its index in the history. */
1433 static SCM
1434 gdbscm_history_append_x (SCM value)
1436 int res_index = -1;
1437 struct value *v;
1438 value_smob *v_smob;
1440 v_smob = vlscm_get_value_smob_arg_unsafe (value, SCM_ARG1, FUNC_NAME);
1441 v = v_smob->value;
1445 res_index = record_latest_value (v);
1447 CATCH (except, RETURN_MASK_ALL)
1449 GDBSCM_HANDLE_GDB_EXCEPTION (except);
1451 END_CATCH
1453 return scm_from_int (res_index);
1456 /* Initialize the Scheme value code. */
1458 static const scheme_function value_functions[] =
1460 { "value?", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_p),
1462 Return #t if the object is a <gdb:value> object." },
1464 { "make-value", 1, 0, 1, as_a_scm_t_subr (gdbscm_make_value),
1466 Create a <gdb:value> representing object.\n\
1467 Typically this is used to convert numbers and strings to\n\
1468 <gdb:value> objects.\n\
1470 Arguments: object [#:type <gdb:type>]" },
1472 { "value-optimized-out?", 1, 0, 0,
1473 as_a_scm_t_subr (gdbscm_value_optimized_out_p),
1475 Return #t if the value has been optimizd out." },
1477 { "value-address", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_address),
1479 Return the address of the value." },
1481 { "value-type", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_type),
1483 Return the type of the value." },
1485 { "value-dynamic-type", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_dynamic_type),
1487 Return the dynamic type of the value." },
1489 { "value-cast", 2, 0, 0, as_a_scm_t_subr (gdbscm_value_cast),
1491 Cast the value to the supplied type.\n\
1493 Arguments: <gdb:value> <gdb:type>" },
1495 { "value-dynamic-cast", 2, 0, 0, as_a_scm_t_subr (gdbscm_value_dynamic_cast),
1497 Cast the value to the supplied type, as if by the C++\n\
1498 dynamic_cast operator.\n\
1500 Arguments: <gdb:value> <gdb:type>" },
1502 { "value-reinterpret-cast", 2, 0, 0,
1503 as_a_scm_t_subr (gdbscm_value_reinterpret_cast),
1505 Cast the value to the supplied type, as if by the C++\n\
1506 reinterpret_cast operator.\n\
1508 Arguments: <gdb:value> <gdb:type>" },
1510 { "value-dereference", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_dereference),
1512 Return the result of applying the C unary * operator to the value." },
1514 { "value-referenced-value", 1, 0, 0,
1515 as_a_scm_t_subr (gdbscm_value_referenced_value),
1517 Given a value of a reference type, return the value referenced.\n\
1518 The difference between this function and value-dereference is that\n\
1519 the latter applies * unary operator to a value, which need not always\n\
1520 result in the value referenced.\n\
1521 For example, for a value which is a reference to an 'int' pointer ('int *'),\n\
1522 value-dereference will result in a value of type 'int' while\n\
1523 value-referenced-value will result in a value of type 'int *'." },
1525 { "value-field", 2, 0, 0, as_a_scm_t_subr (gdbscm_value_field),
1527 Return the specified field of the value.\n\
1529 Arguments: <gdb:value> string" },
1531 { "value-subscript", 2, 0, 0, as_a_scm_t_subr (gdbscm_value_subscript),
1533 Return the value of the array at the specified index.\n\
1535 Arguments: <gdb:value> integer" },
1537 { "value-call", 2, 0, 0, as_a_scm_t_subr (gdbscm_value_call),
1539 Perform an inferior function call taking the value as a pointer to the\n\
1540 function to call.\n\
1541 Each element of the argument list must be a <gdb:value> object or an object\n\
1542 that can be converted to one.\n\
1543 The result is the value returned by the function.\n\
1545 Arguments: <gdb:value> arg-list" },
1547 { "value->bool", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_to_bool),
1549 Return the Scheme boolean representing the GDB value.\n\
1550 The value must be \"integer like\". Pointers are ok." },
1552 { "value->integer", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_to_integer),
1554 Return the Scheme integer representing the GDB value.\n\
1555 The value must be \"integer like\". Pointers are ok." },
1557 { "value->real", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_to_real),
1559 Return the Scheme real number representing the GDB value.\n\
1560 The value must be a number." },
1562 { "value->bytevector", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_to_bytevector),
1564 Return a Scheme bytevector with the raw contents of the GDB value.\n\
1565 No transformation, endian or otherwise, is performed." },
1567 { "value->string", 1, 0, 1, as_a_scm_t_subr (gdbscm_value_to_string),
1569 Return the Unicode string of the value's contents.\n\
1570 If ENCODING is not given, the string is assumed to be encoded in\n\
1571 the target's charset.\n\
1572 An error setting \"error\" causes an exception to be thrown if there's\n\
1573 a decoding error. An error setting of \"substitute\" causes invalid\n\
1574 characters to be replaced with \"?\". The default is \"error\".\n\
1575 If LENGTH is provided, only fetch string to the length provided.\n\
1577 Arguments: <gdb:value>\n\
1578 [#:encoding encoding] [#:errors \"error\"|\"substitute\"]\n\
1579 [#:length length]" },
1581 { "value->lazy-string", 1, 0, 1,
1582 as_a_scm_t_subr (gdbscm_value_to_lazy_string),
1584 Return a Scheme object representing a lazily fetched Unicode string\n\
1585 of the value's contents.\n\
1586 If ENCODING is not given, the string is assumed to be encoded in\n\
1587 the target's charset.\n\
1588 If LENGTH is provided, only fetch string to the length provided.\n\
1590 Arguments: <gdb:value> [#:encoding encoding] [#:length length]" },
1592 { "value-lazy?", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_lazy_p),
1594 Return #t if the value is lazy (not fetched yet from the inferior).\n\
1595 A lazy value is fetched when needed, or when the value-fetch-lazy! function\n\
1596 is called." },
1598 { "make-lazy-value", 2, 0, 0, as_a_scm_t_subr (gdbscm_make_lazy_value),
1600 Create a <gdb:value> that will be lazily fetched from the target.\n\
1602 Arguments: <gdb:type> address" },
1604 { "value-fetch-lazy!", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_fetch_lazy_x),
1606 Fetch the value from the inferior, if it was lazy.\n\
1607 The result is \"unspecified\"." },
1609 { "value-print", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_print),
1611 Return the string representation (print form) of the value." },
1613 { "parse-and-eval", 1, 0, 0, as_a_scm_t_subr (gdbscm_parse_and_eval),
1615 Evaluates string in gdb and returns the result as a <gdb:value> object." },
1617 { "history-ref", 1, 0, 0, as_a_scm_t_subr (gdbscm_history_ref),
1619 Return the specified value from GDB's value history." },
1621 { "history-append!", 1, 0, 0, as_a_scm_t_subr (gdbscm_history_append_x),
1623 Append the specified value onto GDB's value history." },
1625 END_FUNCTIONS
1628 void
1629 gdbscm_initialize_values (void)
1631 value_smob_tag = gdbscm_make_smob_type (value_smob_name,
1632 sizeof (value_smob));
1633 scm_set_smob_free (value_smob_tag, vlscm_free_value_smob);
1634 scm_set_smob_print (value_smob_tag, vlscm_print_value_smob);
1635 scm_set_smob_equalp (value_smob_tag, vlscm_equal_p_value_smob);
1637 gdbscm_define_functions (value_functions, 1);
1639 type_keyword = scm_from_latin1_keyword ("type");
1640 encoding_keyword = scm_from_latin1_keyword ("encoding");
1641 errors_keyword = scm_from_latin1_keyword ("errors");
1642 length_keyword = scm_from_latin1_keyword ("length");
1644 error_symbol = scm_from_latin1_symbol ("error");
1645 escape_symbol = scm_from_latin1_symbol ("escape");
1646 substitute_symbol = scm_from_latin1_symbol ("substitute");