I like.

On Dec 5, 2016, at 8:49 PM, Alex Harui <aha...@adobe.com> wrote:

> Hi,
> 
> I just pushed changes to allow certain kinds of overrides in SWF that
> normally aren't possible.  The reasoning behind doing this is to allow us
> to have a library that extends SWF classes like Sprite but hide the flash
> APIs.
> 
> For example, in Sprite, the parent property is defined as a
> flash.display.DisplayObjectContainer.  In FlexJS, we would much rather use
> a non-Flash API like org.apache.flex.core.IParent, so a parent can be
> platform-agnostic.  Similarly, the dispatchEvent API takes a
> flash.events.Event and it would be better to have it take an
> org.apache.flex.events.Event, or maybe an
> org.apache.flex.events.IFlexJSEvent.
> 
> So, in our base classes, we would want to write:
> 
>   override public function get parent():IParent
> 
> And
> 
>   override public function
> dispatchEvent(event:org.apache.flex.events.Event):Boolean
> 
> But not only would the SWF compiler not allow that, the Flash runtime
> checks the type of any override at runtime and reports an error if there
> isn't a match (and such an issue would not be caught by the JS runtime).
> 
> So to get this all to work, the compiler needs to know that certain
> type-mismatches are allowed, and also to restore the type to the original
> type in the SWF.  To do so, I taught the compiler to look for a
> SWFOverride metadata that provides the original types for parameters or
> return values.  When the compiler sees a mismatch, it checks for metadata
> allowing the mismatch.  And when writing out the SWF, it also checks for
> the metadata and replaces the types in the ABC traits.  So far, in minimal
> testing, it seems to work.
> 
> Next up, after fixing a bunch of bugs in the queue, is to work on having
> the compiler generate both SWF and JS output in a single run.  Then with
> proper overriding of various Flash APIs, we should be able to provide a
> more efficient way for FlexJS developers to see any conflicts with
> underlying platform implementations without having to wrap every
> implementation.
> 
> Later,
> -Alex
> 

Reply via email to