{
char *p;
enum varobj_languages lang;
- struct value *value;
+ struct value *value = NULL;
/* Parse and evaluate the expression, filling in as much
of the variable's data as possible */
If evaluate_expression succeeds we got the value we wanted.
But if it fails, we still go on with a call to evaluate_type() */
if (!gdb_evaluate_expression (var->root->exp, &value))
- /* Error getting the value. Try to at least get the
- right type. */
- value = evaluate_type (var->root->exp);
+ {
+ /* Error getting the value. Try to at least get the
+ right type. */
+ struct value *type_only_value = evaluate_type (var->root->exp);
+ var->type = value_type (type_only_value);
+ }
+ else
+ var->type = value_type (value);
- var->type = value_type (value);
install_new_value (var, value, 1 /* Initial assignment */);
/* Set language info */
varobj_update (struct varobj **varp, struct varobj ***changelist)
{
int changed = 0;
- int error = 0;
int type_changed;
int i;
int vleft;
struct frame_info *fi;
/* sanity check: have we been passed a pointer? */
- if (changelist == NULL)
- return WRONG_PARAM;
+ gdb_assert (changelist);
- /* Only root variables can be updated... */
if (!is_root_p (*varp))
- /* Not a root var. */
- return WRONG_PARAM;
+ error (_("Only root variables can be updated"));
if (!(*varp)->root->is_valid)
return INVALID;
}
*cv = 0;
+ VEC_free (varobj_p, stack);
+ VEC_free (varobj_p, result);
+
if (type_changed)
return TYPE_CHANGED;
else