Commit Graph

1770 Commits

Author SHA1 Message Date
michael
9b21d9a87e * Inline some functions, bug ID #30905
git-svn-id: trunk@34868 -
2016-11-11 09:33:28 +00:00
michael
860ad25430 * Add some comments about used algorithms for increasing/decreasing list sizes
git-svn-id: trunk@34861 -
2016-11-09 21:28:20 +00:00
michael
32ec90dccf * Fix wrong index check for insert, border is different
git-svn-id: trunk@34834 -
2016-11-07 13:39:56 +00:00
michael
9926d37dda * Fix bug #30869, introduce CheckIndex in TStringList
git-svn-id: trunk@34817 -
2016-11-06 17:04:37 +00:00
pierre
a81d2b58f8 Rectify last accessed char in TBigEndianUnicideEncoding.GetChars, fixes test/units/sysutils/tencodingtest.pp failure with -gc option
git-svn-id: trunk@34740 -
2016-10-17 10:48:28 +00:00
michael
9f88f52ddf * Getters/Setters should be private
git-svn-id: trunk@34725 -
2016-10-15 20:59:01 +00:00
svenbarth
63f0c7a2c3 Fix for Mantis #30734: Implement Delphi-compatible functions StrToUInt64(), StrToUInt64Def and TryStrToUInt64 as inline forwarders to the existing respective QWord functions
git-svn-id: trunk@34710 -
2016-10-13 17:49:50 +00:00
michael
5810ff8154 * Patch from Maciej Izak for delphi compatible TLocaleOptions (bug ID 30660)
git-svn-id: trunk@34683 -
2016-10-08 22:23:34 +00:00
Jonas Maebe
265923a2ee * several fixes for TMultiReadExclusiveWriteSynchronizer, based on patch by
Derek (mantis #28830)
   o ability for a thread to acquire a readlock when it already holds a
     write lock, or vice versa
   o detect when thread1 releases a lock while it hadn't acquired one
   o correct result of beginwrite (return true only when another thread
     held/acquired a write lock before the current thread got it)
   o extra compared to Derek's patch: replaced some additional
     (mostly pre-existing) interlocked*() hacks with proper memory
     barriers, made formatting consistent, fixed compilation on platforms
     where tthreadid is not an integer type, improved tthreadid hashing
     function for 64 bit platforms, fixed some comments

git-svn-id: trunk@34678 -
2016-10-08 20:45:45 +00:00
michael
bc6819aa91 * Attempt to avoid overflow when reallocating stream
git-svn-id: trunk@34518 -
2016-09-12 08:41:42 +00:00
michael
f4e3068c8b * AnsiExtractquotedStr returns original string if unquoted
git-svn-id: trunk@34495 -
2016-09-10 18:51:02 +00:00
michael
5917b38706 * AnsiDequotedString needs to return empty if it equals "" (bug ID 30220)
git-svn-id: trunk@34494 -
2016-09-10 18:43:59 +00:00
michael
ee40c7618c * Make TFPGListEnumeratorSpec public (Bug ID 30573)
git-svn-id: trunk@34485 -
2016-09-10 17:15:10 +00:00
michael
b504cc4131 * Make singletons thread-safe
git-svn-id: trunk@34483 -
2016-09-10 16:51:50 +00:00
michael
8318ba30d4 * Patch from Ondrej Pokorny to implement specifying encoding when saving/loading from stream
git-svn-id: trunk@34475 -
2016-09-10 10:59:48 +00:00
michael
de7e5d73c0 * Patch from Ondrej Pokorny to add GetAnsiBytes/GetAnsiString
git-svn-id: trunk@34474 -
2016-09-10 10:44:30 +00:00
michael
b8b96f0c8c * Patch from Laco to limit growth of TFPList
git-svn-id: trunk@34462 -
2016-09-08 19:03:11 +00:00
svenbarth
ed144a6535 * fix for Mantis #30567; the method only needs to be left with nothing to do if both method and thread are Nil
git-svn-id: trunk@34456 -
2016-09-08 17:22:45 +00:00
svenbarth
947c876ba3 * use the indirect start and end symbols for the resource string table (affects both the compiler and the RTL)
git-svn-id: trunk@34185 -
2016-07-22 16:01:39 +00:00
pierre
7ff12e144f Fix IgnoreCase error in CompareUnicodeString function
git-svn-id: trunk@34167 -
2016-07-22 05:29:35 +00:00
nickysn
c205cb03c8 * in SysUtils.DecodeDate(), cast the result of trunc() to longint (trunc
normally returns int64 in FPC), before performing any further calculations -
  the result always fits in a longint (the date is range checked against
  MaxDateTime and that is well within longint limits). This generates faster
  code on non 64-bit targets and also fixes i8086 compilation, which previously
  failed on register allocation on this function.

git-svn-id: trunk@33946 -
2016-06-10 19:39:44 +00:00
svenbarth
345d83c3e3 Merge RTTI changes from packages branch (including adjustments that were required due to changes in trunk since then). These changes favor source backwards compatibility in contrast to Delphi compatibility. Binary compatiblity is however drastically broken due to the indirect references that are platform independant!
Merged revision(s) 28239-28289 from branches/svenbarth/packages:
Provide the possiblity to switch between the direct and indirect RTTI symbols.

ncgrtti.pas, TRTTIWriter:
  + get_rtti_label, get_rtti_label_ord2str & get_rtti_label_str2ord: add new "indirect" parameter and pass that along to rtti_mangledname
hlcgobj.pas, thlcgobj:
  * g_incrrefcount, g_initialize, g_finalize, g_array_rtti_helper: for now pass along False to get_rtti_label()
ncgvmt.pas, TVMTWriter:
  * writevmt: for now pass along False to get_rtti_label()
ncgld.pas, tcgrttinode:
  * pass_generate_code: for now pass along False to the get_rtti_label*() methods
........
Provide possibility to select between using a direct and an indirect RTTI reference. This way the references can be changed for selected cases.

ncgrtti, TRTTIWriter:
  * ref_rtti: new "indirect" parameter that's relayed to rtti_mangledname()
  * write_rtti_reference: new "indirect" paramater that's relayed to ref_rtti()
........
Switch properties to use the indirect type information without breaking backwards compatiblity. :)

