This is an update to this patch to incorporate changes from reviews of earlier patches. Keith Changes since last version: - remove SAVE_SPEC stuff - struct linespec: use struct explicit_location instead of all those strings/line_offset. - Add PARSER_EXPLICIT and use it where needed - No need to "convert linespec to explicit" -- the parser now builds an explicit location of the parsed result. - move string constructions out of canonicalize_linespec and into its own function - update comments on grammar of linespecs: expr_spec is now no longer considered a linespec. - add explicit_to_string_internal and use it to implement explicit_location_to_string/explicit_location_to_linespec - new_explicit_location - remove explicit_to_event_location ChangeLog 2014-05-29 Keith Seitz * breakpoint.c (create_overlay_breakpoint): Convert linespec into explicit location. (create_longjmp_master_breakpoint): Likewise. (create_std_terminate_master_breakpoint): Likewise. (create_exception_master_breakpoint): Likewise. (create_breakpoint): Update the SAVE_SPEC for explicit locations. (update_static_tracepoint): Convert linespec into explicit location. (location_to_sals): Save the string representation of the location for pending locations which were resolved. * linespec.c (enum offset_relative_sign): Move to location.h. (struct line_offset): Likewise. (struct linespec) : Replace with ... : ... this. : New member. (PARSER_EXPLICIT): New accessor macro. (undefined_label_error): New function. (source_file_not_found_error): New function. (linespec_parse_basic): The parser result is now an explicit location. Use PARSER_EXPLICIT to access it. Use undefined_label_error. (canonicalize_linespec): Convert canonical linespec into explicit location. Move string representation of location to explicit_location_to_linespec and use it and explicit_location_to_string to save string representations of the canonical location. (create_sals_line_offset): Use PARSER_EXPLICIT to access the parser's explicit location result. (convert_linespec_to_sals): `ls' contains an explicit location. Update all references. (convert_explicit_location_to_sals): New function. (linespec_parse_basic): Use PARSER_EXPLICIT to access the parser result's explicit location. (linespec_state_constructor): Initialize is_linespec. Use PARSER_EXPLICIT. (linespec_parser_delete): Use PARSER_EXPLICIT to access the parser's result. (event_location_to_sals): For linespec locations, set is_linespec. Handle explicit locations. (decode_objc): 'ls' contains an explicit location now. Update all references. (symtabs_from_filename): Use source_file_not_found_error. * location.c (initialize_explicit_location): New function. (initialize_event_location): Initialize explicit locations. (copy_event_location): Handle explicit locations. (explicit_to_string_internal): New function; most of contents moved from canonicalize_linespec. (explicit_location_to_string): New function. (explicit_location_to_linespec): New function. (delete_event_location): Handle explicit locations. (event_location_to_string_const): Likewise. (event_location_empty_p): Likewise. * location.h (enum offset_relative_sign): Move here from linespec.h. (struct line_offset): Likewise. (enum event_location_type): Add EXPLICIT_LOCATION. (struct explicit_location): New structure. (struct event_location.u) : New member. (EVENT_LOCATION_EXPLICIT): Define accessor macro. (explicit_location_to_string): Declare. (explicit_location_to_linespec): Declare. (initialize_explicit_location): Declare.