December 06, 2010 Where can I find how string == is performed in dmd2 source? | ||||
---|---|---|---|---|
| ||||
Hello, Nearly all is in title. I found dmd2/src/phobos/std/string.cmp in string.d. But this performs string comp with positive/negative/zero result, not equality test with boolean result. denis -- -- -- -- -- -- -- vit esse estrany ☣ spir.wikidot.com |
December 06, 2010 Re: Where can I find how string == is performed in dmd2 source? | ||||
---|---|---|---|---|
| ||||
Posted in reply to spir | On Mon, 06 Dec 2010 09:44:10 -0500, spir <denis.spir@gmail.com> wrote: > Hello, > > > Nearly all is in title. > I found dmd2/src/phobos/std/string.cmp in string.d. But this performs string comp with positive/negative/zero result, not equality test with boolean result. It's in druntime. Easy way to find out what druntime function is used by the compiler void main() { auto str1 = "hello"; auto str2 = "world"; auto iseq = (str1 == str2); } compile using -c, then use obj2asm, result of main function: .text._Dmain segment assume CS:.text._Dmain _Dmain: push EBP mov EBP,ESP push EBX push ESI mov EDX,_TMP0@SYM32[0Bh] mov EAX,_TMP0@SYM32[0Ch] mov ECX,_TMP1@SYM32[016h] mov EBX,_TMP1@SYM32[018h] mov ESI,offset FLAT:_D11TypeInfo_Aa6__initZ@SYM32 push ESI push ECX push EBX push EDX push EAX ******** call _adEq2@PC32 xor EAX,EAX add ESP,014h pop ESI pop EBX pop EBP ret .text._Dmain ends So it looks like adEq2 is the function called (I marked with ******** above). Searching druntime, it looks like it's here: http://www.dsource.org/projects/druntime/browser/trunk/src/rt/adi.d#L353 This is an essential exercise for D runtime hacking ;) -Steve |
Copyright © 1999-2021 by the D Language Foundation