pgenutil.pas:
* parse_generic_specialization_types_internal: ignore the parasymtable of procvars (as before the addition of generic routines) and instead use the type's hierarchy name
* generate_specialization_phase2: specialize types of procvars into the parameter symtable as they don't have a local one
+ added test
git-svn-id: trunk@33544 -
- pdf unittests: Minor improvement to PDFString.TestWrite()
- pdf: fixes FPC bug ID #30038 and implements TPDFUTF8String unit tests.
- pdf test: Extended the SimpleText() text output to show more symbols
git-svn-id: trunk@33543 -
whether a multiplication needs to be signed or unsigned (can be different
in case of a 32x32->64 multiplication) (mantis #30035)
git-svn-id: trunk@33539 -
--------------------------------
* pdf unittests: fixes failing test after fpPDF changes, plus newtest added.
* pdf: fixes failing test due to recent changes in fpPDF.
* pdf tests: new test for new behaviour.
* pdf: Applies patch from Mantis 30006 - and replaced bitmasks with Sets.
* pdf tests: Updates the README file with exact font details used by the tests.
* ttf: fixes debug output directory.
* pdf: FPC Mantis BugID 30008: fpTTF: wrong Ascender/Descender calculation
* pdf: fix bug where return value was never set.
* pdf: fixes compiler hint about uninitialised variables being used.
* pdf unittests: fixes memory leak in one test.
* pdf unittests: fixes compiler hint about unused units in uses clause.
git-svn-id: trunk@33535 -
--- Reverse-merging r33524 into '.':
U compiler\i386\popt386.pas
U compiler\x86\cgx86.pas
--- Recording mergeinfo for reverse merge of r33524 into '.':
U .
git-svn-id: trunk@33527 -
optimizer which cannot do this properly due to missing information about flags. By doing
so the size of the compiler executable gets reduced by ~1 %
git-svn-id: trunk@33524 -
pkgutil.pas, createimportlibfromexternals:
* findpackagewithsym: ignore other (weak) external symbols
........
pkgutil.pas, createimportlibfromexternals:
* import_proc_symbol: at least import the mangled name if there is no alias available
........
pkgutil.pas:
* exportabstractrecordsymproc & insert_export: don't try to export a typedef if it doesn't belong to the current symtable, happens for cross unit type aliases
........
psub.pas:
* read_proc: extract the code that creates an import library entry into its own function import_external_proc so that the same code can be used from other locations as well
........
Correctly handle external functions that are used from other units.
pkgutil.pas, createimportlibfromexternals:
* processasmsyms: also check the import name when checking for duplicates (just for safety, the cache check should have caught these already)
* processimportedsyms: if we have a routine imported from a library of whihc the symbol resides in a unit loaded from a package we need to import the routine ourselves instead of trying to import it from the package; also add an entry in the cache to speed up finding it again in processasmsyms()
........
git-svn-id: trunk@33519 -
Report a warning if a unit is used from an indirectly used package. We are doing this only for the units used in contained units though as in the "contains" section there can't be such units anyway (and just checking all loaded units would lead to false positives).
pkgutil.pas:
+ new procedure check_for_indirect_package_usages() which walks a TLinkedList of used units and warns on every unit that is from an indirectly imported package
pmodules.pas, proc_package:
* when checking all loaded units whether they are from a package or not also check for indirect package usages using the new procedure
........
pkgutil.pas, exportprocsym:
* use a temporary variable for the procdef
* restructure the if-expression a bit to make it better readable
........
pmodules.pas, finish_unit:
* also release the generated proc symbol if the init function isn't needed
........
pkgutil.pas, add_package_libs:
* fix exit condition (on Linux it probably worked by accident :/ )
........
git-svn-id: trunk@33518 -
Keep track whether a package was added directly through a requires section (or the command line) or indirectly.
fpkg.pas, tpackageentry:
+ new field "direct"
pkgutil.pas:
+ add_package: new parameter "direct" which sets the "direct" field of the new package entry
options.pas:
* TOption.interpret_option & read_arguments: adjust call to add_package()
pmodules.pas:
* proc_package: adjust call to add_package()
........
Also load all packages that are required by packages, but that are not part of the directly used packages.
pkgutil.pas, load_packages:
* check the list of required packages for packages that are not yet part of the package list and add these as indirect packages
* establish the links to loaded packages in the required packages once all packages were loaded
........
fpcp.pas, tpcppackage:
+ new method add_required_package() to add a required package while ignoring duplicates
........
pmodules.pas, proc_package:
* add all packages of loaded units as required packages
........
git-svn-id: trunk@33517 -
cclasses.pas, TCmdStrList:
* if doubles are not allowed then do case sensitive checks instead of insensitive ones
........
Correctly handle export/import generation depending on whether we're compiling for a system that needs indirect imports or not.
systems.pas:
* replace systems_package_need_exports with systems_indirect_var_imports
pmodules.pas, proc_package:
- remove check for systems_package_need_exports
pkgutil.pas:
* insert_export, export_unit: export the direct or the indirect variable symbol depending on systems_indirect_var_imports
........
ncgrtti.pas, TRTTIWriter.write_extra_rttisyms:
* enumdef_rtti_string2ordindex & enumdef_rtti_ord2stringindex: put the indirect suffix at the end of the symbol
........
pkgutil.pas, add_package_libs:
* check for systems_indirect_var_imports instead of systems_package_needs_exports
........
expunix.pas, texportlibunix:
* generatelib: check all procdefs whether they have the alias and not only the first one
........
pkgutil.pas:
* insert_export: directly report the symbol type instead of its ordinal to ease finding of problems
........
pkgutil.pas, export_procsym:
* restructure if for better readability
+ also check the procdef for po_has_public_name
........
Ensure that all implicitely imported units are indeed part of the package.
pmodules.pas, proc_package:
* instead of checking the units loaded by the current module we need to check *all* units that are loaded for the package
........
Fix inclusion of PPUs that don't have a corresponding object file.
pkgutil.pas, RewritePPU:
* don't abort if a unit does have the flag uf_no_link set
* only abort if both uf_static_link and uf_no_link are not set
........
Generate an error if a unit listed as in "contains" is part of a directly or indirectly required package.
pmodules.pas, proc_package:
* walk all units and check whether it had been loaded from a package, but is also part of the units of the current module; if so then generate an error
........
git-svn-id: trunk@33516 -
scanner.pas, tscannerfile:
+ new method readoptionalstate which reads a state like readstate, but if it encounters the closing } then it returns the provided fallback state
scandir.pas:
+ do_moduleflagswitch: new parameter optional that triggers the use of readoptionalstate instead of readstate
* dir_weakpackageunit & dir_denypackageunit: the ON/OFF is optional
git-svn-id: trunk@33515 -
Correctly parse the directives DenyPackageUnit and WeakPackageUnit
ppu.pas:
+ add flags uf_packagedeny and uf_packageweak
scandir.pas:
+ new procedure do_moduleflagswitch() which parses a ON/OFF/+/- argument and sets or clears a flag in the current module
+ new procedure dir_denypackageunit which handles DenyPackageUnit
* implement dir_weakpackageunit (and move to the correct location ;) )
* InitScannerDirectives: add dir_denypackageunit handler
........
Respect DenyPackageUnit flag.
pmodules.pas, proc_package:
* check all contained units that are not already part of a package for their uf_package_deny flag and report an error for each that has it set
........
Do not check whether all units are used as by definition all units of a package are considered as used.
pmodules.pas, proc_package:
- remove call to current_module.allunitsused
........
Check whether a unit has been implicitely imported in a package. A unit is considered as implicitely imported if it is not part of a required package nor part of the units listed in the contains section. This note is useful (Delphi even provides a dialog in that case) as a package with implicitely imported units /might/ become incompatible with other packages (e.g. if another package includes that unit uses that package and includes that unit explicitely; of course that is the same as if both package included it explicitely, but with the hint one knows where to look).
pmodules.pas, proc_package:
* while walking the loaded units also check whether any of them not contained in a package was part of the contained units which are the same as the current module's used units
........
Generate CRC for package files
pcp.pas, tpcpfile:
+ new field do_crc which controls CRC generation
+ override putdata() method to generate CRC when data is written
* resetfile: enable do_crc by default
........fppu.pas, tppumodule:
* loadfrompackage: mention if a unit is loaded from a package
........
fpkg.pas, tcontainedunit:
+ new fields offset and size for the PPU data stored inside the PCP
fpcp.pas, tpcppackage:
* readcontainedunits & addunit: correctly initialize offset and size to 0
........
Store the modified PPU files directly inside the PCP and thus get finally rid of the .ppl.ppu files.
entfile.pas:
+ new entry type ibpputable
pkgutil.pas:
* adjust RewritePPU to work on a stream as output instead of a filename
fpcp.pas, tpcppackage:
+ new method writepputable() which writes the offsets and sizes of all contained units (not part of CRC!)
+ new method writeppudata() which rewrites all contained PPUs directly into the PCP after the ibend entry (Note: the data is written 16 Byte aligned to ease viewing of the PCP and its contained PPUs in a hex editor)
+ new method readpputable() which reads the offsets and sizes of all contained units
+ new method getmodulestream() which returns a substream for a contained module
* loadpcp: also call readpputable()
* writepcp: first write an empty pputable, then finish writing all data that requires the put*/write* methods of the pcpfile, then use writeppudata() to write all PPUs and finally write the correct pputable at the original location
fppu.pas, tppumodule:
* loadfrompackage: don't read the PPU from a file if it is contained in a package, but using the new tpcppackage.getmodulestream() and tppumodule.openppustream() methods
pmodules.pas, proc_package:
* don't rewrite the PPUs here
pcp.pas:
* increase CurrentPCPVersion
........
Fix cycling
........
git-svn-id: trunk@33514 -
pmodules.pas, proc_package:
* generate the dummy entry symbol only on Windows systems (ToDo for other systems that might need it)
........
options.pas:
* TOption.interpret_option & read_arguments: use add_package() from pkgutils instead of addpackage() from fpkg
fpkg.pas:
- remove no longer needed addpackage()
........
pkgutil.pas:
+ new procedure add_package_libs() to add all packages as libraries that are also linked against
pmodules.pas:
* proc_package & proc_program: add all package libraries to the linker before creating the final binary
........
pkgutil.pas, add_package:
* package names are case insensitive so add them in uppercase to correctly detect duplicates
........
Keep track of how many units are used from each required/requested package and only link those from which any units are used.
fpkg.pas, tpackageentry:
+ new field usedunits to count how many units of the package are used
pkgutil.pas:
+ new procedure add_package_unit_ref() to increase the amount of used units for the given package
pmodules.pas:
* proc_package & proc_program: check which units of all loaded ones are provided by other packages
........
git-svn-id: trunk@33510 -
ngenutil.pas, tnodeutils:
* InsertInitFinalTable: the init and finalize functions are in the *local* symboltable not the global one
* InsertInitFinalTable.add_initfinal_import: reenable the internal error
git-svn-id: trunk@33508 -