Commit Graph

48869 Commits

Author SHA1 Message Date
Jonas Maebe
88a736c95a * moved the code generated for library init/fini to the al_pure_assembler
list, so that the assembler directives generated for Darwin are emitted
    correctly for LLVM
   o extracted the library init code generation from hlcgobj to pmodules so
     we don't add things to another list than what's passed to
     gen_proc_symbol_end(), and so it's done where we generate the init
     routine for libraries (rather then checking for every routine whether
     it's the init routine for a library)
   o removed the llvm-specific gen_proc_symbol_end() because the regular one
     now does the same

git-svn-id: trunk@34134 -
2016-07-15 14:34:11 +00:00
pierre
a0bc21b072 Try to fix unicode support for go32v2 target.
rtl/go32v2/Makefile.fpc: Add character, fpwidestring, unicodedata nd unicodenumtable
                             to list of units.
                             Add rules for these four units.
    rtl/go32v2/Makefile: Regenerated
    packages/rtl-unicode/fpmake.pp: Add go32v2 to CollationOSes set, to also compile unicodeducet unit.

git-svn-id: trunk@34133 -
2016-07-15 10:39:24 +00:00
michael
3e2bb43555 * More changes of Mattias Gaertner to messages system
git-svn-id: trunk@34132 -
2016-07-15 10:13:58 +00:00
Jonas Maebe
c7ea921066 * renamed thlcgobj.g_external_wrapper() into a_jmp_external_name(), and
moved the code to create the procedure start/end etc. that was at the
    call sites of g_external_wrapper() into the new g_external_wrapper()
    -> got rid of the x86-specific code in expunix, and fixed expunix for
    llvm (e.g. tests/test/tlib1{a,b})

git-svn-id: trunk@34131 -
2016-07-14 15:26:40 +00:00
Jonas Maebe
6558d7a521 * no longer store the tprocdef.synthetickind field in ppu files
git-svn-id: trunk@34130 -
2016-07-14 15:26:03 +00:00
Jonas Maebe
2bd2e03309 * no longer use the synthetickind field of a procdef to determine whether
it's an automatically generated getter/setter, but a procoption. This
    way we no longer have to save/restore the synthetickind procdef field
    to/from ppu's. This way we can modify the field also after the interface
    has been parsed without affecting the crc (e.g. when creating wrappers
    for high level targets for routines that are only declared as "external"
    in the implementation)

git-svn-id: trunk@34129 -
2016-07-14 15:25:30 +00:00
Jonas Maebe
f5e4265b1e * "push" zero-sized value parameters for LLVM and JVM, because all parameters
are part of the signature on those platforms (fixes e.g. tbs/tb0408.pp for
    LLVM)

git-svn-id: trunk@34128 -
2016-07-14 15:24:50 +00:00
Jonas Maebe
c0ff55e95a * changed the abstract method wrapper generation from thlcgobj to synthetic
methods. Implementing a fully functional g_external_wrapper() for llvm is
    quite hard, and the regular wrapper method that calls FPC_ABSTRACTERROR can
    in principle be optimized to a plain jump by tail call optimisation on other
    targets (to the extent that this matters, because most of them will be
    smartlinked away, and the ones that are executed will trigger an exception)
   o this means that the synthetic method generation needs to be run for all
     objectdefs on all platforms now, rather than only for Java classes

git-svn-id: trunk@34127 -
2016-07-14 15:24:13 +00:00
Jonas Maebe
c1fd3bc0de * specify the unit from which the routine comes when handling tsk_callthrough
in case the called routine in a global procedure/function (to avoid
    potential symbol hiding issues)

git-svn-id: trunk@34126 -
2016-07-14 15:23:39 +00:00
Jonas Maebe
0311528502 * always write bitpacked typed constant arrays as a multiple of bytes rather
than of their loadsize, because otherwise if they are e.g. part of a record
    they would occupy more space than allowed
   o adapted llvm code to deal with the fact that bitpacked arrays are now
     always arrays of bytes rather than arrays of integers with the same size
     as their loadsize -- this also fixes several type inconsistencies
     detected by llvm

git-svn-id: trunk@34125 -
2016-07-14 15:23:07 +00:00
Jonas Maebe
9b7e7c5298 + support absolute addresses on llvm (fixes tests/webtbs/tw12685 for llvm)
git-svn-id: trunk@34124 -
2016-07-14 15:22:31 +00:00
Jonas Maebe
458ba2efac * unlike other architectures, llvm requires that both operands of shl/shr are
of the same size -> ensure that this is the case for the shifts in
    a_bit_test/set_reg_reg_reg() (fixes tests/tbs/tb0219.pp for llvm)

git-svn-id: trunk@34123 -
2016-07-14 15:21:37 +00:00
Jonas Maebe
b156744b62 * left has been forced into a register of size uopdef a few statements
above, so pass uopdef rather than left.resultdef to a_bit_test_reg_loc_reg()
    (part of fixing tests/tbs/tb0219.pp for llvm)

git-svn-id: trunk@34122 -
2016-07-14 15:20:53 +00:00
Jonas Maebe
31b70ecfd3 * don't perform the automatic insertion of typecasts in case register
allocation hasn't been performed, because then reused "registers"
    could have multiple types

git-svn-id: trunk@34121 -
2016-07-14 15:20:19 +00:00
Jonas Maebe
0cce590982 * encode the result type of functions returning a zero-sized value
using their actual type (array/record) rather than using the
    simplified type (void), so we can also return an actual value and
    assign it to something (void means that nothing is returned and
    cannot be assigned to anything) (completes fixing
    tests/test/tnoext4.pp for llvm)

git-svn-id: trunk@34120 -
2016-07-14 15:19:45 +00:00
Jonas Maebe
2148a20d6a * fixed returning results from functions that have a zero-sized result
(e.g. an empty record): return an "undefined" instance of the result
    type (since it's empty, its contents are irrelevant). Before, we
    returned "void", but that means returning nothing rather than returning
    something empty (part of fixing test/tnoext4 for llvm)

git-svn-id: trunk@34119 -
2016-07-14 15:19:09 +00:00
Jonas Maebe
5541fb3f6d * when converting a pointer-sized entity to a complex procvar in a typed
const builder, it can only initialise the function pointer part of the
    complex procvar -> convert the to-size to an address-only version of
    the complex procvar to avoid us trying to bitcast an address into a
    record containing both the function and self/nestedfp pointer
    (fixes test/tmaclocalprocparam4e for llvm)

git-svn-id: trunk@34118 -
2016-07-14 15:18:35 +00:00
Jonas Maebe
c71bc54785 * when emitting the procedure address part of a complex procvar, type
that address as an "address-only" procvar instead of supposedly
    emitting a complex procvar itself as the address part of that same
    complex procvar type (part of fixing test/tmaclocalprocparam4e.pp
    for llvm)

git-svn-id: trunk@34117 -
2016-07-14 15:18:01 +00:00
Jonas Maebe
cdfe299f23 * encode extended in a dynamic array the same as in regular arrays and
records: as an array of 10 bytes. We handle indexing dynamic arrays
    the same as indexing other arrays, and hence that code expects extended
    to be encoded the same way.

git-svn-id: trunk@34116 -
2016-07-14 15:17:27 +00:00
Jonas Maebe
a821c47252 * converted dynarray range checking to the high level code generator
git-svn-id: trunk@34115 -
2016-07-14 15:16:52 +00:00
michael
2571d3e12e * Patch from Mattias Gaertner to extend error info when generating log messages (LastXYZ properties)
git-svn-id: trunk@34114 -
2016-07-14 14:59:00 +00:00
michael
37effde468 * Patch from Mattias Gaertner to clean up unused resource strings
git-svn-id: trunk@34113 -
2016-07-14 06:50:22 +00:00
pierre
1e58b6d944 Use %skiptarget=$nothread for tests using thread capabilities
git-svn-id: trunk@34105 -
2016-07-13 15:21:23 +00:00
pierre
2b3ef31505 Correct previous commit: %skiptarget needs equal sign
git-svn-id: trunk@34104 -
2016-07-13 15:20:31 +00:00
michael
d40bf3684b * Change to use new charset and charwidth
git-svn-id: trunk@34102 -
2016-07-13 11:52:53 +00:00
michael
cd840816a4 * find cannot be used on unsorted stringlist
git-svn-id: trunk@34101 -
2016-07-12 15:04:06 +00:00
pierre
f8cdabfadb Skip test tw3157 for go32v2 target as it genrates problems on ntvdm.exe under windows
git-svn-id: trunk@34100 -
2016-07-12 14:43:06 +00:00
lacak
ad96eb037d fcl-db: sqldb: introduce connection CodePage (derived from connection CharSet) and supporting routines, which performs f.e. codepage aware parameter binding using connection codepage (charset)
git-svn-id: trunk@34099 -
2016-07-12 09:40:02 +00:00
lacak
d2c53d48e9 fcl-db: base:
- Add new properties for
 TField:
  .AsAnsiString, AsUnicodeString, AsUTF8String
 TParam:
  .AsAnsiString, AsUnicodeString, AsUTF8String
- Add CodePage to TStringField and TMemoField
  (so character fields are now CodePage aware, like AnsiString; default CodePage is CP_ACP=0)

git-svn-id: trunk@34098 -
2016-07-12 07:23:32 +00:00
michael
9115dc2521 * OData and Office365 REST API support
git-svn-id: trunk@34097 -
2016-07-11 14:39:59 +00:00
michael
1606976cfa * Patch from Mattias Gaertner to avoid some non-set function results
git-svn-id: trunk@34096 -
2016-07-11 11:43:36 +00:00
michael
d36e882d1a * Add pg_encoding_to_char, by Laco
git-svn-id: trunk@34095 -
2016-07-11 11:27:03 +00:00
michael
3a97ca02aa * Patch from Laco to add some extra functions to interface
git-svn-id: trunk@34094 -
2016-07-11 11:25:20 +00:00
lacak
0a72573e02 fcl-db: tests: Add support for "CharSet" configuration option (specified in database.ini)
git-svn-id: trunk@34093 -
2016-07-11 07:40:38 +00:00
marco
bc9bcdf1f8 * patch to increase ino and time_t to 64-bit, mantis #30314
git-svn-id: trunk@34091 -
2016-07-09 19:57:22 +00:00
svenbarth
54b6cacf36 Fix for Mantis #30357.
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 -
2016-07-08 18:20:47 +00:00
svenbarth
7a5bac9cd3 Rework the interface table of VMTs to get rid of FPC_EMPTYINTF.
Previously we had the following approach:
- classes that implemented interfaces had an interface table
- classes that didn't implement an interface, but inherited from a class that did had a Nil entry
- classes that didn't implement any interface (including their parents) had a reference to FPC_EMPTYINTF (this was to optimize lookups)

Now the approach is as follows:
- classes that implement an interface or have a parent that implements an interface have an interface table; if the class itself doesn't implement an interface then the count will be 0
- classes that don't implement an interface at all (neither them nor their parents) have a Nil interface table

This way FPC_EMPTYINTF can be removed without sacrificing at least the optimization for classes without any interface. For classes that have parents with interfaces there will be a small speed penalty due to an additional lookup for the counter.

git-svn-id: trunk@34087 -
2016-07-08 15:34:55 +00:00
Jonas Maebe
571d053a60 - removed tabstractnormalvarsym.currentregloc: the new location will
always be different from the old location, since we just allocated
    the registers for the new one above. Should the old registers ever
    be needed again for tai_varloc: rr.old/rr.oldhi contains it

git-svn-id: trunk@34086 -
2016-07-08 07:46:51 +00:00
Jonas Maebe
fb0f4394c0 * don't set varsym.localloc anymore in gen_alloc_regvar(): in most cases
initialloc was already set afterwards, now it's also done in the final
    case (and allocating the initial location should be different from
    setting the current location)

git-svn-id: trunk@34085 -
2016-07-08 07:46:48 +00:00
Jonas Maebe
cd5817a689 * also emit a tai_varloc() when regvars are initially assigned
o removed separate writing of the local variable/parameter location from
     psub, as that is now triggered by thise tai_varloc

git-svn-id: trunk@34084 -
2016-07-08 07:46:45 +00:00
Jonas Maebe
ee5a64c2f8 - removed tai_varloc.oldlocation: it is not used anywhere
git-svn-id: trunk@34083 -
2016-07-08 07:46:41 +00:00
Jonas Maebe
630033c9fa * fixed compilation on platforms where comp=int64 (should maybe fix the
compiler to support assigning integral floating point constants to
    comp on all platforms)

git-svn-id: trunk@34082 -
2016-07-06 17:28:08 +00:00
Károly Balogh
b0ca7e9594 show AT&T and Intel style assembler switches in i8086 and x86_64 help text. also fix Motorola name initials at several places for 68k
git-svn-id: trunk@34081 -
2016-07-06 13:34:38 +00:00
pierre
40ff777693 * Adapt to TExternCain move to aasmcpu unit
+ Make sure that a lone reference to DGROUP also generates a 'GROUP DGROUP' statement
  + Add %LINE support
  + Add $DEBUG for i8086 nasm

git-svn-id: trunk@34080 -
2016-07-06 07:00:13 +00:00
pierre
38f751573a Copy TExternChain type and AddSymbol procedure to unit aasmcpu from agx86nsm unit
git-svn-id: trunk@34079 -
2016-07-06 06:55:31 +00:00
pierre
b3063b7db2 Reset class fields FList and FHashList to nil after Destroy call
git-svn-id: trunk@34078 -
2016-07-06 06:14:37 +00:00
pierre
e68b8467b6 Use 'debug watcom all' if -g, without dwarf option is used
git-svn-id: trunk@34077 -
2016-07-06 06:13:08 +00:00
pierre
fba50767b3 Add SUPPORT_OMF conditional to be able to test OMF for win32/win64 targets, not working for now
git-svn-id: trunk@34076 -
2016-07-06 06:08:01 +00:00
pierre
bf97137be4 Add aliases $nosharedlib,$nounicode,$nothread to SkipTarget TConfig field
git-svn-id: trunk@34075 -
2016-07-06 05:52:23 +00:00
pierre
b238b3cb8d Fix test for compact and medium i8086 memory model
git-svn-id: trunk@34074 -
2016-07-05 22:42:38 +00:00