Skip to content
  • Sven/Sarah Barth's avatar
    Implement cross unit type overloading of generics. This fixes the regression... · 9d48bc0b
    Sven/Sarah Barth authored
    Implement cross unit type overloading of generics. This fixes the regression introduced with revision 25498.
    
    symtable.pas:
      + add new tsymbol_search_flag type which can be passed to various searchsym* routines
      + add support to not call "addsymref"
      + add new searchsym_with_flags function that calls searchsym_maybe_with_symoption
      * adjust searchsym_maybe_with_symoption, searchsym_in_class & searchsym_in_helper to use new flag type instead of Boolean arguments
      * adjust searchsym & searchsym_with_symoption which call the modified functions
    nutils.pas, handle_staticfield_access:
      * adjust searchsym_in_class call
    pexpr.pas, handle_factor_typenode, postfixoperators, factor:
      * adjust searchsym_in_helper and searchsym_in_class calls
    pinline.pas, new_function:
      * adjust searchsym_in_class call
    scanner.pas, try_consume_nestedsym:
      * adjust searchsym_in_class call
    fmodule.pas, tmodule:
      + add genericdummysyms field which is a TFPHashObjectList that contains TFPObjectList instances per generic dummy that in turn contains tgenericdummysyms instances
    pgenutil.pas:
      + add function split_generic_name to split a generic name into non-generic name and count value of type parameters
      + add function resolve_generic_dummysym which tries to use the new genericdummysyms field to find the real symbol of a dummy sym
      * generate_specialization: adjust searchsym_in_class call
      * specialization_init/specialization_done: save/restore genericdummysyms of module
    symdef.pas, tdefawaresymtablestack:
      + add new intermediate method pushcommon which is used by both push and pushafter
      + add new intermediate method remove_helpers_and_generics (which calls remove_generics and remove_helpers if necessary)
      * rename removehelpers to remove_helpers
      * rename addhelpers to add_helpers_and_generics and extend it to correctly fill current_module.genericdummysyms
      * call remove_helpers_and_generics from pop instead of remove_helpers
    ptype.pas, single_type, read_named_type.expr_type, read_named_type:
      * try to resolve symbols with sp_generic_dummy with resolve_generic_dummysym
    
    + added test
    
    git-svn-id: trunk@25519 -
    9d48bc0b