<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Actually - I was unclear - apologies. K<br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Jan 31, 2019, at 3:54 PM, <a href="mailto:forax@univ-mlv.fr" class="">forax@univ-mlv.fr</a> wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="caret-color: rgb(0, 0, 0); font-family: arial, helvetica, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br class="Apple-interchange-newline"><br class=""></div><hr id="zwchr" data-marker="__DIVIDER__" style="caret-color: rgb(0, 0, 0); font-family: arial, helvetica, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><div data-marker="__HEADERS__" style="caret-color: rgb(0, 0, 0); font-family: arial, helvetica, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><blockquote style="border-left-width: 2px; border-left-style: solid; border-left-color: rgb(16, 16, 255); margin-left: 5px; padding-left: 5px; font-weight: normal; font-style: normal; text-decoration: none; font-family: Helvetica, Arial, sans-serif; font-size: 12pt;" class=""><b class="">De:<span class="Apple-converted-space"> </span></b>"Karen Kinnear" <<a href="mailto:karen.kinnear@oracle.com" class="">karen.kinnear@oracle.com</a>><br class=""><b class="">À:<span class="Apple-converted-space"> </span></b>"Remi Forax" <<a href="mailto:forax@univ-mlv.fr" class="">forax@univ-mlv.fr</a>><br class=""><b class="">Cc:<span class="Apple-converted-space"> </span></b>"John Rose" <<a href="mailto:john.r.rose@oracle.com" class="">john.r.rose@oracle.com</a>>, "valhalla-spec-experts" <<a href="mailto:valhalla-spec-experts@openjdk.java.net" class="">valhalla-spec-experts@openjdk.java.net</a>><br class=""><b class="">Envoyé:<span class="Apple-converted-space"> </span></b>Jeudi 31 Janvier 2019 21:36:09<br class=""><b class="">Objet:<span class="Apple-converted-space"> </span></b>Re: An example of substituability test that is recursive<br class=""></blockquote></div><div data-marker="__QUOTED_TEXT__" style="caret-color: rgb(0, 0, 0); font-family: arial, helvetica, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><blockquote style="border-left-width: 2px; border-left-style: solid; border-left-color: rgb(16, 16, 255); margin-left: 5px; padding-left: 5px; font-weight: normal; font-style: normal; text-decoration: none; font-family: Helvetica, Arial, sans-serif; font-size: 12pt;" class="">Option #1 was what I was suggesting in the meeting two weeks ago - if this starts<div class="">to recurse too deeply, create a worklist - which should give you the same result.</div><div class=""><br class=""></div><div class="">If you switch to .Equals - you might get a different result …</div></blockquote><div class=""><br class=""></div><div class="">yes, you are right, i did not understand what you mean by "expected behavior", my bad on that.</div><div class=""><br data-mce-bogus="1" class=""></div><blockquote style="border-left-width: 2px; border-left-style: solid; border-left-color: rgb(16, 16, 255); margin-left: 5px; padding-left: 5px; font-weight: normal; font-style: normal; text-decoration: none; font-family: Helvetica, Arial, sans-serif; font-size: 12pt;" class=""><div class=""><br class=""></div><div class="">thanks,</div><div class="">Karen</div></blockquote><div class=""><br class=""></div><div class="">regards,<br data-mce-bogus="1" class=""></div><div class="">Rémi<br data-mce-bogus="1" class=""></div><div class=""><br data-mce-bogus="1" class=""></div><blockquote style="border-left-width: 2px; border-left-style: solid; border-left-color: rgb(16, 16, 255); margin-left: 5px; padding-left: 5px; font-weight: normal; font-style: normal; text-decoration: none; font-family: Helvetica, Arial, sans-serif; font-size: 12pt;" class=""><div class=""><div class=""><br class=""><blockquote class=""><div class="">On Jan 31, 2019, at 1:46 PM,<span class="Apple-converted-space"> </span><a href="mailto:forax@univ-mlv.fr" class="" target="_blank">forax@univ-mlv.fr</a>wrote:</div><br class="Apple-interchange-newline"><div class=""><div class=""><div class="" style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><div class=""><br class=""></div><div class=""><br class=""></div><hr id="zwchr" class=""><div class=""><blockquote class="" style="border-left-width: 2px; border-left-style: solid; border-left-color: rgb(16, 16, 255); margin-left: 5px; padding-left: 5px; font-weight: normal; font-style: normal; text-decoration: none; font-family: Helvetica, Arial, sans-serif; font-size: 12pt;"><b class="">De:<span class="Apple-converted-space"> </span></b>"John Rose" <<a href="mailto:john.r.rose@oracle.com" class="" target="_blank">john.r.rose@oracle.com</a>><br class=""><b class="">À:<span class="Apple-converted-space"> </span></b>"Remi Forax" <<a href="mailto:forax@univ-mlv.fr" class="" target="_blank">forax@univ-mlv.fr</a>><br class=""><b class="">Cc:<span class="Apple-converted-space"> </span></b>"Karen Kinnear" <<a href="mailto:karen.kinnear@oracle.com" class="" target="_blank">karen.kinnear@oracle.com</a>>, "valhalla-spec-experts" <<a href="mailto:valhalla-spec-experts@openjdk.java.net" class="" target="_blank">valhalla-spec-experts@openjdk.java.net</a>><br class=""><b class="">Envoyé:<span class="Apple-converted-space"> </span></b>Jeudi 31 Janvier 2019 19:05:33<br class=""><b class="">Objet:<span class="Apple-converted-space"> </span></b>Re: An example of substituability test that is recursive<br class=""></blockquote></div><div class=""><blockquote class="" style="border-left-width: 2px; border-left-style: solid; border-left-color: rgb(16, 16, 255); margin-left: 5px; padding-left: 5px; font-weight: normal; font-style: normal; text-decoration: none; font-family: Helvetica, Arial, sans-serif; font-size: 12pt;">On Jan 31, 2019, at 6:34 AM,<span class="Apple-converted-space"> </span><a href="mailto:forax@univ-mlv.fr" class="" target="_blank">forax@univ-mlv.fr</a><span class="Apple-converted-space"> </span>wrote:<br class=""><div class=""><blockquote class=""><br class="Apple-interchange-newline"><div class=""><span class="" style="caret-color: rgb(0, 0, 0); font-family: LucidaGrande; font-size: 24px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;">The other solution is to say that == should do an upcall to equals (after the null checking and the class checking), if equals throw a StackOverflow, it's the expected behavior because the user is in control of that behavior.</span><br class="" style="caret-color: rgb(0, 0, 0); font-family: LucidaGrande; font-size: 24px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"></div></blockquote></div><br class=""><div class="">What you are doing here, I think, is exposing a requirement</div><div class="">that we *don't* use the control stack for recursion on subst.</div><div class="">testing (or hashing).  That's a reasonable requirement.</div><div class="">It leads to a worklist algorithm for doing this tricky thing,</div><div class="">just like we had to do many times in the JIT.</div><div class=""><br class=""></div><div class=""><br class=""></div></blockquote><div class=""><br class=""></div><div class="">IMO that the other solution,</div><div class="">solution 1: you use a worklist (and also perhaps a marking algorithm to avoid to crawle the DAG)</div><div class="">solution 2: you claim it's too complex and you just let the user deal with it by calling equals() (and provide a way for a user to call the default subst).<br class=""></div><div class=""><br class=""></div><div class="">Rémi</div></div></div></div></div></blockquote></div></div></blockquote></div></div></blockquote></div><br class=""></body></html>