This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hello, A few months ago, we changed the encoding related to renamings. For every object, we used to have to lookup a parallel ___XR *type*, but that encoding didn't work well, particularly inside anonymous blocks. So we changed the encoding as follow: -- All other cases of renaming generate a dummy variable for an entity -- whose name is of the form: -- x___XR_... for an object renaming -- x___XRE_... for an exception renaming -- x___XRP_... for a package renaming -- and where the "..." represents a suffix that describes the structure of -- the object name given in the renaming (see details below). The part in the encoding that describes the renaming is unchanged. Here is an example of the new encoding in action: -- As an example, consider the declarations: -- package p is -- type q is record -- m : string (2 .. 5); -- end record; -- -- type r is array (1 .. 10, 1 .. 20) of q; -- -- g : r; -- -- z : string renames g (1,5).m(2 ..3) -- end p; -- The generated variable entity would appear as -- p__z___XR_p__g___XEXS1XS5XRmXL2XS3 : _renaming_type; -- p__g___XE--------------------outer entity is g -- XS1-----------------first subscript for g -- XS5--------------second subscript for g -- XRm-----------select field m -- XL2--------lower bound of slice -- XS3-----upper bound of slice The attached patch implements support for the new encoding, while falling back to the previous encoding if the old one is still in use. So we should stay compatible with both encodings. Eventually, it would be very nice to rely on pure DWARF to encode that information and get rid of the encoding, but this is a general project on which we haven't made much progress yet. Also, we are still supporting some platforms where DWARF is not available. 2007-12-21 Paul N. Hilfinger <hilfinger@adacore.com> * ada-lang.h (ada_renaming_category): New enumerated type. (ada_lookup_encoded_symbol): Declare. (ada_parse_renaming): Declare. (ada_renaming_type,ada_is_object_renaming) (ada_simple_renamed_entity): Delete declarations. * ada-lang.c (ada_parse_renaming): New function to concentrate extraction of information from renaming symbols. (parse_old_style_renaming): New function to concentrate extraction of old-style (purely type-based) renaming information. (renaming_is_visible): Rename to... (old_renaming_is_invisible): Rename and change sense of renaming_is_visible. (remove_out_of_scope_renamings): Rename to... (remove_irrelevant_renamings): Renames remove_out_of_scope_renamings and augments with additional logic to handle cases where the same object renaming is encoded both as a reference variable and an encoded renaming. (ada_renaming_type,ada_is_object_renaming) (ada_simple_renamed_entity): Delete definitions. (ada_lookup_encoded_symbol): New function factored out of ada_lookup_symbol. (ada_lookup_symbol): Reimplement to call ada_lookup_encoded_symbol. (wild_match): Don't reject perfect match of prefix. (ada_find_renaming_symbol): Factor old-style renaming logic into find_old_style_renaming_symbol. (find_old_style_renaming_symbol): New name for content of old ada_find_renaming_symbol. (ada_prefer_type): Reimplement not to use ada_renaming_type. * ada-exp.y (write_object_renaming): Change interface. Reimplement to use new arguments and ada_parse_renaming. Correct blocks used to find array index. (write_var_or_type): Reimplement to use ada_parse_renaming. Tested on x86-linux. Fixes some timeouts in arrayidx.exp. Checked in. -- Joel
Attachment:
renamings-head.diff
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |