You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flex.apache.org by Frédéric THOMAS <we...@hotmail.com> on 2015/07/06 01:18:10 UTC

RE: [Externs] jasmine-2.0.js

> I am going to be busy most of the week remodeling my mother in laws
> bathroom starting tomorrow. So if you want to try a new custom pass like
> ResolveImportPass, go for it, I will just stay out of the way. I think it
> would be good for you. :) If not, no worries, you gave me the idea. haha
>
> If you did, look at it like this, since all imports and logic therin are
> totally dependent on what the compiler actual saves into the model, logic
> says this needs to be the last or one of the last passes, from my
> perspective, it needs to be the last.
>
> If you make it the last, then this pass is not coupled to us fixing bugs
> ahead of it. Say we find out we need to add another structure of AST
> parsing for a node structure I havn't implemented yet, well we are safe.
>
> Why safe? Because in this import pass, you are using the MODEL, so no AST.
> Instead of worrying about resolving imports during AST traversal, you are
> using what is already in the container after all that complex parsing is
> finished.
>
> So this pass, you would use your skills at knowing "what" in each subclass
> of BaseReference could contain a type. Then write your logic pass to
> traverse Classes, then into each classes members, then loop through each
> member and analyze their types and do your import testing logic there.
>
> Once you find instances of imports that need to be saves, your current
> context is already the ClassReference, so call classRef.addImport(). :)


You can review the add-CollectImportPass branch before I merge it when you have a chance.
Thanks,
Frédéric THOMAS


