switch ~ case corrupts E4X??

by 9re
♥0 | Line 39 | Modified 2010-12-19 22:27:20 | MIT License
play

ActionScript3 source code

/**
 * Copyright 9re ( http://wonderfl.net/user/9re )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/79qY
 */

package {
    import flash.text.TextField;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            var tf:TextField = new TextField;
            tf.width = tf.height = 465;
            addChild(tf);
            var test:XML = <html>
                <b />
                <a href="event:A" target="a" />
                <a href="event:B" target="b" />
                <a href="event:C" target="c" />
            </html>;
            
            switch ("switch ~ case corrupts E4X??") {
            case 'some thing':
                break;
            default:
                var list:XMLList = test..*.(
                    name() == 'a' && attribute('href') == 'event:C'
                );
                log("E4X in switch:", showListSize(list));
                list = getList(test);
                log("E4X in local function:", showListSize(list));
            }
            
            function showListSize(xmllist:XMLList):String {
                return xmllist ? xmllist.length().toString() : "null";
            }
            
            function getList(xml:XML):XMLList {
                return xml..*.(
                    name() == 'a' && attribute('href') == 'event:C'
                );
            }
            
            function log(...o:Array):void {
                tf.appendText((o ? o.join(' ') : '') + '\n');
            }
        }
    }
}