Commit Graph

200 Commits

Author SHA1 Message Date
Jonas Maebe
8799d9d204 * don't create temporary ansistrings with codepage DefaultSystemCodePage
when concatenating or comparing CP_ACP strings, because the ansistring
    conversion helpers also check for CP_ACP and do the right thing in
    that case
  * don't convert code pages when comparing CP_ACP strings with
    DefaultSystemCodePage strings (mantis #22906)

git-svn-id: trunk@22415 -
2012-09-17 19:41:44 +00:00
pierre
a311c53167 Replace HandleErrorFrame calls by HandleErrorAddrFrameInd where possible in common code (to allow correct backtrace for mips cpu)
git-svn-id: trunk@21900 -
2012-07-12 11:53:59 +00:00
Jonas Maebe
834026bfb5 * synchronised with trunk up to r21067
git-svn-id: branches/jvmbackend@21068 -
2012-04-26 21:24:20 +00:00
paul
19d1cf9470 rtl: reduce amount of warnings regards implicit string conversions + little formatting
git-svn-id: trunk@20925 -
2012-04-19 01:33:47 +00:00
Jonas Maebe
8e3d7fe8d3 * fixed genmultistringadd() optimization for jvm and enabled it
* created separate version of fpc_AnsiStr_Concat_multi() after all
    because it contains a punicodechar(unicodestring) typecast, which
    can't be supported on the JVM target (and splitting it out in the
    generic code seems like a bit overkill), and restored original
    generic version of fpc_AnsiStr_Concat_multi() (slightly faster
    than version partially adapted for jvm)

git-svn-id: branches/jvmbackend@20903 -
2012-04-16 20:51:51 +00:00
Jonas Maebe
aee5380ae0 * merged trunk up to r20882
o support for the new codepage-aware ansistrings in the jvm branch
   o empty ansistrings are now always represented by a nil pointer rather than
     by an empty string, because an empty string also has a code page which
     can confuse code (although this will make ansistrings harder to use
     in Java code)
   o more string helpers code shared between the general and jvm rtl
   o support for indexbyte/word in the jvm rtl (warning: first parameter
     is an open array rather than an untyped parameter there, so
     indexchar(pcharvar^,10,0) will be equivalent to
     indexchar[pcharvar^],10,0) there, which is different from what is
     intended; changing it to an untyped parameter wouldn't help though)
   o default() support is not yet complete
   o calling fpcres is currently broken due to limitations in
     sysutils.executeprocess() regarding handling unix quoting and
     the compiler using the same command lines for scripts and directly
     calling external programs
   o compiling the Java compiler currently requires adding ALLOW_WARNINGS=1
     to the make command line

git-svn-id: branches/jvmbackend@20887 -
2012-04-15 15:54:10 +00:00
paul
950ef49b5c fpc: don't treat codepage as different if one element of array has CP_ACP codepage in fpc_AnsiStr_Concat_multi
git-svn-id: trunk@20381 -
2012-02-20 00:30:03 +00:00
paul
79b725990c rtl: remove spaces
git-svn-id: trunk@20284 -
2012-02-09 08:13:05 +00:00
sergei
180686e429 * Removed 'first' field and 'packed' attribute from TAnsiRec and TUnicodeRec. Removing 'packed' should yield more efficient code on alignment-sensitive targets, while removing 'first' effectively makes two records identical to each other. Further cleanup is possible, but let's see the test suite results before proceeding.
git-svn-id: trunk@20275 -
2012-02-07 16:23:50 +00:00
sergei
df221e8196 * fpc_ansistr_concat, refactoring and minor fix:
* Assume code page of empty addend matching the destination (StringCodePage returns value of DefaultSystemCodePage for empty strings, causing unnecessary conversions if another addend has a non-default code page).
  * Moved part with temp Unicodestring variables into separate procedure in order to avoid an implicit try..finally block in primary control flow.
  * Renamed Size and Location varialbles into S1Len and S2Len.

git-svn-id: trunk@20230 -
2012-02-03 10:52:24 +00:00
sergei
a2233d7991 * fpc_ansistr_setlength: fixed/refactored:
* Handle codepage the same way in all control flow branches (was different for the cases of allocating a new string and reallocating an existing one)
  * Don't assign intermediate values directly to var-parameter, use local pointer instead.
  * Setting string pointer to nil after fpc_ansistr_decr_ref is no longer necessary.
