Hi,

GROOVY-9848 and the PR for it, that I missed to look at just reminded me of something I would like to discuss.

If we add a method that we compile against, like for example in ScriptBytecodeAdapter, then we have to maintain that method almost for eternity or we break binary compatibility of older Groovy versions that make use of that in precompiled code. That is why when I initially started with invokedynamic I gave it some kind of operator (method call, cast, property access) that controls what this invokedynamic call is for. That is because a bootstrap method is such a binary interface as well.

My proposal is therefore not adding new methods to ScriptBytecodeAdapter at all and instead to make use of the existing bootstrap method or we define a new bootstrap method for such cases as "in" and "!in". Though a new bootstrap method is something I would only consider for cases where we can determine the outcome without having to inspect the dynamic types. So for example isCase depends on the receiver more or less, thus it makes no sense to put it into a new bootstrap method in my opinion.

thoughts?

bye Jochen

Reply via email to