There is some code to create and reuse SVG wrappers in the binding code. Previously it hashed a struct with 1 pointer and 2 member function pointers. The problem is member function pointers are opaque, and at least on MSVC cannot be hashed reliably (and it doesn't make sense to try to read the opaque bytes). See http://www.codeproject.com/KB/cpp/FastDelegate.aspx for more details on the implementations. There are a few options, all of them involve not trying to hash the member function pointer. One would be to remove member function pointers all together and create thunk wrappers. Another option would be to use something like a std::map, since the compiler should implement operator<, etc correctly. The option I took was to add some more hashing material during the binding generation, so we can hash the pointer and a generated field hash together. It would probably be best to remove the use of member function pointers all together but that is a much bigger task.
Created attachment 33794 [details] Patch
(In reply to comment #0) > There is some code to create and reuse SVG wrappers in the binding code. > Previously it hashed a struct with 1 pointer and 2 member function pointers. > The problem is member function pointers are opaque, and at least on MSVC cannot > be hashed reliably (and it doesn't make sense to try to read the opaque bytes). > > See http://www.codeproject.com/KB/cpp/FastDelegate.aspx for more details on the > implementations. > > There are a few options, all of them involve not trying to hash the member > function pointer. One would be to remove member function pointers all together > and create thunk wrappers. Another option would be to use something like a > std::map, since the compiler should implement operator<, etc correctly. (It was just pointed out to me that the compiler only gives you == and != for member function pointers, so std::map is not a possible solution). > > The option I took was to add some more hashing material during the binding > generation, so we can hash the pointer and a generated field hash together. It > would probably be best to remove the use of member function pointers all > together but that is a much bigger task.
Comment on attachment 33794 [details] Patch r=me.
Landed as http://trac.webkit.org/changeset/46596.