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 <teotigraphix...@gmail.com> wrote: > > > 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 >> >>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>> >> >>>>>>>> >> >>>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>> >> >>>>> >> >>> >> >>> >> > >> >> >