Actually, I guess I would find where and maybe how as I've seen it while I was 
debugging the constructor, at emit time, but would mean to generate "
internal class SecretToken {}" and that I've got no idea when and how.
Frédéric THOMAS

> From: webdoubl...@hotmail.com
> To: dev@flex.apache.org
> Subject: RE: AW: [Falcon] Constructor NS (was: [Falcon] starting up)
> Date: Mon, 6 Oct 2014 23:27:58 +0100
> 
> Hi Alex,
> 
> > I have no idea what the right answer is, but I was wondering if you could
> > try to describe (in AS code) what scenarios you want to support and not
> > support.  Is this just for Singletons or are there other use cases?  And
> > what edge cases are allowed, if any?
> 
> It is not only for the singleton, for examle, at some point, I would like to 
> be able to do that:
> [Abstract]
> public class BaseClass {
> 
>     public static const INSTANCE:BaseClass = new BaseClass(11);
> 
>     private var _p:int;
> 
>     protected function BaseClass(p:int) {
>         _p = p;
>     }
> 
>     public function get p():int;
> }
> }
> 
> ---
> 
> // Error, p not implemented
> public class SubClass extends BaseClass {
> 
>     public function SubClass() {
>         super(12);
>     }
> }
> 
> ---
> public class AnotherClass {
> 
>     public function AnotherClass() {
>         const a:BaseClass = new BaseClass(13); // Error, can't instantiate a 
> non public ctor.
>     }
> }> Maybe some metadata can cause the compiler to generate different AS that
> > is sufficient for your needs.  You could even change any call to the
> > constructor from within the Singleton source code to some other function
> > that initializes the single instance.
> 
> Yes, I guess we could eventually generate some ABC code to simulate the 
> behavior, just for now, I'm not sure when and how exactly to tell the 
> compiler to generate that in case of private ctor, this in case of protected, 
> I'm just discovering it but will continue to dig into.
> 
> Frédéric THOMAS
> 
> > From: aha...@adobe.com
> > To: dev@flex.apache.org
> > Subject: Re: AW: [Falcon] Constructor NS (was: [Falcon] starting up)
> > Date: Mon, 6 Oct 2014 21:57:09 +0000
> > 
> > Hi Fred,
> > 
> > I have no idea what the right answer is, but I was wondering if you could
> > try to describe (in AS code) what scenarios you want to support and not
> > support.  Is this just for Singletons or are there other use cases?  And
> > what edge cases are allowed, if any?
> > 
> > For example, if you have code like:
> > 
> > var c:Class = MySingleton;
> > var instance:MySingleton = new c();
> > 
> > what would you want to have happen?  I¹d guess the compiler cannot check
> > it.
> > 
> > Similarly, are there any AS Singleton patterns that are sufficient?  Such
> > as:
> > 
> > public class MySingleton
> > {
> >     public function MySingleton(secretToken:SecretToken)
> >     {
> >     }
> > } 
> > internal class SecretToken
> > {
> > }
> > 
> > Maybe some metadata can cause the compiler to generate different AS that
> > is sufficient for your needs.  You could even change any call to the
> > constructor from within the Singleton source code to some other function
> > that initializes the single instance.
> > 
> > Thanks,
> > -Alex
> > 
> > 
> > On 10/6/14, 2:33 PM, "Frédéric THOMAS" <webdoubl...@hotmail.com> wrote:
> > 
> > >
> > >
> > >
> > >Hi Gordon, Darrell, Alex,
> > >
> > >I've been able to work on it a bit tonight and realized that I was wrong,
> > >actually, I can get the right NS infos parsed and emitted but can't get
> > >it back thru the ABCParser.
> > >I've been confused because I didn't check the Qualifier NS but instead
> > >its kind which was 5 (private) as I wanted but it was actually the one of
> > >the CMImplicitNS (aka, invalid NS) and wasn,'t able to find in the chain
> > >where it has been forced as I thought having removed all the one
> > >implicated in defining a ctor NS, I wonder now if the fact that the ctor
> > >is not part of a trait is the cause ?
> > >
> > >Any way, I started to explore other possibilities, one of them is to pass
> > >the NS info via MetaTag as done for go_to_definition and use this info in
> > >the semantic checker as I can't at the time of the ABC Parsing, set the
> > >NS because the Metadata are checked after the methodbody and in more,
> > >I've got no info at this point about the super class except its name
> > >coming from InstanceInfo (or indirectly via IReference) but would like to
> > >think I can manage to use the MetaTag (like
> > >"[constructor(ns:'protected')]  in the semantic checker, do you see any
> > >problem in doing so or if there's a better place and moment to do it
> > >except it could be erased by the optimiser ?
> > >
> > >The last possibility as I didn't see any drawback yet in debugging it in
> > >the emitter, is to pass the info directly in the name at FunctionNode
> > >construction time and either set the NS accordingly or use this info in
> > >the semantic checker,  as far as I've debugged it (didn't to the test yet
> > >but followed all the emitter chain), I didn't see any problem that could
> > >be to emit it and don't think there are any in reading it either thru the
> > >ABCParser, I would pass for example pass "protected:MyConstructorName",
> > >tweak the FunctionNode:isConstructor accordingly and remove the
> > >CMImplitNS checks as I did until now, what do you think, do you see any
> > >problem with this approach ?
> > >
> > >More over if the latter appears to be a valid option, it could be used
> > >for the method overloading.
> > >
> > >Thanks,
> > >Frédéric THOMAS
> > >
> > >> Subject: Re: AW: [Falcon] Constructor NS (was: [Falcon] starting up)
> > >> From: gsmit...@hotmail.com
> > >> Date: Sun, 5 Oct 2014 09:24:14 -0700
> > >> To: dev@flex.apache.org
> > >> 
> > >> It's a bit different in that the AVM is strict about access modifiers;
> > >>you cannot use reflection to call a private method from outside its
> > >>class. However I know developers have wanted non-public constructors for
> > >>a long time and most won't care if they're not enforced at runtime, so I
> > >>don't object to the compiler enhancement. I just wanted to mention
> > >>something that folks should be aware of.
> > >> 
> > >> Another thing to be aware of is that this mean there will be source
> > >>code that compiles under a Falcon that doesn't compile under the old
> > >>compiler. Would we change the old compiler as we'll or not bother? I'd
> > >>say don't bother.
> > >> 
> > >> - Gordon
> > >> 
> > >> > On Oct 5, 2014, at 8:09 AM, "Christofer Dutz"
> > >><christofer.d...@c-ware.de> wrote:
> > >> > 
> > >> > But in java this is not much different. Unless you explicitly tell
> > >>your Java VM to be strict, you can get a private constructor via
> > >>Reflection, make this accesslible at runtime and instantiate it, no
> > >>matter what the source-code says. Same with the type of generics.
> > >> > 
> > >> > So I guess it would be a great addition to Flex to at least have
> > >>features checked by the compiler, even if the runtime doesn't enforce it.
> > >> > 
> > >> > Chris
> > >> > 
> > >> > 
> > >> > -----Ursprüngliche Nachricht-----
> > >> > Von: Gordon Smith [mailto:gsmit...@hotmail.com]
> > >> > Gesendet: Sonntag, 5. Oktober 2014 04:36
> > >> > An: dev@flex.apache.org
> > >> > Betreff: Re: [Falcon] Constructor NS (was: [Falcon] starting up)
> > >> > 
> > >> > In general the ActionScript Virtual Machine enforces access modifiers
> > >>(so that, for example, something marked private is truly inaccessible by
> > >>any means outside the class) but I don't think the AVM enforces
> > >>non-public constructors. I'm guessing that a constructor in the ABC is
> > >>public regardless of what the source code says, which would mean that
> > >>the constructor could be invoked by any code via reflection. If this is
> > >>the case, I'm not convinced we should pretend that constructors can be
> > >>non-public.
> > >> > 
> > >> > - Gordon
> > >> > 
> > >> > Sent from my iPad
> > >> > 
> > >> >>> On Oct 4, 2014, at 4:14 PM, "OmPrakash Muppirala"
> > >><bigosma...@gmail.com> wrote:
> > >> >>> 
> > >> >>> On Oct 4, 2014 12:55 PM, "Frédéric THOMAS"
> > >><webdoubl...@hotmail.com> wrote:
> > >> >>> 
> > >> >>> Hi,
> > >> >>> 
> > >> >>> I started to check if it was possible to have private and protected
> > >> >> constructor in Falcon and I have to admit it was tricky especially
> > >> >> because I never seen a compiler from inside before but it is
> > >> >> apparently possible, I've been able to compile successfully:
> > >> >>> package myLib {
> > >> >>> public class CTORTest {
> > >> >>>   private var _p:int;
> > >> >>> 
> > >> >>>   private function CTORTest(p:int) {
> > >> >>>       _p = p;
> > >> >>>   }
> > >> >>> 
> > >> >>>   private function anotherFct():CTORTest {
> > >> >>>       return new CTORTest(10);
> > >> >>>   }
> > >> >>> }
> > >> >>> }
> > >> >>> and using the compiled lib:
> > >> >>> 
> > >> >>> <?xml version="1.0"?>
> > >> >>> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009";
> > >> >> xmlns:s="library://ns.adobe.com/flex/spark"
> > >> >> creationComplete="creationCompleteHandler(event)">
> > >> >>>   <fx:Script><![CDATA[
> > >> >>>       import mx.events.FlexEvent;
> > >> >>> 
> > >> >>>       import myLib.CTORTest;
> > >> >>> 
> > >> >>>       private function
> > >>creationCompleteHandler(event:FlexEvent):void {
> > >> >>>           var a:CTORTest = new CTORTest(1);
> > >> >>>       }
> > >> >>>       ]]></fx:Script>
> > >> >>> </s:Application>
> > >> >>> 
> > >> >>> gives:
> > >> >>> [Fault] exception, information=VerifyError: Error #1014: La classe
> > >> >> myLib:CTORTest::CTORTest est introuvable. (not found) with the
> > >>legacy 
> > >> >> compiler
> > >> >>> and:
> > >> >>> F:\sources\falconTestDrive\shell\src\Main.mxml:9
> > >> >>> Erreur: Appel d'une méthode qui ne semble pas définie CTORTest.
> > >>(Call 
> > >> >>> to
> > >> >> a undefined method)
> > >> >>>           var a:CTORTest = new CTORTest(1);
> > >> >>> 
> > >> >>> (I will customize the error message later)
> > >> >>> 
> > >> >>> I still need to check it works in the 3 possible ways to
> > >>instantiate 
> > >> >>> a
> > >> >> Class [1] (at the moment it works only with 1st one), check that
> > >>works 
> > >> >> with is  / instanceOf, revisit the cast function accordingly and
> > >>maybe 
> > >> >> other things not yet in my mind and especially check FP won't
> > >>complain using it.
> > >> >>> 
> > >> >>> /* expression = FunctionCallID(KeywordNewID(void), new_type_name,
> > >> >> ContainerID(expression*)) */
> > >> >>> /* expression = FunctionCallID(KeywordNewID(void), expression,
> > >> >> ContainerID(expression*)) */
> > >> >>> /* expression = FunctionCallID(KeywordNewID(void), vector_literal,
> > >> >> ContainerID(void)) */
> > >> >>> 
> > >> >>> In case all this works and I'm far to know it at the moment, I will
> > >> >>> have
> > >> >> to think about implement "method overloading" otherwise I can't see
> > >> >> any usage of a protected constructor and therefore will probably
> > >> >> require some help for the best way to implement it.
> > >> >> 
> > >> >> Exciting to see these kind of experiments.  A really good usecase
> > >>for 
> > >> >> private constructor would be to create a Singleton class, I.e a
> > >>class  
> > >> >> that cannot be instantiated outside of itself.  Would that be
> > >> >> something you can test for?
> > >> >> 
> > >> >> Thanks,
> > >> >> Om
> > >> >> 
> > >> >>> 
> > >> >>> Thanks,
> > >> >>> Frédéric THOMAS
> > >> >>> 
> > >> >>>> From: webdoubl...@hotmail.com
> > >> >>>> To: dev@flex.apache.org
> > >> >>>> Subject: RE: [Falcon] starting up
> > >> >>>> Date: Wed, 1 Oct 2014 16:57:28 +0100
> > >> >>>> 
> > >> >>>> Ah ok, thanks Gordon, I was tearing my hair out :-)
> > >> >>>> 
> > >> >>>> Frédéric THOMAS
> > >> >>>> 
> > >> >>>>> Subject: Re: [Falcon] starting up
> > >> >>>>> From: gsmit...@hotmail.com
> > >> >>>>> Date: Wed, 1 Oct 2014 08:51:16 -0700
> > >> >>>>> To: dev@flex.apache.org
> > >> >>>>> 
> > >> >>>>> That comment is out of date. Code Model was the part of pre-Falcon
> > >> >> Flash Builder that built an abstract syntax tree to support
> > >> >> intelligent editing. We used it as the beginning of Falcon's lexer
> > >>and 
> > >> >> parser. The code is just looking at the AST to see if the
> > >>constructor 
> > >> >> has a non-public namespace.
> > >> >>>>> 
> > >> >>>>> - Gordon
> > >> >>>>> 
> > >> >>>>>> On Oct 1, 2014, at 8:33 AM, "Frédéric THOMAS" <
> > >> >> webdoubl...@hotmail.com> wrote:
> > >> >>>>>> 
> > >> >>>>>> 
> > >> >>>>>> 
> > >> >>>>>> 
> > >> >>>>>> 
> > >> >>>>>> 
> > >> >>>>>> 
> > >> >>>>>> I updated it to v17.0 and check in
> > >> >> falcon\compiler\generated\dist\sdk\lib\external, is there.
> > >> >>>>>> 
> > >> >>>>>> oops, looking better, it has both, just removed the bad one, it
> > >> >> runs.
> > >> >>>>>> 
> > >> >>>>>> Now, looking at
> > >>internal\as\codegen\ClassDirectiveProcessor.java,
> > >> >>>>>> I
> > >> >> see that:
> > >> >>>>>> 
> > >> >>>>>> // If a constructor has a namespace as part of it's declaration,
> > >> >>>>>> it
> > >> >> must be declared public.
> > >> >>>>>> // It is ok to omit the namespace
> > >> >>>>>> // We must check the AST, as CM treats all ctors as public no
> > >> >> matter what the user typed in
> > >> >>>>>> // so the FunctionDefinition will always be in the public
> > >> >>>>>> namespace if( node.getActualNamespaceNode() != null &&
> > >> >>>>>>      node.getActualNamespaceNode().getName() !=
> > >> >> IASKeywordConstants.PUBLIC)
> > >> >>>>>>  problems.add(new
> > >> >> ConstructorMustBePublicProblem(node.getActualNamespaceNode()));
> > >> >>>>>> 
> > >> >>>>>> What is the CM or Code Model ?
> > >> >>>>>> 
> > >> >>>>>> Thanks,
> > >> >>>>>> Frédéric THOMAS
> > >> >>>>>> 
> > >> >>>>>>> From: aha...@adobe.com
> > >> >>>>>>> To: dev@flex.apache.org
> > >> >>>>>>> Subject: Re: [Falcon] starting up
> > >> >>>>>>> Date: Wed, 1 Oct 2014 13:36:50 +0000
> > >> >>>>>>> 
> > >> >>>>>>> Could you have an old guava.jar?
> > >> >>>>>>> 
> > >> >>>>>>>> On 10/1/14 4:32 AM, "Frédéric THOMAS" <webdoubl...@hotmail.com>
> > >> >> wrote:
> > >> >>>>>>>> 
> > >> >>>>>>>> Hi,
> > >> >>>>>>>> 
> > >> >>>>>>>> I built it with ANT an ran Falcon compc.bat from the
> > >> >> generated/dist/sdk,
> > >> >>>>>>>> does anyone knows why I get that ?
> > >> >>>>>>>> 
> > >> >>>>>>>> Exception in thread "main" java.lang.NoClassDefFoundError:
> > >> >>>>>>>> com/google/common/cache/CacheLoader
> > >> >>>>>>>> at 
> > >> >>>>>>>> org.apache.flex.compiler.clients.MXMLC.<init>(MXMLC.java:379)
> > >> >>>>>>>> at org.apache.flex.compiler.clients.COMPC.<init>(COMPC.java:54)
> > >> >>>>>>>> at
> > >> >> 
> > >>org.apache.flex.compiler.clients.COMPC.staticMainNoExit(COMPC.java:75)
> > >> >>>>>>>> at org.apache.flex.compiler.clients.COMPC.main(COMPC.java:63)
> > >> >>>>>>>> Caused by: java.lang.ClassNotFoundException:
> > >> >>>>>>>> com.google.common.cache.CacheLoader
> > >> >>>>>>>> at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
> > >> >>>>>>>> at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
> > >> >>>>>>>> at java.security.AccessController.doPrivileged(Native Method)
> > >> >>>>>>>> at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
> > >> >>>>>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
> > >> >>>>>>>> at 
> > >> >>>>>>>> sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
> > >> >>>>>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
> > >> >>>>>>>> ... 4 more
> > >> >>>>>>>> 
> > >> >>>>>>>> Thanks,
> > >> >>>>>>>> Frédéric THOMAS
> > >> >>> 
> > >
> > >                                     
> > 
>                                         
                                          

Reply via email to