[UPDATED to address André's comments]

On 2010-06-08, at 18:38, André Bargull wrote:

>> +      } else if (key == 'name') {
>> +        // `name` needs to be set ASAP
>> +        this.$lzc$set_name(args.name);
> 
> Performing this check costs an extra string comparison for each loop 
> iteration. If the name needs to be set as soon as possible, it should be done 
> before entering the loop.

I moved it out of the loop.  I have to delete the name from the args, so it 
won't get re-processed by the setter clause in the loop.

>> +      var p = this.parent;
>> +      if ($classrootdepth) {
>> +        while (--$classrootdepth > 0) { p = p.parent }
>> +      }
>> +      this.classroot = p;
> 
> Change introduces different semantics here, classroot is set to parent even 
> if args.$classrootdepth is 0 (or any other 'falsy' value).

Mis-placed close brace.  I moved the setting of classroot inside the 
conditional.  But, this is a private API between the tag compiler and the 
kernel.  We could allow 0 here, so that it is possible to use `classroot` in 
the root class (which would also require fixing the node compiler).

>> +    if (('$datapath' in args) && (args.$datapath !== ignore)) {
>> +      var $datapath = args.$datapath;
>> +      args.$datapath = ignore;
> 
> Why do you set args.$datapath to ignore?

Mis-apprehension that it was being processed again.  I have removed that 
statement.

>> -  /** @access private */
>> -  var handlerMethodNames;
> 
> How did handlerMethodNames actually work? It's filled in 
> lz.State#set_$delegates() which is called in lz.Node#applyArgs() which in 
> turn gets called at the end of lz.State#applyArgs(). But lz.State#applyArgs() 
> is already using handlerMethodNames right at the beginning, at that time it 
> should still be empty, shouldn't it?

I don't believe it did.  That's why I removed it.

>> +  /** @access private */
>> +  public function LzState ( parent:* , attrs:* , children:* = null, 
>> instcall:*  = null) {
>> +    // Must init before super because used by __LZapplyArgs override
>> +    // which will be called from super!
>> +    this.heldArgs = {};
>> +    this.appliedChildren = [];
>> +    super(parent,attrs,children,instcall);
>> +  }
> 
> I don't understand the motivation for this change. And also: 
> http://openlaszlo.org/pipermail/laszlo-dev/2008-July/016411.html

I've changed the comment to read:

    // TODO: [2010-06-09 ptw] (LPP-5232) Move these initializations to
    // the declaration when LPP-5232 is fixed.  (Note that super calls
    // our override of __LZapplyArgs, which uses these instance
    // variables.)

>> +  /*
>> +   * Special flags to keep these psuedo-args from being processed
>> +   */
> 
> "pseudo" ;-)

Fixed

>> +  /*
>> +   * Special flags to keep these psuedo-args from being processed
>> +   */
> 
> [...] from being processed "by __LZapplyArgs()"

Fixed

Change 20100604-ptw-7 by [email protected] on 2010-06-04 08:47:02 EDT
    in /Users/ptw/OpenLaszlo/trunk
    for http://svn.openlaszlo.org/openlaszlo/trunk

Summary: Remove earlySetters kludges

Bugs Fixed:  LPP-7354 Presentation Types (partial substrate cleanup)

Technical Reviewer: [email protected] (pending)
QA Reviewer: [email protected] (pending)

Overview:

    `earlySetters` were an attempt by Adam to make a general mechanism,
    but each of the actual usages is a special case.  We don't support
    this generality outside of the kernel (it is handled instead by
    overriding the construct method), so I'm removing it.  It's just a
    lot of extra fragile mechanism that makes the init args more
    difficult to process and interferes with attribute annotation.

Details:

    LzNode, LaszloView, LaszloCanvas:  remove earlySetters lists.

    LzNode: Remove unused `doneClassRoot` flag, unused `defaultSet`
    method.  Handle the previous earlySetters explicitly in
    __LZapplyArgs.  For those that are only used to communicate
    between the compiler and the runtime ($delegates, $classrootdepth,
    $datapath), hoist the former setters inline (but keep the `-1`
    sentinel that indicates they are handled specially in
    __LZapplyArgs).

    LaszloView: Handle `clickregion`, formerly an earlySetter, in
    construct.

    LzState: Clean up class organization to match standard order.
    Remove unneeded initial value for __LZpool.  Make the constructor
    do something useful.  Hide unnecessary documentation of implicit
    event.  Remove 4.1-era deprecated API's.  Handle sorting
    `$delegates` between self and parent explicitly in __LZapplyArgs

Tests:
    smokecheck, selected demos

Files:
M       WEB-INF/lps/lfc/core/LzNode.lzs
M       WEB-INF/lps/lfc/views/LaszloView.lzs
M       WEB-INF/lps/lfc/views/LaszloCanvas.lzs
M       WEB-INF/lps/lfc/helpers/LzState.lzs

Changeset: http://svn.openlaszlo.org/openlaszlo/patches/20100604-ptw-7.tar

Reply via email to