[Laszlo-dev] [Platform-team] [UPDATED^2] For Review: Change 20070111-ptw-j Summary: Refined event deferral

Adam Wolff adam at laszlosystems.com
Mon Jan 15 10:16:49 PST 2007


this seems like a good solution.
A

On Jan 13, P T Withington wrote:

> [Executive Summary:
> 
> I believe this is the final version of this change.  Lots of debugger changes
> have crept in here to make the debugger output prettier and easier to compare
> -- I can split that out if it is too confusing, but it was very helpful in
> initially diagnosing the problem; and, I think it is much prettier (;)).
> 
> The final design is that only _delegates_ on the node under initialization are
> deferred, not events.  This prevents methods from being called on the node
> while it is being initialized.  These delegates are un-deferred after the
> initial attributes and styles are applied (right before onconstruct is sent).
> 
> I left in the Debug.debug statement that prints out each delegate that is
> deferred by this new implementation so we can be on the lookout for issues in
> cases where the new behavior applies.
> 
> All the formerly broken components now work (as well as they do in b1 -- note
> that menu_example is broken in swf in b1).  The original test case works
> correctly in both swf and dhtml, and you will see that the handler that was
> the source of the bug is deferred in both runtimes.]
> 
> Change 20070111-ptw-j by ptw at 191.154.150.10.in-addr.arpa on 2007-01-11
> 19:12:09 PST
>    in /Users/ptw/OpenLaszlo/legals-2
> 
> Summary: Refined event deferral
> 
> Bugs Fixed:
> LPP-?: 'Legals branch and Broken Components'
> 
> Technical Reviewer: max (pending)
> QA Reviewer: platform-team (pending)
> Doc Reviewer: jsundman (pending)
> 
> Documentation:
> 
>    Methods that would be executed on a node in response to an event
>    when the node is being initialized (typically events that would be
>    triggered by initializing the attributes of the node) are deferred
>    until the node's attributes are fully initialized.
> 
> Release Notes:
> 
>    This is a change from previous behavior, where the initialization
>    of a node attribute could cause (through a setter or event) a
>    method to be executed on the node when the node was partially
>    initialized.  This was an underspecified area of the LZX language
>    which lead to hazards in some runtimes.  This change should not
>    affect the behavior of existing programs.
> 
> Details:
> 
>    LzMessage: Fix append to not escape strings, so that %w can print
>    strings escaped by default (so you can tell the difference
>    between `true` and `"true"`).
> 
>    LzDebug.*: Changed the behavior of __String so that if 'pretty'
>    output is requested 'unique' information is not printed, even for
>    objects that have ambiguous representations.  This makes it easier
>    to compare debugger traces, which might otherwise differ only in
>    the UID's assigned.  By default '%w' requests pretty output.  You
>    can use '%#w' to force unique information to be printed.
>    Inspecting an object will always print it uniquely.  Also removed
>    some stale code that does not work or is not needed in the new
>    class regime.  Fixed code that was trying to detect when you were
>    inspecting a class prototype object to work in the new class
>    regime.
> 
>    LzFormat: Removed backward compatibility kludge for Debug.write
>    now that LzMessage.append works correctly.  Removed hazards where
>    format tried to interpret the value to be displayed as a Number or
>    String prematurely.
> 
>    LaszloCanvas, LzNode: For the purposes of testing this change, you
>    can set the canvas attibute __LZhenryWasRight to true or false to
>    enable or disable the deferral of events during node
>    initialization.
> 
>    LzNode, LaszloEvents: Event deferral is refined in this change to
>    _only_ defer _delegates_ that would be executed on a node during
>    initialization.  Previously, all events sent during a node's
>    initialization would be deferred.  This meant that even nodes that
>    were already initialized or standalone events were deferred, which
>    appears to have been the cause of the lossage in components.
> 
>    LzNode: Also over-rode LzNode._dbg_name and
>    LzNode.prototype._dbg_typename so that node's will print in the
>    debugger with their 'lz' package tagname, further hiding the
>    obsolete global Lz name.
> 
>    UserClass: Fix usage warning now that nodes print properly.
> 
>    Class: Make `Instance` a more well-behaved class for debugging.
>    Defer the computation of method typenames so classes can override
>    their default name (supports LzNode defining class name as package
>    tagname).
> 
>    LaszloEvents: Improve debug printing, move global deferral queue
>    into LzDelegate to avoid global nameespace pollution.
> 
> Tests:
>    These components all work now:
> 
>    examples/components/combobox_example.lzx?lzr=dhtml
>    examples/components/form_example.lzx?lzr=dhtml
>    examples/components/list_example.lzx?lzr=dhtml
>    examples/components/menu_example.lzx?lzr=dhtml
> 
>    NOTE: menu_example is broken in swf, but exhibits the same broken
>    behavior in b1 swf.
> 
>    This test (the original bug that sent us down this path) also
>    works the same in swf and dhtml:
> 
>    <canvas width="600" height="600">
>      <view id="vw" bgcolor="blue" width="100" height="100" >
> 
>        <handler name="onwidth" >
>          this.setBGColor(0xFF0000)
>        </handler>
>      </view>
>    </canvas>
> 
>    You will observe that the hander on width, which was the
>    source of the bug, is properly deferred.
> 
> Files:
> M      WEB-INF/lps/lfc/debugger/LzMessage.lzs
> M      WEB-INF/lps/lfc/debugger/platform/swf/LzDebug.as
> M      WEB-INF/lps/lfc/debugger/platform/dhtml/LzDebug.js
> M      WEB-INF/lps/lfc/debugger/LzFormat.lzs
> M      WEB-INF/lps/lfc/core/LzNode.lzs
> M      WEB-INF/lps/lfc/core/UserClass.lzs
> M      WEB-INF/lps/lfc/core/Class.lzs
> M      WEB-INF/lps/lfc/views/LaszloCanvas.lzs
> M      WEB-INF/lps/lfc/events/LaszloEvents.lzs
> 
> 
> 
> Changeset: http://svn.openlaszlo.org/openlaszlo/patches/20070111-ptw-j.tar


More information about the Laszlo-dev mailing list