> 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: teotigraphix...@gmail.com > To: dev@flex.apache.org > > On Mon, Jul 6, 2015 at 11:44 AM, Frédéric THOMAS <webdoubl...@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: webdoubl...@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: 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 >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>> >>>>>>> >>>>> >>>>> >>> >> >>