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; }