----------------------------------------
> Date: Sun, 28 Jun 2015 14:23:57 -0400
> Subject: Re: [Externs] jasmine-2.0.js
> From: teotigraphixllc@gmail.com
> To: dev@flex.apache.org
>
> Kewl.
>
> I am going to be busy most of the week remodeling my mother in laws
> bathroom starting tomorrow. So if you want to try a new custom pass like
> ResolveImportPass, go for it, I will just stay out of the way. I think it
> would be good for you. :) If not, no worries, you gave me the idea. haha
>
> If you did, look at it like this, since all imports and logic therin are
> totally dependent on what the compiler actual saves into the model, logic
> says this needs to be the last or one of the last passes, from my
> perspective, it needs to be the last.
>
> If you make it the last, then this pass is not coupled to us fixing bugs
> ahead of it. Say we find out we need to add another structure of AST
> parsing for a node structure I havn't implemented yet, well we are safe.
>
> Why safe? Because in this import pass, you are using the MODEL, so no AST.
> Instead of worrying about resolving imports during AST traversal, you are
> using what is already in the container after all that complex parsing is
> finished.
>
> So this pass, you would use your skills at knowing "what" in each subclass
> of BaseReference could contain a type. Then write your logic pass to
> traverse Classes, then into each classes members, then loop through each
> member and analyze their types and do your import testing logic there.
>
> Once you find instances of imports that need to be saves, your current
> context is already the ClassReference, so call classRef.addImport(). :)
>
> Mike
>
>
>
>
> On Sun, Jun 28, 2015 at 2:13 PM, Frédéric THOMAS <we...@hotmail.com>
> wrote:
>
>>> All I meant is that 75% of the time we would just want to save things in
>>> the model or a reference, such that you use addImport() during the
>>> resolution. Then it keeps the emit() phase straight burn rubber and loop
>>> through all existing model structures, where imports would be just a list
>>> that emitImport() iterates through, no logic.
>>
>> Got it !
>>
>>> I AM NOT saying what you did was wrong, I am just offering a look into
>> how
>>> I set it up. You know how I got this pattern? From my massive mistakes in
>>> code generators of past. :) I realized that an emit phase needs to be
>>> stupid and not dependent on any type of intelligence, just needs to
>> create
>>> what already exists.
>>
>> I'm in a phase where I'm learning compiler things and indeed I will do
>> some mistakes
>> or I won't be as precise as you who have experience on it.
>> Therefore I can accept critics and learn from your explanations :-)
>>
>>> This can also solve many problems at once. So I haven't got back into the
>>> code BUT my intuition says we need a universal solution for any type of
>>> TYPE that is attached to a member, identifier such as a param type,
>> return
>>> type, filed type, superclass and interface(already taken care of using
>>> addImport()).
>>>
>>> See where I am coming from? We know that every type is eventually going
>> to
>>> need to be scanned for imports and validated.
>>
>> Yes, actually, I was expecting to see a specific pass for that.
>>
>>> Dude, I just don't want to come off bossy or condescending, I love you
>>> help. A lot can be added to this compiler that could be very interesting.
>>> So having you understand my design intention is really important to me.
>> :)
>>
>> Don't worry, I don't think you are bossy or condescending Mike, I'm
>> reading you
>> and try to put in parallel the new informations you give and what I've
>> seen in the code
>> for a better understanding, that's it.
>>
>> Cheers,
>> Frédéric THOMAS
>>
>>
>> ----------------------------------------
>>> Date: Sun, 28 Jun 2015 13:48:02 -0400
>>> Subject: Re: [Externs] jasmine-2.0.js
>>> From: teotigraphixllc@gmail.com
>>> To: dev@flex.apache.org
>>>
>>> Fred you did an awesome job. :)
>>>
>>> All I meant is that 75% of the time we would just want to save things in
>>> the model or a reference, such that you use addImport() during the
>>> resolution. Then it keeps the emit() phase straight burn rubber and loop
>>> through all existing model structures, where imports would be just a list
>>> that emitImport() iterates through, no logic.
>>>
>>> I AM NOT saying what you did was wrong, I am just offering a look into
>> how
>>> I set it up. You know how I got this pattern? From my massive mistakes in
>>> code generators of past. :) I realized that an emit phase needs to be
>>> stupid and not dependent on any type of intelligence, just needs to
>> create
>>> what already exists.
>>>
>>> This can also solve many problems at once. So I haven't got back into the
>>> code BUT my intuition says we need a universal solution for any type of
>>> TYPE that is attached to a member, identifier such as a param type,
>> return
>>> type, filed type, superclass and interface(already taken care of using
>>> addImport()).
>>>
>>> See where I am coming from? We know that every type is eventually going
>> to
>>> need to be scanned for imports and validated.
>>>
>>> Dude, I just don't want to come off bossy or condescending, I love you
>>> help. A lot can be added to this compiler that could be very interesting.
>>> So having you understand my design intention is really important to me.
>> :)
>>>
>>> Mike
>>>
>>>
>>>
>>>
>>> On Sun, Jun 28, 2015 at 1:37 PM, Frédéric THOMAS <
>> webdoublefx@hotmail.com>
>>> wrote:
>>>
>>>>> Fred pretty much iterated things correctly.
>>>>>
>>>>> The ResolvePackageNamePass I haven't to get back to. I was in the
>> middle
>>>> of
>>>>> implementing something when I got it to work in another place.
>>>>>
>>>>> There is a pattern to how things are parsed so most of the time it's
>>>> better
>>>>> to set state as nodes/references are being added to the model. In the
>>>> case
>>>>> of imports, I don't see any problems right now with checking during the
>>>>> emit phase but, if the model was more interactive during the session,
>>>> this
>>>>> type of logic should happen during the resolve phase so the model with
>>>> it's
>>>>> references has a correct state if there is any logic happening between
>>>> two
>>>>> references.
>>>>
>>>> Thanks for the explanation, I will take the time to do some debug spins
>> to
>>>> understand
>>>> when the phases are called, what they do and what classes are involved.
>>>> Given it is a fairly small transpiler and despite the recursive visitor
>>>> pattern, I guess I can do it.
>>>>
>>>>> How much are you working on right now Fred? I just ask because I don't
>>>> want
>>>>> to create any conflicts.
>>>>
>>>> Go ahead Mike, I'm done with that at the moment, I did my last cleanup
>>>> already.
>>>> Anyway, better I work on a branch and commit the branch instead for
>> review
>>>> next time.
>>>>
>>>> Frédéric THOMAS
>>>>
>>>>
>>>> ----------------------------------------
>>>>> Date: Sun, 28 Jun 2015 13:23:15 -0400
>>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>>> From: teotigraphixllc@gmail.com
>>>>> To: dev@flex.apache.org
>>>>>
>>>>> Fred pretty much iterated things correctly.
>>>>>
>>>>> The ResolvePackageNamePass I haven't to get back to. I was in the
>> middle
>>>> of
>>>>> implementing something when I got it to work in another place.
>>>>>
>>>>> There is a pattern to how things are parsed so most of the time it's
>>>> better
>>>>> to set state as nodes/references are being added to the model. In the
>>>> case
>>>>> of imports, I don't see any problems right now with checking during the
>>>>> emit phase but, if the model was more interactive during the session,
>>>> this
>>>>> type of logic should happen during the resolve phase so the model with
>>>> it's
>>>>> references has a correct state if there is any logic happening between
>>>> two
>>>>> references.
>>>>>
>>>>> How much are you working on right now Fred? I just ask because I don't
>>>> want
>>>>> to create any conflicts.
>>>>>
>>>>> Mike
>>>>> .
>>>>>
>>>>> On Sat, Jun 27, 2015 at 5:58 PM, Michael Schmalle <
>>>> teotigraphixllc@gmail.com
>>>>>> wrote:
>>>>>
>>>>>> Hey Fred, I was out all day. I will have some time in the morning to
>>>> look
>>>>>> at what you did and comment. :)
>>>>>>
>>>>>> Mike
>>>>>>
>>>>>> On Sat, Jun 27, 2015 at 5:27 PM, Frédéric THOMAS <
>>>> webdoublefx@hotmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Just to explain what I did, especially to folks who would like to get
>>>>>>> their hand dirty on the compiler but like me, don't know how it works
>>>> :-)
>>>>>>>
>>>>>>> I was adding jasmine-2.0.js [1], a file that contains only jsDoc
>>>>>>> (parameters and return type descriptions) and declarations, no
>>>>>>> implementations.
>>>>>>> When I say "adding jasmine-2.0.js" I mean, transpile this .js file to
>>>> .as
>>>>>>> and then compile it to a .swc.
>>>>>>>
>>>>>>> The transpilation part is done by EXTERNC
>>>>>>>
>>>>>>> You call it like that:
>>>>>>>
>>>>>>> <java jar="${basedir}/compiler.jx/lib/externc.jar" fork="true"
>>>>>>> failonerror="false">
>>>>>>> <arg value="+flexlib=${env.ASJS_HOME}/frameworks" />
>>>>>>> <arg value="-debug" />
>>>>>>> <arg
>>>>>>>
>>>>
>> value="-load-config=${basedir}/externs/jasmine/jasmine-compile-config.xml"
>>>>>>> />
>>>>>>>
>>>>>>> In the jasmine-compile-config.xml, you can exclude classes and
>> member,
>>>>>>> for example, in the jasmine.Spec class, I excluded the variable
>>>> $injector
>>>>>>> as its type was coming from the Angular library that is not yet
>>>> transpiled.
>>>>>>>
>>>>>>> <field-exclude>
>>>>>>> <class>jasmine.Spec</class>
>>>>>>> <field>$injector</field>
>>>>>>> </field-exclude>
>>>>>>>
>>>>>>> You can also exclude classes and functions.
>>>>>>>
>>>>>>> The compile part is done by the falcon compc as follow:
>>>>>>>
>>>>>>> <java
>> jar="${basedir}/compiler/generated/dist/sdk/lib/falcon-compc.jar"
>>>>>>> fork="true"
>>>>>>> failonerror="true">
>>>>>>> <arg value="+flexlib=${env.ASJS_HOME}/frameworks" />
>>>>>>> <arg value="-debug" />
>>>>>>> <arg
>>>>>>> value="-load-config=${basedir}/externs/jasmine/compile-config.xml" />
>>>>>>> <arg
>>>>>>> value="-output=${basedir}/externs/jasmine/out/bin/jasmine-2.0.swc" />
>>>>>>> </java>
>>>>>>>
>>>>>>> The problem was that this last part was failing with an NPE a Type of
>>>>>>> something:
>>>>>>>
>>>>>>>
>>>>
>> org.apache.flex.compiler.internal.scopes.TypeScope.getPropertyForMemberAccess(TypeScope.java:344)
>>>>>>>
>>>>>>> Even looking closely at the code, I didn't get why it was failing but
>>>> for
>>>>>>> sure, because it was trying to compile one of the transpiled .as
>> file,
>>>> this
>>>>>>> transpiled code was wrong.
>>>>>>> Looking at those .as, it was easy to see that some import were
>> missing.
>>>>>>>
>>>>>>> So, why the 2 others externs (js and jquery) had no issues ?
>>>>>>> It is always surprising to see something working on all the things
>>>> except
>>>>>>> of yours, but it can help you too :-)
>>>>>>>
>>>>>>> So, I've been looking at those other transpiled .as files from
>> existing
>>>>>>> externs to see if they had imports and they were some.
>>>>>>> I then created a mini jasmine.js containing only the faulty case
>> only,
>>>>>>> that, from what I've been able to determinate, was that the import
>> was
>>>> not
>>>>>>> generated when a static function had a return type of a class created
>>>> via a
>>>>>>> function constructor, so, I filled this mini jasmine.js with the
>>>> equivalent
>>>>>>> of a static function like this:
>>>>>>>
>>>>>>> /**
>>>>>>> * @return {!jasmine.Clock}
>>>>>>> */
>>>>>>> jasmine.clock = function() {};
>>>>>>>
>>>>>>> Which should transpile in AS3, something like:
>>>>>>>
>>>>>>> import jasmine.Clock;
>>>>>>> public static function clock():Clock {}
>>>>>>>
>>>>>>> and a function constructor like this:
>>>>>>>
>>>>>>> /** @constructor */
>>>>>>> jasmine.Clock = function() {};
>>>>>>>
>>>>>>> which transpile:
>>>>>>>
>>>>>>> package jasmine {
>>>>>>> public class Clock {}
>>>>>>> }
>>>>>>>
>>>>>>> Created a test class based on those Mike created for the previous
>>>> externs
>>>>>>> doing:
>>>>>>>
>>>>>>> // jasmine, the main jasmine class.
>>>>>>> ClassReference jasmine = model.getClassReference("jasmine");
>>>>>>> assertNotNull(jasmine);
>>>>>>>
>>>>>>> assertTrue(jasmine.hasImport("jasmine.Clock"));
>>>>>>>
>>>>>>> The hasImport method didn't exist on ClassReference but it was a
>>>>>>> addImport(), I follow to where it was called in ResolvePackagesPass
>>>> hoping
>>>>>>> to find a missing case but after debug spin I wasn't able to do what
>> I
>>>>>>> expected, I'm not sure I understood all the logic in this class but
>> it
>>>>>>> looked like the Node of my return type was never visited and
>> therefore
>>>>>>> wasn't able to add my import here.
>>>>>>>
>>>>>>> But wait, in the ClassReference, I have a
>>>>>>>
>>>>>>> public MethodReference addMethod(Node node, String functionName,
>>>>>>> JSDocInfo comment, boolean isStatic)
>>>>>>>
>>>>>>> To me it would be enough to add the import to the list of imports to
>> be
>>>>>>> emitted when the MethodReference is to be added, I just had to
>>>> determinate
>>>>>>> if the return type given in the jsDoc was not from the current
>>>> package, the
>>>>>>> given method not excluded, the given return type neither !
>>>>>>>
>>>>>>> My test was passing was I was able to compile with this new code the
>>>> old
>>>>>>> externs.
>>>>>>>
>>>>>>> The only thing I had to do to finish to compile the jasmine extern
>> was
>>>> to
>>>>>>> emit the imports for the global functions too as they shown to be
>>>> faulty
>>>>>>> for the same reasons.
>>>>>>>
>>>>>>> Mike will probably tell me now where my logic was wrong now :-)
>>>>>>>
>>>>>>> Frédéric THOMAS
>>>>>>>
>>>>>>>
>>>>>>> ----------------------------------------
>>>>>>>> From: webdoublefx@hotmail.com
>>>>>>>> To: dev@flex.apache.org
>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>>>>>> Date: Sat, 27 Jun 2015 20:43:43 +0100
>>>>>>>>
>>>>>>>> Ok, done !
>>>>>>>>
>>>>>>>> I forgot to uncomment the externc build of jasmine and print the
>>>> global
>>>>>>> function imports !
>>>>>>>>
>>>>>>>> Frédéric THOMAS
>>>>>>>>
>>>>>>>>
>>>>>>>> ----------------------------------------
>>>>>>>>> From: webdoublefx@hotmail.com
>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>>>>>>> Date: Sat, 27 Jun 2015 20:12:16 +0100
>>>>>>>>>
>>>>>>>>>> I pushed the changes which are ready to be reviewed.
>>>>>>>>>
>>>>>>>>> oups, hold on, I had some things commented that hidden other
>>>> problems,
>>>>>>> I will continue on it.
>>>>>>>>>
>>>>>>>>> Frédéric THOMAS
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ----------------------------------------
>>>>>>>>>> From: webdoublefx@hotmail.com
>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>>>>>>>> Date: Sat, 27 Jun 2015 18:31:32 +0100
>>>>>>>>>>
>>>>>>>>>> Hi Mike,
>>>>>>>>>>
>>>>>>>>>> I pushed the changes which are ready to be reviewed.
>>>>>>>>>>
>>>>>>>>>> Note: The jasmine-2.0.js is not committed as it should be
>> downloaded
>>>>>>> with the unpack-externs target of the download.xml, I followed the
>>>> model.
>>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> ----------------------------------------
>>>>>>>>>>> Date: Sat, 27 Jun 2015 05:31:50 -0400
>>>>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>>>>>>>>> From: teotigraphixllc@gmail.com
>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>
>>>>>>>>>>> I just noticed you said today or tomorrow, whatever man. doesn't
>>>>>>> matter.
>>>>>>>>>>>
>>>>>>>>>>> Mike
>>>>>>>>>>>
>>>>>>>>>>> On Sat, Jun 27, 2015 at 5:17 AM, Michael Schmalle <
>>>>>>> teotigraphixllc@gmail.com
>>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Well its the practice. I know the pattern I am using so if I
>> have
>>>> to
>>>>>>>>>>>> adjust it to fit I will. You can tell that with AST type stuff,
>> it
>>>>>>> has to
>>>>>>>>>>>> follow a specific pattern or everything turns to crap when
>> trying
>>>>>>> to add
>>>>>>>>>>>> stuff down the road.
>>>>>>>>>>>>
>>>>>>>>>>>> Commit it sooner than later as I have a couple hours to check it
>>>>>>> out this
>>>>>>>>>>>> morning.
>>>>>>>>>>>>
>>>>>>>>>>>> Mike
>>>>>>>>>>>>
>>>>>>>>>>>> On Sat, Jun 27, 2015 at 3:15 AM, Frédéric THOMAS <
>>>>>>> webdoublefx@hotmail.com>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi Mike,
>>>>>>>>>>>>>
>>>>>>>>>>>>> I can now compile jasmine, I'm not sure my fix is very clean
>> but
>>>> it
>>>>>>>>>>>>> works, I've been able to compile all the externs with.
>>>>>>>>>>>>> I will commit it later today or tomorrow as I need to clean a
>> bit
>>>>>>> before
>>>>>>>>>>>>> and it would be nice if you can review it.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>>> From: webdoublefx@hotmail.com
>>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 22:43:30 +0100
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hey Mike, it looks like "import jasmine.Clock;" is missing in
>>>> the
>>>>>>>>>>>>> generated jasmine.as, that's it !
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>>>> From: webdoublefx@hotmail.com
>>>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 22:26:32 +0100
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> HAHA, ah that is a hard one man, thanks for the offer but I
>>>>>>> think I am
>>>>>>>>>>>>>>>> going to need to get this one. There are a couple places it
>>>>>>> could be
>>>>>>>>>>>>> though
>>>>>>>>>>>>>>>> if you are curious.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> First you really need to understand the problem, I am typing
>>>>>>> this
>>>>>>>>>>>>> stuff in
>>>>>>>>>>>>>>>> between installing a bathroom vanity and sink, so I haven't
>>>>>>> looked at
>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>> code yet. :)
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> So I can't really give you an answer since I don't quite
>> know
>>>>>>> the
>>>>>>>>>>>>> problem
>>>>>>>>>>>>>>>> yet.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Ok, I will check your solution :-)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 16:59:58 -0400
>>>>>>>>>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>>>>>>>>>>>>>> From: teotigraphixllc@gmail.com
>>>>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Fri, Jun 26, 2015 at 4:39 PM, Frédéric THOMAS <
>>>>>>>>>>>>> webdoublefx@hotmail.com>
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Yeah, this "jasmine.Clock"
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> The error means that the Falcon compiler is trying to
>>>> resolve
>>>>>>> a
>>>>>>>>>>>>> member
>>>>>>>>>>>>>>>>>> expression and it can't resolve it.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> So this means there is a bug in the AST resolver. You are
>>>>>>> using the
>>>>>>>>>>>>>>>>> extern
>>>>>>>>>>>>>>>>>> in the GCC project correct?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Yes,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>
>>>>
>> https://raw.githubusercontent.com/google/closure-compiler/master/contrib/externs/jasmine-2.0.js
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> If so, I need to take a look at it.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Everyone, I did one pass and tests on packages and class
>>>>>>> creation,
>>>>>>>>>>>>> so
>>>>>>>>>>>>>>>>> these
>>>>>>>>>>>>>>>>>> types of bugs are to be expected as the AST/Type resolver
>> is
>>>>>>>>>>>>> "asked" to
>>>>>>>>>>>>>>>>> do
>>>>>>>>>>>>>>>>>> more work then my initial implementation.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Make sense?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Well, kind of :-)
>>>>>>>>>>>>>>>>> What classes would you check for this ?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> HAHA, ah that is a hard one man, thanks for the offer but I
>>>>>>> think I am
>>>>>>>>>>>>>>>> going to need to get this one. There are a couple places it
>>>>>>> could be
>>>>>>>>>>>>> though
>>>>>>>>>>>>>>>> if you are curious.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> First you really need to understand the problem, I am typing
>>>>>>> this
>>>>>>>>>>>>> stuff in
>>>>>>>>>>>>>>>> between installing a bathroom vanity and sink, so I haven't
>>>>>>> looked at
>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>> code yet. :)
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> So I can't really give you an answer since I don't quite
>> know
>>>>>>> the
>>>>>>>>>>>>> problem
>>>>>>>>>>>>>>>> yet.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Mike
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 16:32:16 -0400
>>>>>>>>>>>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>>>>>>>>>>>>>>>> From: teotigraphixllc@gmail.com
>>>>>>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Yeah, this "jasmine.Clock"
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> The error means that the Falcon compiler is trying to
>>>> resolve
>>>>>>> a
>>>>>>>>>>>>> member
>>>>>>>>>>>>>>>>>> expression and it can't resolve it.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> So this means there is a bug in the AST resolver. You are
>>>>>>> using the
>>>>>>>>>>>>>>>>> extern
>>>>>>>>>>>>>>>>>> in the GCC project correct?
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> If so, I need to take a look at it.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Everyone, I did one pass and tests on packages and class
>>>>>>> creation,
>>>>>>>>>>>>> so
>>>>>>>>>>>>>>>>> these
>>>>>>>>>>>>>>>>>> types of bugs are to be expected as the AST/Type resolver
>> is
>>>>>>>>>>>>> "asked" to
>>>>>>>>>>>>>>>>> do
>>>>>>>>>>>>>>>>>> more work then my initial implementation.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Make sense?
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Mike
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> On Fri, Jun 26, 2015 at 3:27 PM, Frédéric THOMAS <
>>>>>>>>>>>>>>>>> webdoublefx@hotmail.com>
>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Hi Mike,
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Any idea why ?
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>> U:\sources\asf\flex\falcon\externs\jasmine\out\as\classes\
>>>>>>>>>>>>> jasmine.as:26
>>>>>>>>>>>>>>>>>>> Erreur interne : java.lang.NullPointerException
>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>
>>>>
>> org.apache.flex.compiler.internal.scopes.TypeScope.getPropertyForMemberAccess(TypeScope.java:344)
>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>
>>>>
>> org.apache.flex.compiler.internal.scopes.ScopeView.getPropertyForMemberAccess(ScopeView.java:81)
>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>
>>>>
>> org.apache.flex.compiler.internal.scopes.ASScope.getPropertyFromDef(ASScope.java:879)
>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>
>>>>
>> org.apache.flex.compiler.internal.scopes.ASScope.getPropertyFromDef(ASScope.java:841)
>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>
>>>>
>> org.apache.flex.compiler.internal.scopes.ASScope.getPropertyFromDef(ASScope.java:760)
>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>
>>>>
>> org.apache.flex.compiler.internal.tree.as.IdentifierNode.resolveMemberRef(IdentifierNode.java:829)
>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>
>>>>
>> org.apache.flex.compiler.internal.tree.as.IdentifierNode.resolve(IdentifierNode.java:377)
>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>
>>>>
>> org.apache.flex.compiler.internal.tree.as.IdentifierNode.getMName(IdentifierNode.java:432)
>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>
>>>>
>> org.apache.flex.compiler.internal.tree.as.MemberAccessExpressionNode.getMName(MemberAccessExpressionNode.java:158)
>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>
>>>>
>> org.apache.flex.compiler.internal.as.codegen.ABCGeneratingReducer.dottedName(ABCGeneratingReducer.java:840)
>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>
>>>>
>> org.apache.flex.compiler.internal.as.codegen.CmcEmitter.action_321(CmcEmitter.java:5236)
>>>>>>>>>>>>>>>>>>> ...
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> public static function clock():jasmine.Clock { return
>>>> null; }
>>>>>>>>>>>>>>>>>>> ^
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>> In the jasmine extern file
>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>> * @return {!jasmine.Clock}
>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>> jasmine.clock = function() {};
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> /** @constructor */
>>>>>>>>>>>>>>>>>>> jasmine.Clock = function() {};
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> /** */
>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.install = function() {};
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> /** */
>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.uninstall = function() {};
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> /** @param {number} ms */
>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.tick = function(ms) {};
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> /** @param {!Date} date */
>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.mockDate = function(date) {};
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>> In jasmine.as
>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>> * @returns {jasmine.Clock}
>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>> public static function clock():jasmine.Clock { return
>>>> null; }
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>> clock.as
>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>> package jasmine {
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>> public class Clock {
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>> public function Clock() {
>>>>>>>>>>>>>>>>>>> super();
>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>> * Generated doc for missing method JSDoc.
>>>>>>>>>>>>>>>>>>> *
>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>> public function install():void { }
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>> * @param ms [number]
>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>> public function tick(ms:Number):void { }
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>> * Generated doc for missing method JSDoc.
>>>>>>>>>>>>>>>>>>> *
>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>> public function uninstall():void { }
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>> * @param date [Date]
>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>> public function mockDate(date:Date):void { }
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>
>>>>
>>
>>
 		 	   		  

Re: [Externs] jasmine-2.0.js

Posted by Michael Schmalle <te...@gmail.com>.
Fred,

I am still finishing up my wife's moms bathroom renovation, I am covered in
paint right now so it will be a bit before I can get to looking at your
branch.

Mike

On Mon, Jul 6, 2015 at 6:48 PM, Michael Schmalle <te...@gmail.com>
wrote:

>
>
> On Mon, Jul 6, 2015 at 11:44 AM, Frédéric THOMAS <we...@hotmail.com>
> wrote:
>
>> Also I'm trying to write tests for this pass and I've got something that
>> doesn't pass, why the "bar" parameter is consider as optional in the
>> collectImport.CollectImports constructor ?
>> see the emmitted "@param bar [(foo.Bar|null)] ",  why not "@param bar
>> {foo.Bar} " ?
>>
>
>
> It's because ? means OR NULL in externs. We are using the annotation
> resolver which passes back implicit meaning, so it's not saying it's
> optional it's saying it CAN be null, but something MUST be passed.
>
> So anything that is;
>
> @param bar {foo.Bar}
>
> is actually
>
> @param bar {foo.Bar?}
>
> If you use !, it means it cannot be null, a value must be passed that is
> not null.
>
> Mike
>
>
>>
>> /**
>>  * @constructor
>>  * @extends {superClasses.Import}
>>  * @param {foo.Bar} bar
>>  * @param {number} value
>>  */
>> collectImport.CollectImports = function(bar, value) {};
>>
>> EMMITTED TO:
>>
>> package collectImport {
>>
>> import superClasses.Import;
>>
>> /**
>>  * @see [collect_import]
>>  */
>> public class CollectImports extends superClasses.Import {
>>
>>     /**
>>      * @param bar [(foo.Bar|null)]
>>      * @param value [number]
>>      * @see [collect_import]
>>      */
>>     public function CollectImports(bar:foo.Bar, value:Number) {
>>         super();
>>     }
>>
>> Thanks,
>> Frédéric THOMAS
>>
>>
>> ----------------------------------------
>> > From: webdoublefx@hotmail.com
>> > To: dev@flex.apache.org
>> > Subject: RE: [Externs] jasmine-2.0.js
>> > Date: Mon, 6 Jul 2015 00:18:10 +0100
>> >
>> >> I am going to be busy most of the week remodeling my mother in laws
>> >> bathroom starting tomorrow. So if you want to try a new custom pass
>> like
>> >> ResolveImportPass, go for it, I will just stay out of the way. I think
>> it
>> >> would be good for you. :) If not, no worries, you gave me the idea.
>> haha
>> >>
>> >> If you did, look at it like this, since all imports and logic therin
>> are
>> >> totally dependent on what the compiler actual saves into the model,
>> logic
>> >> says this needs to be the last or one of the last passes, from my
>> >> perspective, it needs to be the last.
>> >>
>> >> If you make it the last, then this pass is not coupled to us fixing
>> bugs
>> >> ahead of it. Say we find out we need to add another structure of AST
>> >> parsing for a node structure I havn't implemented yet, well we are
>> safe.
>> >>
>> >> Why safe? Because in this import pass, you are using the MODEL, so no
>> AST.
>> >> Instead of worrying about resolving imports during AST traversal, you
>> are
>> >> using what is already in the container after all that complex parsing
>> is
>> >> finished.
>> >>
>> >> So this pass, you would use your skills at knowing "what" in each
>> subclass
>> >> of BaseReference could contain a type. Then write your logic pass to
>> >> traverse Classes, then into each classes members, then loop through
>> each
>> >> member and analyze their types and do your import testing logic there.
>> >>
>> >> Once you find instances of imports that need to be saves, your current
>> >> context is already the ClassReference, so call classRef.addImport(). :)
>> >
>> >
>> > You can review the add-CollectImportPass branch before I merge it when
>> you have a chance.
>> > Thanks,
>> > Frédéric THOMAS
>> >
>> >
>> > ----------------------------------------
>> >> Date: Sun, 28 Jun 2015 14:23:57 -0400
>> >> Subject: Re: [Externs] jasmine-2.0.js
>> >> From: teotigraphixllc@gmail.com
>> >> To: dev@flex.apache.org
>> >>
>> >> Kewl.
>> >>
>> >> I am going to be busy most of the week remodeling my mother in laws
>> >> bathroom starting tomorrow. So if you want to try a new custom pass
>> like
>> >> ResolveImportPass, go for it, I will just stay out of the way. I think
>> it
>> >> would be good for you. :) If not, no worries, you gave me the idea.
>> haha
>> >>
>> >> If you did, look at it like this, since all imports and logic therin
>> are
>> >> totally dependent on what the compiler actual saves into the model,
>> logic
>> >> says this needs to be the last or one of the last passes, from my
>> >> perspective, it needs to be the last.
>> >>
>> >> If you make it the last, then this pass is not coupled to us fixing
>> bugs
>> >> ahead of it. Say we find out we need to add another structure of AST
>> >> parsing for a node structure I havn't implemented yet, well we are
>> safe.
>> >>
>> >> Why safe? Because in this import pass, you are using the MODEL, so no
>> AST.
>> >> Instead of worrying about resolving imports during AST traversal, you
>> are
>> >> using what is already in the container after all that complex parsing
>> is
>> >> finished.
>> >>
>> >> So this pass, you would use your skills at knowing "what" in each
>> subclass
>> >> of BaseReference could contain a type. Then write your logic pass to
>> >> traverse Classes, then into each classes members, then loop through
>> each
>> >> member and analyze their types and do your import testing logic there.
>> >>
>> >> Once you find instances of imports that need to be saves, your current
>> >> context is already the ClassReference, so call classRef.addImport(). :)
>> >>
>> >> Mike
>> >>
>> >>
>> >>
>> >>
>> >> On Sun, Jun 28, 2015 at 2:13 PM, Frédéric THOMAS <
>> webdoublefx@hotmail.com>
>> >> wrote:
>> >>
>> >>>> All I meant is that 75% of the time we would just want to save
>> things in
>> >>>> the model or a reference, such that you use addImport() during the
>> >>>> resolution. Then it keeps the emit() phase straight burn rubber and
>> loop
>> >>>> through all existing model structures, where imports would be just a
>> list
>> >>>> that emitImport() iterates through, no logic.
>> >>>
>> >>> Got it !
>> >>>
>> >>>> I AM NOT saying what you did was wrong, I am just offering a look
>> into
>> >>> how
>> >>>> I set it up. You know how I got this pattern? From my massive
>> mistakes in
>> >>>> code generators of past. :) I realized that an emit phase needs to be
>> >>>> stupid and not dependent on any type of intelligence, just needs to
>> >>> create
>> >>>> what already exists.
>> >>>
>> >>> I'm in a phase where I'm learning compiler things and indeed I will do
>> >>> some mistakes
>> >>> or I won't be as precise as you who have experience on it.
>> >>> Therefore I can accept critics and learn from your explanations :-)
>> >>>
>> >>>> This can also solve many problems at once. So I haven't got back
>> into the
>> >>>> code BUT my intuition says we need a universal solution for any type
>> of
>> >>>> TYPE that is attached to a member, identifier such as a param type,
>> >>> return
>> >>>> type, filed type, superclass and interface(already taken care of
>> using
>> >>>> addImport()).
>> >>>>
>> >>>> See where I am coming from? We know that every type is eventually
>> going
>> >>> to
>> >>>> need to be scanned for imports and validated.
>> >>>
>> >>> Yes, actually, I was expecting to see a specific pass for that.
>> >>>
>> >>>> Dude, I just don't want to come off bossy or condescending, I love
>> you
>> >>>> help. A lot can be added to this compiler that could be very
>> interesting.
>> >>>> So having you understand my design intention is really important to
>> me.
>> >>> :)
>> >>>
>> >>> Don't worry, I don't think you are bossy or condescending Mike, I'm
>> >>> reading you
>> >>> and try to put in parallel the new informations you give and what I've
>> >>> seen in the code
>> >>> for a better understanding, that's it.
>> >>>
>> >>> Cheers,
>> >>> Frédéric THOMAS
>> >>>
>> >>>
>> >>> ----------------------------------------
>> >>>> Date: Sun, 28 Jun 2015 13:48:02 -0400
>> >>>> Subject: Re: [Externs] jasmine-2.0.js
>> >>>> From: teotigraphixllc@gmail.com
>> >>>> To: dev@flex.apache.org
>> >>>>
>> >>>> Fred you did an awesome job. :)
>> >>>>
>> >>>> All I meant is that 75% of the time we would just want to save
>> things in
>> >>>> the model or a reference, such that you use addImport() during the
>> >>>> resolution. Then it keeps the emit() phase straight burn rubber and
>> loop
>> >>>> through all existing model structures, where imports would be just a
>> list
>> >>>> that emitImport() iterates through, no logic.
>> >>>>
>> >>>> I AM NOT saying what you did was wrong, I am just offering a look
>> into
>> >>> how
>> >>>> I set it up. You know how I got this pattern? From my massive
>> mistakes in
>> >>>> code generators of past. :) I realized that an emit phase needs to be
>> >>>> stupid and not dependent on any type of intelligence, just needs to
>> >>> create
>> >>>> what already exists.
>> >>>>
>> >>>> This can also solve many problems at once. So I haven't got back
>> into the
>> >>>> code BUT my intuition says we need a universal solution for any type
>> of
>> >>>> TYPE that is attached to a member, identifier such as a param type,
>> >>> return
>> >>>> type, filed type, superclass and interface(already taken care of
>> using
>> >>>> addImport()).
>> >>>>
>> >>>> See where I am coming from? We know that every type is eventually
>> going
>> >>> to
>> >>>> need to be scanned for imports and validated.
>> >>>>
>> >>>> Dude, I just don't want to come off bossy or condescending, I love
>> you
>> >>>> help. A lot can be added to this compiler that could be very
>> interesting.
>> >>>> So having you understand my design intention is really important to
>> me.
>> >>> :)
>> >>>>
>> >>>> Mike
>> >>>>
>> >>>>
>> >>>>
>> >>>>
>> >>>> On Sun, Jun 28, 2015 at 1:37 PM, Frédéric THOMAS <
>> >>> webdoublefx@hotmail.com>
>> >>>> wrote:
>> >>>>
>> >>>>>> Fred pretty much iterated things correctly.
>> >>>>>>
>> >>>>>> The ResolvePackageNamePass I haven't to get back to. I was in the
>> >>> middle
>> >>>>> of
>> >>>>>> implementing something when I got it to work in another place.
>> >>>>>>
>> >>>>>> There is a pattern to how things are parsed so most of the time
>> it's
>> >>>>> better
>> >>>>>> to set state as nodes/references are being added to the model. In
>> the
>> >>>>> case
>> >>>>>> of imports, I don't see any problems right now with checking
>> during the
>> >>>>>> emit phase but, if the model was more interactive during the
>> session,
>> >>>>> this
>> >>>>>> type of logic should happen during the resolve phase so the model
>> with
>> >>>>> it's
>> >>>>>> references has a correct state if there is any logic happening
>> between
>> >>>>> two
>> >>>>>> references.
>> >>>>>
>> >>>>> Thanks for the explanation, I will take the time to do some debug
>> spins
>> >>> to
>> >>>>> understand
>> >>>>> when the phases are called, what they do and what classes are
>> involved.
>> >>>>> Given it is a fairly small transpiler and despite the recursive
>> visitor
>> >>>>> pattern, I guess I can do it.
>> >>>>>
>> >>>>>> How much are you working on right now Fred? I just ask because I
>> don't
>> >>>>> want
>> >>>>>> to create any conflicts.
>> >>>>>
>> >>>>> Go ahead Mike, I'm done with that at the moment, I did my last
>> cleanup
>> >>>>> already.
>> >>>>> Anyway, better I work on a branch and commit the branch instead for
>> >>> review
>> >>>>> next time.
>> >>>>>
>> >>>>> Frédéric THOMAS
>> >>>>>
>> >>>>>
>> >>>>> ----------------------------------------
>> >>>>>> Date: Sun, 28 Jun 2015 13:23:15 -0400
>> >>>>>> Subject: Re: [Externs] jasmine-2.0.js
>> >>>>>> From: teotigraphixllc@gmail.com
>> >>>>>> To: dev@flex.apache.org
>> >>>>>>
>> >>>>>> Fred pretty much iterated things correctly.
>> >>>>>>
>> >>>>>> The ResolvePackageNamePass I haven't to get back to. I was in the
>> >>> middle
>> >>>>> of
>> >>>>>> implementing something when I got it to work in another place.
>> >>>>>>
>> >>>>>> There is a pattern to how things are parsed so most of the time
>> it's
>> >>>>> better
>> >>>>>> to set state as nodes/references are being added to the model. In
>> the
>> >>>>> case
>> >>>>>> of imports, I don't see any problems right now with checking
>> during the
>> >>>>>> emit phase but, if the model was more interactive during the
>> session,
>> >>>>> this
>> >>>>>> type of logic should happen during the resolve phase so the model
>> with
>> >>>>> it's
>> >>>>>> references has a correct state if there is any logic happening
>> between
>> >>>>> two
>> >>>>>> references.
>> >>>>>>
>> >>>>>> How much are you working on right now Fred? I just ask because I
>> don't
>> >>>>> want
>> >>>>>> to create any conflicts.
>> >>>>>>
>> >>>>>> Mike
>> >>>>>> .
>> >>>>>>
>> >>>>>> On Sat, Jun 27, 2015 at 5:58 PM, Michael Schmalle <
>> >>>>> teotigraphixllc@gmail.com
>> >>>>>>> wrote:
>> >>>>>>
>> >>>>>>> Hey Fred, I was out all day. I will have some time in the morning
>> to
>> >>>>> look
>> >>>>>>> at what you did and comment. :)
>> >>>>>>>
>> >>>>>>> Mike
>> >>>>>>>
>> >>>>>>> On Sat, Jun 27, 2015 at 5:27 PM, Frédéric THOMAS <
>> >>>>> webdoublefx@hotmail.com>
>> >>>>>>> wrote:
>> >>>>>>>
>> >>>>>>>> Just to explain what I did, especially to folks who would like
>> to get
>> >>>>>>>> their hand dirty on the compiler but like me, don't know how it
>> works
>> >>>>> :-)
>> >>>>>>>>
>> >>>>>>>> I was adding jasmine-2.0.js [1], a file that contains only jsDoc
>> >>>>>>>> (parameters and return type descriptions) and declarations, no
>> >>>>>>>> implementations.
>> >>>>>>>> When I say "adding jasmine-2.0.js" I mean, transpile this .js
>> file to
>> >>>>> .as
>> >>>>>>>> and then compile it to a .swc.
>> >>>>>>>>
>> >>>>>>>> The transpilation part is done by EXTERNC
>> >>>>>>>>
>> >>>>>>>> You call it like that:
>> >>>>>>>>
>> >>>>>>>> <java jar="${basedir}/compiler.jx/lib/externc.jar" fork="true"
>> >>>>>>>> failonerror="false">
>> >>>>>>>> <arg value="+flexlib=${env.ASJS_HOME}/frameworks" />
>> >>>>>>>> <arg value="-debug" />
>> >>>>>>>> <arg
>> >>>>>>>>
>> >>>>>
>> >>>
>> value="-load-config=${basedir}/externs/jasmine/jasmine-compile-config.xml"
>> >>>>>>>> />
>> >>>>>>>>
>> >>>>>>>> In the jasmine-compile-config.xml, you can exclude classes and
>> >>> member,
>> >>>>>>>> for example, in the jasmine.Spec class, I excluded the variable
>> >>>>> $injector
>> >>>>>>>> as its type was coming from the Angular library that is not yet
>> >>>>> transpiled.
>> >>>>>>>>
>> >>>>>>>> <field-exclude>
>> >>>>>>>> <class>jasmine.Spec</class>
>> >>>>>>>> <field>$injector</field>
>> >>>>>>>> </field-exclude>
>> >>>>>>>>
>> >>>>>>>> You can also exclude classes and functions.
>> >>>>>>>>
>> >>>>>>>> The compile part is done by the falcon compc as follow:
>> >>>>>>>>
>> >>>>>>>> <java
>> >>> jar="${basedir}/compiler/generated/dist/sdk/lib/falcon-compc.jar"
>> >>>>>>>> fork="true"
>> >>>>>>>> failonerror="true">
>> >>>>>>>> <arg value="+flexlib=${env.ASJS_HOME}/frameworks" />
>> >>>>>>>> <arg value="-debug" />
>> >>>>>>>> <arg
>> >>>>>>>>
>> value="-load-config=${basedir}/externs/jasmine/compile-config.xml" />
>> >>>>>>>> <arg
>> >>>>>>>>
>> value="-output=${basedir}/externs/jasmine/out/bin/jasmine-2.0.swc" />
>> >>>>>>>> </java>
>> >>>>>>>>
>> >>>>>>>> The problem was that this last part was failing with an NPE a
>> Type of
>> >>>>>>>> something:
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>
>> >>>
>> org.apache.flex.compiler.internal.scopes.TypeScope.getPropertyForMemberAccess(TypeScope.java:344)
>> >>>>>>>>
>> >>>>>>>> Even looking closely at the code, I didn't get why it was
>> failing but
>> >>>>> for
>> >>>>>>>> sure, because it was trying to compile one of the transpiled .as
>> >>> file,
>> >>>>> this
>> >>>>>>>> transpiled code was wrong.
>> >>>>>>>> Looking at those .as, it was easy to see that some import were
>> >>> missing.
>> >>>>>>>>
>> >>>>>>>> So, why the 2 others externs (js and jquery) had no issues ?
>> >>>>>>>> It is always surprising to see something working on all the
>> things
>> >>>>> except
>> >>>>>>>> of yours, but it can help you too :-)
>> >>>>>>>>
>> >>>>>>>> So, I've been looking at those other transpiled .as files from
>> >>> existing
>> >>>>>>>> externs to see if they had imports and they were some.
>> >>>>>>>> I then created a mini jasmine.js containing only the faulty case
>> >>> only,
>> >>>>>>>> that, from what I've been able to determinate, was that the
>> import
>> >>> was
>> >>>>> not
>> >>>>>>>> generated when a static function had a return type of a class
>> created
>> >>>>> via a
>> >>>>>>>> function constructor, so, I filled this mini jasmine.js with the
>> >>>>> equivalent
>> >>>>>>>> of a static function like this:
>> >>>>>>>>
>> >>>>>>>> /**
>> >>>>>>>> * @return {!jasmine.Clock}
>> >>>>>>>> */
>> >>>>>>>> jasmine.clock = function() {};
>> >>>>>>>>
>> >>>>>>>> Which should transpile in AS3, something like:
>> >>>>>>>>
>> >>>>>>>> import jasmine.Clock;
>> >>>>>>>> public static function clock():Clock {}
>> >>>>>>>>
>> >>>>>>>> and a function constructor like this:
>> >>>>>>>>
>> >>>>>>>> /** @constructor */
>> >>>>>>>> jasmine.Clock = function() {};
>> >>>>>>>>
>> >>>>>>>> which transpile:
>> >>>>>>>>
>> >>>>>>>> package jasmine {
>> >>>>>>>> public class Clock {}
>> >>>>>>>> }
>> >>>>>>>>
>> >>>>>>>> Created a test class based on those Mike created for the previous
>> >>>>> externs
>> >>>>>>>> doing:
>> >>>>>>>>
>> >>>>>>>> // jasmine, the main jasmine class.
>> >>>>>>>> ClassReference jasmine = model.getClassReference("jasmine");
>> >>>>>>>> assertNotNull(jasmine);
>> >>>>>>>>
>> >>>>>>>> assertTrue(jasmine.hasImport("jasmine.Clock"));
>> >>>>>>>>
>> >>>>>>>> The hasImport method didn't exist on ClassReference but it was a
>> >>>>>>>> addImport(), I follow to where it was called in
>> ResolvePackagesPass
>> >>>>> hoping
>> >>>>>>>> to find a missing case but after debug spin I wasn't able to do
>> what
>> >>> I
>> >>>>>>>> expected, I'm not sure I understood all the logic in this class
>> but
>> >>> it
>> >>>>>>>> looked like the Node of my return type was never visited and
>> >>> therefore
>> >>>>>>>> wasn't able to add my import here.
>> >>>>>>>>
>> >>>>>>>> But wait, in the ClassReference, I have a
>> >>>>>>>>
>> >>>>>>>> public MethodReference addMethod(Node node, String functionName,
>> >>>>>>>> JSDocInfo comment, boolean isStatic)
>> >>>>>>>>
>> >>>>>>>> To me it would be enough to add the import to the list of
>> imports to
>> >>> be
>> >>>>>>>> emitted when the MethodReference is to be added, I just had to
>> >>>>> determinate
>> >>>>>>>> if the return type given in the jsDoc was not from the current
>> >>>>> package, the
>> >>>>>>>> given method not excluded, the given return type neither !
>> >>>>>>>>
>> >>>>>>>> My test was passing was I was able to compile with this new code
>> the
>> >>>>> old
>> >>>>>>>> externs.
>> >>>>>>>>
>> >>>>>>>> The only thing I had to do to finish to compile the jasmine
>> extern
>> >>> was
>> >>>>> to
>> >>>>>>>> emit the imports for the global functions too as they shown to be
>> >>>>> faulty
>> >>>>>>>> for the same reasons.
>> >>>>>>>>
>> >>>>>>>> Mike will probably tell me now where my logic was wrong now :-)
>> >>>>>>>>
>> >>>>>>>> Frédéric THOMAS
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>> ----------------------------------------
>> >>>>>>>>> From: webdoublefx@hotmail.com
>> >>>>>>>>> To: dev@flex.apache.org
>> >>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>> >>>>>>>>> Date: Sat, 27 Jun 2015 20:43:43 +0100
>> >>>>>>>>>
>> >>>>>>>>> Ok, done !
>> >>>>>>>>>
>> >>>>>>>>> I forgot to uncomment the externc build of jasmine and print the
>> >>>>> global
>> >>>>>>>> function imports !
>> >>>>>>>>>
>> >>>>>>>>> Frédéric THOMAS
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> ----------------------------------------
>> >>>>>>>>>> From: webdoublefx@hotmail.com
>> >>>>>>>>>> To: dev@flex.apache.org
>> >>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>> >>>>>>>>>> Date: Sat, 27 Jun 2015 20:12:16 +0100
>> >>>>>>>>>>
>> >>>>>>>>>>> I pushed the changes which are ready to be reviewed.
>> >>>>>>>>>>
>> >>>>>>>>>> oups, hold on, I had some things commented that hidden other
>> >>>>> problems,
>> >>>>>>>> I will continue on it.
>> >>>>>>>>>>
>> >>>>>>>>>> Frédéric THOMAS
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>> ----------------------------------------
>> >>>>>>>>>>> From: webdoublefx@hotmail.com
>> >>>>>>>>>>> To: dev@flex.apache.org
>> >>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>> >>>>>>>>>>> Date: Sat, 27 Jun 2015 18:31:32 +0100
>> >>>>>>>>>>>
>> >>>>>>>>>>> Hi Mike,
>> >>>>>>>>>>>
>> >>>>>>>>>>> I pushed the changes which are ready to be reviewed.
>> >>>>>>>>>>>
>> >>>>>>>>>>> Note: The jasmine-2.0.js is not committed as it should be
>> >>> downloaded
>> >>>>>>>> with the unpack-externs target of the download.xml, I followed
>> the
>> >>>>> model.
>> >>>>>>>>>>>
>> >>>>>>>>>>> Thanks,
>> >>>>>>>>>>> Frédéric THOMAS
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> ----------------------------------------
>> >>>>>>>>>>>> Date: Sat, 27 Jun 2015 05:31:50 -0400
>> >>>>>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
>> >>>>>>>>>>>> From: teotigraphixllc@gmail.com
>> >>>>>>>>>>>> To: dev@flex.apache.org
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> I just noticed you said today or tomorrow, whatever man.
>> doesn't
>> >>>>>>>> matter.
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> Mike
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> On Sat, Jun 27, 2015 at 5:17 AM, Michael Schmalle <
>> >>>>>>>> teotigraphixllc@gmail.com
>> >>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>
>> >>>>>>>>>>>>> Well its the practice. I know the pattern I am using so if I
>> >>> have
>> >>>>> to
>> >>>>>>>>>>>>> adjust it to fit I will. You can tell that with AST type
>> stuff,
>> >>> it
>> >>>>>>>> has to
>> >>>>>>>>>>>>> follow a specific pattern or everything turns to crap when
>> >>> trying
>> >>>>>>>> to add
>> >>>>>>>>>>>>> stuff down the road.
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> Commit it sooner than later as I have a couple hours to
>> check it
>> >>>>>>>> out this
>> >>>>>>>>>>>>> morning.
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> Mike
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> On Sat, Jun 27, 2015 at 3:15 AM, Frédéric THOMAS <
>> >>>>>>>> webdoublefx@hotmail.com>
>> >>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>> Hi Mike,
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> I can now compile jasmine, I'm not sure my fix is very
>> clean
>> >>> but
>> >>>>> it
>> >>>>>>>>>>>>>> works, I've been able to compile all the externs with.
>> >>>>>>>>>>>>>> I will commit it later today or tomorrow as I need to
>> clean a
>> >>> bit
>> >>>>>>>> before
>> >>>>>>>>>>>>>> and it would be nice if you can review it.
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> Thanks,
>> >>>>>>>>>>>>>> Frédéric THOMAS
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> ----------------------------------------
>> >>>>>>>>>>>>>>> From: webdoublefx@hotmail.com
>> >>>>>>>>>>>>>>> To: dev@flex.apache.org
>> >>>>>>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>> >>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 22:43:30 +0100
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> Hey Mike, it looks like "import jasmine.Clock;" is
>> missing in
>> >>>>> the
>> >>>>>>>>>>>>>> generated jasmine.as, that's it !
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> Frédéric THOMAS
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> ----------------------------------------
>> >>>>>>>>>>>>>>>> From: webdoublefx@hotmail.com
>> >>>>>>>>>>>>>>>> To: dev@flex.apache.org
>> >>>>>>>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>> >>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 22:26:32 +0100
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> HAHA, ah that is a hard one man, thanks for the offer
>> but I
>> >>>>>>>> think I am
>> >>>>>>>>>>>>>>>>> going to need to get this one. There are a couple
>> places it
>> >>>>>>>> could be
>> >>>>>>>>>>>>>> though
>> >>>>>>>>>>>>>>>>> if you are curious.
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> First you really need to understand the problem, I am
>> typing
>> >>>>>>>> this
>> >>>>>>>>>>>>>> stuff in
>> >>>>>>>>>>>>>>>>> between installing a bathroom vanity and sink, so I
>> haven't
>> >>>>>>>> looked at
>> >>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>> code yet. :)
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> So I can't really give you an answer since I don't quite
>> >>> know
>> >>>>>>>> the
>> >>>>>>>>>>>>>> problem
>> >>>>>>>>>>>>>>>>> yet.
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> Ok, I will check your solution :-)
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> Frédéric THOMAS
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> ----------------------------------------
>> >>>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 16:59:58 -0400
>> >>>>>>>>>>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
>> >>>>>>>>>>>>>>>>> From: teotigraphixllc@gmail.com
>> >>>>>>>>>>>>>>>>> To: dev@flex.apache.org
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> On Fri, Jun 26, 2015 at 4:39 PM, Frédéric THOMAS <
>> >>>>>>>>>>>>>> webdoublefx@hotmail.com>
>> >>>>>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> Yeah, this "jasmine.Clock"
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> The error means that the Falcon compiler is trying to
>> >>>>> resolve
>> >>>>>>>> a
>> >>>>>>>>>>>>>> member
>> >>>>>>>>>>>>>>>>>>> expression and it can't resolve it.
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> So this means there is a bug in the AST resolver. You
>> are
>> >>>>>>>> using the
>> >>>>>>>>>>>>>>>>>> extern
>> >>>>>>>>>>>>>>>>>>> in the GCC project correct?
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> Yes,
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>
>> >>>>>
>> >>>
>> https://raw.githubusercontent.com/google/closure-compiler/master/contrib/externs/jasmine-2.0.js
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> If so, I need to take a look at it.
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> Everyone, I did one pass and tests on packages and
>> class
>> >>>>>>>> creation,
>> >>>>>>>>>>>>>> so
>> >>>>>>>>>>>>>>>>>> these
>> >>>>>>>>>>>>>>>>>>> types of bugs are to be expected as the AST/Type
>> resolver
>> >>> is
>> >>>>>>>>>>>>>> "asked" to
>> >>>>>>>>>>>>>>>>>> do
>> >>>>>>>>>>>>>>>>>>> more work then my initial implementation.
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> Make sense?
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> Well, kind of :-)
>> >>>>>>>>>>>>>>>>>> What classes would you check for this ?
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> HAHA, ah that is a hard one man, thanks for the offer
>> but I
>> >>>>>>>> think I am
>> >>>>>>>>>>>>>>>>> going to need to get this one. There are a couple
>> places it
>> >>>>>>>> could be
>> >>>>>>>>>>>>>> though
>> >>>>>>>>>>>>>>>>> if you are curious.
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> First you really need to understand the problem, I am
>> typing
>> >>>>>>>> this
>> >>>>>>>>>>>>>> stuff in
>> >>>>>>>>>>>>>>>>> between installing a bathroom vanity and sink, so I
>> haven't
>> >>>>>>>> looked at
>> >>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>> code yet. :)
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> So I can't really give you an answer since I don't quite
>> >>> know
>> >>>>>>>> the
>> >>>>>>>>>>>>>> problem
>> >>>>>>>>>>>>>>>>> yet.
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> Mike
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> Thanks,
>> >>>>>>>>>>>>>>>>>> Frédéric THOMAS
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> ----------------------------------------
>> >>>>>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 16:32:16 -0400
>> >>>>>>>>>>>>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
>> >>>>>>>>>>>>>>>>>>> From: teotigraphixllc@gmail.com
>> >>>>>>>>>>>>>>>>>>> To: dev@flex.apache.org
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> Yeah, this "jasmine.Clock"
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> The error means that the Falcon compiler is trying to
>> >>>>> resolve
>> >>>>>>>> a
>> >>>>>>>>>>>>>> member
>> >>>>>>>>>>>>>>>>>>> expression and it can't resolve it.
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> So this means there is a bug in the AST resolver. You
>> are
>> >>>>>>>> using the
>> >>>>>>>>>>>>>>>>>> extern
>> >>>>>>>>>>>>>>>>>>> in the GCC project correct?
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> If so, I need to take a look at it.
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> Everyone, I did one pass and tests on packages and
>> class
>> >>>>>>>> creation,
>> >>>>>>>>>>>>>> so
>> >>>>>>>>>>>>>>>>>> these
>> >>>>>>>>>>>>>>>>>>> types of bugs are to be expected as the AST/Type
>> resolver
>> >>> is
>> >>>>>>>>>>>>>> "asked" to
>> >>>>>>>>>>>>>>>>>> do
>> >>>>>>>>>>>>>>>>>>> more work then my initial implementation.
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> Make sense?
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> Mike
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> On Fri, Jun 26, 2015 at 3:27 PM, Frédéric THOMAS <
>> >>>>>>>>>>>>>>>>>> webdoublefx@hotmail.com>
>> >>>>>>>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> Hi Mike,
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> Any idea why ?
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>> U:\sources\asf\flex\falcon\externs\jasmine\out\as\classes\
>> >>>>>>>>>>>>>> jasmine.as:26
>> >>>>>>>>>>>>>>>>>>>> Erreur interne : java.lang.NullPointerException
>> >>>>>>>>>>>>>>>>>>>> at
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>
>> >>>>>
>> >>>
>> org.apache.flex.compiler.internal.scopes.TypeScope.getPropertyForMemberAccess(TypeScope.java:344)
>> >>>>>>>>>>>>>>>>>>>> at
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>
>> >>>>>
>> >>>
>> org.apache.flex.compiler.internal.scopes.ScopeView.getPropertyForMemberAccess(ScopeView.java:81)
>> >>>>>>>>>>>>>>>>>>>> at
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>
>> >>>>>
>> >>>
>> org.apache.flex.compiler.internal.scopes.ASScope.getPropertyFromDef(ASScope.java:879)
>> >>>>>>>>>>>>>>>>>>>> at
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>
>> >>>>>
>> >>>
>> org.apache.flex.compiler.internal.scopes.ASScope.getPropertyFromDef(ASScope.java:841)
>> >>>>>>>>>>>>>>>>>>>> at
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>
>> >>>>>
>> >>>
>> org.apache.flex.compiler.internal.scopes.ASScope.getPropertyFromDef(ASScope.java:760)
>> >>>>>>>>>>>>>>>>>>>> at
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>
>> >>>>>
>> >>>
>> org.apache.flex.compiler.internal.tree.as.IdentifierNode.resolveMemberRef(IdentifierNode.java:829)
>> >>>>>>>>>>>>>>>>>>>> at
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>
>> >>>>>
>> >>>
>> org.apache.flex.compiler.internal.tree.as.IdentifierNode.resolve(IdentifierNode.java:377)
>> >>>>>>>>>>>>>>>>>>>> at
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>
>> >>>>>
>> >>>
>> org.apache.flex.compiler.internal.tree.as.IdentifierNode.getMName(IdentifierNode.java:432)
>> >>>>>>>>>>>>>>>>>>>> at
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>
>> >>>>>
>> >>>
>> org.apache.flex.compiler.internal.tree.as.MemberAccessExpressionNode.getMName(MemberAccessExpressionNode.java:158)
>> >>>>>>>>>>>>>>>>>>>> at
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>
>> >>>>>
>> >>>
>> org.apache.flex.compiler.internal.as.codegen.ABCGeneratingReducer.dottedName(ABCGeneratingReducer.java:840)
>> >>>>>>>>>>>>>>>>>>>> at
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>
>> >>>>>
>> >>>
>> org.apache.flex.compiler.internal.as.codegen.CmcEmitter.action_321(CmcEmitter.java:5236)
>> >>>>>>>>>>>>>>>>>>>> ...
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> public static function clock():jasmine.Clock { return
>> >>>>> null; }
>> >>>>>>>>>>>>>>>>>>>> ^
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> -----------------------------
>> >>>>>>>>>>>>>>>>>>>> In the jasmine extern file
>> >>>>>>>>>>>>>>>>>>>> -----------------------------
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> /**
>> >>>>>>>>>>>>>>>>>>>> * @return {!jasmine.Clock}
>> >>>>>>>>>>>>>>>>>>>> */
>> >>>>>>>>>>>>>>>>>>>> jasmine.clock = function() {};
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> /** @constructor */
>> >>>>>>>>>>>>>>>>>>>> jasmine.Clock = function() {};
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> /** */
>> >>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.install = function() {};
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> /** */
>> >>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.uninstall = function() {};
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> /** @param {number} ms */
>> >>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.tick = function(ms) {};
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> /** @param {!Date} date */
>> >>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.mockDate = function(date) {};
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> -----------------------------
>> >>>>>>>>>>>>>>>>>>>> In jasmine.as
>> >>>>>>>>>>>>>>>>>>>> -----------------------------
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> /**
>> >>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>> >>>>>>>>>>>>>>>>>>>> * @returns {jasmine.Clock}
>> >>>>>>>>>>>>>>>>>>>> */
>> >>>>>>>>>>>>>>>>>>>> public static function clock():jasmine.Clock { return
>> >>>>> null; }
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> -----------------------------
>> >>>>>>>>>>>>>>>>>>>> clock.as
>> >>>>>>>>>>>>>>>>>>>> -----------------------------
>> >>>>>>>>>>>>>>>>>>>> package jasmine {
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> /**
>> >>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>> >>>>>>>>>>>>>>>>>>>> */
>> >>>>>>>>>>>>>>>>>>>> public class Clock {
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> /**
>> >>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>> >>>>>>>>>>>>>>>>>>>> */
>> >>>>>>>>>>>>>>>>>>>> public function Clock() {
>> >>>>>>>>>>>>>>>>>>>> super();
>> >>>>>>>>>>>>>>>>>>>> }
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> /**
>> >>>>>>>>>>>>>>>>>>>> * Generated doc for missing method JSDoc.
>> >>>>>>>>>>>>>>>>>>>> *
>> >>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>> >>>>>>>>>>>>>>>>>>>> */
>> >>>>>>>>>>>>>>>>>>>> public function install():void { }
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> /**
>> >>>>>>>>>>>>>>>>>>>> * @param ms [number]
>> >>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>> >>>>>>>>>>>>>>>>>>>> */
>> >>>>>>>>>>>>>>>>>>>> public function tick(ms:Number):void { }
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> /**
>> >>>>>>>>>>>>>>>>>>>> * Generated doc for missing method JSDoc.
>> >>>>>>>>>>>>>>>>>>>> *
>> >>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>> >>>>>>>>>>>>>>>>>>>> */
>> >>>>>>>>>>>>>>>>>>>> public function uninstall():void { }
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> /**
>> >>>>>>>>>>>>>>>>>>>> * @param date [Date]
>> >>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>> >>>>>>>>>>>>>>>>>>>> */
>> >>>>>>>>>>>>>>>>>>>> public function mockDate(date:Date):void { }
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> }
>> >>>>>>>>>>>>>>>>>>>> }
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> Thanks,
>> >>>>>>>>>>>>>>>>>>>> Frédéric THOMAS
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>>>
>> >>>
>> >>>
>> >
>>
>>
>

