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