- fpc_ansistr_copy: removed repeating index check and unecessary typecasts.

git-svn-id: trunk@20209 -
2012-02-01 16:27:24 +00:00
sergei
06192a8137 Values of managed variables are never ever used after decrementing reference on the variable, so there is no point of having a 'decrement reference' as a separate operation. We can always do 'finalize', i.e. clear the contents after decref.
* Modified fpc_ansistr_decr_ref and fpc_widestr_decr_ref so they always zero the pointer passed by reference. Other _decr_ref helpers already do it.
- Removed tcg.g_decrrefcount, calling cg.g_finalize instead.
- finalize_data_node and tcg.g_finalize: removed code generation for zeroing locations, because it is now done by RTL helpers. This further reduces code size.

As a total result of this change and r20118, the size of Lazarus executable is reduced by about 12%.

git-svn-id: trunk@20119 -
2012-01-19 23:11:09 +00:00
sergei
009ee271ec - Cleaned out STR_CONCAT_PROCS define
- i386-specific fpc_shortstr_append_shortstr removed too, because a) it was anyway disabled with STR_CONCAT_PROCS, b) the generic implementation is smaller and probably faster due to optimized Move().

git-svn-id: trunk@19867 -
2011-12-17 17:22:18 +00:00
sergei
724f41a9af - Cleaned out FPC_STRTOSHORTSTRPROC and FPC_STRTOCHARARRAYPROC defines. Somebody had to do it one day.
git-svn-id: trunk@19851 -
2011-12-14 22:40:08 +00:00
paul
ef0c4a1e5c rtl: fix fpc_AnsiStr_To_AnsiStr source codepage check (less conversions should be done now from AnsiString type to the same codepage strings)
git-svn-id: trunk@19544 -
2011-10-25 07:57:31 +00:00
paul
c1866d5c17 compiler:
- don't pass CP_NONE encoding to internal functions. They handled it as 0 encoding. This will optimize the generated code a bit.
  - convert all king of string/char/pchar constants to local ansistring def if they needs to be passed to rawbytestring type. They should not get a CP_NONE codepage (delphi compatible)
  - don't convert left and right arguments of string concatenation to ansistring type if they are already ansistrings but with different codepage - RTL already handles different codepages in concat routine
  - fix resultdef for ansistring concatenations inside assignments - return def of left assignment operand if it is already ansistring - this reduces amount of unneeded condepage conversions since concat functions can return result in any desired codepage
rtl: remove CP_NONE comparisions from most of RTL functions, replace 0 constant with CP_ACP
tests: add test to check various conversions to RawByteString type

