- initialize the returned def to a safe default
- correctly reset the found symbol for each loop
- reset the result when descending into a record
+ added test
(cherry picked from commit efd0c250df)
* fix for Mantis #38145: allow overloading of assignment operators that return ShortStrings with a specific size
+ added tests
The following rules for using these operator overloads as *implicit* overloads apply (Delphi compatible):
- if a found assignment operator returns a default ShortString then that is used
- if only one assignment operator to a String[x] is found then that is used
- otherwise the assignment is not possible
The explicit assignment checks for an exact match (and falls back for an implicit assignment). This is not entirely Delphi compatible as Delphi seems to favor the first found symbol in that case, but sometimes also not... :/
........
* with the recent ShortString changes this test is no longer needed as it was added exactly to check the condition I removed, so disable it for 3.2.1 and newer (as I want to merge these changes back to fixes)
........
git-svn-id: branches/fixes_3_2@49055 -
--- Merging r42815 through r42817 into '.':
U tests/test/tobjc34.pp
U tests/test/tobjc36.pp
U tests/test/tobjcl2.pp
A tests/test/units/cocoaall
A tests/test/units/cocoaall/tw35994.pp
U compiler/defcmp.pas
U compiler/ncal.pas
C compiler/pdecl.pas
C compiler/symconst.pas
C compiler/utils/ppuutils/ppudump.pp
U compiler/symtable.pas
--- Recording mergeinfo for merge of r42815 through r42817 into '.':
U .
--- Merging r42857 into '.':
G compiler/symtable.pas
--- Recording mergeinfo for merge of r42857 into '.':
G .
git-svn-id: branches/fixes_3_2@42883 -
------------------------------------------------------------------------
r41425 | pierre | 2019-02-23 23:03:29 +0000 (Sat, 23 Feb 2019) | 11 lines
+ compiler/symdef.pas: Add missing call to tderef.reset methods in all tdef constructors.
+ compiler/sysmsym.pas: Do the same for for all tsym constructors.
+ compiler/symtype.pas: Generate internalerror in tcompilerppufile.putderef
if a deref field has index -1, as this means that buildderef was not called
while it should have been called.
+ compiler/symtable.pas: Fix bug report itself by adding an extra local variable
CHANGED to add extra cycles in tstoredsymtable.buildderef_referenced method.
New tests for this bug report: tests/webtbs/tw35139.pp and tests/webtbs/tw35139a.pp
------------------------------------------------------------------------
--- Merging r41425 into '.':
U compiler/symtype.pas
U compiler/symdef.pas
U compiler/symsym.pas
U compiler/symtable.pas
A tests/webtbs/tw35139.pp
A tests/webtbs/tw35139a.pp
--- Recording mergeinfo for merge of r41425 into '.':
U .
git-svn-id: branches/fixes_3_2@41620 -
U .
--- Merging r39693 into '.':
A tests/tbs/tb0650.pp
U compiler/symtable.pas
--- Recording mergeinfo for merge of r39693 into '.':
U .
--- Merging r39700 into '.':
U compiler/msg/errore.msg
--- Recording mergeinfo for merge of r39700 into '.':
G .
--- Merging r39701 into '.':
U compiler/msgtxt.inc
U compiler/msgidx.inc
--- Recording mergeinfo for merge of r39701 into '.':
G .
--- Merging r39702 into '.':
U compiler/pdecsub.pas
A tests/test/tgeneric105.pp
--- Recording mergeinfo for merge of r39702 into '.':
G .
--- Merging r39703 into '.':
A tests/test/tgenfunc18.pp
A tests/test/tgenfunc17.pp
G compiler/pdecsub.pas
--- Recording mergeinfo for merge of r39703 into '.':
G .
--- Merging r39715 into '.':
U packages/rtl-extra/src/inc/objects.pp
A tests/webtbs/tw34239.pp
--- Recording mergeinfo for merge of r39715 into '.':
G .
--- Merging r39727 into '.':
G packages/rtl-extra/src/inc/objects.pp
--- Recording mergeinfo for merge of r39727 into '.':
G .
# revisions: 39673,39693,39700,39701,39702,39703,39715,39727
git-svn-id: branches/fixes_3_2@39834 -
U compiler/symtable.pas
--- Recording mergeinfo for merge of r39711 into '.':
U .
--- Merging r39728 into '.':
G compiler/symtable.pas
--- Recording mergeinfo for merge of r39728 into '.':
G .
--- Merging r39692 into '.':
U compiler/psub.pas
A tests/test/tgeneric104.pp
A tests/test/ugeneric104.pp
--- Recording mergeinfo for merge of r39692 into '.':
G .
--- Merging r39699 into '.':
U packages/libffi/src/ffi.manager.pp
--- Recording mergeinfo for merge of r39699 into '.':
G .
# revisions: 39711,39728,39692,39699
git-svn-id: branches/fixes_3_2@39810 -
+ search_management_operator function to find Tprocdef for selected management operator in record definition
tokens.pas:
+ new constants: first_managment_operator and last_managment_operator used in search_management_operator
git-svn-id: trunk@35444 -
ppu.pas:
* increase ppu version
symconst.pas:
+ new enum tmanagementoperator and set tmanagementoperators
symtable.pas, trecordsymtable:
+ new field managementoperators
+ new method includemanagementoperator
symdef.pas, trecorddef.ppuload and trecorddef.ppuwrite:
* save/load for managementoperators
git-svn-id: trunk@35439 -
* also check the local symtable in that case (a program does not result in a PPU, but we need the imported symbols nevertheless when linking to a package)
git-svn-id: trunk@34414 -
Reset tstoredsymtable.init_final_check_done when a symbol is added or removed as otherwise property getters in a record *before* any managed field would trigger it, thus leading to the record being considered as "non-managed".
git-svn-id: trunk@34088 -
To correctly generate the import library for a package we need to resolve the dangling external symbols of all units. For this each unit now stores which symbols it exported from another unit and it also stores all global and external assembler symbols it has (maybe this can be streamlined later on, but for now this works).
entfile.pas:
+ new entry for the imported unit symbols
fmodule.pas, tmodule:
+ new field unitimportsyms which holds all symbols imported by a unit from another unit
+ new method to add an imported symbol
* create, destroy & reset: correctly instantiate/free the two new lists
fppu.pas, tppumodule:
+ new field unitimportsymsderefs to hold the derefs during loading from/storing to PPU
+ new method buildderefunitimportsyms to generate the derefs for each imported symbol
+ new method derefunitimportsyms to resolve each imported symbol deref
+ new method readunitimportsyms to read the imported symbols from the PPU
+ new method writeunitimportsyms to write all imported symbols to the PPU
* load_implementation: read the imported symbols if their entry is encountered
* writeppu: generate the derefs for the imported symbols and write them to the PPU
* load_usedunits: resolve the imported symbols once all derefs are known
symtable.pas:
* addsymref: if the symbol is not from the current unit than mark it as imported
ppu.pas:
* increase PPU version
-- Diese und die folgenden Zeilen werden ignoriert --
M entfile.pas
M fmodule.pas
M fppu.pas
M ppu.pas
M symtable.pas
git-svn-id: trunk@33492 -
looking for a category, as oo_is_classhelper is also set for Pascal
class helpers (fixes crash caused by the fact that Object Pascal class
helpers don't have childof set, while categories do -- mantis #29666)
git-svn-id: trunk@33193 -
Extract functionality that is shared between the metadata files for units (PPU) and for packages (PCP) into a parent class called tentryfile
+ add new unit entfile which contains the new tentryfile class and related types and constants
* ppu.pas:
- remove methods, fields, types and constants which were moved to entfile.pas
* replace the parts of tppuheader shared with tentryheader by a field of type tentryheader
fppu.pas, pmodules.pas, utils/ppumove.pp, utils/ppuutils/ppudump.pp:
+ add entfile to uses
* adjust access to common header fields
node.pas, symdef.pas, symsym.pas, symtable.pas, wpoinfo.pas, utils/ppufiles.pp:
+ add entfile to uses
........
git-svn-id: trunk@32976 -
than the one we use to construct the LLVM equivalent (which doesn't support
variants), or in case the complete record is not defined in the source and
has to be padded with zeroes
o we do this by creating a new recorddef in this case with as elements the
defs of the actually emitted constant data, and replacing the original
def with this new def; note that this can also replace arrays in case of,
e.g., an array of a variant record type
o the pass in llvmtype takes care of inserting type conversions (bitcasts)
when these constants are accessed using the original def
git-svn-id: trunk@32719 -
o while in principle LLVM can layout those the same as we do, this would
require special treatment in case some fields are not initialised in
a typed record declaration (because then we have to emit padding only
for the skipped fields, and not for any padding between them)
o exception: records we create to represent parameters, as those have to
match the ABI definitions exactly for them to be treated as expected
git-svn-id: trunk@32714 -
tabstractrecordsymtable.has_single_field(), due to always looking in the
symlist of the original record rather than properly recursing into those
of nested ones (mantis #28641)
git-svn-id: trunk@32618 -