/* DTrace probe support for GDB.
- Copyright (C) 2014-2017 Free Software Foundation, Inc.
+ Copyright (C) 2014-2018 Free Software Foundation, Inc.
Contributed by Oracle, Inc.
TRY
{
- expression_up expr
- = parse_expression_with_language (type_str.c_str (),
- language_c);
+ expr = parse_expression_with_language (type_str.c_str (),
+ language_c);
}
CATCH (ex, RETURN_MASK_ERROR)
{
}
END_CATCH
- if (expr != NULL && expr->elts[0].opcode == OP_TYPE)
- type = expr->elts[1].type;
+ if (expr != NULL && expr.get ()->elts[0].opcode == OP_TYPE)
+ type = expr.get ()->elts[1].type;
args.emplace_back (type, std::move (type_str), std::move (expr));
}
value of the argument when executed at the PC of the probe. */
for (dtrace_probe_arg &arg : m_args)
{
- struct cleanup *back_to;
- struct parser_state pstate;
-
/* Initialize the expression buffer in the parser state. The
language does not matter, since we are using our own
parser. */
- initialize_expout (&pstate, 10, current_language, gdbarch);
- back_to = make_cleanup (free_current_contents, &pstate.expout);
+ parser_state pstate (10, current_language, gdbarch);
/* The argument value, which is ABI dependent and casted to
`long int'. */
gdbarch_dtrace_parse_probe_argument (gdbarch, &pstate, argc);
- discard_cleanups (back_to);
-
/* Casting to the expected type, but only if the type was
recognized at probe load time. Otherwise the argument will
be evaluated as the long integer passed to the probe. */
write_exp_elt_opcode (&pstate, UNOP_CAST);
}
- reallocate_expout (&pstate);
- arg.expr = expression_up (pstate.expout);
+ arg.expr = pstate.release ();
prefixify_expression (arg.expr.get ());
++argc;
}