parse: allow dereferencing operators on all expressions
If it looks like a @cast, and smells like a @cast, make it a @cast!
* parse.cxx (parser::parse_dwarf_value): New step to parse dereferencing
operands in a central place. Add those components to existing
target_symbol types, or else create a new @cast to contain them.
(parser::parse_crement): Call parse_dwarf_value as the next step.
(parser::parse_cast_op,parse_atvar_op): Split from parse_target_symbol.
(parser::parse_value,parse_symbol): Don't worry about target_symbol
types now, as parse_dwarf_value will do it.
(parser::peek_target_symbol_components): Look for dereferences.
(parser::parse_defined_op): Parse any expression operand, as below.
* staptree.h (defined_op): Take any expression as the operand.
* tapsets.cxx (var_expanding_visitor::visit_defined_op): Adapt to
@defined's new generalized operand.