compiler/ncgrtti.pas, TRTTIWriter:
  * published_properties_write_rtti_data: use the indirect reference, not the direct one
rtl/objpas/typinfo.pp:
  * to allow compilation with both 2.6.x and 2.7.1 and too avoid too many ifdefs at least in the declarations we define a macro TypeInfoPtr which is either PTypeInfo (2.6.x) or PPTypeInfo (2.7.1 and newer)
  * TPropInfo: rename PropType to PropTypeRef and change type to TypeInfoPtr
  + TPropInfo: add a new property PropType which returns a PTypeInfo out of the PropTypeRef depending on the compiler version
........
Switch further simple types (sets, enums, class references, pointers) to indirect type information (again without breaking backwards compatibility).

compiler/ncgrtti.pas, TRTTIWriter.write_rtti_data:
  * enumdef_rtti, setdef_rtti, classrefdef_rtti & pointerdef_rtti: write an indirect RTTI reference

rtl/objpas/typinfo.pp, TTypeData:
  * rename BaseType to BaseTypeRef, CompType to CompTypeRef, InstanceType to InstanceTypeRef and RefType to RefTypeRef and change their type to TypeInfoPtr
  + add properties BaseType, CompType, InstanceType & RefType which return a PTypeInfo out of the corresponding *Ref field depending on the compiler version
........
Switch class and interface parent as well as extended type to indirect type information

compiler/ncgrtti.pas, TRTTIWriter:
  * write_rtti_data.objectdef_rtti.objectdef_rtti_class_full: use indirect reference for class parent and extended type
  * write_rtti_data.objectdef_rtti.objectdef_rtti_interface_full: use indirect reference for interface parent

rtl/objpas/typinfo.pp, TTypeData:
  + add new method DerefTypeInfoPtr which returns Nil if the indirect reference is Nil and otherwise returns the dereferences indirect reference (for 2.6.x the direct reference is returned as is)
  * rename ParentInfo to ParentInfoRef, HelperParent to HelperParentRef, ExtendedInfo to ExtendedInfoRef, IntfParent ot IntfParentRef and RawIntfParent to RawIntfParentRef and change their type to TypeInfoPtr
  + introduce ParentInfo, HelperParent, ExtendedInfo, IntfParent and RawIntfParent properties that return a PTypeInfo and use the new DerefTypeInfoPtr to return the correct type info value
  * change the other newly introduced properties of TTypeData to use DerefTypeInfoPtr as well to be on the safe side
........
Switch record/object fields to indirect type information references.

compiler/ncgrtti.pas, TRTTIWriter.fields_write_rtti_data:
  * use the indirect reference for the object parent type
  * use the indirect reference for the field type

