> If it's top level why would we need an import, I am confused? lol, sorry, not enough coffee !!
Frédéric THOMAS ---------------------------------------- > Date: Sun, 28 Jun 2015 14:41:52 -0400 > Subject: Re: [Externs] jasmine-2.0.js > From: teotigraphix...@gmail.com > To: dev@flex.apache.org > > If it's top level why would we need an import, I am confused? > > Mike > > On Sun, Jun 28, 2015 at 2:38 PM, Frédéric THOMAS <webdoubl...@hotmail.com> > wrote: > >>> 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(). :) >> >> Ok yes, will give it a try. >> Just another thing maybe you can help with, is there a function somewhere >> that does something like isBuiltin(type) as I didn't know how to deal with >> imports of top level custom classes or even if we should try to manage >> that. >> >> Frédéric THOMAS >> >> >> ---------------------------------------- >>> Date: Sun, 28 Jun 2015 14:23:57 -0400 >>> Subject: Re: [Externs] jasmine-2.0.js >>> From: teotigraphix...@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 < >> webdoubl...@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: teotigraphix...@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 < >>>> webdoubl...@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: teotigraphix...@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 < >>>>>> teotigraphix...@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 < >>>>>> webdoubl...@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: webdoubl...@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: webdoubl...@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: webdoubl...@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: teotigraphix...@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 < >>>>>>>>> teotigraphix...@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 < >>>>>>>>> webdoubl...@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: webdoubl...@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: webdoubl...@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: teotigraphix...@gmail.com >>>>>>>>>>>>>>>>>> To: dev@flex.apache.org >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> On Fri, Jun 26, 2015 at 4:39 PM, Frédéric THOMAS < >>>>>>>>>>>>>>> webdoubl...@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: teotigraphix...@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 < >>>>>>>>>>>>>>>>>>> webdoubl...@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 >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>> >>>>>> >>>> >>>> >> >>