Automatic date update in version.in
[external/binutils.git] / gdb / guile / scm-value.c
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 \f
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 \f
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 \f
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 \f
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 }