rtl/inc/rtti.inc:
  * TRecordElement: change TypeInfo to PPointer for 2.7.1 and newer
  * RecordRTTI: correctly dereference the element type for 2.7.1 and newer
  * fpc_copy: correctly reference the element type for 2.7.1 and newer
........
Switch static arrays to indirect RTTI reference.

compiler/ncgrtti.pas, TRTTIWriter.write_rtti_data:
  * arraydef_rtti: write the dimension types and the final field type as indirect references

rtl/inc/rtti.inc:
  * TArrayInfo: switch ElInfo to PPointer for 2.7.1+
  * ArrayRTTI & fpc_copy: correctly dereference ElInfo for 2.7.1+
rtl/objpas/typinfo.pp, TArrayTypeData:
  * switch ElType and Dims to PPTypeInfo; no backwards compatibility needed here as TArrayTypeData was added in 2.7.1 only

tests/test/trtti8.pp: fix test
........
Switch dynamic arrays to indirect RTTI references.

compiler/ncgrtti.pas, TRTTIWriter.write_rtti_data.arraydef_rtti:
  * write indirect references for the two element entries

rtl/inc/dynarr.inc:
  * tdynarraytypedata: change elType2 to PPointer for 2.7.1+
  * fpc_dynarray_clear, fpc_dynarray_setlength & fpc_dynarray_copy: correctly dereference elType2 for 2.7.1+
rtl/objpas/typinfo.pp, TTypeData:
  * rename elType and elType2 to elTypeRef and elType2Ref respectively and change type to TypeInfoPtr
  * add properties elType and elType2 which return PTypeInfo by dereferencing elTypeRef and elType2Ref respecively correctly
  * remove a few stray "inline" directives in the implementation
........
Switch procedure parameters and result type to indirect RTTI references.

compiler/ncgrtti.pas, TRTTIWriter.write_rtti_data.procvardef_rtti:
  * write_procedure_param: use indirect RTTI reference
  * write result info for both methods and procvars as indirect RTTI reference
  * write parameters for procvars as indirect RTTI reference

rtl/objpas/typinfo.pp:
  * TProcedureParam: change type of ParamType to PPTypeInfo (no backwards compatiblity needed here; was added for 2.7.1)
  * TProcedureSignature: change type of RseultType to PPTypeInfo (no backwards compatibility needed here; was added for 2.7.1)
  * TTypeData: remark in the comments of tkMethod that ResultTypeRef and ParamTypeRefs are of type PPTypeInfo and not PTypeInfo

tests/test/trtti9.pp: 
  * fix test
........
Remove no longer needed "indirect" parameter for TRTTIWriter methods.

ncgrtti.pas, TRTTIWriter:
  - ref_rtti & write_rtti_reference: remove "indirect" parameter
  * ref_rtti: call rtti_mangledname with "indirect" always set to "true"
  - remove "true" parameter on callsites of write_rtti_reference & ref_rtti
........

git-svn-id: trunk@33944 -
2016-06-10 17:01:51 +00:00
marco
869d24f7d1 * spelling mistakes fpc repo part, mantis #30233
git-svn-id: trunk@33882 -
2016-06-02 20:01:09 +00:00
svenbarth
dc5d9c7001 rtl/objpas/classes/classes.inc, TThread:
* Synchronize: fill the syncentry using the correct size

git-svn-id: trunk@33879 -
2016-06-02 18:48:41 +00:00
svenbarth
d5cc59c22e Avoid the creation of a TExternalThread instance for Synchronize() and Queue() (Delphi does the same).
Note: the Sender parameter of WakeMainThread will be Nil for such threads. This is Delphi compatible.

rtl/objpas/classes/classesh.inc, TThread:
  + TThreadQueueEntry: new field ThreadID so that entries with Thread = Nil can be removed
rtl/objpas/classes/classes.inc, TThread:
  * InitSynchronizeEvent: setup ThreadID field
  * Synchronize: use a local TThreadQueueEntry if no TThread instance was passed in
  * Queue: setup ThreadID
  * RemoveQueueEvents: also check for ThreadID when trying to find the current thread

git-svn-id: trunk@33863 -
2016-05-31 20:01:52 +00:00
michael
253589b0b6 * Fix compilation for msdos
git-svn-id: trunk@33704 -
2016-05-17 18:41:33 +00:00
michael
a5d38c7ba6 * Added TStringBuilder
git-svn-id: trunk@33695 -
2016-05-16 15:23:40 +00:00
marco
d4fd7520ef * wrap getfirst and getlast in fcount<>0 because otherwise it will dereference nil.
Mantis #30080

