@Om, I've been able to compile:

package myLib {
public class CTORTest {

    public static const INSTANCE:CTORTest = new CTORTest(11);

    private var _p:int;

    private function CTORTest(p:int) {
        _p = p;
    }

    public function get p():int {
        return _p;
    }
}
}
and run:
<?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 {
            trace(CTORTest.INSTANCE.p);

            //var a:CTORTest = new CTORTest(1);

            // Compile time:
            //F:\sources\falconTestDrive\shell\src\Main.mxml:10
            //Erreur: Appel à une méthode qui ne semble pas définie CTORTest.
            //var a:CTORTest = new CTORTest(1);            
            //                     ^
        }
        ]]></fx:Script>
</s:Application>

But work in the legacy compiler now if I uncomment the instantiation :P

Frédéric THOMAS

> From: webdoubl...@hotmail.com
> To: dev@flex.apache.org
> Subject: RE: [Falcon] Constructor NS (was: [Falcon] starting up)
> Date: Sun, 5 Oct 2014 06:55:47 +0100
> 
> Gorgon, sorry as well, I didn't mean FB but FP, I use to write faster than I 
> think :P
> 
> Frédéric THOMAS
> 
> > From: webdoubl...@hotmail.com
> > To: dev@flex.apache.org
> > Subject: RE: [Falcon] Constructor NS (was: [Falcon] starting up)
> > Date: Sun, 5 Oct 2014 06:31:26 +0100
> > 
> > @Om, sorry, I misreading but yes, singleton means also some static methods 
> > and I tried it having some trouble with but don't think it will be for a 
> > long time. 
> > 
> > Frédéric THOMAS
> > 
> > > From: webdoubl...@hotmail.com
> > > To: dev@flex.apache.org
> > > Subject: RE: [Falcon] Constructor NS (was: [Falcon] starting up)
> > > Date: Sun, 5 Oct 2014 06:22:50 +0100
> > > 
> > > @Om, Didn't mentioned it because I guess the implementation for "new" and 
> > > the relative checks are almost the same than for the extends and now I 
> > > understand better FP, even though I mentioned method overloading 
> > > implementation, actually, I guess it could be even done without but would 
> > > be cleaner with, I'm anyway close  to and will demonstrate the extends 
> > > soon.
> > > I guess I did the hardest part in compiling a lib and be able to have 
> > > some NS informations passed thru the ABC without FP complaining and 
> > > keeping the original implementation intention in not modifying the 
> > > CMImplicit NS to not make FB complaining as mentioned in the method 
> > > comments).
> > > 
> > > @Gordon, from what I've seen at the moment,  I guess you're right,  the 
> > > constructor is just a function, FB doesn't enforce NS, everything is done 
> > > at compile time, the only barrier was the CMImplicitNS, I kept it and 
> > > passed other NS info thru the abc, you will see the code relatively soon, 
> > > I guess next weekend  (my time on it is very limited) and I would like 
> > > you to review it if you don't mind, and for the reflection maybe there 
> > > will be some tricks but as I do it at the moment, even the legacy 
> > > compiler raise a verify error when I try to instantiate a class with a 
> > > private ctor.
> > > 
> > > 
> > > Frédéric THOMAS
> > > 
> > > > Subject: Re: [Falcon] Constructor NS (was: [Falcon] starting up)
> > > > From: gsmit...@hotmail.com
> > > > Date: Sat, 4 Oct 2014 19:35:42 -0700
> > > > To: dev@flex.apache.org
> > > > 
> > > > 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