RE: [Externs] jasmine-2.0.js

Posted by Frédéric THOMAS <we...@hotmail.com>.
I guess I'm good, you can checkout add-CollectImportPass if you like to review it.

Thanks,
Frédéric THOMAS


----------------------------------------
> From: webdoublefx@hotmail.com
> To: dev@flex.apache.org
> Subject: RE: [Externs] jasmine-2.0.js
> Date: Tue, 7 Jul 2015 02:44:54 +0100
>
>> It's because ? means OR NULL in externs. We are using the annotation
>> resolver which passes back implicit meaning, so it's not saying it's
>> optional it's saying it CAN be null, but something MUST be passed.
>
> Thanks for the precision, actually, I forgot to check the constructors in more :P
> So, better I finish to write the tests, manage the UnionType, etc.. and come back to you.
>
> Happy painting ! ;-)
> Frédéric THOMAS
>
>
> ----------------------------------------
>> Date: Mon, 6 Jul 2015 18:48:03 -0400
>> Subject: Re: [Externs] jasmine-2.0.js
>> From: teotigraphixllc@gmail.com
>> To: dev@flex.apache.org
>>
>> On Mon, Jul 6, 2015 at 11:44 AM, Frédéric THOMAS <we...@hotmail.com>
>> wrote:
>>
>>> Also I'm trying to write tests for this pass and I've got something that
>>> doesn't pass, why the "bar" parameter is consider as optional in the
>>> collectImport.CollectImports constructor ?
>>> see the emmitted "@param bar [(foo.Bar|null)] ", why not "@param bar
>>> {foo.Bar} " ?
>>>
>>
>>
>> It's because ? means OR NULL in externs. We are using the annotation
>> resolver which passes back implicit meaning, so it's not saying it's
>> optional it's saying it CAN be null, but something MUST be passed.
>>
>> So anything that is;
>>
>> @param bar {foo.Bar}
>>
>> is actually
>>
>> @param bar {foo.Bar?}
>>
>> If you use !, it means it cannot be null, a value must be passed that is
>> not null.
>>
>> Mike
>>
>>
>>>
>>> /**
>>> * @constructor
>>> * @extends {superClasses.Import}
>>> * @param {foo.Bar} bar
>>> * @param {number} value
>>> */
>>> collectImport.CollectImports = function(bar, value) {};
>>>
>>> EMMITTED TO:
>>>
>>> package collectImport {
>>>
>>> import superClasses.Import;
>>>
>>> /**
>>> * @see [collect_import]
>>> */
>>> public class CollectImports extends superClasses.Import {
>>>
>>> /**
>>> * @param bar [(foo.Bar|null)]
>>> * @param value [number]
>>> * @see [collect_import]
>>> */
>>> public function CollectImports(bar:foo.Bar, value:Number) {
>>> super();
>>> }
>>>
>>> Thanks,
>>> Frédéric THOMAS
>>>
>>>
>>> ----------------------------------------
>>>> From: webdoublefx@hotmail.com
>>>> To: dev@flex.apache.org
>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>> Date: Mon, 6 Jul 2015 00:18:10 +0100
>>>>
>>>>> I am going to be busy most of the week remodeling my mother in laws
>>>>> bathroom starting tomorrow. So if you want to try a new custom pass like
>>>>> ResolveImportPass, go for it, I will just stay out of the way. I think
>>> it
>>>>> would be good for you. :) If not, no worries, you gave me the idea. haha
>>>>>
>>>>> If you did, look at it like this, since all imports and logic therin are
>>>>> totally dependent on what the compiler actual saves into the model,
>>> logic
>>>>> says this needs to be the last or one of the last passes, from my
>>>>> perspective, it needs to be the last.
>>>>>
>>>>> If you make it the last, then this pass is not coupled to us fixing bugs
>>>>> ahead of it. Say we find out we need to add another structure of AST
>>>>> parsing for a node structure I havn't implemented yet, well we are safe.
>>>>>
>>>>> Why safe? Because in this import pass, you are using the MODEL, so no
>>> AST.
>>>>> Instead of worrying about resolving imports during AST traversal, you
>>> are
>>>>> using what is already in the container after all that complex parsing is
>>>>> finished.
>>>>>
>>>>> So this pass, you would use your skills at knowing "what" in each
>>> subclass
>>>>> of BaseReference could contain a type. Then write your logic pass to
>>>>> traverse Classes, then into each classes members, then loop through each
>>>>> member and analyze their types and do your import testing logic there.
>>>>>
>>>>> Once you find instances of imports that need to be saves, your current
>>>>> context is already the ClassReference, so call classRef.addImport(). :)
>>>>
>>>>
>>>> You can review the add-CollectImportPass branch before I merge it when
>>> you have a chance.
>>>> Thanks,
>>>> Frédéric THOMAS
>>>>
>>>>
>>>> ----------------------------------------
>>>>> Date: Sun, 28 Jun 2015 14:23:57 -0400
>>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>>> From: teotigraphixllc@gmail.com
>>>>> To: dev@flex.apache.org
>>>>>
>>>>> Kewl.
>>>>>
>>>>> I am going to be busy most of the week remodeling my mother in laws
>>>>> bathroom starting tomorrow. So if you want to try a new custom pass like
>>>>> ResolveImportPass, go for it, I will just stay out of the way. I think
>>> it
>>>>> would be good for you. :) If not, no worries, you gave me the idea. haha
>>>>>
>>>>> If you did, look at it like this, since all imports and logic therin are
>>>>> totally dependent on what the compiler actual saves into the model,
>>> logic
>>>>> says this needs to be the last or one of the last passes, from my
>>>>> perspective, it needs to be the last.
>>>>>
>>>>> If you make it the last, then this pass is not coupled to us fixing bugs
>>>>> ahead of it. Say we find out we need to add another structure of AST
>>>>> parsing for a node structure I havn't implemented yet, well we are safe.
>>>>>
>>>>> Why safe? Because in this import pass, you are using the MODEL, so no
>>> AST.
>>>>> Instead of worrying about resolving imports during AST traversal, you
>>> are
>>>>> using what is already in the container after all that complex parsing is
>>>>> finished.
>>>>>
>>>>> So this pass, you would use your skills at knowing "what" in each
>>> subclass
>>>>> of BaseReference could contain a type. Then write your logic pass to
>>>>> traverse Classes, then into each classes members, then loop through each
>>>>> member and analyze their types and do your import testing logic there.
>>>>>
>>>>> Once you find instances of imports that need to be saves, your current
>>>>> context is already the ClassReference, so call classRef.addImport(). :)
>>>>>
>>>>> Mike
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Sun, Jun 28, 2015 at 2:13 PM, Frédéric THOMAS <
>>> webdoublefx@hotmail.com>
>>>>> wrote:
>>>>>
>>>>>>> All I meant is that 75% of the time we would just want to save things
>>> in
>>>>>>> the model or a reference, such that you use addImport() during the
>>>>>>> resolution. Then it keeps the emit() phase straight burn rubber and
>>> loop
>>>>>>> through all existing model structures, where imports would be just a
>>> list
>>>>>>> that emitImport() iterates through, no logic.
>>>>>>
>>>>>> Got it !
>>>>>>
>>>>>>> I AM NOT saying what you did was wrong, I am just offering a look into
>>>>>> how
>>>>>>> I set it up. You know how I got this pattern? From my massive
>>> mistakes in
>>>>>>> code generators of past. :) I realized that an emit phase needs to be
>>>>>>> stupid and not dependent on any type of intelligence, just needs to
>>>>>> create
>>>>>>> what already exists.
>>>>>>
>>>>>> I'm in a phase where I'm learning compiler things and indeed I will do
>>>>>> some mistakes
>>>>>> or I won't be as precise as you who have experience on it.
>>>>>> Therefore I can accept critics and learn from your explanations :-)
>>>>>>
>>>>>>> This can also solve many problems at once. So I haven't got back into
>>> the
>>>>>>> code BUT my intuition says we need a universal solution for any type
>>> of
>>>>>>> TYPE that is attached to a member, identifier such as a param type,
>>>>>> return
>>>>>>> type, filed type, superclass and interface(already taken care of using
>>>>>>> addImport()).
>>>>>>>
>>>>>>> See where I am coming from? We know that every type is eventually
>>> going
>>>>>> to
>>>>>>> need to be scanned for imports and validated.
>>>>>>
>>>>>> Yes, actually, I was expecting to see a specific pass for that.
>>>>>>
>>>>>>> Dude, I just don't want to come off bossy or condescending, I love you
>>>>>>> help. A lot can be added to this compiler that could be very
>>> interesting.
>>>>>>> So having you understand my design intention is really important to
>>> me.
>>>>>> :)
>>>>>>
>>>>>> Don't worry, I don't think you are bossy or condescending Mike, I'm
>>>>>> reading you
>>>>>> and try to put in parallel the new informations you give and what I've
>>>>>> seen in the code
>>>>>> for a better understanding, that's it.
>>>>>>
>>>>>> Cheers,
>>>>>> Frédéric THOMAS
>>>>>>
>>>>>>
>>>>>> ----------------------------------------
>>>>>>> Date: Sun, 28 Jun 2015 13:48:02 -0400
>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>>>>> From: teotigraphixllc@gmail.com
>>>>>>> To: dev@flex.apache.org
>>>>>>>
>>>>>>> Fred you did an awesome job. :)
>>>>>>>
>>>>>>> All I meant is that 75% of the time we would just want to save things
>>> in
>>>>>>> the model or a reference, such that you use addImport() during the
>>>>>>> resolution. Then it keeps the emit() phase straight burn rubber and
>>> loop
>>>>>>> through all existing model structures, where imports would be just a
>>> list
>>>>>>> that emitImport() iterates through, no logic.
>>>>>>>
>>>>>>> I AM NOT saying what you did was wrong, I am just offering a look into
>>>>>> how
>>>>>>> I set it up. You know how I got this pattern? From my massive
>>> mistakes in
>>>>>>> code generators of past. :) I realized that an emit phase needs to be
>>>>>>> stupid and not dependent on any type of intelligence, just needs to
>>>>>> create
>>>>>>> what already exists.
>>>>>>>
>>>>>>> This can also solve many problems at once. So I haven't got back into
>>> the
>>>>>>> code BUT my intuition says we need a universal solution for any type
>>> of
>>>>>>> TYPE that is attached to a member, identifier such as a param type,
>>>>>> return
>>>>>>> type, filed type, superclass and interface(already taken care of using
>>>>>>> addImport()).
>>>>>>>
>>>>>>> See where I am coming from? We know that every type is eventually
>>> going
>>>>>> to
>>>>>>> need to be scanned for imports and validated.
>>>>>>>
>>>>>>> Dude, I just don't want to come off bossy or condescending, I love you
>>>>>>> help. A lot can be added to this compiler that could be very
>>> interesting.
>>>>>>> So having you understand my design intention is really important to
>>> me.
>>>>>> :)
>>>>>>>
>>>>>>> Mike
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Sun, Jun 28, 2015 at 1:37 PM, Frédéric THOMAS <
>>>>>> webdoublefx@hotmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>>> Fred pretty much iterated things correctly.
>>>>>>>>>
>>>>>>>>> The ResolvePackageNamePass I haven't to get back to. I was in the
>>>>>> middle
>>>>>>>> of
>>>>>>>>> implementing something when I got it to work in another place.
>>>>>>>>>
>>>>>>>>> There is a pattern to how things are parsed so most of the time it's
>>>>>>>> better
>>>>>>>>> to set state as nodes/references are being added to the model. In
>>> the
>>>>>>>> case
>>>>>>>>> of imports, I don't see any problems right now with checking during
>>> the
>>>>>>>>> emit phase but, if the model was more interactive during the
>>> session,
>>>>>>>> this
>>>>>>>>> type of logic should happen during the resolve phase so the model
>>> with
>>>>>>>> it's
>>>>>>>>> references has a correct state if there is any logic happening
>>> between
>>>>>>>> two
>>>>>>>>> references.
>>>>>>>>
>>>>>>>> Thanks for the explanation, I will take the time to do some debug
>>> spins
>>>>>> to
>>>>>>>> understand
>>>>>>>> when the phases are called, what they do and what classes are
>>> involved.
>>>>>>>> Given it is a fairly small transpiler and despite the recursive
>>> visitor
>>>>>>>> pattern, I guess I can do it.
>>>>>>>>
>>>>>>>>> How much are you working on right now Fred? I just ask because I
>>> don't
>>>>>>>> want
>>>>>>>>> to create any conflicts.
>>>>>>>>
>>>>>>>> Go ahead Mike, I'm done with that at the moment, I did my last
>>> cleanup
>>>>>>>> already.
>>>>>>>> Anyway, better I work on a branch and commit the branch instead for
>>>>>> review
>>>>>>>> next time.
>>>>>>>>
>>>>>>>> Frédéric THOMAS
>>>>>>>>
>>>>>>>>
>>>>>>>> ----------------------------------------
>>>>>>>>> Date: Sun, 28 Jun 2015 13:23:15 -0400
>>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>>>>>>> From: teotigraphixllc@gmail.com
>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>
>>>>>>>>> Fred pretty much iterated things correctly.
>>>>>>>>>
>>>>>>>>> The ResolvePackageNamePass I haven't to get back to. I was in the
>>>>>> middle
>>>>>>>> of
>>>>>>>>> implementing something when I got it to work in another place.
>>>>>>>>>
>>>>>>>>> There is a pattern to how things are parsed so most of the time it's
>>>>>>>> better
>>>>>>>>> to set state as nodes/references are being added to the model. In
>>> the
>>>>>>>> case
>>>>>>>>> of imports, I don't see any problems right now with checking during
>>> the
>>>>>>>>> emit phase but, if the model was more interactive during the
>>> session,
>>>>>>>> this
>>>>>>>>> type of logic should happen during the resolve phase so the model
>>> with
>>>>>>>> it's
>>>>>>>>> references has a correct state if there is any logic happening
>>> between
>>>>>>>> two
>>>>>>>>> references.
>>>>>>>>>
>>>>>>>>> How much are you working on right now Fred? I just ask because I
>>> don't
>>>>>>>> want
>>>>>>>>> to create any conflicts.
>>>>>>>>>
>>>>>>>>> Mike
>>>>>>>>> .
>>>>>>>>>
>>>>>>>>> On Sat, Jun 27, 2015 at 5:58 PM, Michael Schmalle <
>>>>>>>> teotigraphixllc@gmail.com
>>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Hey Fred, I was out all day. I will have some time in the morning
>>> to
>>>>>>>> look
>>>>>>>>>> at what you did and comment. :)
>>>>>>>>>>
>>>>>>>>>> Mike
>>>>>>>>>>
>>>>>>>>>> On Sat, Jun 27, 2015 at 5:27 PM, Frédéric THOMAS <
>>>>>>>> webdoublefx@hotmail.com>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> Just to explain what I did, especially to folks who would like to
>>> get
>>>>>>>>>>> their hand dirty on the compiler but like me, don't know how it
>>> works
>>>>>>>> :-)
>>>>>>>>>>>
>>>>>>>>>>> I was adding jasmine-2.0.js [1], a file that contains only jsDoc
>>>>>>>>>>> (parameters and return type descriptions) and declarations, no
>>>>>>>>>>> implementations.
>>>>>>>>>>> When I say "adding jasmine-2.0.js" I mean, transpile this .js
>>> file to
>>>>>>>> .as
>>>>>>>>>>> and then compile it to a .swc.
>>>>>>>>>>>
>>>>>>>>>>> The transpilation part is done by EXTERNC
>>>>>>>>>>>
>>>>>>>>>>> You call it like that:
>>>>>>>>>>>
>>>>>>>>>>> <java jar="${basedir}/compiler.jx/lib/externc.jar" fork="true"
>>>>>>>>>>> failonerror="false">
>>>>>>>>>>> <arg value="+flexlib=${env.ASJS_HOME}/frameworks" />
>>>>>>>>>>> <arg value="-debug" />
>>>>>>>>>>> <arg
>>>>>>>>>>>
>>>>>>>>
>>>>>>
>>> value="-load-config=${basedir}/externs/jasmine/jasmine-compile-config.xml"
>>>>>>>>>>> />
>>>>>>>>>>>
>>>>>>>>>>> In the jasmine-compile-config.xml, you can exclude classes and
>>>>>> member,
>>>>>>>>>>> for example, in the jasmine.Spec class, I excluded the variable
>>>>>>>> $injector
>>>>>>>>>>> as its type was coming from the Angular library that is not yet
>>>>>>>> transpiled.
>>>>>>>>>>>
>>>>>>>>>>> <field-exclude>
>>>>>>>>>>> <class>jasmine.Spec</class>
>>>>>>>>>>> <field>$injector</field>
>>>>>>>>>>> </field-exclude>
>>>>>>>>>>>
>>>>>>>>>>> You can also exclude classes and functions.
>>>>>>>>>>>
>>>>>>>>>>> The compile part is done by the falcon compc as follow:
>>>>>>>>>>>
>>>>>>>>>>> <java
>>>>>> jar="${basedir}/compiler/generated/dist/sdk/lib/falcon-compc.jar"
>>>>>>>>>>> fork="true"
>>>>>>>>>>> failonerror="true">
>>>>>>>>>>> <arg value="+flexlib=${env.ASJS_HOME}/frameworks" />
>>>>>>>>>>> <arg value="-debug" />
>>>>>>>>>>> <arg
>>>>>>>>>>>
>>> value="-load-config=${basedir}/externs/jasmine/compile-config.xml" />
>>>>>>>>>>> <arg
>>>>>>>>>>>
>>> value="-output=${basedir}/externs/jasmine/out/bin/jasmine-2.0.swc" />
>>>>>>>>>>> </java>
>>>>>>>>>>>
>>>>>>>>>>> The problem was that this last part was failing with an NPE a
>>> Type of
>>>>>>>>>>> something:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>
>>>>>>
>>> org.apache.flex.compiler.internal.scopes.TypeScope.getPropertyForMemberAccess(TypeScope.java:344)
>>>>>>>>>>>
>>>>>>>>>>> Even looking closely at the code, I didn't get why it was failing
>>> but
>>>>>>>> for
>>>>>>>>>>> sure, because it was trying to compile one of the transpiled .as
>>>>>> file,
>>>>>>>> this
>>>>>>>>>>> transpiled code was wrong.
>>>>>>>>>>> Looking at those .as, it was easy to see that some import were
>>>>>> missing.
>>>>>>>>>>>
>>>>>>>>>>> So, why the 2 others externs (js and jquery) had no issues ?
>>>>>>>>>>> It is always surprising to see something working on all the things
>>>>>>>> except
>>>>>>>>>>> of yours, but it can help you too :-)
>>>>>>>>>>>
>>>>>>>>>>> So, I've been looking at those other transpiled .as files from
>>>>>> existing
>>>>>>>>>>> externs to see if they had imports and they were some.
>>>>>>>>>>> I then created a mini jasmine.js containing only the faulty case
>>>>>> only,
>>>>>>>>>>> that, from what I've been able to determinate, was that the import
>>>>>> was
>>>>>>>> not
>>>>>>>>>>> generated when a static function had a return type of a class
>>> created
>>>>>>>> via a
>>>>>>>>>>> function constructor, so, I filled this mini jasmine.js with the
>>>>>>>> equivalent
>>>>>>>>>>> of a static function like this:
>>>>>>>>>>>
>>>>>>>>>>> /**
>>>>>>>>>>> * @return {!jasmine.Clock}
>>>>>>>>>>> */
>>>>>>>>>>> jasmine.clock = function() {};
>>>>>>>>>>>
>>>>>>>>>>> Which should transpile in AS3, something like:
>>>>>>>>>>>
>>>>>>>>>>> import jasmine.Clock;
>>>>>>>>>>> public static function clock():Clock {}
>>>>>>>>>>>
>>>>>>>>>>> and a function constructor like this:
>>>>>>>>>>>
>>>>>>>>>>> /** @constructor */
>>>>>>>>>>> jasmine.Clock = function() {};
>>>>>>>>>>>
>>>>>>>>>>> which transpile:
>>>>>>>>>>>
>>>>>>>>>>> package jasmine {
>>>>>>>>>>> public class Clock {}
>>>>>>>>>>> }
>>>>>>>>>>>
>>>>>>>>>>> Created a test class based on those Mike created for the previous
>>>>>>>> externs
>>>>>>>>>>> doing:
>>>>>>>>>>>
>>>>>>>>>>> // jasmine, the main jasmine class.
>>>>>>>>>>> ClassReference jasmine = model.getClassReference("jasmine");
>>>>>>>>>>> assertNotNull(jasmine);
>>>>>>>>>>>
>>>>>>>>>>> assertTrue(jasmine.hasImport("jasmine.Clock"));
>>>>>>>>>>>
>>>>>>>>>>> The hasImport method didn't exist on ClassReference but it was a
>>>>>>>>>>> addImport(), I follow to where it was called in
>>> ResolvePackagesPass
>>>>>>>> hoping
>>>>>>>>>>> to find a missing case but after debug spin I wasn't able to do
>>> what
>>>>>> I
>>>>>>>>>>> expected, I'm not sure I understood all the logic in this class
>>> but
>>>>>> it
>>>>>>>>>>> looked like the Node of my return type was never visited and
>>>>>> therefore
>>>>>>>>>>> wasn't able to add my import here.
>>>>>>>>>>>
>>>>>>>>>>> But wait, in the ClassReference, I have a
>>>>>>>>>>>
>>>>>>>>>>> public MethodReference addMethod(Node node, String functionName,
>>>>>>>>>>> JSDocInfo comment, boolean isStatic)
>>>>>>>>>>>
>>>>>>>>>>> To me it would be enough to add the import to the list of imports
>>> to
>>>>>> be
>>>>>>>>>>> emitted when the MethodReference is to be added, I just had to
>>>>>>>> determinate
>>>>>>>>>>> if the return type given in the jsDoc was not from the current
>>>>>>>> package, the
>>>>>>>>>>> given method not excluded, the given return type neither !
>>>>>>>>>>>
>>>>>>>>>>> My test was passing was I was able to compile with this new code
>>> the
>>>>>>>> old
>>>>>>>>>>> externs.
>>>>>>>>>>>
>>>>>>>>>>> The only thing I had to do to finish to compile the jasmine extern
>>>>>> was
>>>>>>>> to
>>>>>>>>>>> emit the imports for the global functions too as they shown to be
>>>>>>>> faulty
>>>>>>>>>>> for the same reasons.
>>>>>>>>>>>
>>>>>>>>>>> Mike will probably tell me now where my logic was wrong now :-)
>>>>>>>>>>>
>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>> From: webdoublefx@hotmail.com
>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>>>>>>>>>> Date: Sat, 27 Jun 2015 20:43:43 +0100
>>>>>>>>>>>>
>>>>>>>>>>>> Ok, done !
>>>>>>>>>>>>
>>>>>>>>>>>> I forgot to uncomment the externc build of jasmine and print the
>>>>>>>> global
>>>>>>>>>>> function imports !
>>>>>>>>>>>>
>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>> From: webdoublefx@hotmail.com
>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>>>>>>>>>>> Date: Sat, 27 Jun 2015 20:12:16 +0100
>>>>>>>>>>>>>
>>>>>>>>>>>>>> I pushed the changes which are ready to be reviewed.
>>>>>>>>>>>>>
>>>>>>>>>>>>> oups, hold on, I had some things commented that hidden other
>>>>>>>> problems,
>>>>>>>>>>> I will continue on it.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>>> From: webdoublefx@hotmail.com
>>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>>>>>>>>>>>> Date: Sat, 27 Jun 2015 18:31:32 +0100
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hi Mike,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I pushed the changes which are ready to be reviewed.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Note: The jasmine-2.0.js is not committed as it should be
>>>>>> downloaded
>>>>>>>>>>> with the unpack-externs target of the download.xml, I followed the
>>>>>>>> model.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>>>> Date: Sat, 27 Jun 2015 05:31:50 -0400
>>>>>>>>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>>>>>>>>>>>>> From: teotigraphixllc@gmail.com
>>>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I just noticed you said today or tomorrow, whatever man.
>>> doesn't
>>>>>>>>>>> matter.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Mike
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Sat, Jun 27, 2015 at 5:17 AM, Michael Schmalle <
>>>>>>>>>>> teotigraphixllc@gmail.com
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Well its the practice. I know the pattern I am using so if I
>>>>>> have
>>>>>>>> to
>>>>>>>>>>>>>>>> adjust it to fit I will. You can tell that with AST type
>>> stuff,
>>>>>> it
>>>>>>>>>>> has to
>>>>>>>>>>>>>>>> follow a specific pattern or everything turns to crap when
>>>>>> trying
>>>>>>>>>>> to add
>>>>>>>>>>>>>>>> stuff down the road.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Commit it sooner than later as I have a couple hours to
>>> check it
>>>>>>>>>>> out this
>>>>>>>>>>>>>>>> morning.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Mike
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Sat, Jun 27, 2015 at 3:15 AM, Frédéric THOMAS <
>>>>>>>>>>> webdoublefx@hotmail.com>
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hi Mike,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I can now compile jasmine, I'm not sure my fix is very clean
>>>>>> but
>>>>>>>> it
>>>>>>>>>>>>>>>>> works, I've been able to compile all the externs with.
>>>>>>>>>>>>>>>>> I will commit it later today or tomorrow as I need to clean
>>> a
>>>>>> bit
>>>>>>>>>>> before
>>>>>>>>>>>>>>>>> and it would be nice if you can review it.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>>>>>>> From: webdoublefx@hotmail.com
>>>>>>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 22:43:30 +0100
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Hey Mike, it looks like "import jasmine.Clock;" is missing
>>> in
>>>>>>>> the
>>>>>>>>>>>>>>>>> generated jasmine.as, that's it !
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>>>>>>>> From: webdoublefx@hotmail.com
>>>>>>>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>>>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 22:26:32 +0100
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> HAHA, ah that is a hard one man, thanks for the offer
>>> but I
>>>>>>>>>>> think I am
>>>>>>>>>>>>>>>>>>>> going to need to get this one. There are a couple places
>>> it
>>>>>>>>>>> could be
>>>>>>>>>>>>>>>>> though
>>>>>>>>>>>>>>>>>>>> if you are curious.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> First you really need to understand the problem, I am
>>> typing
>>>>>>>>>>> this
>>>>>>>>>>>>>>>>> stuff in
>>>>>>>>>>>>>>>>>>>> between installing a bathroom vanity and sink, so I
>>> haven't
>>>>>>>>>>> looked at
>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>> code yet. :)
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> So I can't really give you an answer since I don't quite
>>>>>> know
>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> problem
>>>>>>>>>>>>>>>>>>>> yet.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Ok, I will check your solution :-)
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 16:59:58 -0400
>>>>>>>>>>>>>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>>>>>>>>>>>>>>>>>> From: teotigraphixllc@gmail.com
>>>>>>>>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> On Fri, Jun 26, 2015 at 4:39 PM, Frédéric THOMAS <
>>>>>>>>>>>>>>>>> webdoublefx@hotmail.com>
>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Yeah, this "jasmine.Clock"
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> The error means that the Falcon compiler is trying to
>>>>>>>> resolve
>>>>>>>>>>> a
>>>>>>>>>>>>>>>>> member
>>>>>>>>>>>>>>>>>>>>>> expression and it can't resolve it.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> So this means there is a bug in the AST resolver. You
>>> are
>>>>>>>>>>> using the
>>>>>>>>>>>>>>>>>>>>> extern
>>>>>>>>>>>>>>>>>>>>>> in the GCC project correct?
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Yes,
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>
>>>>>>
>>> https://raw.githubusercontent.com/google/closure-compiler/master/contrib/externs/jasmine-2.0.js
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> If so, I need to take a look at it.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Everyone, I did one pass and tests on packages and
>>> class
>>>>>>>>>>> creation,
>>>>>>>>>>>>>>>>> so
>>>>>>>>>>>>>>>>>>>>> these
>>>>>>>>>>>>>>>>>>>>>> types of bugs are to be expected as the AST/Type
>>> resolver
>>>>>> is
>>>>>>>>>>>>>>>>> "asked" to
>>>>>>>>>>>>>>>>>>>>> do
>>>>>>>>>>>>>>>>>>>>>> more work then my initial implementation.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Make sense?
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Well, kind of :-)
>>>>>>>>>>>>>>>>>>>>> What classes would you check for this ?
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> HAHA, ah that is a hard one man, thanks for the offer
>>> but I
>>>>>>>>>>> think I am
>>>>>>>>>>>>>>>>>>>> going to need to get this one. There are a couple places
>>> it
>>>>>>>>>>> could be
>>>>>>>>>>>>>>>>> though
>>>>>>>>>>>>>>>>>>>> if you are curious.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> First you really need to understand the problem, I am
>>> typing
>>>>>>>>>>> this
>>>>>>>>>>>>>>>>> stuff in
>>>>>>>>>>>>>>>>>>>> between installing a bathroom vanity and sink, so I
>>> haven't
>>>>>>>>>>> looked at
>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>> code yet. :)
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> So I can't really give you an answer since I don't quite
>>>>>> know
>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> problem
>>>>>>>>>>>>>>>>>>>> yet.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Mike
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 16:32:16 -0400
>>>>>>>>>>>>>>>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>>>>>>>>>>>>>>>>>>>> From: teotigraphixllc@gmail.com
>>>>>>>>>>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Yeah, this "jasmine.Clock"
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> The error means that the Falcon compiler is trying to
>>>>>>>> resolve
>>>>>>>>>>> a
>>>>>>>>>>>>>>>>> member
>>>>>>>>>>>>>>>>>>>>>> expression and it can't resolve it.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> So this means there is a bug in the AST resolver. You
>>> are
>>>>>>>>>>> using the
>>>>>>>>>>>>>>>>>>>>> extern
>>>>>>>>>>>>>>>>>>>>>> in the GCC project correct?
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> If so, I need to take a look at it.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Everyone, I did one pass and tests on packages and
>>> class
>>>>>>>>>>> creation,
>>>>>>>>>>>>>>>>> so
>>>>>>>>>>>>>>>>>>>>> these
>>>>>>>>>>>>>>>>>>>>>> types of bugs are to be expected as the AST/Type
>>> resolver
>>>>>> is
>>>>>>>>>>>>>>>>> "asked" to
>>>>>>>>>>>>>>>>>>>>> do
>>>>>>>>>>>>>>>>>>>>>> more work then my initial implementation.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Make sense?
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Mike
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> On Fri, Jun 26, 2015 at 3:27 PM, Frédéric THOMAS <
>>>>>>>>>>>>>>>>>>>>> webdoublefx@hotmail.com>
>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Hi Mike,
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Any idea why ?
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>> U:\sources\asf\flex\falcon\externs\jasmine\out\as\classes\
>>>>>>>>>>>>>>>>> jasmine.as:26
>>>>>>>>>>>>>>>>>>>>>>> Erreur interne : java.lang.NullPointerException
>>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>
>>>>>>
>>> org.apache.flex.compiler.internal.scopes.TypeScope.getPropertyForMemberAccess(TypeScope.java:344)
>>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>
>>>>>>
>>> org.apache.flex.compiler.internal.scopes.ScopeView.getPropertyForMemberAccess(ScopeView.java:81)
>>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>
>>>>>>
>>> org.apache.flex.compiler.internal.scopes.ASScope.getPropertyFromDef(ASScope.java:879)
>>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>
>>>>>>
>>> org.apache.flex.compiler.internal.scopes.ASScope.getPropertyFromDef(ASScope.java:841)
>>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>
>>>>>>
>>> org.apache.flex.compiler.internal.scopes.ASScope.getPropertyFromDef(ASScope.java:760)
>>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>
>>>>>>
>>> org.apache.flex.compiler.internal.tree.as.IdentifierNode.resolveMemberRef(IdentifierNode.java:829)
>>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>
>>>>>>
>>> org.apache.flex.compiler.internal.tree.as.IdentifierNode.resolve(IdentifierNode.java:377)
>>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>
>>>>>>
>>> org.apache.flex.compiler.internal.tree.as.IdentifierNode.getMName(IdentifierNode.java:432)
>>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>
>>>>>>
>>> org.apache.flex.compiler.internal.tree.as.MemberAccessExpressionNode.getMName(MemberAccessExpressionNode.java:158)
>>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>
>>>>>>
>>> org.apache.flex.compiler.internal.as.codegen.ABCGeneratingReducer.dottedName(ABCGeneratingReducer.java:840)
>>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>
>>>>>>
>>> org.apache.flex.compiler.internal.as.codegen.CmcEmitter.action_321(CmcEmitter.java:5236)
>>>>>>>>>>>>>>>>>>>>>>> ...
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> public static function clock():jasmine.Clock { return
>>>>>>>> null; }
>>>>>>>>>>>>>>>>>>>>>>> ^
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>>>>>> In the jasmine extern file
>>>>>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>>>>> * @return {!jasmine.Clock}
>>>>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>>>>> jasmine.clock = function() {};
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> /** @constructor */
>>>>>>>>>>>>>>>>>>>>>>> jasmine.Clock = function() {};
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> /** */
>>>>>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.install = function() {};
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> /** */
>>>>>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.uninstall = function() {};
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> /** @param {number} ms */
>>>>>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.tick = function(ms) {};
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> /** @param {!Date} date */
>>>>>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.mockDate = function(date) {};
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>>>>>> In jasmine.as
>>>>>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>>>>> * @returns {jasmine.Clock}
>>>>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>>>>> public static function clock():jasmine.Clock { return
>>>>>>>> null; }
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>>>>>> clock.as
>>>>>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>>>>>> package jasmine {
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>>>>> public class Clock {
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>>>>> public function Clock() {
>>>>>>>>>>>>>>>>>>>>>>> super();
>>>>>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>>>>> * Generated doc for missing method JSDoc.
>>>>>>>>>>>>>>>>>>>>>>> *
>>>>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>>>>> public function install():void { }
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>>>>> * @param ms [number]
>>>>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>>>>> public function tick(ms:Number):void { }
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>>>>> * Generated doc for missing method JSDoc.
>>>>>>>>>>>>>>>>>>>>>>> *
>>>>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>>>>> public function uninstall():void { }
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>>>>> * @param date [Date]
>>>>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>>>>> public function mockDate(date:Date):void { }
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>>>
>>>>
>>>
>>>
>
 		 	   		  

RE: [Externs] jasmine-2.0.js

Posted by Frédéric THOMAS <we...@hotmail.com>.
> It's because ? means OR NULL in externs. We are using the annotation
> resolver which passes back implicit meaning, so it's not saying it's
> optional it's saying it CAN be null, but something MUST be passed.

Thanks for the precision, actually, I forgot to check the constructors in more :P
So, better I finish to write the tests, manage the UnionType, etc.. and come back to you.

Happy painting ! ;-)
Frédéric THOMAS


----------------------------------------
> Date: Mon, 6 Jul 2015 18:48:03 -0400
> Subject: Re: [Externs] jasmine-2.0.js
> From: teotigraphixllc@gmail.com
> To: dev@flex.apache.org
>
> On Mon, Jul 6, 2015 at 11:44 AM, Frédéric THOMAS <we...@hotmail.com>
> wrote:
>
>> Also I'm trying to write tests for this pass and I've got something that
>> doesn't pass, why the "bar" parameter is consider as optional in the
>> collectImport.CollectImports constructor ?
>> see the emmitted "@param bar [(foo.Bar|null)] ", why not "@param bar
>> {foo.Bar} " ?
>>
>
>
> It's because ? means OR NULL in externs. We are using the annotation
> resolver which passes back implicit meaning, so it's not saying it's
> optional it's saying it CAN be null, but something MUST be passed.
>
> So anything that is;
>
> @param bar {foo.Bar}
>
> is actually
>
> @param bar {foo.Bar?}
>
> If you use !, it means it cannot be null, a value must be passed that is
> not null.
>
> Mike
>
>
>>
>> /**
>> * @constructor
>> * @extends {superClasses.Import}
>> * @param {foo.Bar} bar
>> * @param {number} value
>> */
>> collectImport.CollectImports = function(bar, value) {};
>>
>> EMMITTED TO:
>>
>> package collectImport {
>>
>> import superClasses.Import;
>>
>> /**
>> * @see [collect_import]
>> */
>> public class CollectImports extends superClasses.Import {
>>
>> /**
>> * @param bar [(foo.Bar|null)]
>> * @param value [number]
>> * @see [collect_import]
>> */
>> public function CollectImports(bar:foo.Bar, value:Number) {
>> super();
>> }
>>
>> Thanks,
>> Frédéric THOMAS
>>
>>
>> ----------------------------------------
>>> From: webdoublefx@hotmail.com
>>> To: dev@flex.apache.org
>>> Subject: RE: [Externs] jasmine-2.0.js
>>> Date: Mon, 6 Jul 2015 00:18:10 +0100
>>>
>>>> I am going to be busy most of the week remodeling my mother in laws
>>>> bathroom starting tomorrow. So if you want to try a new custom pass like
>>>> ResolveImportPass, go for it, I will just stay out of the way. I think
>> it
>>>> would be good for you. :) If not, no worries, you gave me the idea. haha
>>>>
>>>> If you did, look at it like this, since all imports and logic therin are
>>>> totally dependent on what the compiler actual saves into the model,
>> logic
>>>> says this needs to be the last or one of the last passes, from my
>>>> perspective, it needs to be the last.
>>>>
>>>> If you make it the last, then this pass is not coupled to us fixing bugs
>>>> ahead of it. Say we find out we need to add another structure of AST
>>>> parsing for a node structure I havn't implemented yet, well we are safe.
>>>>
>>>> Why safe? Because in this import pass, you are using the MODEL, so no
>> AST.
>>>> Instead of worrying about resolving imports during AST traversal, you
>> are
>>>> using what is already in the container after all that complex parsing is
>>>> finished.
>>>>
>>>> So this pass, you would use your skills at knowing "what" in each
>> subclass
>>>> of BaseReference could contain a type. Then write your logic pass to
>>>> traverse Classes, then into each classes members, then loop through each
>>>> member and analyze their types and do your import testing logic there.
>>>>
>>>> Once you find instances of imports that need to be saves, your current
>>>> context is already the ClassReference, so call classRef.addImport(). :)
>>>
>>>
>>> You can review the add-CollectImportPass branch before I merge it when
>> you have a chance.
>>> Thanks,
>>> Frédéric THOMAS
>>>
>>>
>>> ----------------------------------------
>>>> Date: Sun, 28 Jun 2015 14:23:57 -0400
>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>> From: teotigraphixllc@gmail.com
>>>> To: dev@flex.apache.org
>>>>
>>>> Kewl.
>>>>
>>>> I am going to be busy most of the week remodeling my mother in laws
>>>> bathroom starting tomorrow. So if you want to try a new custom pass like
>>>> ResolveImportPass, go for it, I will just stay out of the way. I think
>> it
>>>> would be good for you. :) If not, no worries, you gave me the idea. haha
>>>>
>>>> If you did, look at it like this, since all imports and logic therin are
>>>> totally dependent on what the compiler actual saves into the model,
>> logic
>>>> says this needs to be the last or one of the last passes, from my
>>>> perspective, it needs to be the last.
>>>>
>>>> If you make it the last, then this pass is not coupled to us fixing bugs
>>>> ahead of it. Say we find out we need to add another structure of AST
>>>> parsing for a node structure I havn't implemented yet, well we are safe.
>>>>
>>>> Why safe? Because in this import pass, you are using the MODEL, so no
>> AST.
>>>> Instead of worrying about resolving imports during AST traversal, you
>> are
>>>> using what is already in the container after all that complex parsing is
>>>> finished.
>>>>
>>>> So this pass, you would use your skills at knowing "what" in each
>> subclass
>>>> of BaseReference could contain a type. Then write your logic pass to
>>>> traverse Classes, then into each classes members, then loop through each
>>>> member and analyze their types and do your import testing logic there.
>>>>
>>>> Once you find instances of imports that need to be saves, your current
>>>> context is already the ClassReference, so call classRef.addImport(). :)
>>>>
>>>> Mike
>>>>
>>>>
>>>>
>>>>
>>>> On Sun, Jun 28, 2015 at 2:13 PM, Frédéric THOMAS <
>> webdoublefx@hotmail.com>
>>>> wrote:
>>>>
>>>>>> All I meant is that 75% of the time we would just want to save things
>> in
>>>>>> the model or a reference, such that you use addImport() during the
>>>>>> resolution. Then it keeps the emit() phase straight burn rubber and
>> loop
>>>>>> through all existing model structures, where imports would be just a
>> list
>>>>>> that emitImport() iterates through, no logic.
>>>>>
>>>>> Got it !
>>>>>
>>>>>> I AM NOT saying what you did was wrong, I am just offering a look into
>>>>> how
>>>>>> I set it up. You know how I got this pattern? From my massive
>> mistakes in
>>>>>> code generators of past. :) I realized that an emit phase needs to be
>>>>>> stupid and not dependent on any type of intelligence, just needs to
>>>>> create
>>>>>> what already exists.
>>>>>
>>>>> I'm in a phase where I'm learning compiler things and indeed I will do
>>>>> some mistakes
>>>>> or I won't be as precise as you who have experience on it.
>>>>> Therefore I can accept critics and learn from your explanations :-)
>>>>>
>>>>>> This can also solve many problems at once. So I haven't got back into
>> the
>>>>>> code BUT my intuition says we need a universal solution for any type
>> of
>>>>>> TYPE that is attached to a member, identifier such as a param type,
>>>>> return
>>>>>> type, filed type, superclass and interface(already taken care of using
>>>>>> addImport()).
>>>>>>
>>>>>> See where I am coming from? We know that every type is eventually
>> going
>>>>> to
>>>>>> need to be scanned for imports and validated.
>>>>>
>>>>> Yes, actually, I was expecting to see a specific pass for that.
>>>>>
>>>>>> Dude, I just don't want to come off bossy or condescending, I love you
>>>>>> help. A lot can be added to this compiler that could be very
>> interesting.
>>>>>> So having you understand my design intention is really important to
>> me.
>>>>> :)
>>>>>
>>>>> Don't worry, I don't think you are bossy or condescending Mike, I'm
>>>>> reading you
>>>>> and try to put in parallel the new informations you give and what I've
>>>>> seen in the code
>>>>> for a better understanding, that's it.
>>>>>
>>>>> Cheers,
>>>>> Frédéric THOMAS
>>>>>
>>>>>
>>>>> ----------------------------------------
>>>>>> Date: Sun, 28 Jun 2015 13:48:02 -0400
>>>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>>>> From: teotigraphixllc@gmail.com
>>>>>> To: dev@flex.apache.org
>>>>>>
>>>>>> Fred you did an awesome job. :)
>>>>>>
>>>>>> All I meant is that 75% of the time we would just want to save things
>> in
>>>>>> the model or a reference, such that you use addImport() during the
>>>>>> resolution. Then it keeps the emit() phase straight burn rubber and
>> loop
>>>>>> through all existing model structures, where imports would be just a
>> list
>>>>>> that emitImport() iterates through, no logic.
>>>>>>
>>>>>> I AM NOT saying what you did was wrong, I am just offering a look into
>>>>> how
>>>>>> I set it up. You know how I got this pattern? From my massive
>> mistakes in
>>>>>> code generators of past. :) I realized that an emit phase needs to be
>>>>>> stupid and not dependent on any type of intelligence, just needs to
>>>>> create
>>>>>> what already exists.
>>>>>>
>>>>>> This can also solve many problems at once. So I haven't got back into
>> the
>>>>>> code BUT my intuition says we need a universal solution for any type
>> of
>>>>>> TYPE that is attached to a member, identifier such as a param type,
>>>>> return
>>>>>> type, filed type, superclass and interface(already taken care of using
>>>>>> addImport()).
>>>>>>
>>>>>> See where I am coming from? We know that every type is eventually
>> going
>>>>> to
>>>>>> need to be scanned for imports and validated.
>>>>>>
>>>>>> Dude, I just don't want to come off bossy or condescending, I love you
>>>>>> help. A lot can be added to this compiler that could be very
>> interesting.
>>>>>> So having you understand my design intention is really important to
>> me.
>>>>> :)
>>>>>>
>>>>>> Mike
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Sun, Jun 28, 2015 at 1:37 PM, Frédéric THOMAS <
>>>>> webdoublefx@hotmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>>> Fred pretty much iterated things correctly.
>>>>>>>>
>>>>>>>> The ResolvePackageNamePass I haven't to get back to. I was in the
>>>>> middle
>>>>>>> of
>>>>>>>> implementing something when I got it to work in another place.
>>>>>>>>
>>>>>>>> There is a pattern to how things are parsed so most of the time it's
>>>>>>> better
>>>>>>>> to set state as nodes/references are being added to the model. In
>> the
>>>>>>> case
>>>>>>>> of imports, I don't see any problems right now with checking during
>> the
>>>>>>>> emit phase but, if the model was more interactive during the
>> session,
>>>>>>> this
>>>>>>>> type of logic should happen during the resolve phase so the model
>> with
>>>>>>> it's
>>>>>>>> references has a correct state if there is any logic happening
>> between
>>>>>>> two
>>>>>>>> references.
>>>>>>>
>>>>>>> Thanks for the explanation, I will take the time to do some debug
>> spins
>>>>> to
>>>>>>> understand
>>>>>>> when the phases are called, what they do and what classes are
>> involved.
>>>>>>> Given it is a fairly small transpiler and despite the recursive
>> visitor
>>>>>>> pattern, I guess I can do it.
>>>>>>>
>>>>>>>> How much are you working on right now Fred? I just ask because I
>> don't
>>>>>>> want
>>>>>>>> to create any conflicts.
>>>>>>>
>>>>>>> Go ahead Mike, I'm done with that at the moment, I did my last
>> cleanup
>>>>>>> already.
>>>>>>> Anyway, better I work on a branch and commit the branch instead for
>>>>> review
>>>>>>> next time.
>>>>>>>
>>>>>>> Frédéric THOMAS
>>>>>>>
>>>>>>>
>>>>>>> ----------------------------------------
>>>>>>>> Date: Sun, 28 Jun 2015 13:23:15 -0400
>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>>>>>> From: teotigraphixllc@gmail.com
>>>>>>>> To: dev@flex.apache.org
>>>>>>>>
>>>>>>>> Fred pretty much iterated things correctly.
>>>>>>>>
>>>>>>>> The ResolvePackageNamePass I haven't to get back to. I was in the
>>>>> middle
>>>>>>> of
>>>>>>>> implementing something when I got it to work in another place.
>>>>>>>>
>>>>>>>> There is a pattern to how things are parsed so most of the time it's
>>>>>>> better
>>>>>>>> to set state as nodes/references are being added to the model. In
>> the
>>>>>>> case
>>>>>>>> of imports, I don't see any problems right now with checking during
>> the
>>>>>>>> emit phase but, if the model was more interactive during the
>> session,
>>>>>>> this
>>>>>>>> type of logic should happen during the resolve phase so the model
>> with
>>>>>>> it's
>>>>>>>> references has a correct state if there is any logic happening
>> between
>>>>>>> two
>>>>>>>> references.
>>>>>>>>
>>>>>>>> How much are you working on right now Fred? I just ask because I
>> don't
>>>>>>> want
>>>>>>>> to create any conflicts.
>>>>>>>>
>>>>>>>> Mike
>>>>>>>> .
>>>>>>>>
>>>>>>>> On Sat, Jun 27, 2015 at 5:58 PM, Michael Schmalle <
>>>>>>> teotigraphixllc@gmail.com
>>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Hey Fred, I was out all day. I will have some time in the morning
>> to
>>>>>>> look
>>>>>>>>> at what you did and comment. :)
>>>>>>>>>
>>>>>>>>> Mike
>>>>>>>>>
>>>>>>>>> On Sat, Jun 27, 2015 at 5:27 PM, Frédéric THOMAS <
>>>>>>> webdoublefx@hotmail.com>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Just to explain what I did, especially to folks who would like to
>> get
>>>>>>>>>> their hand dirty on the compiler but like me, don't know how it
>> works
>>>>>>> :-)
>>>>>>>>>>
>>>>>>>>>> I was adding jasmine-2.0.js [1], a file that contains only jsDoc
>>>>>>>>>> (parameters and return type descriptions) and declarations, no
>>>>>>>>>> implementations.
>>>>>>>>>> When I say "adding jasmine-2.0.js" I mean, transpile this .js
>> file to
>>>>>>> .as
>>>>>>>>>> and then compile it to a .swc.
>>>>>>>>>>
>>>>>>>>>> The transpilation part is done by EXTERNC
>>>>>>>>>>
>>>>>>>>>> You call it like that:
>>>>>>>>>>
>>>>>>>>>> <java jar="${basedir}/compiler.jx/lib/externc.jar" fork="true"
>>>>>>>>>> failonerror="false">
>>>>>>>>>> <arg value="+flexlib=${env.ASJS_HOME}/frameworks" />
>>>>>>>>>> <arg value="-debug" />
>>>>>>>>>> <arg
>>>>>>>>>>
>>>>>>>
>>>>>
>> value="-load-config=${basedir}/externs/jasmine/jasmine-compile-config.xml"
>>>>>>>>>> />
>>>>>>>>>>
>>>>>>>>>> In the jasmine-compile-config.xml, you can exclude classes and
>>>>> member,
>>>>>>>>>> for example, in the jasmine.Spec class, I excluded the variable
>>>>>>> $injector
>>>>>>>>>> as its type was coming from the Angular library that is not yet
>>>>>>> transpiled.
>>>>>>>>>>
>>>>>>>>>> <field-exclude>
>>>>>>>>>> <class>jasmine.Spec</class>
>>>>>>>>>> <field>$injector</field>
>>>>>>>>>> </field-exclude>
>>>>>>>>>>
>>>>>>>>>> You can also exclude classes and functions.
>>>>>>>>>>
>>>>>>>>>> The compile part is done by the falcon compc as follow:
>>>>>>>>>>
>>>>>>>>>> <java
>>>>> jar="${basedir}/compiler/generated/dist/sdk/lib/falcon-compc.jar"
>>>>>>>>>> fork="true"
>>>>>>>>>> failonerror="true">
>>>>>>>>>> <arg value="+flexlib=${env.ASJS_HOME}/frameworks" />
>>>>>>>>>> <arg value="-debug" />
>>>>>>>>>> <arg
>>>>>>>>>>
>> value="-load-config=${basedir}/externs/jasmine/compile-config.xml" />
>>>>>>>>>> <arg
>>>>>>>>>>
>> value="-output=${basedir}/externs/jasmine/out/bin/jasmine-2.0.swc" />
>>>>>>>>>> </java>
>>>>>>>>>>
>>>>>>>>>> The problem was that this last part was failing with an NPE a
>> Type of
>>>>>>>>>> something:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>
>>>>>
>> org.apache.flex.compiler.internal.scopes.TypeScope.getPropertyForMemberAccess(TypeScope.java:344)
>>>>>>>>>>
>>>>>>>>>> Even looking closely at the code, I didn't get why it was failing
>> but
>>>>>>> for
>>>>>>>>>> sure, because it was trying to compile one of the transpiled .as
>>>>> file,
>>>>>>> this
>>>>>>>>>> transpiled code was wrong.
>>>>>>>>>> Looking at those .as, it was easy to see that some import were
>>>>> missing.
>>>>>>>>>>
>>>>>>>>>> So, why the 2 others externs (js and jquery) had no issues ?
>>>>>>>>>> It is always surprising to see something working on all the things
>>>>>>> except
>>>>>>>>>> of yours, but it can help you too :-)
>>>>>>>>>>
>>>>>>>>>> So, I've been looking at those other transpiled .as files from
>>>>> existing
>>>>>>>>>> externs to see if they had imports and they were some.
>>>>>>>>>> I then created a mini jasmine.js containing only the faulty case
>>>>> only,
>>>>>>>>>> that, from what I've been able to determinate, was that the import
>>>>> was
>>>>>>> not
>>>>>>>>>> generated when a static function had a return type of a class
>> created
>>>>>>> via a
>>>>>>>>>> function constructor, so, I filled this mini jasmine.js with the
>>>>>>> equivalent
>>>>>>>>>> of a static function like this:
>>>>>>>>>>
>>>>>>>>>> /**
>>>>>>>>>> * @return {!jasmine.Clock}
>>>>>>>>>> */
>>>>>>>>>> jasmine.clock = function() {};
>>>>>>>>>>
>>>>>>>>>> Which should transpile in AS3, something like:
>>>>>>>>>>
>>>>>>>>>> import jasmine.Clock;
>>>>>>>>>> public static function clock():Clock {}
>>>>>>>>>>
>>>>>>>>>> and a function constructor like this:
>>>>>>>>>>
>>>>>>>>>> /** @constructor */
>>>>>>>>>> jasmine.Clock = function() {};
>>>>>>>>>>
>>>>>>>>>> which transpile:
>>>>>>>>>>
>>>>>>>>>> package jasmine {
>>>>>>>>>> public class Clock {}
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> Created a test class based on those Mike created for the previous
>>>>>>> externs
>>>>>>>>>> doing:
>>>>>>>>>>
>>>>>>>>>> // jasmine, the main jasmine class.
>>>>>>>>>> ClassReference jasmine = model.getClassReference("jasmine");
>>>>>>>>>> assertNotNull(jasmine);
>>>>>>>>>>
>>>>>>>>>> assertTrue(jasmine.hasImport("jasmine.Clock"));
>>>>>>>>>>
>>>>>>>>>> The hasImport method didn't exist on ClassReference but it was a
>>>>>>>>>> addImport(), I follow to where it was called in
>> ResolvePackagesPass
>>>>>>> hoping
>>>>>>>>>> to find a missing case but after debug spin I wasn't able to do
>> what
>>>>> I
>>>>>>>>>> expected, I'm not sure I understood all the logic in this class
>> but
>>>>> it
>>>>>>>>>> looked like the Node of my return type was never visited and
>>>>> therefore
>>>>>>>>>> wasn't able to add my import here.
>>>>>>>>>>
>>>>>>>>>> But wait, in the ClassReference, I have a
>>>>>>>>>>
>>>>>>>>>> public MethodReference addMethod(Node node, String functionName,
>>>>>>>>>> JSDocInfo comment, boolean isStatic)
>>>>>>>>>>
>>>>>>>>>> To me it would be enough to add the import to the list of imports
>> to
>>>>> be
>>>>>>>>>> emitted when the MethodReference is to be added, I just had to
>>>>>>> determinate
>>>>>>>>>> if the return type given in the jsDoc was not from the current
>>>>>>> package, the
>>>>>>>>>> given method not excluded, the given return type neither !
>>>>>>>>>>
>>>>>>>>>> My test was passing was I was able to compile with this new code
>> the
>>>>>>> old
>>>>>>>>>> externs.
>>>>>>>>>>
>>>>>>>>>> The only thing I had to do to finish to compile the jasmine extern
>>>>> was
>>>>>>> to
>>>>>>>>>> emit the imports for the global functions too as they shown to be
>>>>>>> faulty
>>>>>>>>>> for the same reasons.
>>>>>>>>>>
>>>>>>>>>> Mike will probably tell me now where my logic was wrong now :-)
>>>>>>>>>>
>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> ----------------------------------------
>>>>>>>>>>> From: webdoublefx@hotmail.com
>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>>>>>>>>> Date: Sat, 27 Jun 2015 20:43:43 +0100
>>>>>>>>>>>
>>>>>>>>>>> Ok, done !
>>>>>>>>>>>
>>>>>>>>>>> I forgot to uncomment the externc build of jasmine and print the
>>>>>>> global
>>>>>>>>>> function imports !
>>>>>>>>>>>
>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>> From: webdoublefx@hotmail.com
>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>>>>>>>>>> Date: Sat, 27 Jun 2015 20:12:16 +0100
>>>>>>>>>>>>
>>>>>>>>>>>>> I pushed the changes which are ready to be reviewed.
>>>>>>>>>>>>
>>>>>>>>>>>> oups, hold on, I had some things commented that hidden other
>>>>>>> problems,
>>>>>>>>>> I will continue on it.
>>>>>>>>>>>>
>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>> From: webdoublefx@hotmail.com
>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>>>>>>>>>>> Date: Sat, 27 Jun 2015 18:31:32 +0100
>>>>>>>>>>>>>
>>>>>>>>>>>>> Hi Mike,
>>>>>>>>>>>>>
>>>>>>>>>>>>> I pushed the changes which are ready to be reviewed.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Note: The jasmine-2.0.js is not committed as it should be
>>>>> downloaded
>>>>>>>>>> with the unpack-externs target of the download.xml, I followed the
>>>>>>> model.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>>> Date: Sat, 27 Jun 2015 05:31:50 -0400
>>>>>>>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>>>>>>>>>>>> From: teotigraphixllc@gmail.com
>>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I just noticed you said today or tomorrow, whatever man.
>> doesn't
>>>>>>>>>> matter.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Mike
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Sat, Jun 27, 2015 at 5:17 AM, Michael Schmalle <
>>>>>>>>>> teotigraphixllc@gmail.com
>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Well its the practice. I know the pattern I am using so if I
>>>>> have
>>>>>>> to
>>>>>>>>>>>>>>> adjust it to fit I will. You can tell that with AST type
>> stuff,
>>>>> it
>>>>>>>>>> has to
>>>>>>>>>>>>>>> follow a specific pattern or everything turns to crap when
>>>>> trying
>>>>>>>>>> to add
>>>>>>>>>>>>>>> stuff down the road.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Commit it sooner than later as I have a couple hours to
>> check it
>>>>>>>>>> out this
>>>>>>>>>>>>>>> morning.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Mike
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Sat, Jun 27, 2015 at 3:15 AM, Frédéric THOMAS <
>>>>>>>>>> webdoublefx@hotmail.com>
>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Hi Mike,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I can now compile jasmine, I'm not sure my fix is very clean
>>>>> but
>>>>>>> it
>>>>>>>>>>>>>>>> works, I've been able to compile all the externs with.
>>>>>>>>>>>>>>>> I will commit it later today or tomorrow as I need to clean
>> a
>>>>> bit
>>>>>>>>>> before
>>>>>>>>>>>>>>>> and it would be nice if you can review it.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>>>>>> From: webdoublefx@hotmail.com
>>>>>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 22:43:30 +0100
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hey Mike, it looks like "import jasmine.Clock;" is missing
>> in
>>>>>>> the
>>>>>>>>>>>>>>>> generated jasmine.as, that's it !
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>>>>>>> From: webdoublefx@hotmail.com
>>>>>>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 22:26:32 +0100
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> HAHA, ah that is a hard one man, thanks for the offer
>> but I
>>>>>>>>>> think I am
>>>>>>>>>>>>>>>>>>> going to need to get this one. There are a couple places
>> it
>>>>>>>>>> could be
>>>>>>>>>>>>>>>> though
>>>>>>>>>>>>>>>>>>> if you are curious.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> First you really need to understand the problem, I am
>> typing
>>>>>>>>>> this
>>>>>>>>>>>>>>>> stuff in
>>>>>>>>>>>>>>>>>>> between installing a bathroom vanity and sink, so I
>> haven't
>>>>>>>>>> looked at
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>> code yet. :)
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> So I can't really give you an answer since I don't quite
>>>>> know
>>>>>>>>>> the
>>>>>>>>>>>>>>>> problem
>>>>>>>>>>>>>>>>>>> yet.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Ok, I will check your solution :-)
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 16:59:58 -0400
>>>>>>>>>>>>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>>>>>>>>>>>>>>>>> From: teotigraphixllc@gmail.com
>>>>>>>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> On Fri, Jun 26, 2015 at 4:39 PM, Frédéric THOMAS <
>>>>>>>>>>>>>>>> webdoublefx@hotmail.com>
>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Yeah, this "jasmine.Clock"
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> The error means that the Falcon compiler is trying to
>>>>>>> resolve
>>>>>>>>>> a
>>>>>>>>>>>>>>>> member
>>>>>>>>>>>>>>>>>>>>> expression and it can't resolve it.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> So this means there is a bug in the AST resolver. You
>> are
>>>>>>>>>> using the
>>>>>>>>>>>>>>>>>>>> extern
>>>>>>>>>>>>>>>>>>>>> in the GCC project correct?
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Yes,
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>
>>>>>
>> https://raw.githubusercontent.com/google/closure-compiler/master/contrib/externs/jasmine-2.0.js
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> If so, I need to take a look at it.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Everyone, I did one pass and tests on packages and
>> class
>>>>>>>>>> creation,
>>>>>>>>>>>>>>>> so
>>>>>>>>>>>>>>>>>>>> these
>>>>>>>>>>>>>>>>>>>>> types of bugs are to be expected as the AST/Type
>> resolver
>>>>> is
>>>>>>>>>>>>>>>> "asked" to
>>>>>>>>>>>>>>>>>>>> do
>>>>>>>>>>>>>>>>>>>>> more work then my initial implementation.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Make sense?
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Well, kind of :-)
>>>>>>>>>>>>>>>>>>>> What classes would you check for this ?
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> HAHA, ah that is a hard one man, thanks for the offer
>> but I
>>>>>>>>>> think I am
>>>>>>>>>>>>>>>>>>> going to need to get this one. There are a couple places
>> it
>>>>>>>>>> could be
>>>>>>>>>>>>>>>> though
>>>>>>>>>>>>>>>>>>> if you are curious.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> First you really need to understand the problem, I am
>> typing
>>>>>>>>>> this
>>>>>>>>>>>>>>>> stuff in
>>>>>>>>>>>>>>>>>>> between installing a bathroom vanity and sink, so I
>> haven't
>>>>>>>>>> looked at
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>> code yet. :)
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> So I can't really give you an answer since I don't quite
>>>>> know
>>>>>>>>>> the
>>>>>>>>>>>>>>>> problem
>>>>>>>>>>>>>>>>>>> yet.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Mike
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 16:32:16 -0400
>>>>>>>>>>>>>>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>>>>>>>>>>>>>>>>>>> From: teotigraphixllc@gmail.com
>>>>>>>>>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Yeah, this "jasmine.Clock"
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> The error means that the Falcon compiler is trying to
>>>>>>> resolve
>>>>>>>>>> a
>>>>>>>>>>>>>>>> member
>>>>>>>>>>>>>>>>>>>>> expression and it can't resolve it.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> So this means there is a bug in the AST resolver. You
>> are
>>>>>>>>>> using the
>>>>>>>>>>>>>>>>>>>> extern
>>>>>>>>>>>>>>>>>>>>> in the GCC project correct?
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> If so, I need to take a look at it.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Everyone, I did one pass and tests on packages and
>> class
>>>>>>>>>> creation,
>>>>>>>>>>>>>>>> so
>>>>>>>>>>>>>>>>>>>> these
>>>>>>>>>>>>>>>>>>>>> types of bugs are to be expected as the AST/Type
>> resolver
>>>>> is
>>>>>>>>>>>>>>>> "asked" to
>>>>>>>>>>>>>>>>>>>> do
>>>>>>>>>>>>>>>>>>>>> more work then my initial implementation.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Make sense?
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Mike
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> On Fri, Jun 26, 2015 at 3:27 PM, Frédéric THOMAS <
>>>>>>>>>>>>>>>>>>>> webdoublefx@hotmail.com>
>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Hi Mike,
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Any idea why ?
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>> U:\sources\asf\flex\falcon\externs\jasmine\out\as\classes\
>>>>>>>>>>>>>>>> jasmine.as:26
>>>>>>>>>>>>>>>>>>>>>> Erreur interne : java.lang.NullPointerException
>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>
>>>>>
>> org.apache.flex.compiler.internal.scopes.TypeScope.getPropertyForMemberAccess(TypeScope.java:344)
>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>
>>>>>
>> org.apache.flex.compiler.internal.scopes.ScopeView.getPropertyForMemberAccess(ScopeView.java:81)
>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>
>>>>>
>> org.apache.flex.compiler.internal.scopes.ASScope.getPropertyFromDef(ASScope.java:879)
>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>
>>>>>
>> org.apache.flex.compiler.internal.scopes.ASScope.getPropertyFromDef(ASScope.java:841)
>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>
>>>>>
>> org.apache.flex.compiler.internal.scopes.ASScope.getPropertyFromDef(ASScope.java:760)
>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>
>>>>>
>> org.apache.flex.compiler.internal.tree.as.IdentifierNode.resolveMemberRef(IdentifierNode.java:829)
>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>
>>>>>
>> org.apache.flex.compiler.internal.tree.as.IdentifierNode.resolve(IdentifierNode.java:377)
>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>
>>>>>
>> org.apache.flex.compiler.internal.tree.as.IdentifierNode.getMName(IdentifierNode.java:432)
>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>
>>>>>
>> org.apache.flex.compiler.internal.tree.as.MemberAccessExpressionNode.getMName(MemberAccessExpressionNode.java:158)
>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>
>>>>>
>> org.apache.flex.compiler.internal.as.codegen.ABCGeneratingReducer.dottedName(ABCGeneratingReducer.java:840)
>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>
>>>>>
>> org.apache.flex.compiler.internal.as.codegen.CmcEmitter.action_321(CmcEmitter.java:5236)
>>>>>>>>>>>>>>>>>>>>>> ...
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> public static function clock():jasmine.Clock { return
>>>>>>> null; }
>>>>>>>>>>>>>>>>>>>>>> ^
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>>>>> In the jasmine extern file
>>>>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>>>> * @return {!jasmine.Clock}
>>>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>>>> jasmine.clock = function() {};
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> /** @constructor */
>>>>>>>>>>>>>>>>>>>>>> jasmine.Clock = function() {};
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> /** */
>>>>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.install = function() {};
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> /** */
>>>>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.uninstall = function() {};
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> /** @param {number} ms */
>>>>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.tick = function(ms) {};
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> /** @param {!Date} date */
>>>>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.mockDate = function(date) {};
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>>>>> In jasmine.as
>>>>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>>>> * @returns {jasmine.Clock}
>>>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>>>> public static function clock():jasmine.Clock { return
>>>>>>> null; }
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>>>>> clock.as
>>>>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>>>>> package jasmine {
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>>>> public class Clock {
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>>>> public function Clock() {
>>>>>>>>>>>>>>>>>>>>>> super();
>>>>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>>>> * Generated doc for missing method JSDoc.
>>>>>>>>>>>>>>>>>>>>>> *
>>>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>>>> public function install():void { }
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>>>> * @param ms [number]
>>>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>>>> public function tick(ms:Number):void { }
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>>>> * Generated doc for missing method JSDoc.
>>>>>>>>>>>>>>>>>>>>>> *
>>>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>>>> public function uninstall():void { }
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>>>> * @param date [Date]
>>>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>>>> public function mockDate(date:Date):void { }
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>
>>>>>
>>>
>>
>>
 		 	   		  

Re: [Externs] jasmine-2.0.js

Posted by Michael Schmalle <te...@gmail.com>.
On Mon, Jul 6, 2015 at 11:44 AM, Frédéric THOMAS <we...@hotmail.com>
wrote:

> Also I'm trying to write tests for this pass and I've got something that
> doesn't pass, why the "bar" parameter is consider as optional in the
> collectImport.CollectImports constructor ?
> see the emmitted "@param bar [(foo.Bar|null)] ",  why not "@param bar
> {foo.Bar} " ?
>


It's because ? means OR NULL in externs. We are using the annotation
resolver which passes back implicit meaning, so it's not saying it's
optional it's saying it CAN be null, but something MUST be passed.

So anything that is;

@param bar {foo.Bar}

is actually

@param bar {foo.Bar?}

If you use !, it means it cannot be null, a value must be passed that is
not null.

Mike


>
> /**
>  * @constructor
>  * @extends {superClasses.Import}
>  * @param {foo.Bar} bar
>  * @param {number} value
>  */
> collectImport.CollectImports = function(bar, value) {};
>
> EMMITTED TO:
>
> package collectImport {
>
> import superClasses.Import;
>
> /**
>  * @see [collect_import]
>  */
> public class CollectImports extends superClasses.Import {
>
>     /**
>      * @param bar [(foo.Bar|null)]
>      * @param value [number]
>      * @see [collect_import]
>      */
>     public function CollectImports(bar:foo.Bar, value:Number) {
>         super();
>     }
>
> Thanks,
> Frédéric THOMAS
>
>
> ----------------------------------------
> > From: webdoublefx@hotmail.com
> > To: dev@flex.apache.org
> > Subject: RE: [Externs] jasmine-2.0.js
> > Date: Mon, 6 Jul 2015 00:18:10 +0100
> >
> >> I am going to be busy most of the week remodeling my mother in laws
> >> bathroom starting tomorrow. So if you want to try a new custom pass like
> >> ResolveImportPass, go for it, I will just stay out of the way. I think
> it
> >> would be good for you. :) If not, no worries, you gave me the idea. haha
> >>
> >> If you did, look at it like this, since all imports and logic therin are
> >> totally dependent on what the compiler actual saves into the model,
> logic
> >> says this needs to be the last or one of the last passes, from my
> >> perspective, it needs to be the last.
> >>
> >> If you make it the last, then this pass is not coupled to us fixing bugs
> >> ahead of it. Say we find out we need to add another structure of AST
> >> parsing for a node structure I havn't implemented yet, well we are safe.
> >>
> >> Why safe? Because in this import pass, you are using the MODEL, so no
> AST.
> >> Instead of worrying about resolving imports during AST traversal, you
> are
> >> using what is already in the container after all that complex parsing is
> >> finished.
> >>
> >> So this pass, you would use your skills at knowing "what" in each
> subclass
> >> of BaseReference could contain a type. Then write your logic pass to
> >> traverse Classes, then into each classes members, then loop through each
> >> member and analyze their types and do your import testing logic there.
> >>
> >> Once you find instances of imports that need to be saves, your current
> >> context is already the ClassReference, so call classRef.addImport(). :)
> >
> >
> > You can review the add-CollectImportPass branch before I merge it when
> you have a chance.
> > Thanks,
> > Frédéric THOMAS
> >
> >
> > ----------------------------------------
> >> Date: Sun, 28 Jun 2015 14:23:57 -0400
> >> Subject: Re: [Externs] jasmine-2.0.js
> >> From: teotigraphixllc@gmail.com
> >> To: dev@flex.apache.org
> >>
> >> Kewl.
> >>
> >> I am going to be busy most of the week remodeling my mother in laws
> >> bathroom starting tomorrow. So if you want to try a new custom pass like
> >> ResolveImportPass, go for it, I will just stay out of the way. I think
> it
> >> would be good for you. :) If not, no worries, you gave me the idea. haha
> >>
> >> If you did, look at it like this, since all imports and logic therin are
> >> totally dependent on what the compiler actual saves into the model,
> logic
> >> says this needs to be the last or one of the last passes, from my
> >> perspective, it needs to be the last.
> >>
> >> If you make it the last, then this pass is not coupled to us fixing bugs
> >> ahead of it. Say we find out we need to add another structure of AST
> >> parsing for a node structure I havn't implemented yet, well we are safe.
> >>
> >> Why safe? Because in this import pass, you are using the MODEL, so no
> AST.
> >> Instead of worrying about resolving imports during AST traversal, you
> are
> >> using what is already in the container after all that complex parsing is
> >> finished.
> >>
> >> So this pass, you would use your skills at knowing "what" in each
> subclass
> >> of BaseReference could contain a type. Then write your logic pass to
> >> traverse Classes, then into each classes members, then loop through each
> >> member and analyze their types and do your import testing logic there.
> >>
> >> Once you find instances of imports that need to be saves, your current
> >> context is already the ClassReference, so call classRef.addImport(). :)
> >>
> >> Mike
> >>
> >>
> >>
> >>
> >> On Sun, Jun 28, 2015 at 2:13 PM, Frédéric THOMAS <
> webdoublefx@hotmail.com>
> >> wrote:
> >>
> >>>> All I meant is that 75% of the time we would just want to save things
> in
> >>>> the model or a reference, such that you use addImport() during the
> >>>> resolution. Then it keeps the emit() phase straight burn rubber and
> loop
> >>>> through all existing model structures, where imports would be just a
> list
> >>>> that emitImport() iterates through, no logic.
> >>>
> >>> Got it !
> >>>
> >>>> I AM NOT saying what you did was wrong, I am just offering a look into
> >>> how
> >>>> I set it up. You know how I got this pattern? From my massive
> mistakes in
> >>>> code generators of past. :) I realized that an emit phase needs to be
> >>>> stupid and not dependent on any type of intelligence, just needs to
> >>> create
> >>>> what already exists.
> >>>
> >>> I'm in a phase where I'm learning compiler things and indeed I will do
> >>> some mistakes
> >>> or I won't be as precise as you who have experience on it.
> >>> Therefore I can accept critics and learn from your explanations :-)
> >>>
> >>>> This can also solve many problems at once. So I haven't got back into
> the
> >>>> code BUT my intuition says we need a universal solution for any type
> of
> >>>> TYPE that is attached to a member, identifier such as a param type,
> >>> return
> >>>> type, filed type, superclass and interface(already taken care of using
> >>>> addImport()).
> >>>>
> >>>> See where I am coming from? We know that every type is eventually
> going
> >>> to
> >>>> need to be scanned for imports and validated.
> >>>
> >>> Yes, actually, I was expecting to see a specific pass for that.
> >>>
> >>>> Dude, I just don't want to come off bossy or condescending, I love you
> >>>> help. A lot can be added to this compiler that could be very
> interesting.
> >>>> So having you understand my design intention is really important to
> me.
> >>> :)
> >>>
> >>> Don't worry, I don't think you are bossy or condescending Mike, I'm
> >>> reading you
> >>> and try to put in parallel the new informations you give and what I've
> >>> seen in the code
> >>> for a better understanding, that's it.
> >>>
> >>> Cheers,
> >>> Frédéric THOMAS
> >>>
> >>>
> >>> ----------------------------------------
> >>>> Date: Sun, 28 Jun 2015 13:48:02 -0400
> >>>> Subject: Re: [Externs] jasmine-2.0.js
> >>>> From: teotigraphixllc@gmail.com
> >>>> To: dev@flex.apache.org
> >>>>
> >>>> Fred you did an awesome job. :)
> >>>>
> >>>> All I meant is that 75% of the time we would just want to save things
> in
> >>>> the model or a reference, such that you use addImport() during the
> >>>> resolution. Then it keeps the emit() phase straight burn rubber and
> loop
> >>>> through all existing model structures, where imports would be just a
> list
> >>>> that emitImport() iterates through, no logic.
> >>>>
> >>>> I AM NOT saying what you did was wrong, I am just offering a look into
> >>> how
> >>>> I set it up. You know how I got this pattern? From my massive
> mistakes in
> >>>> code generators of past. :) I realized that an emit phase needs to be
> >>>> stupid and not dependent on any type of intelligence, just needs to
> >>> create
> >>>> what already exists.
> >>>>
> >>>> This can also solve many problems at once. So I haven't got back into
> the
> >>>> code BUT my intuition says we need a universal solution for any type
> of
> >>>> TYPE that is attached to a member, identifier such as a param type,
> >>> return
> >>>> type, filed type, superclass and interface(already taken care of using
> >>>> addImport()).
> >>>>
> >>>> See where I am coming from? We know that every type is eventually
> going
> >>> to
> >>>> need to be scanned for imports and validated.
> >>>>
> >>>> Dude, I just don't want to come off bossy or condescending, I love you
> >>>> help. A lot can be added to this compiler that could be very
> interesting.
> >>>> So having you understand my design intention is really important to
> me.
> >>> :)
> >>>>
> >>>> Mike
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> On Sun, Jun 28, 2015 at 1:37 PM, Frédéric THOMAS <
> >>> webdoublefx@hotmail.com>
> >>>> wrote:
> >>>>
> >>>>>> Fred pretty much iterated things correctly.
> >>>>>>
> >>>>>> The ResolvePackageNamePass I haven't to get back to. I was in the
> >>> middle
> >>>>> of
> >>>>>> implementing something when I got it to work in another place.
> >>>>>>
> >>>>>> There is a pattern to how things are parsed so most of the time it's
> >>>>> better
> >>>>>> to set state as nodes/references are being added to the model. In
> the
> >>>>> case
> >>>>>> of imports, I don't see any problems right now with checking during
> the
> >>>>>> emit phase but, if the model was more interactive during the
> session,
> >>>>> this
> >>>>>> type of logic should happen during the resolve phase so the model
> with
> >>>>> it's
> >>>>>> references has a correct state if there is any logic happening
> between
> >>>>> two
> >>>>>> references.
> >>>>>
> >>>>> Thanks for the explanation, I will take the time to do some debug
> spins
> >>> to
> >>>>> understand
> >>>>> when the phases are called, what they do and what classes are
> involved.
> >>>>> Given it is a fairly small transpiler and despite the recursive
> visitor
> >>>>> pattern, I guess I can do it.
> >>>>>
> >>>>>> How much are you working on right now Fred? I just ask because I
> don't
> >>>>> want
> >>>>>> to create any conflicts.
> >>>>>
> >>>>> Go ahead Mike, I'm done with that at the moment, I did my last
> cleanup
> >>>>> already.
> >>>>> Anyway, better I work on a branch and commit the branch instead for
> >>> review
> >>>>> next time.
> >>>>>
> >>>>> Frédéric THOMAS
> >>>>>
> >>>>>
> >>>>> ----------------------------------------
> >>>>>> Date: Sun, 28 Jun 2015 13:23:15 -0400
> >>>>>> Subject: Re: [Externs] jasmine-2.0.js
> >>>>>> From: teotigraphixllc@gmail.com
> >>>>>> To: dev@flex.apache.org
> >>>>>>
> >>>>>> Fred pretty much iterated things correctly.
> >>>>>>
> >>>>>> The ResolvePackageNamePass I haven't to get back to. I was in the
> >>> middle
> >>>>> of
> >>>>>> implementing something when I got it to work in another place.
> >>>>>>
> >>>>>> There is a pattern to how things are parsed so most of the time it's
> >>>>> better
> >>>>>> to set state as nodes/references are being added to the model. In
> the
> >>>>> case
> >>>>>> of imports, I don't see any problems right now with checking during
> the
> >>>>>> emit phase but, if the model was more interactive during the
> session,
> >>>>> this
> >>>>>> type of logic should happen during the resolve phase so the model
> with
> >>>>> it's
> >>>>>> references has a correct state if there is any logic happening
> between
> >>>>> two
> >>>>>> references.
> >>>>>>
> >>>>>> How much are you working on right now Fred? I just ask because I
> don't
> >>>>> want
> >>>>>> to create any conflicts.
> >>>>>>
> >>>>>> Mike
> >>>>>> .
> >>>>>>
> >>>>>> On Sat, Jun 27, 2015 at 5:58 PM, Michael Schmalle <
> >>>>> teotigraphixllc@gmail.com
> >>>>>>> wrote:
> >>>>>>
> >>>>>>> Hey Fred, I was out all day. I will have some time in the morning
> to
> >>>>> look
> >>>>>>> at what you did and comment. :)
> >>>>>>>
> >>>>>>> Mike
> >>>>>>>
> >>>>>>> On Sat, Jun 27, 2015 at 5:27 PM, Frédéric THOMAS <
> >>>>> webdoublefx@hotmail.com>
> >>>>>>> wrote:
> >>>>>>>
> >>>>>>>> Just to explain what I did, especially to folks who would like to
> get
> >>>>>>>> their hand dirty on the compiler but like me, don't know how it
> works
> >>>>> :-)
> >>>>>>>>
> >>>>>>>> I was adding jasmine-2.0.js [1], a file that contains only jsDoc
> >>>>>>>> (parameters and return type descriptions) and declarations, no
> >>>>>>>> implementations.
> >>>>>>>> When I say "adding jasmine-2.0.js" I mean, transpile this .js
> file to
> >>>>> .as
> >>>>>>>> and then compile it to a .swc.
> >>>>>>>>
> >>>>>>>> The transpilation part is done by EXTERNC
> >>>>>>>>
> >>>>>>>> You call it like that:
> >>>>>>>>
> >>>>>>>> <java jar="${basedir}/compiler.jx/lib/externc.jar" fork="true"
> >>>>>>>> failonerror="false">
> >>>>>>>> <arg value="+flexlib=${env.ASJS_HOME}/frameworks" />
> >>>>>>>> <arg value="-debug" />
> >>>>>>>> <arg
> >>>>>>>>
> >>>>>
> >>>
> value="-load-config=${basedir}/externs/jasmine/jasmine-compile-config.xml"
> >>>>>>>> />
> >>>>>>>>
> >>>>>>>> In the jasmine-compile-config.xml, you can exclude classes and
> >>> member,
> >>>>>>>> for example, in the jasmine.Spec class, I excluded the variable
> >>>>> $injector
> >>>>>>>> as its type was coming from the Angular library that is not yet
> >>>>> transpiled.
> >>>>>>>>
> >>>>>>>> <field-exclude>
> >>>>>>>> <class>jasmine.Spec</class>
> >>>>>>>> <field>$injector</field>
> >>>>>>>> </field-exclude>
> >>>>>>>>
> >>>>>>>> You can also exclude classes and functions.
> >>>>>>>>
> >>>>>>>> The compile part is done by the falcon compc as follow:
> >>>>>>>>
> >>>>>>>> <java
> >>> jar="${basedir}/compiler/generated/dist/sdk/lib/falcon-compc.jar"
> >>>>>>>> fork="true"
> >>>>>>>> failonerror="true">
> >>>>>>>> <arg value="+flexlib=${env.ASJS_HOME}/frameworks" />
> >>>>>>>> <arg value="-debug" />
> >>>>>>>> <arg
> >>>>>>>>
> value="-load-config=${basedir}/externs/jasmine/compile-config.xml" />
> >>>>>>>> <arg
> >>>>>>>>
> value="-output=${basedir}/externs/jasmine/out/bin/jasmine-2.0.swc" />
> >>>>>>>> </java>
> >>>>>>>>
> >>>>>>>> The problem was that this last part was failing with an NPE a
> Type of
> >>>>>>>> something:
> >>>>>>>>
> >>>>>>>>
> >>>>>
> >>>
> org.apache.flex.compiler.internal.scopes.TypeScope.getPropertyForMemberAccess(TypeScope.java:344)
> >>>>>>>>
> >>>>>>>> Even looking closely at the code, I didn't get why it was failing
> but
> >>>>> for
> >>>>>>>> sure, because it was trying to compile one of the transpiled .as
> >>> file,
> >>>>> this
> >>>>>>>> transpiled code was wrong.
> >>>>>>>> Looking at those .as, it was easy to see that some import were
> >>> missing.
> >>>>>>>>
> >>>>>>>> So, why the 2 others externs (js and jquery) had no issues ?
> >>>>>>>> It is always surprising to see something working on all the things
> >>>>> except
> >>>>>>>> of yours, but it can help you too :-)
> >>>>>>>>
> >>>>>>>> So, I've been looking at those other transpiled .as files from
> >>> existing
> >>>>>>>> externs to see if they had imports and they were some.
> >>>>>>>> I then created a mini jasmine.js containing only the faulty case
> >>> only,
> >>>>>>>> that, from what I've been able to determinate, was that the import
> >>> was
> >>>>> not
> >>>>>>>> generated when a static function had a return type of a class
> created
> >>>>> via a
> >>>>>>>> function constructor, so, I filled this mini jasmine.js with the
> >>>>> equivalent
> >>>>>>>> of a static function like this:
> >>>>>>>>
> >>>>>>>> /**
> >>>>>>>> * @return {!jasmine.Clock}
> >>>>>>>> */
> >>>>>>>> jasmine.clock = function() {};
> >>>>>>>>
> >>>>>>>> Which should transpile in AS3, something like:
> >>>>>>>>
> >>>>>>>> import jasmine.Clock;
> >>>>>>>> public static function clock():Clock {}
> >>>>>>>>
> >>>>>>>> and a function constructor like this:
> >>>>>>>>
> >>>>>>>> /** @constructor */
> >>>>>>>> jasmine.Clock = function() {};
> >>>>>>>>
> >>>>>>>> which transpile:
> >>>>>>>>
> >>>>>>>> package jasmine {
> >>>>>>>> public class Clock {}
> >>>>>>>> }
> >>>>>>>>
> >>>>>>>> Created a test class based on those Mike created for the previous
> >>>>> externs
> >>>>>>>> doing:
> >>>>>>>>
> >>>>>>>> // jasmine, the main jasmine class.
> >>>>>>>> ClassReference jasmine = model.getClassReference("jasmine");
> >>>>>>>> assertNotNull(jasmine);
> >>>>>>>>
> >>>>>>>> assertTrue(jasmine.hasImport("jasmine.Clock"));
> >>>>>>>>
> >>>>>>>> The hasImport method didn't exist on ClassReference but it was a
> >>>>>>>> addImport(), I follow to where it was called in
> ResolvePackagesPass
> >>>>> hoping
> >>>>>>>> to find a missing case but after debug spin I wasn't able to do
> what
> >>> I
> >>>>>>>> expected, I'm not sure I understood all the logic in this class
> but
> >>> it
> >>>>>>>> looked like the Node of my return type was never visited and
> >>> therefore
> >>>>>>>> wasn't able to add my import here.
> >>>>>>>>
> >>>>>>>> But wait, in the ClassReference, I have a
> >>>>>>>>
> >>>>>>>> public MethodReference addMethod(Node node, String functionName,
> >>>>>>>> JSDocInfo comment, boolean isStatic)
> >>>>>>>>
> >>>>>>>> To me it would be enough to add the import to the list of imports
> to
> >>> be
> >>>>>>>> emitted when the MethodReference is to be added, I just had to
> >>>>> determinate
> >>>>>>>> if the return type given in the jsDoc was not from the current
> >>>>> package, the
> >>>>>>>> given method not excluded, the given return type neither !
> >>>>>>>>
> >>>>>>>> My test was passing was I was able to compile with this new code
> the
> >>>>> old
> >>>>>>>> externs.
> >>>>>>>>
> >>>>>>>> The only thing I had to do to finish to compile the jasmine extern
> >>> was
> >>>>> to
> >>>>>>>> emit the imports for the global functions too as they shown to be
> >>>>> faulty
> >>>>>>>> for the same reasons.
> >>>>>>>>
> >>>>>>>> Mike will probably tell me now where my logic was wrong now :-)
> >>>>>>>>
> >>>>>>>> Frédéric THOMAS
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> ----------------------------------------
> >>>>>>>>> From: webdoublefx@hotmail.com
> >>>>>>>>> To: dev@flex.apache.org
> >>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
> >>>>>>>>> Date: Sat, 27 Jun 2015 20:43:43 +0100
> >>>>>>>>>
> >>>>>>>>> Ok, done !
> >>>>>>>>>
> >>>>>>>>> I forgot to uncomment the externc build of jasmine and print the
> >>>>> global
> >>>>>>>> function imports !
> >>>>>>>>>
> >>>>>>>>> Frédéric THOMAS
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> ----------------------------------------
> >>>>>>>>>> From: webdoublefx@hotmail.com
> >>>>>>>>>> To: dev@flex.apache.org
> >>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
> >>>>>>>>>> Date: Sat, 27 Jun 2015 20:12:16 +0100
> >>>>>>>>>>
> >>>>>>>>>>> I pushed the changes which are ready to be reviewed.
> >>>>>>>>>>
> >>>>>>>>>> oups, hold on, I had some things commented that hidden other
> >>>>> problems,
> >>>>>>>> I will continue on it.
> >>>>>>>>>>
> >>>>>>>>>> Frédéric THOMAS
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> ----------------------------------------
> >>>>>>>>>>> From: webdoublefx@hotmail.com
> >>>>>>>>>>> To: dev@flex.apache.org
> >>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
> >>>>>>>>>>> Date: Sat, 27 Jun 2015 18:31:32 +0100
> >>>>>>>>>>>
> >>>>>>>>>>> Hi Mike,
> >>>>>>>>>>>
> >>>>>>>>>>> I pushed the changes which are ready to be reviewed.
> >>>>>>>>>>>
> >>>>>>>>>>> Note: The jasmine-2.0.js is not committed as it should be
> >>> downloaded
> >>>>>>>> with the unpack-externs target of the download.xml, I followed the
> >>>>> model.
> >>>>>>>>>>>
> >>>>>>>>>>> Thanks,
> >>>>>>>>>>> Frédéric THOMAS
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> ----------------------------------------
> >>>>>>>>>>>> Date: Sat, 27 Jun 2015 05:31:50 -0400
> >>>>>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
> >>>>>>>>>>>> From: teotigraphixllc@gmail.com
> >>>>>>>>>>>> To: dev@flex.apache.org
> >>>>>>>>>>>>
> >>>>>>>>>>>> I just noticed you said today or tomorrow, whatever man.
> doesn't
> >>>>>>>> matter.
> >>>>>>>>>>>>
> >>>>>>>>>>>> Mike
> >>>>>>>>>>>>
> >>>>>>>>>>>> On Sat, Jun 27, 2015 at 5:17 AM, Michael Schmalle <
> >>>>>>>> teotigraphixllc@gmail.com
> >>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>
> >>>>>>>>>>>>> Well its the practice. I know the pattern I am using so if I
> >>> have
> >>>>> to
> >>>>>>>>>>>>> adjust it to fit I will. You can tell that with AST type
> stuff,
> >>> it
> >>>>>>>> has to
> >>>>>>>>>>>>> follow a specific pattern or everything turns to crap when
> >>> trying
> >>>>>>>> to add
> >>>>>>>>>>>>> stuff down the road.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Commit it sooner than later as I have a couple hours to
> check it
> >>>>>>>> out this
> >>>>>>>>>>>>> morning.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Mike
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> On Sat, Jun 27, 2015 at 3:15 AM, Frédéric THOMAS <
> >>>>>>>> webdoublefx@hotmail.com>
> >>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> Hi Mike,
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> I can now compile jasmine, I'm not sure my fix is very clean
> >>> but
> >>>>> it
> >>>>>>>>>>>>>> works, I've been able to compile all the externs with.
> >>>>>>>>>>>>>> I will commit it later today or tomorrow as I need to clean
> a
> >>> bit
> >>>>>>>> before
> >>>>>>>>>>>>>> and it would be nice if you can review it.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>> Frédéric THOMAS
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> ----------------------------------------
> >>>>>>>>>>>>>>> From: webdoublefx@hotmail.com
> >>>>>>>>>>>>>>> To: dev@flex.apache.org
> >>>>>>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
> >>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 22:43:30 +0100
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Hey Mike, it looks like "import jasmine.Clock;" is missing
> in
> >>>>> the
> >>>>>>>>>>>>>> generated jasmine.as, that's it !
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Frédéric THOMAS
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> ----------------------------------------
> >>>>>>>>>>>>>>>> From: webdoublefx@hotmail.com
> >>>>>>>>>>>>>>>> To: dev@flex.apache.org
> >>>>>>>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
> >>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 22:26:32 +0100
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> HAHA, ah that is a hard one man, thanks for the offer
> but I
> >>>>>>>> think I am
> >>>>>>>>>>>>>>>>> going to need to get this one. There are a couple places
> it
> >>>>>>>> could be
> >>>>>>>>>>>>>> though
> >>>>>>>>>>>>>>>>> if you are curious.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> First you really need to understand the problem, I am
> typing
> >>>>>>>> this
> >>>>>>>>>>>>>> stuff in
> >>>>>>>>>>>>>>>>> between installing a bathroom vanity and sink, so I
> haven't
> >>>>>>>> looked at
> >>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>> code yet. :)
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> So I can't really give you an answer since I don't quite
> >>> know
> >>>>>>>> the
> >>>>>>>>>>>>>> problem
> >>>>>>>>>>>>>>>>> yet.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Ok, I will check your solution :-)
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Frédéric THOMAS
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> ----------------------------------------
> >>>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 16:59:58 -0400
> >>>>>>>>>>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
> >>>>>>>>>>>>>>>>> From: teotigraphixllc@gmail.com
> >>>>>>>>>>>>>>>>> To: dev@flex.apache.org
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> On Fri, Jun 26, 2015 at 4:39 PM, Frédéric THOMAS <
> >>>>>>>>>>>>>> webdoublefx@hotmail.com>
> >>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Yeah, this "jasmine.Clock"
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> The error means that the Falcon compiler is trying to
> >>>>> resolve
> >>>>>>>> a
> >>>>>>>>>>>>>> member
> >>>>>>>>>>>>>>>>>>> expression and it can't resolve it.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> So this means there is a bug in the AST resolver. You
> are
> >>>>>>>> using the
> >>>>>>>>>>>>>>>>>> extern
> >>>>>>>>>>>>>>>>>>> in the GCC project correct?
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Yes,
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>
> >>>>>
> >>>
> https://raw.githubusercontent.com/google/closure-compiler/master/contrib/externs/jasmine-2.0.js
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> If so, I need to take a look at it.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Everyone, I did one pass and tests on packages and
> class
> >>>>>>>> creation,
> >>>>>>>>>>>>>> so
> >>>>>>>>>>>>>>>>>> these
> >>>>>>>>>>>>>>>>>>> types of bugs are to be expected as the AST/Type
> resolver
> >>> is
> >>>>>>>>>>>>>> "asked" to
> >>>>>>>>>>>>>>>>>> do
> >>>>>>>>>>>>>>>>>>> more work then my initial implementation.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Make sense?
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Well, kind of :-)
> >>>>>>>>>>>>>>>>>> What classes would you check for this ?
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> HAHA, ah that is a hard one man, thanks for the offer
> but I
> >>>>>>>> think I am
> >>>>>>>>>>>>>>>>> going to need to get this one. There are a couple places
> it
> >>>>>>>> could be
> >>>>>>>>>>>>>> though
> >>>>>>>>>>>>>>>>> if you are curious.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> First you really need to understand the problem, I am
> typing
> >>>>>>>> this
> >>>>>>>>>>>>>> stuff in
> >>>>>>>>>>>>>>>>> between installing a bathroom vanity and sink, so I
> haven't
> >>>>>>>> looked at
> >>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>> code yet. :)
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> So I can't really give you an answer since I don't quite
> >>> know
> >>>>>>>> the
> >>>>>>>>>>>>>> problem
> >>>>>>>>>>>>>>>>> yet.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Mike
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>>>>>> Frédéric THOMAS
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> ----------------------------------------
> >>>>>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 16:32:16 -0400
> >>>>>>>>>>>>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
> >>>>>>>>>>>>>>>>>>> From: teotigraphixllc@gmail.com
> >>>>>>>>>>>>>>>>>>> To: dev@flex.apache.org
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Yeah, this "jasmine.Clock"
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> The error means that the Falcon compiler is trying to
> >>>>> resolve
> >>>>>>>> a
> >>>>>>>>>>>>>> member
> >>>>>>>>>>>>>>>>>>> expression and it can't resolve it.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> So this means there is a bug in the AST resolver. You
> are
> >>>>>>>> using the
> >>>>>>>>>>>>>>>>>> extern
> >>>>>>>>>>>>>>>>>>> in the GCC project correct?
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> If so, I need to take a look at it.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Everyone, I did one pass and tests on packages and
> class
> >>>>>>>> creation,
> >>>>>>>>>>>>>> so
> >>>>>>>>>>>>>>>>>> these
> >>>>>>>>>>>>>>>>>>> types of bugs are to be expected as the AST/Type
> resolver
> >>> is
> >>>>>>>>>>>>>> "asked" to
> >>>>>>>>>>>>>>>>>> do
> >>>>>>>>>>>>>>>>>>> more work then my initial implementation.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Make sense?
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Mike
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> On Fri, Jun 26, 2015 at 3:27 PM, Frédéric THOMAS <
> >>>>>>>>>>>>>>>>>> webdoublefx@hotmail.com>
> >>>>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Hi Mike,
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Any idea why ?
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>
> >>> U:\sources\asf\flex\falcon\externs\jasmine\out\as\classes\
> >>>>>>>>>>>>>> jasmine.as:26
> >>>>>>>>>>>>>>>>>>>> Erreur interne : java.lang.NullPointerException
> >>>>>>>>>>>>>>>>>>>> at
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>
> >>>>>
> >>>
> org.apache.flex.compiler.internal.scopes.TypeScope.getPropertyForMemberAccess(TypeScope.java:344)
> >>>>>>>>>>>>>>>>>>>> at
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>
> >>>>>
> >>>
> org.apache.flex.compiler.internal.scopes.ScopeView.getPropertyForMemberAccess(ScopeView.java:81)
> >>>>>>>>>>>>>>>>>>>> at
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>
> >>>>>
> >>>
> org.apache.flex.compiler.internal.scopes.ASScope.getPropertyFromDef(ASScope.java:879)
> >>>>>>>>>>>>>>>>>>>> at
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>
> >>>>>
> >>>
> org.apache.flex.compiler.internal.scopes.ASScope.getPropertyFromDef(ASScope.java:841)
> >>>>>>>>>>>>>>>>>>>> at
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>
> >>>>>
> >>>
> org.apache.flex.compiler.internal.scopes.ASScope.getPropertyFromDef(ASScope.java:760)
> >>>>>>>>>>>>>>>>>>>> at
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>
> >>>>>
> >>>
> org.apache.flex.compiler.internal.tree.as.IdentifierNode.resolveMemberRef(IdentifierNode.java:829)
> >>>>>>>>>>>>>>>>>>>> at
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>
> >>>>>
> >>>
> org.apache.flex.compiler.internal.tree.as.IdentifierNode.resolve(IdentifierNode.java:377)
> >>>>>>>>>>>>>>>>>>>> at
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>
> >>>>>
> >>>
> org.apache.flex.compiler.internal.tree.as.IdentifierNode.getMName(IdentifierNode.java:432)
> >>>>>>>>>>>>>>>>>>>> at
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>
> >>>>>
> >>>
> org.apache.flex.compiler.internal.tree.as.MemberAccessExpressionNode.getMName(MemberAccessExpressionNode.java:158)
> >>>>>>>>>>>>>>>>>>>> at
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>
> >>>>>
> >>>
> org.apache.flex.compiler.internal.as.codegen.ABCGeneratingReducer.dottedName(ABCGeneratingReducer.java:840)
> >>>>>>>>>>>>>>>>>>>> at
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>
> >>>>>
> >>>
> org.apache.flex.compiler.internal.as.codegen.CmcEmitter.action_321(CmcEmitter.java:5236)
> >>>>>>>>>>>>>>>>>>>> ...
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> public static function clock():jasmine.Clock { return
> >>>>> null; }
> >>>>>>>>>>>>>>>>>>>> ^
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> -----------------------------
> >>>>>>>>>>>>>>>>>>>> In the jasmine extern file
> >>>>>>>>>>>>>>>>>>>> -----------------------------
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> /**
> >>>>>>>>>>>>>>>>>>>> * @return {!jasmine.Clock}
> >>>>>>>>>>>>>>>>>>>> */
> >>>>>>>>>>>>>>>>>>>> jasmine.clock = function() {};
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> /** @constructor */
> >>>>>>>>>>>>>>>>>>>> jasmine.Clock = function() {};
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> /** */
> >>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.install = function() {};
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> /** */
> >>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.uninstall = function() {};
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> /** @param {number} ms */
> >>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.tick = function(ms) {};
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> /** @param {!Date} date */
> >>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.mockDate = function(date) {};
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> -----------------------------
> >>>>>>>>>>>>>>>>>>>> In jasmine.as
> >>>>>>>>>>>>>>>>>>>> -----------------------------
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> /**
> >>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
> >>>>>>>>>>>>>>>>>>>> * @returns {jasmine.Clock}
> >>>>>>>>>>>>>>>>>>>> */
> >>>>>>>>>>>>>>>>>>>> public static function clock():jasmine.Clock { return
> >>>>> null; }
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> -----------------------------
> >>>>>>>>>>>>>>>>>>>> clock.as
> >>>>>>>>>>>>>>>>>>>> -----------------------------
> >>>>>>>>>>>>>>>>>>>> package jasmine {
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> /**
> >>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
> >>>>>>>>>>>>>>>>>>>> */
> >>>>>>>>>>>>>>>>>>>> public class Clock {
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> /**
> >>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
> >>>>>>>>>>>>>>>>>>>> */
> >>>>>>>>>>>>>>>>>>>> public function Clock() {
> >>>>>>>>>>>>>>>>>>>> super();
> >>>>>>>>>>>>>>>>>>>> }
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> /**
> >>>>>>>>>>>>>>>>>>>> * Generated doc for missing method JSDoc.
> >>>>>>>>>>>>>>>>>>>> *
> >>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
> >>>>>>>>>>>>>>>>>>>> */
> >>>>>>>>>>>>>>>>>>>> public function install():void { }
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> /**
> >>>>>>>>>>>>>>>>>>>> * @param ms [number]
> >>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
> >>>>>>>>>>>>>>>>>>>> */
> >>>>>>>>>>>>>>>>>>>> public function tick(ms:Number):void { }
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> /**
> >>>>>>>>>>>>>>>>>>>> * Generated doc for missing method JSDoc.
> >>>>>>>>>>>>>>>>>>>> *
> >>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
> >>>>>>>>>>>>>>>>>>>> */
> >>>>>>>>>>>>>>>>>>>> public function uninstall():void { }
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> /**
> >>>>>>>>>>>>>>>>>>>> * @param date [Date]
> >>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
> >>>>>>>>>>>>>>>>>>>> */
> >>>>>>>>>>>>>>>>>>>> public function mockDate(date:Date):void { }
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> }
> >>>>>>>>>>>>>>>>>>>> }
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>>>>>>>> Frédéric THOMAS
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>
> >>>>>
> >>>
> >>>
> >
>
>

