I thought the plan was that we attach a singleton "NullEvent" to declared
event slots. When a delegate registers for the event, it replaces the null
event with a real event.
In SWF (where call overhead is high, and it's not an error to call a
missing function) we could define the NullEvent sendEvent method as null
(when you're not in Debug.) In other runtimes, we can define it as a no
op.
This scheme *would* make it unnecessary (useless) to test for a non-null
slot before calling sendEvent.
We can't afford to instantiate every event that is declared. Much too
slow.
A
On Apr 12, P T Withington wrote:
> Right, but what Henry was proposing was for their to always be an
> event object created. Then you would never have to check for the
> event object existing (so the idiom you use would go away).
>
> BUT, Jim discovered that, at least on the swf runtime, because
> function calls are relatively expensive, that testing for the
> delegateList being empty or not before calling sendEvent saved
> considerable time, at least with very frequent events (in particular
> onwidth and onheight).
>
> The best of all worlds would be for sendEvent to be inlined, at least
> to the point of checking the delegateList, and only call the out-of-
> line helper function when there are delegates listening. For now,
> that would have to be done by special code in the compiler...
>
> On 2006-04-12, at 00:29 EDT, Sarah Allen wrote:
>
> > In the component code and application code that I've been creating,
> > it is common to write:
> > if (foo.someevent) foo.someevent.sendEvent()
> >
> > This avoids debugger warnings if no one is registered for someevent.
> >
> > Sarah
> >
> >
> > On Thu, Apr 6, 2006 at 9:01 PM, P T Withington wrote:
> >
> >> Belay that. Not sure what I was thinking here.
> >>
> >> It would be an optimization to not call sendEvent if the event's
> >> delegateList was empty. At least in the swf runtime, where
> >> function calls are costly.
> >>
> >> But I'm not sure this is the whole answer. It looks like you are
> >> trying to create some sort of 'null' event for each declaration.
> >> If you do this, you also need to check for this null event when
> >> you do add a delegate (and convert it into a real event).
> >>
> >> On 2006-04-06, at 20:38 PDT, Henry Minsky wrote:
> >>
> >>> So that needs to be a convention that everyone obeys when they
> >>> write calls
> >>> to sendEvent? Not just in the LFC, I'm just thinking about user
> >>> code, if app
> >>> developers are going to be told to do
> >>>
> >>> if (foo.someevent) foo.someevent.sendEvent()
> >>>
> >>> instead of
> >>>
> >>> foo.someevent.sendEvent()
> >>>
> >>>
> >>> Or is there some kind of magic we could use to do this
> >>> automatically ? I
> >>> guess it would need to be some kind of macro processor :-)
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>> On 4/6/06, P T Withington <[EMAIL PROTECTED]> wrote:
> >>>>
> >>>> If you do, annotate LPP-1915 to say this can be removed when all
> >>>> callers of sendEvent check for no listeners first (which should be
> >>>> much more efficient than making a call to the empty function).
> >>>>
> >>>> On 2006-04-06, at 19:56 PDT, Henry Minsky wrote:
> >>>>
> >>>>>
> >>>>> This code for declaring events is currently in the DHTML runtime
> >>>>> but not in the SWF runtime.
> >>>>>
> >>>>> Should this go into the SWF runtime as is, or is there anything we
> >>>>> need to do differently?
> >>>>>
> >>>>> [background for the viewing audience; we need to avoid referencing
> >>>>> properties of null values
> >>>>> in the DHTML runtime, as it brings the browser javascript
> >>>>> interpreter to a screeching halt]
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> LzDeclaredEvent = {};
> >>>>> LzDeclaredEvent.sendEvent = function ( a ){ return a };
> >>>>> LzDeclaredEvent.toString = function ( ){
> >>>>> return "Declared event";
> >>>>> }
> >>>>>
> >>>>> function DeclareEvent( who , what ){
> >>>>> // debug('declare ' + who + ' what ' + what);
> >>>>> who[ what ] = LzDeclaredEvent;
> >>>>> }
> >>>>> function DeclareEvents( who , what ){
> >>>>> // debug('DeclareEvents', who, what);
> >>>>> for (var i in what) {
> >>>>> //info('what', what[i]);
> >>>>> who[what[i]] = LzDeclaredEvent;
> >>>>> }
> >>>>> }
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> --
> >>>>> Henry Minsky
> >>>>> Software Architect
> >>>>> [EMAIL PROTECTED]
> >>>>>
> >>>>> _______________________________________________
> >>>>> Laszlo-dev mailing list
> >>>>> [email protected]
> >>>>> http://www.openlaszlo.org/mailman/listinfo/laszlo-dev
> >>>>
> >>>>
> >>>
> >>>
> >>> --
> >>> Henry Minsky
> >>> Software Architect
> >>> [EMAIL PROTECTED]
> >>
> >> _______________________________________________
> >> Laszlo-dev mailing list
> >> [email protected]
> >> http://www.openlaszlo.org/mailman/listinfo/laszlo-dev
> >
>
> _______________________________________________
> Laszlo-dev mailing list
> [email protected]
> http://www.openlaszlo.org/mailman/listinfo/laszlo-dev
>
_______________________________________________
Laszlo-dev mailing list
[email protected]
http://www.openlaszlo.org/mailman/listinfo/laszlo-dev