xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/guile/scm-value.c (revision 82d56013d7b633d116a93943de88e08335357a7c)
1 /* Scheme interface to values.
2 
3    Copyright (C) 2008-2019 Free Software Foundation, Inc.
4 
5    This file is part of GDB.
6 
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.
11 
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.
16 
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/>.  */
19 
20 /* See README file in this directory for implementation notes, coding
21    conventions, et.al.  */
22 
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"
34 
35 /* The <gdb:value> smob.  */
36 
37 typedef struct _value_smob
38 {
39   /* This always appears first.  */
40   gdb_smob base;
41 
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;
47 
48   struct value *value;
49 
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;
59 
60 static const char value_smob_name[] = "gdb:value";
61 
62 /* The tag Guile knows the value smob by.  */
63 static scm_t_bits value_smob_tag;
64 
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;
69 
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;
75 
76 /* Possible #:errors values.  */
77 static SCM error_symbol;
78 static SCM escape_symbol;
79 static SCM substitute_symbol;
80 
81 /* Administrivia for value smobs.  */
82 
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".  */
86 
87 void
88 gdbscm_preserve_values (const struct extension_language_defn *extlang,
89 			struct objfile *objfile, htab_t copied_types)
90 {
91   value_smob *iter;
92 
93   for (iter = values_in_scheme; iter; iter = iter->next)
94     preserve_one_value (iter->value, objfile, copied_types);
95 }
96 
97 /* Helper to add a value_smob to the global list.  */
98 
99 static void
100 vlscm_remember_scheme_value (value_smob *v_smob)
101 {
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;
107 }
108 
109 /* Helper to remove a value_smob from the global list.  */
110 
111 static void
112 vlscm_forget_value_smob (value_smob *v_smob)
113 {
114   /* Remove SELF from the global list.  */
115   if (v_smob->prev)
116     v_smob->prev->next = v_smob->next;
117   else
118     {
119       gdb_assert (values_in_scheme == v_smob);
120       values_in_scheme = v_smob->next;
121     }
122   if (v_smob->next)
123     v_smob->next->prev = v_smob->prev;
124 }
125 
126 /* The smob "free" function for <gdb:value>.  */
127 
128 static size_t
129 vlscm_free_value_smob (SCM self)
130 {
131   value_smob *v_smob = (value_smob *) SCM_SMOB_DATA (self);
132 
133   vlscm_forget_value_smob (v_smob);
134   value_decref (v_smob->value);
135 
136   return 0;
137 }
138 
139 /* The smob "print" function for <gdb:value>.  */
140 
141 static int
142 vlscm_print_value_smob (SCM self, SCM port, scm_print_state *pstate)
143 {
144   value_smob *v_smob = (value_smob *) SCM_SMOB_DATA (self);
145   struct value_print_options opts;
146 
147   if (pstate->writingp)
148     gdbscm_printf (port, "#<%s ", value_smob_name);
149 
150   get_user_print_options (&opts);
151   opts.deref_ref = 0;
152 
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;
158 
159   TRY
160     {
161       string_file stb;
162 
163       common_val_print (v_smob->value, &stb, 0, &opts, current_language);
164       scm_puts (stb.c_str (), port);
165     }
166   CATCH (except, RETURN_MASK_ALL)
167     {
168       GDBSCM_HANDLE_GDB_EXCEPTION (except);
169     }
170   END_CATCH
171 
172   if (pstate->writingp)
173     scm_puts (">", port);
174 
175   scm_remember_upto_here_1 (self);
176 
177   /* Non-zero means success.  */
178   return 1;
179 }
180 
181 /* The smob "equalp" function for <gdb:value>.  */
182 
183 static SCM
184 vlscm_equal_p_value_smob (SCM v1, SCM v2)
185 {
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;
189 
190   TRY
191     {
192       result = value_equal (v1_smob->value, v2_smob->value);
193     }
194   CATCH (except, RETURN_MASK_ALL)
195     {
196       GDBSCM_HANDLE_GDB_EXCEPTION (except);
197     }
198   END_CATCH
199 
200   return scm_from_bool (result);
201 }
202 
203 /* Low level routine to create a <gdb:value> object.  */
204 
205 static SCM
206 vlscm_make_value_smob (void)
207 {
208   value_smob *v_smob = (value_smob *)
209     scm_gc_malloc (sizeof (value_smob), value_smob_name);
210   SCM v_scm;
211 
212   /* These must be filled in by the caller.  */
213   v_smob->value = NULL;
214   v_smob->prev = NULL;
215   v_smob->next = NULL;
216 
217   /* These are lazily computed.  */
218   v_smob->address = SCM_UNDEFINED;
219   v_smob->type = SCM_UNDEFINED;
220   v_smob->dynamic_type = SCM_UNDEFINED;
221 
222   v_scm = scm_new_smob (value_smob_tag, (scm_t_bits) v_smob);
223   gdbscm_init_gsmob (&v_smob->base);
224 
225   return v_scm;
226 }
227 
228 /* Return non-zero if SCM is a <gdb:value> object.  */
229 
230 int
231 vlscm_is_value (SCM scm)
232 {
233   return SCM_SMOB_PREDICATE (value_smob_tag, scm);
234 }
235 
236 /* (value? object) -> boolean */
237 
238 static SCM
239 gdbscm_value_p (SCM scm)
240 {
241   return scm_from_bool (vlscm_is_value (scm));
242 }
243 
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.  */
247 
248 SCM
249 vlscm_scm_from_value (struct value *value)
250 {
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);
255 
256   v_smob->value = release_value (value).release ();
257   vlscm_remember_scheme_value (v_smob);
258 
259   return v_scm;
260 }
261 
262 /* Returns the <gdb:value> object in SELF.
263    Throws an exception if SELF is not a <gdb:value> object.  */
264 
265 static SCM
266 vlscm_get_value_arg_unsafe (SCM self, int arg_pos, const char *func_name)
267 {
268   SCM_ASSERT_TYPE (vlscm_is_value (self), self, arg_pos, func_name,
269 		   value_smob_name);
270 
271   return self;
272 }
273 
274 /* Returns a pointer to the value smob of SELF.
275    Throws an exception if SELF is not a <gdb:value> object.  */
276 
277 static value_smob *
278 vlscm_get_value_smob_arg_unsafe (SCM self, int arg_pos, const char *func_name)
279 {
280   SCM v_scm = vlscm_get_value_arg_unsafe (self, arg_pos, func_name);
281   value_smob *v_smob = (value_smob *) SCM_SMOB_DATA (v_scm);
282 
283   return v_smob;
284 }
285 
286 /* Return the value field of V_SCM, an object of type <gdb:value>.
287    This exists so that we don't have to export the struct's contents.  */
288 
289 struct value *
290 vlscm_scm_to_value (SCM v_scm)
291 {
292   value_smob *v_smob;
293 
294   gdb_assert (vlscm_is_value (v_scm));
295   v_smob = (value_smob *) SCM_SMOB_DATA (v_scm);
296   return v_smob->value;
297 }
298 
299 /* Value methods.  */
300 
301 /* (make-value x [#:type type]) -> <gdb:value> */
302 
303 static SCM
304 gdbscm_make_value (SCM x, SCM rest)
305 {
306   const SCM keywords[] = { type_keyword, SCM_BOOL_F };
307 
308   int type_arg_pos = -1;
309   SCM type_scm = SCM_UNDEFINED;
310   gdbscm_parse_function_args (FUNC_NAME, SCM_ARG2, keywords, "#O", rest,
311 			      &type_arg_pos, &type_scm);
312 
313   struct type *type = NULL;
314   if (type_arg_pos > 0)
315     {
316       type_smob *t_smob = tyscm_get_type_smob_arg_unsafe (type_scm,
317 							  type_arg_pos,
318 							  FUNC_NAME);
319       type = tyscm_type_smob_type (t_smob);
320     }
321 
322   return gdbscm_wrap ([=]
323     {
324       scoped_value_mark free_values;
325 
326       SCM except_scm;
327       struct value *value
328 	= vlscm_convert_typed_value_from_scheme (FUNC_NAME, SCM_ARG1, x,
329 						 type_arg_pos, type_scm, type,
330 						 &except_scm,
331 						 get_current_arch (),
332 						 current_language);
333       if (value == NULL)
334 	return except_scm;
335 
336       return vlscm_scm_from_value (value);
337     });
338 }
339 
340 /* (make-lazy-value <gdb:type> address) -> <gdb:value> */
341 
342 static SCM
343 gdbscm_make_lazy_value (SCM type_scm, SCM address_scm)
344 {
345   type_smob *t_smob = tyscm_get_type_smob_arg_unsafe (type_scm,
346 						      SCM_ARG1, FUNC_NAME);
347   struct type *type = tyscm_type_smob_type (t_smob);
348 
349   ULONGEST address;
350   gdbscm_parse_function_args (FUNC_NAME, SCM_ARG2, NULL, "U",
351 			      address_scm, &address);
352 
353   return gdbscm_wrap ([=]
354     {
355       scoped_value_mark free_values;
356 
357       struct value *value = value_from_contents_and_address (type, NULL,
358 							     address);
359       return vlscm_scm_from_value (value);
360     });
361 }
362 
363 /* (value-optimized-out? <gdb:value>) -> boolean */
364 
365 static SCM
366 gdbscm_value_optimized_out_p (SCM self)
367 {
368   value_smob *v_smob
369     = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
370 
371   return gdbscm_wrap ([=]
372     {
373       return scm_from_bool (value_optimized_out (v_smob->value));
374     });
375 }
376 
377 /* (value-address <gdb:value>) -> integer
378    Returns #f if the value doesn't have one.  */
379 
380 static SCM
381 gdbscm_value_address (SCM self)
382 {
383   value_smob *v_smob
384     = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
385   struct value *value = v_smob->value;
386 
387   return gdbscm_wrap ([=]
388     {
389       if (SCM_UNBNDP (v_smob->address))
390 	{
391 	  scoped_value_mark free_values;
392 
393 	  SCM address = SCM_BOOL_F;
394 
395 	  TRY
396 	    {
397 	      address = vlscm_scm_from_value (value_addr (value));
398 	    }
399 	  CATCH (except, RETURN_MASK_ALL)
400 	    {
401 	    }
402 	  END_CATCH
403 
404 	  if (gdbscm_is_exception (address))
405 	    return address;
406 
407 	  v_smob->address = address;
408 	}
409 
410       return v_smob->address;
411     });
412 }
413 
414 /* (value-dereference <gdb:value>) -> <gdb:value>
415    Given a value of a pointer type, apply the C unary * operator to it.  */
416 
417 static SCM
418 gdbscm_value_dereference (SCM self)
419 {
420   value_smob *v_smob
421     = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
422 
423   return gdbscm_wrap ([=]
424     {
425       scoped_value_mark free_values;
426 
427       struct value *res_val = value_ind (v_smob->value);
428       return vlscm_scm_from_value (res_val);
429     });
430 }
431 
432 /* (value-referenced-value <gdb:value>) -> <gdb:value>
433    Given a value of a reference type, return the value referenced.
434    The difference between this function and gdbscm_value_dereference is that
435    the latter applies * unary operator to a value, which need not always
436    result in the value referenced.
437    For example, for a value which is a reference to an 'int' pointer ('int *'),
438    gdbscm_value_dereference will result in a value of type 'int' while
439    gdbscm_value_referenced_value will result in a value of type 'int *'.  */
440 
441 static SCM
442 gdbscm_value_referenced_value (SCM self)
443 {
444   value_smob *v_smob
445     = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
446   struct value *value = v_smob->value;
447 
448   return gdbscm_wrap ([=]
449     {
450       scoped_value_mark free_values;
451 
452       struct value *res_val;
453 
454       switch (TYPE_CODE (check_typedef (value_type (value))))
455         {
456         case TYPE_CODE_PTR:
457           res_val = value_ind (value);
458           break;
459         case TYPE_CODE_REF:
460           res_val = coerce_ref (value);
461           break;
462         default:
463           error (_("Trying to get the referenced value from a value which is"
464 		   " neither a pointer nor a reference"));
465         }
466 
467       return vlscm_scm_from_value (res_val);
468     });
469 }
470 
471 /* (value-type <gdb:value>) -> <gdb:type> */
472 
473 static SCM
474 gdbscm_value_type (SCM self)
475 {
476   value_smob *v_smob
477     = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
478   struct value *value = v_smob->value;
479 
480   if (SCM_UNBNDP (v_smob->type))
481     v_smob->type = tyscm_scm_from_type (value_type (value));
482 
483   return v_smob->type;
484 }
485 
486 /* (value-dynamic-type <gdb:value>) -> <gdb:type> */
487 
488 static SCM
489 gdbscm_value_dynamic_type (SCM self)
490 {
491   value_smob *v_smob
492     = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
493   struct value *value = v_smob->value;
494   struct type *type = NULL;
495 
496   if (! SCM_UNBNDP (v_smob->dynamic_type))
497     return v_smob->dynamic_type;
498 
499   TRY
500     {
501       scoped_value_mark free_values;
502 
503       type = value_type (value);
504       type = check_typedef (type);
505 
506       if (((TYPE_CODE (type) == TYPE_CODE_PTR)
507 	   || (TYPE_CODE (type) == TYPE_CODE_REF))
508 	  && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT))
509 	{
510 	  struct value *target;
511 	  int was_pointer = TYPE_CODE (type) == TYPE_CODE_PTR;
512 
513 	  if (was_pointer)
514 	    target = value_ind (value);
515 	  else
516 	    target = coerce_ref (value);
517 	  type = value_rtti_type (target, NULL, NULL, NULL);
518 
519 	  if (type)
520 	    {
521 	      if (was_pointer)
522 		type = lookup_pointer_type (type);
523 	      else
524 		type = lookup_lvalue_reference_type (type);
525 	    }
526 	}
527       else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
528 	type = value_rtti_type (value, NULL, NULL, NULL);
529       else
530 	{
531 	  /* Re-use object's static type.  */
532 	  type = NULL;
533 	}
534     }
535   CATCH (except, RETURN_MASK_ALL)
536     {
537       GDBSCM_HANDLE_GDB_EXCEPTION (except);
538     }
539   END_CATCH
540 
541   if (type == NULL)
542     v_smob->dynamic_type = gdbscm_value_type (self);
543   else
544     v_smob->dynamic_type = tyscm_scm_from_type (type);
545 
546   return v_smob->dynamic_type;
547 }
548 
549 /* A helper function that implements the various cast operators.  */
550 
551 static SCM
552 vlscm_do_cast (SCM self, SCM type_scm, enum exp_opcode op,
553 	       const char *func_name)
554 {
555   value_smob *v_smob
556     = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
557   struct value *value = v_smob->value;
558   type_smob *t_smob
559     = tyscm_get_type_smob_arg_unsafe (type_scm, SCM_ARG2, FUNC_NAME);
560   struct type *type = tyscm_type_smob_type (t_smob);
561 
562   return gdbscm_wrap ([=]
563     {
564       scoped_value_mark free_values;
565 
566       struct value *res_val;
567       if (op == UNOP_DYNAMIC_CAST)
568 	res_val = value_dynamic_cast (type, value);
569       else if (op == UNOP_REINTERPRET_CAST)
570 	res_val = value_reinterpret_cast (type, value);
571       else
572 	{
573 	  gdb_assert (op == UNOP_CAST);
574 	  res_val = value_cast (type, value);
575 	}
576 
577       return vlscm_scm_from_value (res_val);
578     });
579 }
580 
581 /* (value-cast <gdb:value> <gdb:type>) -> <gdb:value> */
582 
583 static SCM
584 gdbscm_value_cast (SCM self, SCM new_type)
585 {
586   return vlscm_do_cast (self, new_type, UNOP_CAST, FUNC_NAME);
587 }
588 
589 /* (value-dynamic-cast <gdb:value> <gdb:type>) -> <gdb:value> */
590 
591 static SCM
592 gdbscm_value_dynamic_cast (SCM self, SCM new_type)
593 {
594   return vlscm_do_cast (self, new_type, UNOP_DYNAMIC_CAST, FUNC_NAME);
595 }
596 
597 /* (value-reinterpret-cast <gdb:value> <gdb:type>) -> <gdb:value> */
598 
599 static SCM
600 gdbscm_value_reinterpret_cast (SCM self, SCM new_type)
601 {
602   return vlscm_do_cast (self, new_type, UNOP_REINTERPRET_CAST, FUNC_NAME);
603 }
604 
605 /* (value-field <gdb:value> string) -> <gdb:value>
606    Given string name of an element inside structure, return its <gdb:value>
607    object.  */
608 
609 static SCM
610 gdbscm_value_field (SCM self, SCM field_scm)
611 {
612   value_smob *v_smob
613     = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
614 
615   SCM_ASSERT_TYPE (scm_is_string (field_scm), field_scm, SCM_ARG2, FUNC_NAME,
616 		   _("string"));
617 
618   return gdbscm_wrap ([=]
619     {
620       scoped_value_mark free_values;
621 
622       gdb::unique_xmalloc_ptr<char> field = gdbscm_scm_to_c_string (field_scm);
623 
624       struct value *tmp = v_smob->value;
625 
626       struct value *res_val = value_struct_elt (&tmp, NULL, field.get (), NULL,
627 						"struct/class/union");
628 
629       return vlscm_scm_from_value (res_val);
630     });
631 }
632 
633 /* (value-subscript <gdb:value> integer|<gdb:value>) -> <gdb:value>
634    Return the specified value in an array.  */
635 
636 static SCM
637 gdbscm_value_subscript (SCM self, SCM index_scm)
638 {
639   value_smob *v_smob
640     = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
641   struct value *value = v_smob->value;
642   struct type *type = value_type (value);
643 
644   SCM_ASSERT (type != NULL, self, SCM_ARG2, FUNC_NAME);
645 
646   return gdbscm_wrap ([=]
647     {
648       scoped_value_mark free_values;
649 
650       SCM except_scm;
651       struct value *index
652 	= vlscm_convert_value_from_scheme (FUNC_NAME, SCM_ARG2, index_scm,
653 					   &except_scm,
654 					   get_type_arch (type),
655 					   current_language);
656       if (index == NULL)
657 	return except_scm;
658 
659       /* Assume we are attempting an array access, and let the value code
660 	 throw an exception if the index has an invalid type.
661 	 Check the value's type is something that can be accessed via
662 	 a subscript.  */
663       struct value *tmp = coerce_ref (value);
664       struct type *tmp_type = check_typedef (value_type (tmp));
665       if (TYPE_CODE (tmp_type) != TYPE_CODE_ARRAY
666 	  && TYPE_CODE (tmp_type) != TYPE_CODE_PTR)
667 	error (_("Cannot subscript requested type"));
668 
669       struct value *res_val = value_subscript (tmp, value_as_long (index));
670       return vlscm_scm_from_value (res_val);
671     });
672 }
673 
674 /* (value-call <gdb:value> arg-list) -> <gdb:value>
675    Perform an inferior function call on the value.  */
676 
677 static SCM
678 gdbscm_value_call (SCM self, SCM args)
679 {
680   value_smob *v_smob
681     = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
682   struct value *function = v_smob->value;
683   struct type *ftype = NULL;
684   long args_count;
685   struct value **vargs = NULL;
686 
687   TRY
688     {
689       ftype = check_typedef (value_type (function));
690     }
691   CATCH (except, RETURN_MASK_ALL)
692     {
693       GDBSCM_HANDLE_GDB_EXCEPTION (except);
694     }
695   END_CATCH
696 
697   SCM_ASSERT_TYPE (TYPE_CODE (ftype) == TYPE_CODE_FUNC, self,
698 		   SCM_ARG1, FUNC_NAME,
699 		   _("function (value of TYPE_CODE_FUNC)"));
700 
701   SCM_ASSERT_TYPE (gdbscm_is_true (scm_list_p (args)), args,
702 		   SCM_ARG2, FUNC_NAME, _("list"));
703 
704   args_count = scm_ilength (args);
705   if (args_count > 0)
706     {
707       struct gdbarch *gdbarch = get_current_arch ();
708       const struct language_defn *language = current_language;
709       SCM except_scm;
710       long i;
711 
712       vargs = XALLOCAVEC (struct value *, args_count);
713       for (i = 0; i < args_count; i++)
714 	{
715 	  SCM arg = scm_car (args);
716 
717 	  vargs[i] = vlscm_convert_value_from_scheme (FUNC_NAME,
718 						      GDBSCM_ARG_NONE, arg,
719 						      &except_scm,
720 						      gdbarch, language);
721 	  if (vargs[i] == NULL)
722 	    gdbscm_throw (except_scm);
723 
724 	  args = scm_cdr (args);
725 	}
726       gdb_assert (gdbscm_is_true (scm_null_p (args)));
727     }
728 
729   return gdbscm_wrap ([=]
730     {
731       scoped_value_mark free_values;
732 
733       auto av = gdb::make_array_view (vargs, args_count);
734       value *return_value = call_function_by_hand (function, NULL, av);
735       return vlscm_scm_from_value (return_value);
736     });
737 }
738 
739 /* (value->bytevector <gdb:value>) -> bytevector */
740 
741 static SCM
742 gdbscm_value_to_bytevector (SCM self)
743 {
744   value_smob *v_smob
745     = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
746   struct value *value = v_smob->value;
747   struct type *type;
748   size_t length = 0;
749   const gdb_byte *contents = NULL;
750   SCM bv;
751 
752   type = value_type (value);
753 
754   TRY
755     {
756       type = check_typedef (type);
757       length = TYPE_LENGTH (type);
758       contents = value_contents (value);
759     }
760   CATCH (except, RETURN_MASK_ALL)
761     {
762       GDBSCM_HANDLE_GDB_EXCEPTION (except);
763     }
764   END_CATCH
765 
766   bv = scm_c_make_bytevector (length);
767   memcpy (SCM_BYTEVECTOR_CONTENTS (bv), contents, length);
768 
769   return bv;
770 }
771 
772 /* Helper function to determine if a type is "int-like".  */
773 
774 static int
775 is_intlike (struct type *type, int ptr_ok)
776 {
777   return (TYPE_CODE (type) == TYPE_CODE_INT
778 	  || TYPE_CODE (type) == TYPE_CODE_ENUM
779 	  || TYPE_CODE (type) == TYPE_CODE_BOOL
780 	  || TYPE_CODE (type) == TYPE_CODE_CHAR
781 	  || (ptr_ok && TYPE_CODE (type) == TYPE_CODE_PTR));
782 }
783 
784 /* (value->bool <gdb:value>) -> boolean
785    Throws an error if the value is not integer-like.  */
786 
787 static SCM
788 gdbscm_value_to_bool (SCM self)
789 {
790   value_smob *v_smob
791     = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
792   struct value *value = v_smob->value;
793   struct type *type;
794   LONGEST l = 0;
795 
796   type = value_type (value);
797 
798   TRY
799     {
800       type = check_typedef (type);
801     }
802   CATCH (except, RETURN_MASK_ALL)
803     {
804       GDBSCM_HANDLE_GDB_EXCEPTION (except);
805     }
806   END_CATCH
807 
808   SCM_ASSERT_TYPE (is_intlike (type, 1), self, SCM_ARG1, FUNC_NAME,
809 		   _("integer-like gdb value"));
810 
811   TRY
812     {
813       if (TYPE_CODE (type) == TYPE_CODE_PTR)
814 	l = value_as_address (value);
815       else
816 	l = value_as_long (value);
817     }
818   CATCH (except, RETURN_MASK_ALL)
819     {
820       GDBSCM_HANDLE_GDB_EXCEPTION (except);
821     }
822   END_CATCH
823 
824   return scm_from_bool (l != 0);
825 }
826 
827 /* (value->integer <gdb:value>) -> integer
828    Throws an error if the value is not integer-like.  */
829 
830 static SCM
831 gdbscm_value_to_integer (SCM self)
832 {
833   value_smob *v_smob
834     = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
835   struct value *value = v_smob->value;
836   struct type *type;
837   LONGEST l = 0;
838 
839   type = value_type (value);
840 
841   TRY
842     {
843       type = check_typedef (type);
844     }
845   CATCH (except, RETURN_MASK_ALL)
846     {
847       GDBSCM_HANDLE_GDB_EXCEPTION (except);
848     }
849   END_CATCH
850 
851   SCM_ASSERT_TYPE (is_intlike (type, 1), self, SCM_ARG1, FUNC_NAME,
852 		   _("integer-like gdb value"));
853 
854   TRY
855     {
856       if (TYPE_CODE (type) == TYPE_CODE_PTR)
857 	l = value_as_address (value);
858       else
859 	l = value_as_long (value);
860     }
861   CATCH (except, RETURN_MASK_ALL)
862     {
863       GDBSCM_HANDLE_GDB_EXCEPTION (except);
864     }
865   END_CATCH
866 
867   if (TYPE_UNSIGNED (type))
868     return gdbscm_scm_from_ulongest (l);
869   else
870     return gdbscm_scm_from_longest (l);
871 }
872 
873 /* (value->real <gdb:value>) -> real
874    Throws an error if the value is not a number.  */
875 
876 static SCM
877 gdbscm_value_to_real (SCM self)
878 {
879   value_smob *v_smob
880     = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
881   struct value *value = v_smob->value;
882   struct type *type;
883   double d = 0;
884   struct value *check = nullptr;
885 
886   type = value_type (value);
887 
888   TRY
889     {
890       type = check_typedef (type);
891     }
892   CATCH (except, RETURN_MASK_ALL)
893     {
894       GDBSCM_HANDLE_GDB_EXCEPTION (except);
895     }
896   END_CATCH
897 
898   SCM_ASSERT_TYPE (is_intlike (type, 0) || TYPE_CODE (type) == TYPE_CODE_FLT,
899 		   self, SCM_ARG1, FUNC_NAME, _("number"));
900 
901   TRY
902     {
903       if (is_floating_value (value))
904 	{
905 	  d = target_float_to_host_double (value_contents (value), type);
906 	  check = allocate_value (type);
907 	  target_float_from_host_double (value_contents_raw (check), type, d);
908 	}
909       else if (TYPE_UNSIGNED (type))
910 	{
911 	  d = (ULONGEST) value_as_long (value);
912 	  check = value_from_ulongest (type, (ULONGEST) d);
913 	}
914       else
915 	{
916 	  d = value_as_long (value);
917 	  check = value_from_longest (type, (LONGEST) d);
918 	}
919     }
920   CATCH (except, RETURN_MASK_ALL)
921     {
922       GDBSCM_HANDLE_GDB_EXCEPTION (except);
923     }
924   END_CATCH
925 
926   /* TODO: Is there a better way to check if the value fits?  */
927   if (!value_equal (value, check))
928     gdbscm_out_of_range_error (FUNC_NAME, SCM_ARG1, self,
929 			       _("number can't be converted to a double"));
930 
931   return scm_from_double (d);
932 }
933 
934 /* (value->string <gdb:value>
935        [#:encoding encoding]
936        [#:errors #f | 'error | 'substitute]
937        [#:length length])
938      -> string
939    Return Unicode string with value's contents, which must be a string.
940 
941    If ENCODING is not given, the string is assumed to be encoded in
942    the target's charset.
943 
944    ERRORS is one of #f, 'error or 'substitute.
945    An error setting of #f means use the default, which is Guile's
946    %default-port-conversion-strategy when using Guile >= 2.0.6, or 'error if
947    using an earlier version of Guile.  Earlier versions do not properly
948    support obtaining the default port conversion strategy.
949    If the default is not one of 'error or 'substitute, 'substitute is used.
950    An error setting of "error" causes an exception to be thrown if there's
951    a decoding error.  An error setting of "substitute" causes invalid
952    characters to be replaced with "?".
953 
954    If LENGTH is provided, only fetch string to the length provided.
955    LENGTH must be a Scheme integer, it can't be a <gdb:value> integer.  */
956 
957 static SCM
958 gdbscm_value_to_string (SCM self, SCM rest)
959 {
960   value_smob *v_smob
961     = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
962   struct value *value = v_smob->value;
963   const SCM keywords[] = {
964     encoding_keyword, errors_keyword, length_keyword, SCM_BOOL_F
965   };
966   int encoding_arg_pos = -1, errors_arg_pos = -1, length_arg_pos = -1;
967   char *encoding = NULL;
968   SCM errors = SCM_BOOL_F;
969   /* Avoid an uninitialized warning from gcc.  */
970   gdb_byte *buffer_contents = nullptr;
971   int length = -1;
972   const char *la_encoding = NULL;
973   struct type *char_type = NULL;
974   SCM result;
975 
976   /* The sequencing here, as everywhere else, is important.
977      We can't have existing cleanups when a Scheme exception is thrown.  */
978 
979   gdbscm_parse_function_args (FUNC_NAME, SCM_ARG2, keywords, "#sOi", rest,
980 			      &encoding_arg_pos, &encoding,
981 			      &errors_arg_pos, &errors,
982 			      &length_arg_pos, &length);
983 
984   if (errors_arg_pos > 0
985       && errors != SCM_BOOL_F
986       && !scm_is_eq (errors, error_symbol)
987       && !scm_is_eq (errors, substitute_symbol))
988     {
989       SCM excp
990 	= gdbscm_make_out_of_range_error (FUNC_NAME, errors_arg_pos, errors,
991 					  _("invalid error kind"));
992 
993       xfree (encoding);
994       gdbscm_throw (excp);
995     }
996   if (errors == SCM_BOOL_F)
997     {
998       /* N.B. scm_port_conversion_strategy in Guile versions prior to 2.0.6
999 	 will throw a Scheme error when passed #f.  */
1000       if (gdbscm_guile_version_is_at_least (2, 0, 6))
1001 	errors = scm_port_conversion_strategy (SCM_BOOL_F);
1002       else
1003 	errors = error_symbol;
1004     }
1005   /* We don't assume anything about the result of scm_port_conversion_strategy.
1006      From this point on, if errors is not 'errors, use 'substitute.  */
1007 
1008   TRY
1009     {
1010       gdb::unique_xmalloc_ptr<gdb_byte> buffer;
1011       LA_GET_STRING (value, &buffer, &length, &char_type, &la_encoding);
1012       buffer_contents = buffer.release ();
1013     }
1014   CATCH (except, RETURN_MASK_ALL)
1015     {
1016       xfree (encoding);
1017       GDBSCM_HANDLE_GDB_EXCEPTION (except);
1018     }
1019   END_CATCH
1020 
1021   /* If errors is "error", scm_from_stringn may throw a Scheme exception.
1022      Make sure we don't leak.  This is done via scm_dynwind_begin, et.al.  */
1023 
1024   scm_dynwind_begin ((scm_t_dynwind_flags) 0);
1025 
1026   gdbscm_dynwind_xfree (encoding);
1027   gdbscm_dynwind_xfree (buffer_contents);
1028 
1029   result = scm_from_stringn ((const char *) buffer_contents,
1030 			     length * TYPE_LENGTH (char_type),
1031 			     (encoding != NULL && *encoding != '\0'
1032 			      ? encoding
1033 			      : la_encoding),
1034 			     scm_is_eq (errors, error_symbol)
1035 			     ? SCM_FAILED_CONVERSION_ERROR
1036 			     : SCM_FAILED_CONVERSION_QUESTION_MARK);
1037 
1038   scm_dynwind_end ();
1039 
1040   return result;
1041 }
1042 
1043 /* (value->lazy-string <gdb:value> [#:encoding encoding] [#:length length])
1044      -> <gdb:lazy-string>
1045    Return a Scheme object representing a lazy_string_object type.
1046    A lazy string is a pointer to a string with an optional encoding and length.
1047    If ENCODING is not given, the target's charset is used.
1048    If LENGTH is provided then the length parameter is set to LENGTH.
1049    Otherwise if the value is an array of known length then the array's length
1050    is used.  Otherwise the length will be set to -1 (meaning first null of
1051    appropriate with).
1052    LENGTH must be a Scheme integer, it can't be a <gdb:value> integer.  */
1053 
1054 static SCM
1055 gdbscm_value_to_lazy_string (SCM self, SCM rest)
1056 {
1057   value_smob *v_smob
1058     = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
1059   struct value *value = v_smob->value;
1060   const SCM keywords[] = { encoding_keyword, length_keyword, SCM_BOOL_F };
1061   int encoding_arg_pos = -1, length_arg_pos = -1;
1062   char *encoding = NULL;
1063   int length = -1;
1064   SCM result = SCM_BOOL_F; /* -Wall */
1065   struct gdb_exception except = exception_none;
1066 
1067   /* The sequencing here, as everywhere else, is important.
1068      We can't have existing cleanups when a Scheme exception is thrown.  */
1069 
1070   gdbscm_parse_function_args (FUNC_NAME, SCM_ARG2, keywords, "#si", rest,
1071 			      &encoding_arg_pos, &encoding,
1072 			      &length_arg_pos, &length);
1073 
1074   if (length < -1)
1075     {
1076       gdbscm_out_of_range_error (FUNC_NAME, length_arg_pos,
1077 				 scm_from_int (length),
1078 				 _("invalid length"));
1079     }
1080 
1081   TRY
1082     {
1083       scoped_value_mark free_values;
1084 
1085       struct type *type, *realtype;
1086       CORE_ADDR addr;
1087 
1088       type = value_type (value);
1089       realtype = check_typedef (type);
1090 
1091       switch (TYPE_CODE (realtype))
1092 	{
1093 	case TYPE_CODE_ARRAY:
1094 	  {
1095 	    LONGEST array_length = -1;
1096 	    LONGEST low_bound, high_bound;
1097 
1098 	    /* PR 20786: There's no way to specify an array of length zero.
1099 	       Record a length of [0,-1] which is how Ada does it.  Anything
1100 	       we do is broken, but this one possible solution.  */
1101 	    if (get_array_bounds (realtype, &low_bound, &high_bound))
1102 	      array_length = high_bound - low_bound + 1;
1103 	    if (length == -1)
1104 	      length = array_length;
1105 	    else if (array_length == -1)
1106 	      {
1107 		type = lookup_array_range_type (TYPE_TARGET_TYPE (realtype),
1108 						0, length - 1);
1109 	      }
1110 	    else if (length != array_length)
1111 	      {
1112 		/* We need to create a new array type with the
1113 		   specified length.  */
1114 		if (length > array_length)
1115 		  error (_("length is larger than array size"));
1116 		type = lookup_array_range_type (TYPE_TARGET_TYPE (type),
1117 						low_bound,
1118 						low_bound + length - 1);
1119 	      }
1120 	    addr = value_address (value);
1121 	    break;
1122 	  }
1123 	case TYPE_CODE_PTR:
1124 	  /* If a length is specified we defer creating an array of the
1125 	     specified width until we need to.  */
1126 	  addr = value_as_address (value);
1127 	  break;
1128 	default:
1129 	  /* Should flag an error here.  PR 20769.  */
1130 	  addr = value_address (value);
1131 	  break;
1132 	}
1133 
1134       result = lsscm_make_lazy_string (addr, length, encoding, type);
1135     }
1136   CATCH (ex, RETURN_MASK_ALL)
1137     {
1138       except = ex;
1139     }
1140   END_CATCH
1141 
1142   xfree (encoding);
1143   GDBSCM_HANDLE_GDB_EXCEPTION (except);
1144 
1145   if (gdbscm_is_exception (result))
1146     gdbscm_throw (result);
1147 
1148   return result;
1149 }
1150 
1151 /* (value-lazy? <gdb:value>) -> boolean */
1152 
1153 static SCM
1154 gdbscm_value_lazy_p (SCM self)
1155 {
1156   value_smob *v_smob
1157     = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
1158   struct value *value = v_smob->value;
1159 
1160   return scm_from_bool (value_lazy (value));
1161 }
1162 
1163 /* (value-fetch-lazy! <gdb:value>) -> unspecified */
1164 
1165 static SCM
1166 gdbscm_value_fetch_lazy_x (SCM self)
1167 {
1168   value_smob *v_smob
1169     = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
1170   struct value *value = v_smob->value;
1171 
1172   return gdbscm_wrap ([=]
1173     {
1174       if (value_lazy (value))
1175 	value_fetch_lazy (value);
1176       return SCM_UNSPECIFIED;
1177     });
1178 }
1179 
1180 /* (value-print <gdb:value>) -> string */
1181 
1182 static SCM
1183 gdbscm_value_print (SCM self)
1184 {
1185   value_smob *v_smob
1186     = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
1187   struct value *value = v_smob->value;
1188   struct value_print_options opts;
1189 
1190   get_user_print_options (&opts);
1191   opts.deref_ref = 0;
1192 
1193   string_file stb;
1194 
1195   TRY
1196     {
1197       common_val_print (value, &stb, 0, &opts, current_language);
1198     }
1199   CATCH (except, RETURN_MASK_ALL)
1200     {
1201       GDBSCM_HANDLE_GDB_EXCEPTION (except);
1202     }
1203   END_CATCH
1204 
1205   /* Use SCM_FAILED_CONVERSION_QUESTION_MARK to ensure this doesn't
1206      throw an error if the encoding fails.
1207      IWBN to use scm_take_locale_string here, but we'd have to temporarily
1208      override the default port conversion handler because contrary to
1209      documentation it doesn't necessarily free the input string.  */
1210   return scm_from_stringn (stb.c_str (), stb.size (), host_charset (),
1211 			   SCM_FAILED_CONVERSION_QUESTION_MARK);
1212 }
1213 
1214 /* (parse-and-eval string) -> <gdb:value>
1215    Parse a string and evaluate the string as an expression.  */
1216 
1217 static SCM
1218 gdbscm_parse_and_eval (SCM expr_scm)
1219 {
1220   char *expr_str;
1221   gdbscm_parse_function_args (FUNC_NAME, SCM_ARG1, NULL, "s",
1222 			      expr_scm, &expr_str);
1223 
1224   return gdbscm_wrap ([=]
1225     {
1226       scoped_value_mark free_values;
1227       return vlscm_scm_from_value (parse_and_eval (expr_str));
1228     });
1229 }
1230 
1231 /* (history-ref integer) -> <gdb:value>
1232    Return the specified value from GDB's value history.  */
1233 
1234 static SCM
1235 gdbscm_history_ref (SCM index)
1236 {
1237   int i;
1238   gdbscm_parse_function_args (FUNC_NAME, SCM_ARG1, NULL, "i", index, &i);
1239 
1240   return gdbscm_wrap ([=]
1241     {
1242       return vlscm_scm_from_value (access_value_history (i));
1243     });
1244 }
1245 
1246 /* (history-append! <gdb:value>) -> index
1247    Append VALUE to GDB's value history.  Return its index in the history.  */
1248 
1249 static SCM
1250 gdbscm_history_append_x (SCM value)
1251 {
1252   value_smob *v_smob
1253     = vlscm_get_value_smob_arg_unsafe (value, SCM_ARG1, FUNC_NAME);
1254   return gdbscm_wrap ([=]
1255     {
1256       return scm_from_int (record_latest_value (v_smob->value));
1257     });
1258 }
1259 
1260 /* Initialize the Scheme value code.  */
1261 
1262 static const scheme_function value_functions[] =
1263 {
1264   { "value?", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_p),
1265     "\
1266 Return #t if the object is a <gdb:value> object." },
1267 
1268   { "make-value", 1, 0, 1, as_a_scm_t_subr (gdbscm_make_value),
1269     "\
1270 Create a <gdb:value> representing object.\n\
1271 Typically this is used to convert numbers and strings to\n\
1272 <gdb:value> objects.\n\
1273 \n\
1274   Arguments: object [#:type <gdb:type>]" },
1275 
1276   { "value-optimized-out?", 1, 0, 0,
1277     as_a_scm_t_subr (gdbscm_value_optimized_out_p),
1278     "\
1279 Return #t if the value has been optimizd out." },
1280 
1281   { "value-address", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_address),
1282     "\
1283 Return the address of the value." },
1284 
1285   { "value-type", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_type),
1286     "\
1287 Return the type of the value." },
1288 
1289   { "value-dynamic-type", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_dynamic_type),
1290     "\
1291 Return the dynamic type of the value." },
1292 
1293   { "value-cast", 2, 0, 0, as_a_scm_t_subr (gdbscm_value_cast),
1294     "\
1295 Cast the value to the supplied type.\n\
1296 \n\
1297   Arguments: <gdb:value> <gdb:type>" },
1298 
1299   { "value-dynamic-cast", 2, 0, 0, as_a_scm_t_subr (gdbscm_value_dynamic_cast),
1300     "\
1301 Cast the value to the supplied type, as if by the C++\n\
1302 dynamic_cast operator.\n\
1303 \n\
1304   Arguments: <gdb:value> <gdb:type>" },
1305 
1306   { "value-reinterpret-cast", 2, 0, 0,
1307     as_a_scm_t_subr (gdbscm_value_reinterpret_cast),
1308     "\
1309 Cast the value to the supplied type, as if by the C++\n\
1310 reinterpret_cast operator.\n\
1311 \n\
1312   Arguments: <gdb:value> <gdb:type>" },
1313 
1314   { "value-dereference", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_dereference),
1315     "\
1316 Return the result of applying the C unary * operator to the value." },
1317 
1318   { "value-referenced-value", 1, 0, 0,
1319     as_a_scm_t_subr (gdbscm_value_referenced_value),
1320     "\
1321 Given a value of a reference type, return the value referenced.\n\
1322 The difference between this function and value-dereference is that\n\
1323 the latter applies * unary operator to a value, which need not always\n\
1324 result in the value referenced.\n\
1325 For example, for a value which is a reference to an 'int' pointer ('int *'),\n\
1326 value-dereference will result in a value of type 'int' while\n\
1327 value-referenced-value will result in a value of type 'int *'." },
1328 
1329   { "value-field", 2, 0, 0, as_a_scm_t_subr (gdbscm_value_field),
1330     "\
1331 Return the specified field of the value.\n\
1332 \n\
1333   Arguments: <gdb:value> string" },
1334 
1335   { "value-subscript", 2, 0, 0, as_a_scm_t_subr (gdbscm_value_subscript),
1336     "\
1337 Return the value of the array at the specified index.\n\
1338 \n\
1339   Arguments: <gdb:value> integer" },
1340 
1341   { "value-call", 2, 0, 0, as_a_scm_t_subr (gdbscm_value_call),
1342     "\
1343 Perform an inferior function call taking the value as a pointer to the\n\
1344 function to call.\n\
1345 Each element of the argument list must be a <gdb:value> object or an object\n\
1346 that can be converted to one.\n\
1347 The result is the value returned by the function.\n\
1348 \n\
1349   Arguments: <gdb:value> arg-list" },
1350 
1351   { "value->bool", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_to_bool),
1352     "\
1353 Return the Scheme boolean representing the GDB value.\n\
1354 The value must be \"integer like\".  Pointers are ok." },
1355 
1356   { "value->integer", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_to_integer),
1357     "\
1358 Return the Scheme integer representing the GDB value.\n\
1359 The value must be \"integer like\".  Pointers are ok." },
1360 
1361   { "value->real", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_to_real),
1362     "\
1363 Return the Scheme real number representing the GDB value.\n\
1364 The value must be a number." },
1365 
1366   { "value->bytevector", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_to_bytevector),
1367     "\
1368 Return a Scheme bytevector with the raw contents of the GDB value.\n\
1369 No transformation, endian or otherwise, is performed." },
1370 
1371   { "value->string", 1, 0, 1, as_a_scm_t_subr (gdbscm_value_to_string),
1372     "\
1373 Return the Unicode string of the value's contents.\n\
1374 If ENCODING is not given, the string is assumed to be encoded in\n\
1375 the target's charset.\n\
1376 An error setting \"error\" causes an exception to be thrown if there's\n\
1377 a decoding error.  An error setting of \"substitute\" causes invalid\n\
1378 characters to be replaced with \"?\".  The default is \"error\".\n\
1379 If LENGTH is provided, only fetch string to the length provided.\n\
1380 \n\
1381   Arguments: <gdb:value>\n\
1382              [#:encoding encoding] [#:errors \"error\"|\"substitute\"]\n\
1383              [#:length length]" },
1384 
1385   { "value->lazy-string", 1, 0, 1,
1386     as_a_scm_t_subr (gdbscm_value_to_lazy_string),
1387     "\
1388 Return a Scheme object representing a lazily fetched Unicode string\n\
1389 of the value's contents.\n\
1390 If ENCODING is not given, the string is assumed to be encoded in\n\
1391 the target's charset.\n\
1392 If LENGTH is provided, only fetch string to the length provided.\n\
1393 \n\
1394   Arguments: <gdb:value> [#:encoding encoding] [#:length length]" },
1395 
1396   { "value-lazy?", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_lazy_p),
1397     "\
1398 Return #t if the value is lazy (not fetched yet from the inferior).\n\
1399 A lazy value is fetched when needed, or when the value-fetch-lazy! function\n\
1400 is called." },
1401 
1402   { "make-lazy-value", 2, 0, 0, as_a_scm_t_subr (gdbscm_make_lazy_value),
1403     "\
1404 Create a <gdb:value> that will be lazily fetched from the target.\n\
1405 \n\
1406   Arguments: <gdb:type> address" },
1407 
1408   { "value-fetch-lazy!", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_fetch_lazy_x),
1409     "\
1410 Fetch the value from the inferior, if it was lazy.\n\
1411 The result is \"unspecified\"." },
1412 
1413   { "value-print", 1, 0, 0, as_a_scm_t_subr (gdbscm_value_print),
1414     "\
1415 Return the string representation (print form) of the value." },
1416 
1417   { "parse-and-eval", 1, 0, 0, as_a_scm_t_subr (gdbscm_parse_and_eval),
1418     "\
1419 Evaluates string in gdb and returns the result as a <gdb:value> object." },
1420 
1421   { "history-ref", 1, 0, 0, as_a_scm_t_subr (gdbscm_history_ref),
1422     "\
1423 Return the specified value from GDB's value history." },
1424 
1425   { "history-append!", 1, 0, 0, as_a_scm_t_subr (gdbscm_history_append_x),
1426     "\
1427 Append the specified value onto GDB's value history." },
1428 
1429   END_FUNCTIONS
1430 };
1431 
1432 void
1433 gdbscm_initialize_values (void)
1434 {
1435   value_smob_tag = gdbscm_make_smob_type (value_smob_name,
1436 					  sizeof (value_smob));
1437   scm_set_smob_free (value_smob_tag, vlscm_free_value_smob);
1438   scm_set_smob_print (value_smob_tag, vlscm_print_value_smob);
1439   scm_set_smob_equalp (value_smob_tag, vlscm_equal_p_value_smob);
1440 
1441   gdbscm_define_functions (value_functions, 1);
1442 
1443   type_keyword = scm_from_latin1_keyword ("type");
1444   encoding_keyword = scm_from_latin1_keyword ("encoding");
1445   errors_keyword = scm_from_latin1_keyword ("errors");
1446   length_keyword = scm_from_latin1_keyword ("length");
1447 
1448   error_symbol = scm_from_latin1_symbol ("error");
1449   escape_symbol = scm_from_latin1_symbol ("escape");
1450   substitute_symbol = scm_from_latin1_symbol ("substitute");
1451 }
1452