Compare String and Boolean

by szbzs2004
How to evaulate a string_literal == logical_literal expression?

e.g. "true" == true // false
pCode (AVM2) is:
_as3_pushstring "true"
_as3_pushtrue 
_as3_equals

any idea is appreciated, 
♥0 | Line 69 | Modified 2012-06-13 20:16:47 | MIT License
play

ActionScript3 source code

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

package {

    import flash.display.Sprite;
    import flash.text.TextFormat;
    
    public class EqualityTest extends Sprite {
        
        public function EqualityTest() {
            var tfmt:TextFormat = new TextFormat();
            tfmt.tabStops = [150, 160];
            
            Console.init(stage, tfmt);
/*
            _('"true"  == true',  "true"  == true);
            _('"true"  == false', "true"  == false);
            _('"false" == true',  "false" == true);
            _('"false" == false', "false" == false);
            _();
            _('"true"  != true',  "true"  != true);
            _('"true"  != false', "true"  != false);
           _('"false" != true',  "false" != true);
           _('"false" != false', "false" != false);
            _();
  
// only the empty string ("") is false, so it's ok...
            if ("") {
                _('if ("") { ... }',      'executed');
            } else {
                _('if ("") { ... }',      'NOT executed');
            }
            if ("false") {
                _('if ("false") { ... }', 'executed');
            } else {
                _('if ("false") { ... }', 'NOT executed');
            }
            if ("true") {
                _('if ("true") { ... }',  'executed');
            } else {
                _('if ("true") { ... }',  'NOT executed');
            }
            _();
// ???             
            if ("" == true) {
                _('if ("" == true) { ... }',      'executed');
            } else {
                _('if ("" == true) { ... }',      'NOT executed');
            }
            if ("false" == true) {
                _('if ("false" == true) { ... }', 'executed');
            } else {
                _('if ("false" == true) { ... }', 'NOT executed');
            }
            if ("true" == true) {
                _('if ("true" == true) { ... }',  'executed');
            } else {
                _('if ("true" == true) { ... }',  'NOT executed');
            }
            _();
            if ("" == false) {
                _('if ("" == false) { ... }',      'executed');
            } else {
                _('if ("" == false) { ... }',      'NOT executed');
            }
            if ("false" == false) {
                _('if ("false" == false) { ... }', 'executed');
            } else {
                _('if ("false" == false) { ... }', 'NOT executed');
            }
            if ("true" == false) {
                _('if ("true" == false) { ... }',  'executed');
            } else {
                _('if ("true" == false) { ... }',  'NOT executed');
            }
            _();
            _('Boolean("")',      Boolean(""));
            _('Boolean("true")',  Boolean("true"));
            _('Boolean("false")', Boolean("false"));
            _();
            _('Boolean("true") == true',   Boolean("true") == true);
            _('Boolean("true") == false',  Boolean("true") == false);
            _('Boolean("false") == true',  Boolean("false") == true);
            _('Boolean("false") == false', Boolean("false") == false);
            _();
            _('"true" == true.toString()',   "true" == true.toString());
            _('"true" == false.toString()',  "true" == false.toString());
            _('"false" == true.toString()',  "false" == true.toString());
            _('"false" == false.toString()', "false" == false.toString());
*/             
            _('"" == false',           "" == false);
            _('"true" == false',   "true" == false);
            _('"false" == false', "false" == false);
            _('"0" == false',         "0" == false);
            _('"1" == false',         "1" == false);
            _('"2" == false',         "2" == false);
            _();
            _('"" == true',            "" == true);
            _('"true" == true',    "true" == true);
            _('"false" == true',  "false" == true);
            _('"0" == true',          "0" == true);
            _('"1" == true',          "1" == true);
            _('"2" == true',          "2" == true);
            _();
            _('Boolean("true")', Boolean("true"));
            _('Boolean("true") == true', Boolean("true") == true);
            _();
            _('true.toString()', true.toString());
            _('"true" == true.toString()', "true" == true.toString());
            _('String(true)', String(true));
            _('"true" == String(true)', "true" == String(true));
            _();
            _('int(false)',   int(false));
            _('int(true)',    int(true));
            _('int("false")', int("false"));
            _('int("true")',  int("true"));
            _('int("0")',     int("0"));
            _('int("1")',     int("1"));
            _('int("2")',     int("2"));
        }

        private function _(... rest):void {
            if (rest.length != 0) {
                Console.print(rest[0]);
                for (var i:int = 1; i < rest.length; ++i) {
                    Console.print('\t// ' + rest[i]);
                }
            }
            Console.crlf();
        }
        
    }
}

import flash.display.DisplayObjectContainer;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;

class Console {
    
    private static var tf:TextField = new TextField();
    
    public static function init(d:DisplayObjectContainer, f:TextFormat = null):void {
        tf.autoSize = TextFieldAutoSize.LEFT;
        if (f != null) {
            tf.defaultTextFormat = f;
        }
        d.addChild(tf);
    }

    public static function print(s:String):void {
        tf.appendText(s);
    }
    
    public static function crlf():void {
        tf.appendText("\n");
    }
}