all_values = val;
}
-/* Frees all the elements in a chain of values. */
-
-void
-free_value_chain (struct value *v)
-{
- struct value *next;
-
- for (; v; v = next)
- {
- next = value_next (v);
- value_decref (v);
- }
-}
-
/* Remove VAL from the chain all_values
so it will not be freed automatically. */
return value_ref_ptr (val);
}
-/* Release all values up to mark */
-struct value *
+/* See value.h. */
+
+std::vector<value_ref_ptr>
value_release_to_mark (const struct value *mark)
{
- struct value *val;
+ std::vector<value_ref_ptr> result;
struct value *next;
- for (val = next = all_values; next; next = next->next)
+ for (next = all_values; next; next = next->next)
{
+ next->released = 1;
+ result.emplace_back (next);
+
if (next->next == mark)
{
- all_values = next->next;
+ struct value *save = next->next;
next->next = NULL;
- return val;
+ next = save;
+ break;
}
- next->released = 1;
}
- all_values = 0;
- return val;
+
+ all_values = next;
+ return result;
}
/* Return a copy of the value ARG.