Example #1
0
            protected virtual void AsBoolean()
            {
                var type = _result.ValueType;

                if (type == mdr.ValueTypes.Boolean)
                {
                    return;
                }

                switch (type)
                {
                //case mdr.ValueTypes.Undefined:
                case mdr.ValueTypes.String:
                    _ilGen.Call(Types.Operations.Convert.ToBoolean.Get(mdr.ValueTypes.String));
                    break;

                case mdr.ValueTypes.Double:
                    _ilGen.Conv_I4();
                    break;

                case mdr.ValueTypes.Int32:
                    break;

                case mdr.ValueTypes.Boolean:
                    break;

                //case mdr.ValueTypes.Null:
                case mdr.ValueTypes.Object:
                case mdr.ValueTypes.Function:
                case mdr.ValueTypes.Array:
                case mdr.ValueTypes.Property:
                    _ilGen.Callvirt(Types.DObject.ToBoolean);
                    break;

                case mdr.ValueTypes.DValueRef:
                    _ilGen.Call(Types.DValue.AsBoolean);
                    break;

                default:
                    Trace.Fail("Cannot convert type {0} to boolean", type);
                    break;
                }
#if DEBUG
                //This is to help the CSharpILGenerator produce valid C# code
                if (type == mdr.ValueTypes.Double || type == mdr.ValueTypes.Int32)
                {
                    _ilGen.Ldc_I4_0();
                    _ilGen.Ceq();
                    _ilGen.Ldc_I4(false);
                    _ilGen.Ceq();
                }
#endif
                _result.ValueType = mdr.ValueTypes.Boolean;
            }