git-svn-id: trunk@33598 -
2016-05-01 14:43:12 +00:00
michael
3e96806f7e Renamed DisposeAndNil to FreeMemAndNil
git-svn-id: trunk@33378 -
2016-03-29 07:55:58 +00:00
michael
92b8bf97c0 * Added DisposeAndNil (bug ID 28895)
git-svn-id: trunk@33377 -
2016-03-29 07:33:28 +00:00
michael
231ec77175 * Delphi compatibility classes (Patch by Silvio Clecio, bug ID #29917)
git-svn-id: trunk@33362 -
2016-03-28 12:57:42 +00:00
michael
f380aeb63d * Fix from Andrea Mauri to make formatfloat delphi-compatible in case of negative zero (bug ID 26465)
git-svn-id: trunk@33344 -
2016-03-27 10:40:09 +00:00
michael
bcdfe055a8 * Fix bug ID #26944 (thousandseparator, patch from wp)
git-svn-id: trunk@33343 -
2016-03-27 10:13:16 +00:00
michael
2ec2f1fc16 * Fix bug in WrapText (bug ID 26677)
git-svn-id: trunk@33342 -
2016-03-27 09:41:23 +00:00
michael
73bf5dd3f0 * Extra error message for using find in unsorted list
git-svn-id: trunk@33330 -
2016-03-26 12:26:22 +00:00
michael
10bbfce412 * Allow Find to work with user-sorted stringlists.
git-svn-id: trunk@33328 -
2016-03-26 09:13:27 +00:00
michael
2b077f6af3 * Revert Integer -> SizeInt change where appropriate, capping result when needed
git-svn-id: trunk@33327 -
2016-03-26 07:41:34 +00:00
michael
5085009410 * Added GetDriveIDFromLetter, bug ID #28318
git-svn-id: trunk@33300 -
2016-03-20 19:04:49 +00:00
marco
66608fec02 * unicode executeprocess from work during Lazarus convention in IJsselstein
git-svn-id: trunk@33290 -
2016-03-19 17:59:42 +00:00
Jonas Maebe
2b210335a1 * fixed pointer arithmetic errors in WideStrAlloc/StrBufSize/StrDispose
(patch by Iks, mantis #29710)

git-svn-id: trunk@33271 -
2016-03-18 13:12:11 +00:00
michael
668f8eec91 * Patch from Silvio Clecio to declare EArgumentNilException (Bug ID 29850)
git-svn-id: trunk@33258 -
2016-03-16 19:10:10 +00:00
michael
416151a335 * Adapted string routines so they use sizeint instead of integer (bug ID 29814)
git-svn-id: trunk@33246 -
2016-03-13 18:59:21 +00:00
michael
671416959d * Added SameStr, for symmetry and consistency with SameText (bug ID 29821)
git-svn-id: trunk@33238 -
2016-03-13 16:31:41 +00:00
florian
8b81ce7e25 * use PtrUInt instead of Cardinal in GenericAnsiStrLComp and GenericAnsiStrLIComp, resolves #29815
git-svn-id: trunk@33218 -
2016-03-11 20:38:48 +00:00
michael
839a0445a4 Fixed bug in split when final word has length 1 (bug ID 29798)
git-svn-id: trunk@33209 -
2016-03-09 19:56:57 +00:00
michael
5568ee5513 * Bug ID #29779, add DWord versions of StrToInt
git-svn-id: trunk@33153 -
2016-03-05 13:50:59 +00:00
marco
b38b3a7c1e * patch from Ondrej to fix splitrecttype aliasing on windows. Mantis #29557
added alias of tarray4integertype too.

git-svn-id: trunk@33152 -
2016-03-05 13:50:02 +00:00
marco
eb1d895718 * fix reexport of record types in classesh, bug #29776 patch by Ondrej.
git-svn-id: trunk@33144 -
2016-03-04 10:42:40 +00:00
michael
364abc3c07 * Author retracted erf/erfc functions due to copyright issues
git-svn-id: trunk@33130 -
2016-02-28 08:27:01 +00:00
michael
3da0f82995 * Add error functions erf/erfc, bug ID #29740
git-svn-id: trunk@33128 -
2016-02-27 14:59:51 +00:00