On Thu, Aug 18, 2016 at 20:55 (+0200), Slávek Banko wrote:
On Wednesday 17 of August 2016 16:26:26 Jim wrote:
> On Wed, Aug 17, 2016 at 03:00 (+0200), Slávek Banko wrote:
>> Hi all,
Various irrelevancies <snip>ed...
>> However, one serious problem is here.
>> In the 'kjs' and
'tdehtml/ecma' is used HashEntry structure that
>> contains the item 'value' of type short int - see
'kjs/lookup.h'.
>> Into this item was stored values DOM::NodeFilter::ShowCode::SHOW_ALL
>> = 0xFFFFFFFF (see tdehtml/dom/dom2_traversal.h) and kjs event CHANGE
>> with value 32768 (see tdehtml/ecma/kjs_events.cpp). Both are
>> therefore outside the range of short int.
>> Changing the type of 'value' in
HashEntry from short to long would
>> apparently cause a change in ABI - kjs/lookup.h is part of the public
>> includes. That's why I made the change values 0xFFFFFFFF and 32768 to
>> -1. I think that GCC compilers version less than 6 will store these
>> values in the same way. Therefore, I believe that the proposed patch
>> would not cause problems == can be pushed. What is your opinion?
> Is anyone compiling this for a 1's complement
hardware platform?
> If so, that could be an issue (now or in the future).
> I don't have any gcc 6.0 machine to play with,
so here are some
> alternative thoughts, for what they are worth.
> how about ~0 (or ~(short)0) to get all 1 bits?
Format ~0 looks good, but I'm afraid of possible
complications:
1) hash tables are generated by kjs/create_hash_table
(perl script) - it
would have to verify what would be the behavior with expressions instead
of simple values.
Is that verification difficult?
2) enum values can be used in the code for the
bindings to other
languages - such as python. Use expressions instead of simple values
could cause problems.
Is it difficult to check that?
Therefore, I believe that the use of the simple value
-1 makes more sense.
(FWIW) Wikipedia says
The representation used in most current computing devices is
two's complement, although the Unisys ClearPath Dorado series
mainframes use ones' complement.
Putting a -1 in there will not give you 0xFFFF on such machines.
Maybe no one cares...
Jim