Re: [webkit-dev] bit field error on wince

2008-01-22 Thread Adam Roben

On Jan 22, 2008, at 1:35 AM, ledwinka wrote:

this problem is the ASR instruction. If _effectiveDisplay contain a  
value
big than 0x0f, such as 0x1x, the ASR instruction will cause the high  
bits
fill with 1 , for example, if _effectiveDisplay equal EDisplay::NONE  
or

EDisplay::INLINEBOX,  EDisplay dis will EQUALS -14 or -13, not a valid
value.

How to solve this problem? thanks a lot!


Oliver Hunt has already fixed this problem in a few places in WebCore.  
For one example, see http://trac.webkit.org/projects/webkit/changeset/25329/trunk/WebCore/dom/Node.h 
. Something similar will probably work here. Filing a bug and  
posting a patch on http://bugs.webkit.org/ would be much appreciated!


-Adam

___
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-dev


Re: [webkit-dev] bit field error on wince

2008-01-22 Thread Maciej Stachowiak


On Jan 21, 2008, at 10:35 PM, ledwinka wrote:

During my work on porting s60 webcore to wince, I found there is a  
css bug

in render_style.h file, here is the struct define


You're probably better off basing a port on something more recent  
(like trunk or the Safari 3 branch) since many windows platform/ 
compiler issues like this have already been resolved.


 - Maciej




   struct NonInheritedFlags {
   bool operator==( const NonInheritedFlags other ) const {
   return (_effectiveDisplay == other._effectiveDisplay) 
   (_originalDisplay == other._originalDisplay) 
   (_bg_repeat == other._bg_repeat) 
   (_overflow == other._overflow) 
#if NOKIA_CHANGES
   (_inputRequired == other._inputRequired) 
#endif
   (_vertical_align == other._vertical_align) 
   (_clear == other._clear) 
   (_position == other._position) 
   (_floating == other._floating) 
   (_table_layout == other._table_layout) 
   (_page_break_before == other._page_break_before) 
   (_page_break_after == other._page_break_after) 
   (_styleType == other._styleType) 
   (_affectedByHover == other._affectedByHover) 
   (_affectedByActive == other._affectedByActive) 
   (_affectedByDrag == other._affectedByDrag) 
   (_pseudoBits == other._pseudoBits) 
   (_unicodeBidi == other._unicodeBidi);
 }

   bool operator!=( const NonInheritedFlags other ) const {
   return !(*this == other);
   }

   EDisplay _effectiveDisplay : 5;
   EDisplay _originalDisplay : 5;
   EBackgroundRepeat _bg_repeat : 2;
   EOverflow _overflow : 4 ;
#if NOKIA_CHANGES
   bool _inputRequired : 1 ;
#endif
   EVerticalAlign _vertical_align : 4;
   EClear _clear : 2;
   EPosition _position : 2;
   EFloat _floating : 2;
   ETableLayout _table_layout : 1;

   EPageBreak _page_break_before : 2;
   EPageBreak _page_break_after : 2;

   PseudoId _styleType : 3;
   bool _affectedByHover : 1;
   bool _affectedByActive : 1;
   bool _affectedByDrag : 1;
   int _pseudoBits : 6;
   EUnicodeBidi _unicodeBidi : 2;
   } noninherited_flags;

On wince platform , any code access to bit field in this struct ,  
such as


EDisplay _effectiveDisplay : 5;

will produce asm code like this

EDisplay dis = noninherited_flags. effectiveDisplay;

mov r3 lsl #27
mov r3 asr #27
str r3 [sp]  // write to stack variable

this problem is the ASR instruction. If _effectiveDisplay contain a  
value
big than 0x0f, such as 0x1x, the ASR instruction will cause the high  
bits
fill with 1 , for example, if _effectiveDisplay equal EDisplay::NONE  
or

EDisplay::INLINEBOX,  EDisplay dis will EQUALS -14 or -13, not a valid
value.

How to solve this problem? thanks a lot!



___
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-dev


___
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-dev