thlcgobj.g_set_addr_nonbitpacked_field_ref() and adjusted it so that
it also works for objects/classes (if the incoming reference points
to the start of the class contents)
o factored out the related code from tllvmsubscriptnode
git-svn-id: trunk@32411 -
reusable defs for defs in exceptionsymtables, or indeed use any defs from an
exceptionsymtable in the high level code generator, as those defs are freed
before the module is completely compiled -> crashes while trying to use them
in the assembly writing phase ->
o when the symtablestack top is an exception symtable, keep looking for
another symtable to put the def in
o give an internalerror if we encounter a def in an exceptionsymtable anyway
in getreusablesymtab
git-svn-id: trunk@32401 -
const builder
o also put the resourcestring tables table in rodata instead of in data,
since it doesn't change at run time (unlike the individual resourcestring
tables)
git-svn-id: trunk@32397 -
section to the high level typed const builder, and use this functionality
for the resource strings (generating items: todo)
* fixed dead stripping unused resource strings (all string data was put in the
same section since r30342)
git-svn-id: trunk@32394 -
+ new constant inline_specialization_block_types to easily keep track of block types in which inline specialization is allowed
pexpr.pas:
* use new inline_specializatio_block_types instead of a inline constant set
git-svn-id: trunk@32388 -
that don't have an import name specified explicitly. The previous behaviour
wasn't very useful, because it included the current module name in the mangled
name and that was very unlikely to be the correct name of a routine in a
different module. The new behaviour is also BP7 and Delphi compatible.
git-svn-id: trunk@32385 -
pexpr.pas, factor.factor_read_id:
* instead of using generate_specialization() use generate_specialization_phase1() and (for non-procdefs) generate_specialization_phase2
* pass generated specialization context for procdef on to the generated call nodes which do the second part of the specialization then
git-svn-id: trunk@32384 -
psub.pas, specialize_objectdefs:
+ new nested procedure process_procdef() to handle the generation of method bodies for procdefs both in generic types as well as of generic functions
+ new nested procedure process_procsym() to handle the generation of method bodies for each specialization procdef of a procsym
* allow all procsyms and recursively walk all non-generic types to find all method bodies that need to be generated
git-svn-id: trunk@32383 -
Supporting such a prefix of course means that all section handling code ("var", "type", etc.) needs to respect the case of a "generic" token followed by "function", "procedure" or "class" and thus abort doing its own business.
Maybe I'll find the time somewhen in the future to rework the parser (plus scanner?) a bit so that code like this gets more easy to add and more importantly less ugly.
pdecsub.pas:
* extend parse_proc_dec() and parse_record_method_dec() so that they can be told that they are supposed to handle the to be parsed function/procedure/method header as a generic
pdecvar.pas:
+ new entry for tvar_dec_option named "vd_check_generic" to tell read_var_decls() and read_record_fields() to look out for "generic"
* extend read_var_decls() and read_record_fields() to check for "generic" if needed and to clean up correctly if it is encountered
pdecl.pas:
* the section handling procedures types_dec(), resourcestring_dec(), var_dec(), threadvar_dec() and consts_dec() all return whether they had encountered a "generic" token that was followed by one of $
pdecobj.pas:
* extend method_dec() to take a parameter that says whether the method is supposed to be a generic one
* parse_object_members: while read_record_fields() can handle "generic" we also need to handle the case of "generic" if no fields are allowed anymore
psub.pas:
* extend read_proc() by the possibility to tell it that the procedure/function to be parsed is supposed to be generic
* adjust read_declarations() and read_interface_declarations() to keep track of parsed "generic" tokens and to pass them on accordingly
ptype.pas:
* parse_record_members: same remark as for pdecobj.parse_object_members
git-svn-id: trunk@32380 -