On Sun, Jun 28, 2015 at 3:57 PM, Frédéric THOMAS <webdoubl...@hotmail.com> wrote:
> I just found that > http://stackoverflow.com/questions/881515/how-do-i-declare-a-namespace-in-javascript > > There are I guess all the ways to create them. > haha I looked at that very same thread a couple weeks ago. There is a way that is almost standard in extern files though. var foo = {}; foo.bar = {}; foo.bar = {la:1, le:2}; // could be a class It gets weird with typedefs and stuff as well. Mike > > Frédéric THOMAS > > > ---------------------------------------- > > Date: Sun, 28 Jun 2015 15:51:45 -0400 > > Subject: Re: [Externs] jasmine-2.0.js > > From: teotigraphix...@gmail.com > > To: dev@flex.apache.org > > > > On Sun, Jun 28, 2015 at 3:49 PM, Frédéric THOMAS < > webdoubl...@hotmail.com> > > wrote: > > > >>> My intuition is telling me I am not handling them correctly for most > >> cases, > >>> things work right now but it would be better if we had some test .js > >> files > >>> that had all types of package/namespace creation structures. > >> > >> Like what ? > >> > >> > > Well if I had complete tests I could tell you. ;-) > > > > Mike > > > > > > > >> Frédéric THOMAS > >> > >> > >> ---------------------------------------- > >>> Date: Sun, 28 Jun 2015 15:33:42 -0400 > >>> Subject: Re: [Externs] jasmine-2.0.js > >>> From: teotigraphix...@gmail.com > >>> To: dev@flex.apache.org > >>> > >>> And... haha packages are really sketchy. We need more package type test > >>> from the externs that use them. > >>> > >>> My intuition is telling me I am not handling them correctly for most > >> cases, > >>> things work right now but it would be better if we had some test .js > >> files > >>> that had all types of package/namespace creation structures. > >>> > >>> Mike > >>> > >>> On Sun, Jun 28, 2015 at 3:28 PM, Michael Schmalle < > >> teotigraphix...@gmail.com > >>>> wrote: > >>> > >>>> Fred, what I plan on doing since you are going to be working with the > >> code > >>>> is start to test all the base externs we have and find bugs or non > >>>> implemented things. I will probably just add the things I find in JIRA > >>>> throughout the week during my little free time. > >>>> > >>>> I'm not going to change any code, just add unit tests. One other thing > >>>> that I havn't got to is type unit tests. I really just hacked the type > >>>> resolving, yeah it works but I see ways in the future of doing some > >> stuff > >>>> with maybe function callbacks and if I get the type tests down well, I > >> will > >>>> feel more comfortable trying to parse the harder externs out there. > >>>> > >>>> Also, we should allow a way to parse those generated externs just for > >>>> stubs but, they have nested {} object creation which the parser > ignores > >>>> right now, so that is another thing that can be tested and > implemented. > >>>> > >>>> Mike > >>>> > >>>> > >>>> > >>>> On Sun, Jun 28, 2015 at 3:21 PM, Frédéric THOMAS < > >> webdoubl...@hotmail.com> > >>>> wrote: > >>>> > >>>>> Thanks ! > >>>>> > >>>>> Frédéric THOMAS > >>>>> > >>>>> > >>>>> ---------------------------------------- > >>>>>> Date: Sun, 28 Jun 2015 15:11:20 -0400 > >>>>>> Subject: Re: [Externs] jasmine-2.0.js > >>>>>> From: teotigraphix...@gmail.com > >>>>>> To: dev@flex.apache.org > >>>>>> > >>>>>> Yeah I know, sent to your hotmail. > >>>>>> > >>>>>> Mike > >>>>>> > >>>>>> On Sun, Jun 28, 2015 at 3:10 PM, Frédéric THOMAS < > >>>>> webdoubl...@hotmail.com> > >>>>>> wrote: > >>>>>> > >>>>>>>> What you can do is to send me your eclipse formatter property > file. > >>>>>>>> I will use it in IJ. > >>>>>>> > >>>>>>> I meant export your formatter profiles in xml > >>>>>>> > >>>>>>> Thanks, > >>>>>>> Frédéric THOMAS > >>>>>>> > >>>>>>> > >>>>>>> ---------------------------------------- > >>>>>>>> From: webdoubl...@hotmail.com > >>>>>>>> To: dev@flex.apache.org > >>>>>>>> Subject: RE: [Externs] jasmine-2.0.js > >>>>>>>> Date: Sun, 28 Jun 2015 20:06:19 +0100 > >>>>>>>> > >>>>>>>>> BTW, what should we do about code formatting, it seems my > >> formatting > >>>>> is > >>>>>>>>> different then yours. I am using Eclipse right now since I don't > >>>>> have IJ > >>>>>>>>> setup for Falcon dev. > >>>>>>>> > >>>>>>>> I was wrong when I thought I had setup IJ correctly for Falcon, > they > >>>>> are > >>>>>>> still > >>>>>>>> things it doesn't know how to do, for instance, share the > generated > >>>>>>> classes > >>>>>>>> thru modules, therefore, it is not yet suitable for all parts of > >>>>> Falcon, > >>>>>>> at the > >>>>>>>> moment, I use tricks to be able to code with. > >>>>>>>> > >>>>>>>> What you can do is to send me your eclipse formatter property > file. > >>>>>>>> I will use it in IJ. > >>>>>>>> > >>>>>>>> Frédéric THOMAS > >>>>>>>> > >>>>>>>> > >>>>>>>> ---------------------------------------- > >>>>>>>>> Date: Sun, 28 Jun 2015 14:57:50 -0400 > >>>>>>>>> Subject: Re: [Externs] jasmine-2.0.js > >>>>>>>>> From: teotigraphix...@gmail.com > >>>>>>>>> To: dev@flex.apache.org > >>>>>>>>> > >>>>>>>>> BTW, what should we do about code formatting, it seems my > >> formatting > >>>>> is > >>>>>>>>> different then yours. I am using Eclipse right now since I don't > >>>>> have IJ > >>>>>>>>> setup for Falcon dev. > >>>>>>>>> > >>>>>>>>> Mike > >>>>>>>>> > >>>>>>>>> On Sun, Jun 28, 2015 at 2:55 PM, Michael Schmalle < > >>>>>>> teotigraphix...@gmail.com > >>>>>>>>>> wrote: > >>>>>>>>> > >>>>>>>>>> Yeah, I didn't want to go crazy with subclasses. Ideally class, > >>>>>>> function > >>>>>>>>>> and constant could share a "TopLevelReference" subclass of > >>>>>>> BaseReference > >>>>>>>>>> and you could put import logic there if you wanted to. > >>>>>>>>>> > >>>>>>>>>> Mike > >>>>>>>>>> > >>>>>>>>>> On Sun, Jun 28, 2015 at 2:51 PM, Frédéric THOMAS < > >>>>>>> webdoubl...@hotmail.com> > >>>>>>>>>> wrote: > >>>>>>>>>> > >>>>>>>>>>>> Once you find instances of imports that need to be saves, your > >>>>>>> current > >>>>>>>>>>>> context is already the ClassReference, so call > >>>>> classRef.addImport(). > >>>>>>> :) > >>>>>>>>>>> > >>>>>>>>>>> Btw, I will probably need to have a addImport() > FunctionReference > >>>>> too, > >>>>>>>>>>> right ? > >>>>>>>>>>> > >>>>>>>>>>> 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 > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>> > >>>>>>> > >>>>>>> > >>>>> > >>>>> > >>>> > >> > >> > >