digitalmars.D.bugs - Box.opEqualsInternal's or TypeInfo_Class's fault?
- derick_eddington nospam.yashmoo.com (13/13) Jun 03 2005 std.boxer.Box.opEqualsInternal's last line is:
- Ben Hinkle (5/19) Jun 04 2005 I think equals should be fixed.
- derick_eddington nospam.yashmoo.com (22/46) Jun 04 2005 'compare' also seg-faults if its 'o1' is null:
- Ben Hinkle (5/6) Jun 05 2005 Which version of dmd are you using? In dmd.125 compare has been fixed to...
- derick_eddington nospam.yashmoo.com (3/9) Jun 05 2005 TypeInfo_C in std/typeinfo/ti_C.d has the fixed 'compare' but TypeInfo_C...
std.boxer.Box.opEqualsInternal's last line is: return cast(bit)type.equals(data, other.data); but when you've boxed a null Object reference, 'data' is all zeros, 'type' is a TypeInfo_Class, and TypeInfo_Class.equals is: : int equals(void *p1, void *p2) : { : Object o1 = *cast(Object*)p1; : Object o2 = *cast(Object*)p2; : : return o1 == o2 || (o1 && o1.opCmp(o2) == 0); : } and o1 and o2 are made into null references, causing a seg-fault. Which one should be fixed?
Jun 03 2005
<derick_eddington nospam.yashmoo.com> wrote in message news:d7rd9q$20hk$1 digitaldaemon.com...std.boxer.Box.opEqualsInternal's last line is: return cast(bit)type.equals(data, other.data); but when you've boxed a null Object reference, 'data' is all zeros, 'type' is a TypeInfo_Class, and TypeInfo_Class.equals is: : int equals(void *p1, void *p2) : { : Object o1 = *cast(Object*)p1; : Object o2 = *cast(Object*)p2; : : return o1 == o2 || (o1 && o1.opCmp(o2) == 0); : } and o1 and o2 are made into null references, causing a seg-fault. Which one should be fixed?I think equals should be fixed. see http://www.digitalmars.com/d/archives/digitalmars/D/bugs/1306.html It looks like compare was changed but equals wasn't.
Jun 04 2005
'compare' also seg-faults if its 'o1' is null: : int compare(void *p1, void *p2) : { : Object o1 = *cast(Object*)p1; : Object o2 = *cast(Object*)p2; : int c = 0; : : // Regard null references as always being "less than" : if (o1 != o2) // <--- tries o1.opEquals(o2) : { : if (o1) : { if (!o2) : c = 1; : else : c = o1.opCmp(o2); : } : else : c = -1; : } : return c; : } In article <d7smh2$30pc$1 digitaldaemon.com>, Ben Hinkle says...<derick_eddington nospam.yashmoo.com> wrote in message news:d7rd9q$20hk$1 digitaldaemon.com...std.boxer.Box.opEqualsInternal's last line is: return cast(bit)type.equals(data, other.data); but when you've boxed a null Object reference, 'data' is all zeros, 'type' is a TypeInfo_Class, and TypeInfo_Class.equals is: : int equals(void *p1, void *p2) : { : Object o1 = *cast(Object*)p1; : Object o2 = *cast(Object*)p2; : : return o1 == o2 || (o1 && o1.opCmp(o2) == 0); : } and o1 and o2 are made into null references, causing a seg-fault. Which one should be fixed?I think equals should be fixed. see http://www.digitalmars.com/d/archives/digitalmars/D/bugs/1306.html It looks like compare was changed but equals wasn't.
Jun 04 2005
<derick_eddington nospam.yashmoo.com> wrote in message news:d7u5eq$ufd$1 digitaldaemon.com...'compare' also seg-faults if its 'o1' is null:Which version of dmd are you using? In dmd.125 compare has been fixed to have if (!(o1 is o2))
Jun 05 2005
TypeInfo_C in std/typeinfo/ti_C.d has the fixed 'compare' but TypeInfo_Class in internal/object.d does not. In article <d7urnf$1dtc$1 digitaldaemon.com>, Ben Hinkle says...<derick_eddington nospam.yashmoo.com> wrote in message news:d7u5eq$ufd$1 digitaldaemon.com...'compare' also seg-faults if its 'o1' is null:Which version of dmd are you using? In dmd.125 compare has been fixed to have if (!(o1 is o2))
Jun 05 2005