Am 26.06.2013 13:59, schrieb Michael Schnell:
BTW.

I think the implementation would be quite easy, straight forward, fast and compatible.

 - The compiler knows the static encoding type of each string variable.
- The dynamic encoding type of a String is preset to the static encoding type when the string is allocated - only RawByteStrings (EncodingType $FFFF) are allowed to change their dynamic encoding type, with other Strings this will lead to unpredictable results


When Strings are assigned:
- If the static encoding type of source and target is identical (be it normal or RAW) (already checked by the compiler) -> the same happens as with the pre-Unicode compiler (setting the pointer to the StringRecord and managing the RefCount)
otherwise:
- If the target is statically defined as RawByteString (already checked by the compiler) -> the same happens - If the source is statically defined as RawByteString (already checked by the compiler), code is implemented that checks if the dynamic encoding of the source is identical to the (known to the compiler) static encoding type of the target -> the same happens

otherwise the conversion library is called. Same checks the _dynamic_ encoding type of source and target (thus it only needs to be provided with the Strings themselves and no additional information generated by the compiler) and does the conversion appropriately.


When doing operation on two Strings (such as "+" and compare), one of the operators is (virtually) copied to a String with the same encoding type as the other.

Here:
- if one operand is a RawByteString use the (static or dynamic) encoding of the other. - if both are RawByteStrings use the dynamic encoding use the dynamic encoding of one of them (supposedly this is no alternate case to before)

If the conversion library sees a dynamic encoding type of $FFFF for either source or target it will fail and issue an exception.

See my previously sent answer...

Regards,
Sven
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to