RE: [Externs] jasmine-2.0.js

Posted by Frédéric THOMAS <we...@hotmail.com>.
Also I'm trying to write tests for this pass and I've got something that doesn't pass, why the "bar" parameter is consider as optional in the collectImport.CollectImports constructor ? 
see the emmitted "@param bar [(foo.Bar|null)] ",  why not "@param bar {foo.Bar} " ?

/**
 * @constructor
 * @extends {superClasses.Import}
 * @param {foo.Bar} bar
 * @param {number} value
 */
collectImport.CollectImports = function(bar, value) {};

EMMITTED TO:

package collectImport {

import superClasses.Import;

/**
 * @see [collect_import]
 */
public class CollectImports extends superClasses.Import {

    /**
     * @param bar [(foo.Bar|null)] 
     * @param value [number] 
     * @see [collect_import]
     */
    public function CollectImports(bar:foo.Bar, value:Number) {
        super();
    }

Thanks,
Frédéric THOMAS


----------------------------------------
> From: webdoublefx@hotmail.com
> To: dev@flex.apache.org
> Subject: RE: [Externs] jasmine-2.0.js
> Date: Mon, 6 Jul 2015 00:18:10 +0100
>
>> I am going to be busy most of the week remodeling my mother in laws
>> bathroom starting tomorrow. So if you want to try a new custom pass like
>> ResolveImportPass, go for it, I will just stay out of the way. I think it
>> would be good for you. :) If not, no worries, you gave me the idea. haha
>>
>> If you did, look at it like this, since all imports and logic therin are
>> totally dependent on what the compiler actual saves into the model, logic
>> says this needs to be the last or one of the last passes, from my
>> perspective, it needs to be the last.
>>
>> If you make it the last, then this pass is not coupled to us fixing bugs
>> ahead of it. Say we find out we need to add another structure of AST
>> parsing for a node structure I havn't implemented yet, well we are safe.
>>
>> Why safe? Because in this import pass, you are using the MODEL, so no AST.
>> Instead of worrying about resolving imports during AST traversal, you are
>> using what is already in the container after all that complex parsing is
>> finished.
>>
>> So this pass, you would use your skills at knowing "what" in each subclass
>> of BaseReference could contain a type. Then write your logic pass to
>> traverse Classes, then into each classes members, then loop through each
>> member and analyze their types and do your import testing logic there.
>>
>> Once you find instances of imports that need to be saves, your current
>> context is already the ClassReference, so call classRef.addImport(). :)
>
>
> You can review the add-CollectImportPass branch before I merge it when you have a chance.
> Thanks,
> Frédéric THOMAS
>
>
> ----------------------------------------
>> Date: Sun, 28 Jun 2015 14:23:57 -0400
>> Subject: Re: [Externs] jasmine-2.0.js
>> From: teotigraphixllc@gmail.com
>> To: dev@flex.apache.org
>>
>> Kewl.
>>
>> I am going to be busy most of the week remodeling my mother in laws
>> bathroom starting tomorrow. So if you want to try a new custom pass like
>> ResolveImportPass, go for it, I will just stay out of the way. I think it
>> would be good for you. :) If not, no worries, you gave me the idea. haha
>>
>> If you did, look at it like this, since all imports and logic therin are
>> totally dependent on what the compiler actual saves into the model, logic
>> says this needs to be the last or one of the last passes, from my
>> perspective, it needs to be the last.
>>
>> If you make it the last, then this pass is not coupled to us fixing bugs
>> ahead of it. Say we find out we need to add another structure of AST
>> parsing for a node structure I havn't implemented yet, well we are safe.
>>
>> Why safe? Because in this import pass, you are using the MODEL, so no AST.
>> Instead of worrying about resolving imports during AST traversal, you are
>> using what is already in the container after all that complex parsing is
>> finished.
>>
>> So this pass, you would use your skills at knowing "what" in each subclass
>> of BaseReference could contain a type. Then write your logic pass to
>> traverse Classes, then into each classes members, then loop through each
>> member and analyze their types and do your import testing logic there.
>>
>> Once you find instances of imports that need to be saves, your current
>> context is already the ClassReference, so call classRef.addImport(). :)
>>
>> Mike
>>
>>
>>
>>
>> On Sun, Jun 28, 2015 at 2:13 PM, Frédéric THOMAS <we...@hotmail.com>
>> wrote:
>>
>>>> All I meant is that 75% of the time we would just want to save things in
>>>> the model or a reference, such that you use addImport() during the
>>>> resolution. Then it keeps the emit() phase straight burn rubber and loop
>>>> through all existing model structures, where imports would be just a list
>>>> that emitImport() iterates through, no logic.
>>>
>>> Got it !
>>>
>>>> I AM NOT saying what you did was wrong, I am just offering a look into
>>> how
>>>> I set it up. You know how I got this pattern? From my massive mistakes in
>>>> code generators of past. :) I realized that an emit phase needs to be
>>>> stupid and not dependent on any type of intelligence, just needs to
>>> create
>>>> what already exists.
>>>
>>> I'm in a phase where I'm learning compiler things and indeed I will do
>>> some mistakes
>>> or I won't be as precise as you who have experience on it.
>>> Therefore I can accept critics and learn from your explanations :-)
>>>
>>>> This can also solve many problems at once. So I haven't got back into the
>>>> code BUT my intuition says we need a universal solution for any type of
>>>> TYPE that is attached to a member, identifier such as a param type,
>>> return
>>>> type, filed type, superclass and interface(already taken care of using
>>>> addImport()).
>>>>
>>>> See where I am coming from? We know that every type is eventually going
>>> to
>>>> need to be scanned for imports and validated.
>>>
>>> Yes, actually, I was expecting to see a specific pass for that.
>>>
>>>> Dude, I just don't want to come off bossy or condescending, I love you
>>>> help. A lot can be added to this compiler that could be very interesting.
>>>> So having you understand my design intention is really important to me.
>>> :)
>>>
>>> Don't worry, I don't think you are bossy or condescending Mike, I'm
>>> reading you
>>> and try to put in parallel the new informations you give and what I've
>>> seen in the code
>>> for a better understanding, that's it.
>>>
>>> Cheers,
>>> Frédéric THOMAS
>>>
>>>
>>> ----------------------------------------
>>>> Date: Sun, 28 Jun 2015 13:48:02 -0400
>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>> From: teotigraphixllc@gmail.com
>>>> To: dev@flex.apache.org
>>>>
>>>> Fred you did an awesome job. :)
>>>>
>>>> All I meant is that 75% of the time we would just want to save things in
>>>> the model or a reference, such that you use addImport() during the
>>>> resolution. Then it keeps the emit() phase straight burn rubber and loop
>>>> through all existing model structures, where imports would be just a list
>>>> that emitImport() iterates through, no logic.
>>>>
>>>> I AM NOT saying what you did was wrong, I am just offering a look into
>>> how
>>>> I set it up. You know how I got this pattern? From my massive mistakes in
>>>> code generators of past. :) I realized that an emit phase needs to be
>>>> stupid and not dependent on any type of intelligence, just needs to
>>> create
>>>> what already exists.
>>>>
>>>> This can also solve many problems at once. So I haven't got back into the
>>>> code BUT my intuition says we need a universal solution for any type of
>>>> TYPE that is attached to a member, identifier such as a param type,
>>> return
>>>> type, filed type, superclass and interface(already taken care of using
>>>> addImport()).
>>>>
>>>> See where I am coming from? We know that every type is eventually going
>>> to
>>>> need to be scanned for imports and validated.
>>>>
>>>> Dude, I just don't want to come off bossy or condescending, I love you
>>>> help. A lot can be added to this compiler that could be very interesting.
>>>> So having you understand my design intention is really important to me.
>>> :)
>>>>
>>>> Mike
>>>>
>>>>
>>>>
>>>>
>>>> On Sun, Jun 28, 2015 at 1:37 PM, Frédéric THOMAS <
>>> webdoublefx@hotmail.com>
>>>> wrote:
>>>>
>>>>>> Fred pretty much iterated things correctly.
>>>>>>
>>>>>> The ResolvePackageNamePass I haven't to get back to. I was in the
>>> middle
>>>>> of
>>>>>> implementing something when I got it to work in another place.
>>>>>>
>>>>>> There is a pattern to how things are parsed so most of the time it's
>>>>> better
>>>>>> to set state as nodes/references are being added to the model. In the
>>>>> case
>>>>>> of imports, I don't see any problems right now with checking during the
>>>>>> emit phase but, if the model was more interactive during the session,
>>>>> this
>>>>>> type of logic should happen during the resolve phase so the model with
>>>>> it's
>>>>>> references has a correct state if there is any logic happening between
>>>>> two
>>>>>> references.
>>>>>
>>>>> Thanks for the explanation, I will take the time to do some debug spins
>>> to
>>>>> understand
>>>>> when the phases are called, what they do and what classes are involved.
>>>>> Given it is a fairly small transpiler and despite the recursive visitor
>>>>> pattern, I guess I can do it.
>>>>>
>>>>>> How much are you working on right now Fred? I just ask because I don't
>>>>> want
>>>>>> to create any conflicts.
>>>>>
>>>>> Go ahead Mike, I'm done with that at the moment, I did my last cleanup
>>>>> already.
>>>>> Anyway, better I work on a branch and commit the branch instead for
>>> review
>>>>> next time.
>>>>>
>>>>> Frédéric THOMAS
>>>>>
>>>>>
>>>>> ----------------------------------------
>>>>>> Date: Sun, 28 Jun 2015 13:23:15 -0400
>>>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>>>> From: teotigraphixllc@gmail.com
>>>>>> To: dev@flex.apache.org
>>>>>>
>>>>>> Fred pretty much iterated things correctly.
>>>>>>
>>>>>> The ResolvePackageNamePass I haven't to get back to. I was in the
>>> middle
>>>>> of
>>>>>> implementing something when I got it to work in another place.
>>>>>>
>>>>>> There is a pattern to how things are parsed so most of the time it's
>>>>> better
>>>>>> to set state as nodes/references are being added to the model. In the
>>>>> case
>>>>>> of imports, I don't see any problems right now with checking during the
>>>>>> emit phase but, if the model was more interactive during the session,
>>>>> this
>>>>>> type of logic should happen during the resolve phase so the model with
>>>>> it's
>>>>>> references has a correct state if there is any logic happening between
>>>>> two
>>>>>> references.
>>>>>>
>>>>>> How much are you working on right now Fred? I just ask because I don't
>>>>> want
>>>>>> to create any conflicts.
>>>>>>
>>>>>> Mike
>>>>>> .
>>>>>>
>>>>>> On Sat, Jun 27, 2015 at 5:58 PM, Michael Schmalle <
>>>>> teotigraphixllc@gmail.com
>>>>>>> wrote:
>>>>>>
>>>>>>> Hey Fred, I was out all day. I will have some time in the morning to
>>>>> look
>>>>>>> at what you did and comment. :)
>>>>>>>
>>>>>>> Mike
>>>>>>>
>>>>>>> On Sat, Jun 27, 2015 at 5:27 PM, Frédéric THOMAS <
>>>>> webdoublefx@hotmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Just to explain what I did, especially to folks who would like to get
>>>>>>>> their hand dirty on the compiler but like me, don't know how it works
>>>>> :-)
>>>>>>>>
>>>>>>>> I was adding jasmine-2.0.js [1], a file that contains only jsDoc
>>>>>>>> (parameters and return type descriptions) and declarations, no
>>>>>>>> implementations.
>>>>>>>> When I say "adding jasmine-2.0.js" I mean, transpile this .js file to
>>>>> .as
>>>>>>>> and then compile it to a .swc.
>>>>>>>>
>>>>>>>> The transpilation part is done by EXTERNC
>>>>>>>>
>>>>>>>> You call it like that:
>>>>>>>>
>>>>>>>> <java jar="${basedir}/compiler.jx/lib/externc.jar" fork="true"
>>>>>>>> failonerror="false">
>>>>>>>> <arg value="+flexlib=${env.ASJS_HOME}/frameworks" />
>>>>>>>> <arg value="-debug" />
>>>>>>>> <arg
>>>>>>>>
>>>>>
>>> value="-load-config=${basedir}/externs/jasmine/jasmine-compile-config.xml"
>>>>>>>> />
>>>>>>>>
>>>>>>>> In the jasmine-compile-config.xml, you can exclude classes and
>>> member,
>>>>>>>> for example, in the jasmine.Spec class, I excluded the variable
>>>>> $injector
>>>>>>>> as its type was coming from the Angular library that is not yet
>>>>> transpiled.
>>>>>>>>
>>>>>>>> <field-exclude>
>>>>>>>> <class>jasmine.Spec</class>
>>>>>>>> <field>$injector</field>
>>>>>>>> </field-exclude>
>>>>>>>>
>>>>>>>> You can also exclude classes and functions.
>>>>>>>>
>>>>>>>> The compile part is done by the falcon compc as follow:
>>>>>>>>
>>>>>>>> <java
>>> jar="${basedir}/compiler/generated/dist/sdk/lib/falcon-compc.jar"
>>>>>>>> fork="true"
>>>>>>>> failonerror="true">
>>>>>>>> <arg value="+flexlib=${env.ASJS_HOME}/frameworks" />
>>>>>>>> <arg value="-debug" />
>>>>>>>> <arg
>>>>>>>> value="-load-config=${basedir}/externs/jasmine/compile-config.xml" />
>>>>>>>> <arg
>>>>>>>> value="-output=${basedir}/externs/jasmine/out/bin/jasmine-2.0.swc" />
>>>>>>>> </java>
>>>>>>>>
>>>>>>>> The problem was that this last part was failing with an NPE a Type of
>>>>>>>> something:
>>>>>>>>
>>>>>>>>
>>>>>
>>> org.apache.flex.compiler.internal.scopes.TypeScope.getPropertyForMemberAccess(TypeScope.java:344)
>>>>>>>>
>>>>>>>> Even looking closely at the code, I didn't get why it was failing but
>>>>> for
>>>>>>>> sure, because it was trying to compile one of the transpiled .as
>>> file,
>>>>> this
>>>>>>>> transpiled code was wrong.
>>>>>>>> Looking at those .as, it was easy to see that some import were
>>> missing.
>>>>>>>>
>>>>>>>> So, why the 2 others externs (js and jquery) had no issues ?
>>>>>>>> It is always surprising to see something working on all the things
>>>>> except
>>>>>>>> of yours, but it can help you too :-)
>>>>>>>>
>>>>>>>> So, I've been looking at those other transpiled .as files from
>>> existing
>>>>>>>> externs to see if they had imports and they were some.
>>>>>>>> I then created a mini jasmine.js containing only the faulty case
>>> only,
>>>>>>>> that, from what I've been able to determinate, was that the import
>>> was
>>>>> not
>>>>>>>> generated when a static function had a return type of a class created
>>>>> via a
>>>>>>>> function constructor, so, I filled this mini jasmine.js with the
>>>>> equivalent
>>>>>>>> of a static function like this:
>>>>>>>>
>>>>>>>> /**
>>>>>>>> * @return {!jasmine.Clock}
>>>>>>>> */
>>>>>>>> jasmine.clock = function() {};
>>>>>>>>
>>>>>>>> Which should transpile in AS3, something like:
>>>>>>>>
>>>>>>>> import jasmine.Clock;
>>>>>>>> public static function clock():Clock {}
>>>>>>>>
>>>>>>>> and a function constructor like this:
>>>>>>>>
>>>>>>>> /** @constructor */
>>>>>>>> jasmine.Clock = function() {};
>>>>>>>>
>>>>>>>> which transpile:
>>>>>>>>
>>>>>>>> package jasmine {
>>>>>>>> public class Clock {}
>>>>>>>> }
>>>>>>>>
>>>>>>>> Created a test class based on those Mike created for the previous
>>>>> externs
>>>>>>>> doing:
>>>>>>>>
>>>>>>>> // jasmine, the main jasmine class.
>>>>>>>> ClassReference jasmine = model.getClassReference("jasmine");
>>>>>>>> assertNotNull(jasmine);
>>>>>>>>
>>>>>>>> assertTrue(jasmine.hasImport("jasmine.Clock"));
>>>>>>>>
>>>>>>>> The hasImport method didn't exist on ClassReference but it was a
>>>>>>>> addImport(), I follow to where it was called in ResolvePackagesPass
>>>>> hoping
>>>>>>>> to find a missing case but after debug spin I wasn't able to do what
>>> I
>>>>>>>> expected, I'm not sure I understood all the logic in this class but
>>> it
>>>>>>>> looked like the Node of my return type was never visited and
>>> therefore
>>>>>>>> wasn't able to add my import here.
>>>>>>>>
>>>>>>>> But wait, in the ClassReference, I have a
>>>>>>>>
>>>>>>>> public MethodReference addMethod(Node node, String functionName,
>>>>>>>> JSDocInfo comment, boolean isStatic)
>>>>>>>>
>>>>>>>> To me it would be enough to add the import to the list of imports to
>>> be
>>>>>>>> emitted when the MethodReference is to be added, I just had to
>>>>> determinate
>>>>>>>> if the return type given in the jsDoc was not from the current
>>>>> package, the
>>>>>>>> given method not excluded, the given return type neither !
>>>>>>>>
>>>>>>>> My test was passing was I was able to compile with this new code the
>>>>> old
>>>>>>>> externs.
>>>>>>>>
>>>>>>>> The only thing I had to do to finish to compile the jasmine extern
>>> was
>>>>> to
>>>>>>>> emit the imports for the global functions too as they shown to be
>>>>> faulty
>>>>>>>> for the same reasons.
>>>>>>>>
>>>>>>>> Mike will probably tell me now where my logic was wrong now :-)
>>>>>>>>
>>>>>>>> Frédéric THOMAS
>>>>>>>>
>>>>>>>>
>>>>>>>> ----------------------------------------
>>>>>>>>> From: webdoublefx@hotmail.com
>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>>>>>>> Date: Sat, 27 Jun 2015 20:43:43 +0100
>>>>>>>>>
>>>>>>>>> Ok, done !
>>>>>>>>>
>>>>>>>>> I forgot to uncomment the externc build of jasmine and print the
>>>>> global
>>>>>>>> function imports !
>>>>>>>>>
>>>>>>>>> Frédéric THOMAS
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ----------------------------------------
>>>>>>>>>> From: webdoublefx@hotmail.com
>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>>>>>>>> Date: Sat, 27 Jun 2015 20:12:16 +0100
>>>>>>>>>>
>>>>>>>>>>> I pushed the changes which are ready to be reviewed.
>>>>>>>>>>
>>>>>>>>>> oups, hold on, I had some things commented that hidden other
>>>>> problems,
>>>>>>>> I will continue on it.
>>>>>>>>>>
>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> ----------------------------------------
>>>>>>>>>>> From: webdoublefx@hotmail.com
>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>>>>>>>>> Date: Sat, 27 Jun 2015 18:31:32 +0100
>>>>>>>>>>>
>>>>>>>>>>> Hi Mike,
>>>>>>>>>>>
>>>>>>>>>>> I pushed the changes which are ready to be reviewed.
>>>>>>>>>>>
>>>>>>>>>>> Note: The jasmine-2.0.js is not committed as it should be
>>> downloaded
>>>>>>>> with the unpack-externs target of the download.xml, I followed the
>>>>> model.
>>>>>>>>>>>
>>>>>>>>>>> Thanks,
>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>> Date: Sat, 27 Jun 2015 05:31:50 -0400
>>>>>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>>>>>>>>>> From: teotigraphixllc@gmail.com
>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>
>>>>>>>>>>>> I just noticed you said today or tomorrow, whatever man. doesn't
>>>>>>>> matter.
>>>>>>>>>>>>
>>>>>>>>>>>> Mike
>>>>>>>>>>>>
>>>>>>>>>>>> On Sat, Jun 27, 2015 at 5:17 AM, Michael Schmalle <
>>>>>>>> teotigraphixllc@gmail.com
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Well its the practice. I know the pattern I am using so if I
>>> have
>>>>> to
>>>>>>>>>>>>> adjust it to fit I will. You can tell that with AST type stuff,
>>> it
>>>>>>>> has to
>>>>>>>>>>>>> follow a specific pattern or everything turns to crap when
>>> trying
>>>>>>>> to add
>>>>>>>>>>>>> stuff down the road.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Commit it sooner than later as I have a couple hours to check it
>>>>>>>> out this
>>>>>>>>>>>>> morning.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Mike
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Sat, Jun 27, 2015 at 3:15 AM, Frédéric THOMAS <
>>>>>>>> webdoublefx@hotmail.com>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hi Mike,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I can now compile jasmine, I'm not sure my fix is very clean
>>> but
>>>>> it
>>>>>>>>>>>>>> works, I've been able to compile all the externs with.
>>>>>>>>>>>>>> I will commit it later today or tomorrow as I need to clean a
>>> bit
>>>>>>>> before
>>>>>>>>>>>>>> and it would be nice if you can review it.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>>>> From: webdoublefx@hotmail.com
>>>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 22:43:30 +0100
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hey Mike, it looks like "import jasmine.Clock;" is missing in
>>>>> the
>>>>>>>>>>>>>> generated jasmine.as, that's it !
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>>>>> From: webdoublefx@hotmail.com
>>>>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>>>>> Subject: RE: [Externs] jasmine-2.0.js
>>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 22:26:32 +0100
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> HAHA, ah that is a hard one man, thanks for the offer but I
>>>>>>>> think I am
>>>>>>>>>>>>>>>>> going to need to get this one. There are a couple places it
>>>>>>>> could be
>>>>>>>>>>>>>> though
>>>>>>>>>>>>>>>>> if you are curious.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> First you really need to understand the problem, I am typing
>>>>>>>> this
>>>>>>>>>>>>>> stuff in
>>>>>>>>>>>>>>>>> between installing a bathroom vanity and sink, so I haven't
>>>>>>>> looked at
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> code yet. :)
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> So I can't really give you an answer since I don't quite
>>> know
>>>>>>>> the
>>>>>>>>>>>>>> problem
>>>>>>>>>>>>>>>>> yet.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Ok, I will check your solution :-)
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 16:59:58 -0400
>>>>>>>>>>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>>>>>>>>>>>>>>> From: teotigraphixllc@gmail.com
>>>>>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Fri, Jun 26, 2015 at 4:39 PM, Frédéric THOMAS <
>>>>>>>>>>>>>> webdoublefx@hotmail.com>
>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Yeah, this "jasmine.Clock"
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> The error means that the Falcon compiler is trying to
>>>>> resolve
>>>>>>>> a
>>>>>>>>>>>>>> member
>>>>>>>>>>>>>>>>>>> expression and it can't resolve it.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> So this means there is a bug in the AST resolver. You are
>>>>>>>> using the
>>>>>>>>>>>>>>>>>> extern
>>>>>>>>>>>>>>>>>>> in the GCC project correct?
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Yes,
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>
>>>>>
>>> https://raw.githubusercontent.com/google/closure-compiler/master/contrib/externs/jasmine-2.0.js
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> If so, I need to take a look at it.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Everyone, I did one pass and tests on packages and class
>>>>>>>> creation,
>>>>>>>>>>>>>> so
>>>>>>>>>>>>>>>>>> these
>>>>>>>>>>>>>>>>>>> types of bugs are to be expected as the AST/Type resolver
>>> is
>>>>>>>>>>>>>> "asked" to
>>>>>>>>>>>>>>>>>> do
>>>>>>>>>>>>>>>>>>> more work then my initial implementation.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Make sense?
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Well, kind of :-)
>>>>>>>>>>>>>>>>>> What classes would you check for this ?
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> HAHA, ah that is a hard one man, thanks for the offer but I
>>>>>>>> think I am
>>>>>>>>>>>>>>>>> going to need to get this one. There are a couple places it
>>>>>>>> could be
>>>>>>>>>>>>>> though
>>>>>>>>>>>>>>>>> if you are curious.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> First you really need to understand the problem, I am typing
>>>>>>>> this
>>>>>>>>>>>>>> stuff in
>>>>>>>>>>>>>>>>> between installing a bathroom vanity and sink, so I haven't
>>>>>>>> looked at
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> code yet. :)
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> So I can't really give you an answer since I don't quite
>>> know
>>>>>>>> the
>>>>>>>>>>>>>> problem
>>>>>>>>>>>>>>>>> yet.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Mike
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> ----------------------------------------
>>>>>>>>>>>>>>>>>>> Date: Fri, 26 Jun 2015 16:32:16 -0400
>>>>>>>>>>>>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js
>>>>>>>>>>>>>>>>>>> From: teotigraphixllc@gmail.com
>>>>>>>>>>>>>>>>>>> To: dev@flex.apache.org
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Yeah, this "jasmine.Clock"
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> The error means that the Falcon compiler is trying to
>>>>> resolve
>>>>>>>> a
>>>>>>>>>>>>>> member
>>>>>>>>>>>>>>>>>>> expression and it can't resolve it.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> So this means there is a bug in the AST resolver. You are
>>>>>>>> using the
>>>>>>>>>>>>>>>>>> extern
>>>>>>>>>>>>>>>>>>> in the GCC project correct?
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> If so, I need to take a look at it.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Everyone, I did one pass and tests on packages and class
>>>>>>>> creation,
>>>>>>>>>>>>>> so
>>>>>>>>>>>>>>>>>> these
>>>>>>>>>>>>>>>>>>> types of bugs are to be expected as the AST/Type resolver
>>> is
>>>>>>>>>>>>>> "asked" to
>>>>>>>>>>>>>>>>>> do
>>>>>>>>>>>>>>>>>>> more work then my initial implementation.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Make sense?
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Mike
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> On Fri, Jun 26, 2015 at 3:27 PM, Frédéric THOMAS <
>>>>>>>>>>>>>>>>>> webdoublefx@hotmail.com>
>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Hi Mike,
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Any idea why ?
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>> U:\sources\asf\flex\falcon\externs\jasmine\out\as\classes\
>>>>>>>>>>>>>> jasmine.as:26
>>>>>>>>>>>>>>>>>>>> Erreur interne : java.lang.NullPointerException
>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>
>>>>>
>>> org.apache.flex.compiler.internal.scopes.TypeScope.getPropertyForMemberAccess(TypeScope.java:344)
>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>
>>>>>
>>> org.apache.flex.compiler.internal.scopes.ScopeView.getPropertyForMemberAccess(ScopeView.java:81)
>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>
>>>>>
>>> org.apache.flex.compiler.internal.scopes.ASScope.getPropertyFromDef(ASScope.java:879)
>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>
>>>>>
>>> org.apache.flex.compiler.internal.scopes.ASScope.getPropertyFromDef(ASScope.java:841)
>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>
>>>>>
>>> org.apache.flex.compiler.internal.scopes.ASScope.getPropertyFromDef(ASScope.java:760)
>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>
>>>>>
>>> org.apache.flex.compiler.internal.tree.as.IdentifierNode.resolveMemberRef(IdentifierNode.java:829)
>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>
>>>>>
>>> org.apache.flex.compiler.internal.tree.as.IdentifierNode.resolve(IdentifierNode.java:377)
>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>
>>>>>
>>> org.apache.flex.compiler.internal.tree.as.IdentifierNode.getMName(IdentifierNode.java:432)
>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>
>>>>>
>>> org.apache.flex.compiler.internal.tree.as.MemberAccessExpressionNode.getMName(MemberAccessExpressionNode.java:158)
>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>
>>>>>
>>> org.apache.flex.compiler.internal.as.codegen.ABCGeneratingReducer.dottedName(ABCGeneratingReducer.java:840)
>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>
>>>>>
>>> org.apache.flex.compiler.internal.as.codegen.CmcEmitter.action_321(CmcEmitter.java:5236)
>>>>>>>>>>>>>>>>>>>> ...
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> public static function clock():jasmine.Clock { return
>>>>> null; }
>>>>>>>>>>>>>>>>>>>> ^
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>>> In the jasmine extern file
>>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>> * @return {!jasmine.Clock}
>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>> jasmine.clock = function() {};
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> /** @constructor */
>>>>>>>>>>>>>>>>>>>> jasmine.Clock = function() {};
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> /** */
>>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.install = function() {};
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> /** */
>>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.uninstall = function() {};
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> /** @param {number} ms */
>>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.tick = function(ms) {};
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> /** @param {!Date} date */
>>>>>>>>>>>>>>>>>>>> jasmine.Clock.prototype.mockDate = function(date) {};
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>>> In jasmine.as
>>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>> * @returns {jasmine.Clock}
>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>> public static function clock():jasmine.Clock { return
>>>>> null; }
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>>> clock.as
>>>>>>>>>>>>>>>>>>>> -----------------------------
>>>>>>>>>>>>>>>>>>>> package jasmine {
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>> public class Clock {
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>> public function Clock() {
>>>>>>>>>>>>>>>>>>>> super();
>>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>> * Generated doc for missing method JSDoc.
>>>>>>>>>>>>>>>>>>>> *
>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>> public function install():void { }
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>> * @param ms [number]
>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>> public function tick(ms:Number):void { }
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>> * Generated doc for missing method JSDoc.
>>>>>>>>>>>>>>>>>>>> *
>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>> public function uninstall():void { }
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> /**
>>>>>>>>>>>>>>>>>>>> * @param date [Date]
>>>>>>>>>>>>>>>>>>>> * @see [jasmine-2.0]
>>>>>>>>>>>>>>>>>>>> */
>>>>>>>>>>>>>>>>>>>> public function mockDate(date:Date):void { }
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>> Frédéric THOMAS
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>
>>>>>
>>>
>>>
>