git-svn-id: trunk@19519 -
2011-10-20 09:25:51 +00:00
paul
212b14a46b rtl: set string codepage for all cases in fpc_AnsiStr_Concat
git-svn-id: trunk@19509 -
2011-10-19 01:06:04 +00:00
paul
908673e48b rtl: don't convert strings on compare if one of them is empty
git-svn-id: trunk@19444 -
2011-10-10 06:43:53 +00:00
paul
1c41680c58 rtl: don't perform string conversion if source string is in CP_NONE encoding (rawbytestring)
git-svn-id: trunk@19420 -
2011-10-08 17:56:43 +00:00
paul
836889fc64 rtl: move some CP_xxx constants from syswin into systemh for generic use, redeclare UTF8Sting, RawByteString using constant identifiers instead of pure numbers. replace comparison with $ffff codepage to CP_NONE
git-svn-id: trunk@19354 -
2011-10-04 05:05:14 +00:00
paul
8fc6af7fde rtl: cleanup
git-svn-id: trunk@19352 -
2011-10-04 03:42:53 +00:00
paul
31afa4bd14 rtl: remove fpc_ansistr_append_xxx routines which are no longer used by the compiler
git-svn-id: trunk@19294 -
2011-09-30 09:08:21 +00:00
paul
451e48a033 rtl: replace PChar -> PAnsiChar, Char -> AnsiChar in astrings.inc routines
git-svn-id: trunk@19291 -
2011-09-30 08:15:17 +00:00
paul
bcb0317209 rtl: eat $ffff encoding in more routines, fix Insert() procedure to preserve destination string codepage
git-svn-id: trunk@19289 -
2011-09-30 06:10:24 +00:00
paul
36851c86de rtl: replace AnsiString to RawByteString arguments for Val() functions
git-svn-id: trunk@19288 -
2011-09-30 03:31:37 +00:00
paul
485695d4e6 compiler, rtl: pass codepage argument to all ansistring str() helpers to return result with correct codepage
git-svn-id: trunk@19287 -
2011-09-30 03:26:34 +00:00
paul
a769ef0ad2 compiler: don't return te_eual when we convert from RawByteString to another codepage
git-svn-id: trunk@19283 -
2011-09-29 12:03:11 +00:00
florian
d7f7a9bb76 * patch by Alexander Shishkin to clean up $ifopt usage by $push/$pop, resolves #20346
git-svn-id: trunk@19256 -
2011-09-27 20:22:40 +00:00
paul
5560f6b3f2 compiler + rtl: pass codepage to fpc_CharArray_To_AnsiStr to get the preserve the codepage of result string
git-svn-id: trunk@19240 -
2011-09-26 04:49:09 +00:00
paul
932ca07230 rtl: remove useless ifdef
git-svn-id: trunk@19224 -
2011-09-25 13:31:28 +00:00
sergei
f2852137c8 * DisposeAnsiString doesn't need to exist as a separate procedure, because it is only called from a single place. Merging it into caller yields somewhat more efficient code.
* DisposeWideString,DisposeUnicodeString: likewise.

git-svn-id: trunk@19163 -
2011-09-20 18:53:29 +00:00
Jonas Maebe
85ed1b87d9 * fixed wrong use of CompareTextUnicodeStringProc() in
fpc_ansistr_compare_equal(). "make cycle" now works under Linux, but
    there is probably still a bug somewhere because I don't think that the
    compiler should ever trigger the code path the contained this bug

git-svn-id: trunk@19139 -
2011-09-18 11:17:37 +00:00
paul
5ac95bc27a merge r17607 from cpstrnew branch by inoussa:
Updated to take care of the code page : fpc_ansistr_to_chararray, fpc_ansistr_to_widechararray

git-svn-id: trunk@19124 -
2011-09-17 14:18:53 +00:00
paul
05d66e31ce merge r17603 from cpstrnew branch by inoussa:
Updated to take care of the code page : fpc_char_to_ansistr, fpc_pchar_to_ansistr, fpc_AnsiStr_To_ShortStr

git-svn-id: trunk@19122 -
2011-09-17 14:07:20 +00:00
paul
aaf5392315 merge r17601 from cpstrnew branch by inoussa:
Correct fpc_ansistr_to_ansistr and fpc_short_to_ansistr and test

git-svn-id: trunk@19121 -
2011-09-17 14:03:10 +00:00
paul
7c21524892 merge r17587 from cpstrnew branch by inoussa:
fpc_AnsiStr_To_AnsiStr : avoid code page conversion when possible.

git-svn-id: trunk@19120 -
2011-09-17 13:59:38 +00:00
paul
005795495d merge r17552 from cpstrnew branch by inoussa:
*In normal procedure "var" and "out" RawByteString parameters does not accept other string types. Procedures with
"compilerproc" directive or the newly added "rtlproc" directive accept that. Please note that it is up to the
procedure coder to ensure the correctness of the code page in that case. The new directive is needed to handle 
the RTL procedures/functions that are not marked as "compilerproc" such as "UniqueString", "Insert" and "Delete".

*Correct "fpc_ansistr_concat" to handle code page correctly.

*Default "ansitring" type is now created with code page set to "0" instead of "65535". Before that change it was 
impossible to distinguish a "RawByteString" with the default "ansistring". At runtime "ansistring" variable'code
page is set to DefaultSystemCodePage

*UniqueString flavor of "SetLength" has been updated to release memory when shrinked to at least 50%, like ansitring
does.

