You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flex.apache.org by Harbs <ha...@gmail.com> on 2017/03/15 17:23:29 UTC

[FalconJX] too sensitive with reserved words "interface" and "internal"

I think this is a bug:

If have some code like this:

        public function findInterfaces():Vector.<NetworkInterface>
        {
            var retVal:Vector.<NetworkInterface> = new Vector.<NetworkInterface>();
            var interfaces:Object = someCodeWhichReturnsAnObject();
            var x:String;
            for(x in interfaces){
                var interface:NetworkInterface = new NetworkInterface();
                interface.displayName = x;
                interface.name = x;
                interface.active = true;
                var addresses = interfaces[x];
                for(var i:int=0;i<addresses.length;i++){
                    var address:InterfaceAddress = new InterfaceAddress();
                    address.address = addresses[i].address;
                    address.broadcast = addresses[i].netmask;
                    address.ipVersion = addresses[i].family;
                    if(addresses[i].mac){
                        interface.hardwareAddress = addresses[i].mac;
                    }
                    if(addresses[i].internal){
                        interface.active = false;
                    }
                    
                }
                retVal.push(interface);
            }

            return retVal;
        }

And I’m getting errors like this:


        Interface definitions must not be nested within class or other interface definitions.
                interface.active = true;
        Expected IDENTIFIER but got '.'
                interface.active = true;
        '=' is not allowed here
                interface.active = true;
        if' is not allowed here
                    if(addresses[i].internal){
        'internal' is not allowed here
                    if(addresses[i].internal){
        Expected PAREN_CLOSE but got 'internal'
                    if(addresses[i].internal){
        ')' is not allowed here
                    if(addresses[i].internal){

Harbs

Re: [FalconJX] too sensitive with reserved words "interface" and "internal"

Posted by Harbs <ha...@gmail.com>.
I was hoping you’d know off-hand.

I’ll check now.

> On Mar 15, 2017, at 8:00 PM, Alex Harui <ah...@adobe.com> wrote:
> 
> Does the regular Flex MXMLC compiler allow it?
> 
> -Alex
> 
> On 3/15/17, 10:23 AM, "Harbs" <ha...@gmail.com> wrote:
> 
>> I think this is a bug:
>> 
>> If have some code like this:
>> 
>>       public function findInterfaces():Vector.<NetworkInterface>
>>       {
>>           var retVal:Vector.<NetworkInterface> = new
>> Vector.<NetworkInterface>();
>>           var interfaces:Object = someCodeWhichReturnsAnObject();
>>           var x:String;
>>           for(x in interfaces){
>>               var interface:NetworkInterface = new NetworkInterface();
>>               interface.displayName = x;
>>               interface.name = x;
>>               interface.active = true;
>>               var addresses = interfaces[x];
>>               for(var i:int=0;i<addresses.length;i++){
>>                   var address:InterfaceAddress = new InterfaceAddress();
>>                   address.address = addresses[i].address;
>>                   address.broadcast = addresses[i].netmask;
>>                   address.ipVersion = addresses[i].family;
>>                   if(addresses[i].mac){
>>                       interface.hardwareAddress = addresses[i].mac;
>>                   }
>>                   if(addresses[i].internal){
>>                       interface.active = false;
>>                   }
>> 
>>               }
>>               retVal.push(interface);
>>           }
>> 
>>           return retVal;
>>       }
>> 
>> And I’m getting errors like this:
>> 
>> 
>>       Interface definitions must not be nested within class or other
>> interface definitions.
>>               interface.active = true;
>>       Expected IDENTIFIER but got '.'
>>               interface.active = true;
>>       '=' is not allowed here
>>               interface.active = true;
>>       if' is not allowed here
>>                   if(addresses[i].internal){
>>       'internal' is not allowed here
>>                   if(addresses[i].internal){
>>       Expected PAREN_CLOSE but got 'internal'
>>                   if(addresses[i].internal){
>>       ')' is not allowed here
>>                   if(addresses[i].internal){
>> 
>> Harbs
> 


Re: [FalconJX] too sensitive with reserved words "interface" and "internal"

Posted by Alex Harui <ah...@adobe.com>.
Does the regular Flex MXMLC compiler allow it?

-Alex

On 3/15/17, 10:23 AM, "Harbs" <ha...@gmail.com> wrote:

>I think this is a bug:
>
>If have some code like this:
>
>        public function findInterfaces():Vector.<NetworkInterface>
>        {
>            var retVal:Vector.<NetworkInterface> = new
>Vector.<NetworkInterface>();
>            var interfaces:Object = someCodeWhichReturnsAnObject();
>            var x:String;
>            for(x in interfaces){
>                var interface:NetworkInterface = new NetworkInterface();
>                interface.displayName = x;
>                interface.name = x;
>                interface.active = true;
>                var addresses = interfaces[x];
>                for(var i:int=0;i<addresses.length;i++){
>                    var address:InterfaceAddress = new InterfaceAddress();
>                    address.address = addresses[i].address;
>                    address.broadcast = addresses[i].netmask;
>                    address.ipVersion = addresses[i].family;
>                    if(addresses[i].mac){
>                        interface.hardwareAddress = addresses[i].mac;
>                    }
>                    if(addresses[i].internal){
>                        interface.active = false;
>                    }
>                  
>                }
>                retVal.push(interface);
>            }
>
>            return retVal;
>        }
>
>And I’m getting errors like this:
>
>
>        Interface definitions must not be nested within class or other
>interface definitions.
>                interface.active = true;
>        Expected IDENTIFIER but got '.'
>                interface.active = true;
>        '=' is not allowed here
>                interface.active = true;
>        if' is not allowed here
>                    if(addresses[i].internal){
>        'internal' is not allowed here
>                    if(addresses[i].internal){
>        Expected PAREN_CLOSE but got 'internal'
>                    if(addresses[i].internal){
>        ')' is not allowed here
>                    if(addresses[i].internal){
>
>Harbs


Re: [FalconJX] too sensitive with reserved words "interface" and "internal"

Posted by Josh Tynjala <jo...@gmail.com>.
For reference, here are my commits where I tried to allow "internal" as a
member name in Falcon:

https://github.com/apache/flex-falcon/commit/e05f463d9cca471f5d6d657e052d5881061553a9
https://github.com/apache/flex-falcon/commit/1be8600e86339b99b6fc8c81d5f6cf3c9a5d8800
https://github.com/apache/flex-falcon/commit/2fd8b486cae610a0211c147254848fade27e0557

And here's where I rolled it back after I found issues:

https://github.com/apache/flex-falcon/commit/09e9333b05c9ab2bae615b791e9f6e779753b21f

- Josh

On Wed, Mar 15, 2017 at 11:39 AM, Josh Tynjala <jo...@gmail.com>
wrote:

> We support certain names that the Flex MXMLC compiler does not. In
> particular, members of an object can use reserved words as names because
> JavaScript allows that (historical note: JavaScript also didn't allow
> reserved words as member names at the time that ES4/AS3 was being created).
> However, if I remember correctly, JavaScript still does not allow reserved
> words as local variable names, so naming a local variable "interface"
> should indeed result in a compile-time error.
>
> Just like other reserved words, "internal" should be allowed as a member
> name, so that's technically a bug. I believe I tried to modify the compiler
> to allow "internal" a while back (along with public/protected/private), but
> it turns out that the parser handles these a bit differently than other
> reserved words that we've allowed (like "delete" or "is"), and I couldn't
> figure out what extra steps were needed for "internal" that weren't needed
> for the others.
>
> - Josh
>
>
> On Wed, Mar 15, 2017 at 10:23 AM, Harbs <ha...@gmail.com> wrote:
>
>> I think this is a bug:
>>
>> If have some code like this:
>>
>>         public function findInterfaces():Vector.<NetworkInterface>
>>         {
>>             var retVal:Vector.<NetworkInterface> = new
>> Vector.<NetworkInterface>();
>>             var interfaces:Object = someCodeWhichReturnsAnObject();
>>             var x:String;
>>             for(x in interfaces){
>>                 var interface:NetworkInterface = new NetworkInterface();
>>                 interface.displayName = x;
>>                 interface.name = x;
>>                 interface.active = true;
>>                 var addresses = interfaces[x];
>>                 for(var i:int=0;i<addresses.length;i++){
>>                     var address:InterfaceAddress = new InterfaceAddress();
>>                     address.address = addresses[i].address;
>>                     address.broadcast = addresses[i].netmask;
>>                     address.ipVersion = addresses[i].family;
>>                     if(addresses[i].mac){
>>                         interface.hardwareAddress = addresses[i].mac;
>>                     }
>>                     if(addresses[i].internal){
>>                         interface.active = false;
>>                     }
>>
>>                 }
>>                 retVal.push(interface);
>>             }
>>
>>             return retVal;
>>         }
>>
>> And I’m getting errors like this:
>>
>>
>>         Interface definitions must not be nested within class or other
>> interface definitions.
>>                 interface.active = true;
>>         Expected IDENTIFIER but got '.'
>>                 interface.active = true;
>>         '=' is not allowed here
>>                 interface.active = true;
>>         if' is not allowed here
>>                     if(addresses[i].internal){
>>         'internal' is not allowed here
>>                     if(addresses[i].internal){
>>         Expected PAREN_CLOSE but got 'internal'
>>                     if(addresses[i].internal){
>>         ')' is not allowed here
>>                     if(addresses[i].internal){
>>
>> Harbs
>
>
>

Re: [FalconJX] too sensitive with reserved words "interface" and "internal"

Posted by Josh Tynjala <jo...@gmail.com>.
We support certain names that the Flex MXMLC compiler does not. In
particular, members of an object can use reserved words as names because
JavaScript allows that (historical note: JavaScript also didn't allow
reserved words as member names at the time that ES4/AS3 was being created).
However, if I remember correctly, JavaScript still does not allow reserved
words as local variable names, so naming a local variable "interface"
should indeed result in a compile-time error.

Just like other reserved words, "internal" should be allowed as a member
name, so that's technically a bug. I believe I tried to modify the compiler
to allow "internal" a while back (along with public/protected/private), but
it turns out that the parser handles these a bit differently than other
reserved words that we've allowed (like "delete" or "is"), and I couldn't
figure out what extra steps were needed for "internal" that weren't needed
for the others.

- Josh

On Wed, Mar 15, 2017 at 10:23 AM, Harbs <ha...@gmail.com> wrote:

> I think this is a bug:
>
> If have some code like this:
>
>         public function findInterfaces():Vector.<NetworkInterface>
>         {
>             var retVal:Vector.<NetworkInterface> = new
> Vector.<NetworkInterface>();
>             var interfaces:Object = someCodeWhichReturnsAnObject();
>             var x:String;
>             for(x in interfaces){
>                 var interface:NetworkInterface = new NetworkInterface();
>                 interface.displayName = x;
>                 interface.name = x;
>                 interface.active = true;
>                 var addresses = interfaces[x];
>                 for(var i:int=0;i<addresses.length;i++){
>                     var address:InterfaceAddress = new InterfaceAddress();
>                     address.address = addresses[i].address;
>                     address.broadcast = addresses[i].netmask;
>                     address.ipVersion = addresses[i].family;
>                     if(addresses[i].mac){
>                         interface.hardwareAddress = addresses[i].mac;
>                     }
>                     if(addresses[i].internal){
>                         interface.active = false;
>                     }
>
>                 }
>                 retVal.push(interface);
>             }
>
>             return retVal;
>         }
>
> And I’m getting errors like this:
>
>
>         Interface definitions must not be nested within class or other
> interface definitions.
>                 interface.active = true;
>         Expected IDENTIFIER but got '.'
>                 interface.active = true;
>         '=' is not allowed here
>                 interface.active = true;
>         if' is not allowed here
>                     if(addresses[i].internal){
>         'internal' is not allowed here
>                     if(addresses[i].internal){
>         Expected PAREN_CLOSE but got 'internal'
>                     if(addresses[i].internal){
>         ')' is not allowed here
>                     if(addresses[i].internal){
>
> Harbs