BTW, this goes for Constant, Function and Class/Interface top level refs. You visit each one of these references from the model and go into the class members or function/constant signatures.
Mike On Sun, Jun 28, 2015 at 2:23 PM, Michael Schmalle <teotigraphix...@gmail.com > wrote: > 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 >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>> >> >>>>>>> >> >>>>>> >> >>>>> >> >>>>> >> >>>> >> >>>> >> >> >> >> >> >> > >