git-svn-id: trunk@19118 -
2011-09-17 13:52:09 +00:00
paul
22b19220a3 merge r17485 from cpstrnew branch by michael:
Patch from Inoussa:
* rtl/inc/astrings.inc
    ** "fpc_AnsiStr_Concat_multi" : add "cp" parameter. If the "DestS" variable is "nil" this code page
       is use in order not to loose the declared code page of the original (result)variable.
    ** "fpc_AnsiStr_Compare" : modify to compare taking care of the code  page of the arguments.
    ** "fpc_AnsiStr_Compare_equal" : modify to compare taking care of the code page of the arguments.
    ** "fpc_AnsiStr_SetLength" : add "cp" parameter. If the "S" variable is "nil" this code page
       is use in order not to loose the declared code page of the original (result)variable.

* rtl/inc/systemh.inc
    ** add "SetCodePage" prototype.

git-svn-id: trunk@19114 -
2011-09-17 13:34:37 +00:00
paul
9e0ad7baae merge r17318 from cpstrnew branch by florian:
* compilation fix by Inoussa OUEDRAOGO, resolves #19160

git-svn-id: trunk@19104 -
2011-09-17 13:01:20 +00:00
paul
091627883f merge r14347 from cpstrnew branch by florian:
* fixed bootstrapping with 2.4.0
* patches by Graeme Geldenhuys, resolve #15251, #15252, #15253

git-svn-id: trunk@19102 -
2011-09-17 12:00:06 +00:00
paul
55434fd1d8 merge r14143 from cpstrnew branch by paul:
use RawByteString instead of AnsiString for Pos()

git-svn-id: trunk@19099 -
2011-09-17 11:54:58 +00:00
paul
ad8195e9ae merge r14136 from cpstrnew branch by paul:
- fix return type of StringCodePage functions from Word to TSystemCodePage
- add SetMultiByteConversionCodePage procedure (which just change the DefaultSystemCodePage constant)

git-svn-id: trunk@19095 -
2011-09-17 11:46:33 +00:00
paul
b3db8db481 merge r14133 from cpstrnew branch by paul except ptconst.pas which has a difficult merge conflict (code moved to another unit which is not at the branch during the revision):
make AnsiStr concatenation and copy work

git-svn-id: trunk@19094 -
2011-09-17 11:44:47 +00:00
paul
afa559ab2e merge r14123 from cpstrnew branch by paul:
fix string ref count for empty strings

git-svn-id: trunk@19089 -
2011-09-17 11:27:05 +00:00
paul
5e9ee14ee7 merge r 14122 from cpstrnew branch by paul:
fix StringCodePage for empty unicode and ansi strings

git-svn-id: trunk@19088 -
2011-09-17 11:24:49 +00:00
paul
8cc22972a0 merge r13488 from cpstrnew branch by florian except ncgcon.pas which has a difficult merge conflict (code moved to another unit which is not at the branch during the revision):
* first batch of patches to make tcpstr1.pp work

git-svn-id: trunk@19085 -
2011-09-17 11:16:45 +00:00
paul
06af8f3e44 merge r13486 from cpstrnew branch by florian:
+ fpc_ansistr_to_ansistr implemented, rtl compiles again

git-svn-id: trunk@19084 -
2011-09-17 11:03:30 +00:00
paul
ae0d732c8f merge r13485 from cpstrnew branch by florian:
* fixed compilation of system unit after last changes

git-svn-id: trunk@19083 -
2011-09-17 11:01:42 +00:00
paul
8a4634a7b1 merge r13481 from cpstrnew branch by florian
+ support parsing of strings with code page specification
+ added encoding and elementsize field to ansi- and unicodestring records
+ some basic rtl support routines for encoding aware strings
+ DefaultSystemCodePage
+ DefaultUnicodeCodePage
+ ppu writing/loading of code page aware strings

git-svn-id: trunk@19080 -
2011-09-17 10:37:36 +00:00
Jonas Maebe
ab7f0a4461 * changed the parameters of the fpc_pchar_ansistr_intern_charmove() added in
r18906 from byte into sizeint (copy/paste error from the similar shortstring
    helper, where both source and destination are shortstrings)

git-svn-id: branches/jvmbackend@18939 -
2011-09-01 18:27:06 +00:00