Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jruby/jruby
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 66eeaeb13f21^
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: ab235e268bbb
Choose a head ref
  • 7 commits
  • 83 files changed
  • 1 contributor

Commits on Jul 25, 2015

  1. Copy the full SHA
    66eeaeb View commit details
  2. Copy the full SHA
    29b8640 View commit details
  3. Copy the full SHA
    09f15f9 View commit details
  4. Copy the full SHA
    3032f04 View commit details
  5. I suck at bits.

    headius committed Jul 25, 2015
    Copy the full SHA
    ced83c4 View commit details
  6. CallConfiguration is not used by any DynamicMethods anymore.

    CallConfiguration used to be needed to determine how to frame and
    scope all methods in the system. However, in JRuby 9k it is no
    longer needed.
    
    * Core methods that need frame/scope have the pre/post logic
      generated in bytecode (for generated invokers) or in handles
      (for MethodHandle-based invokers).
    * Interpreted IR methods have their own flags for frame/scope, or
      have instructions that perform the pre/post logic.
    * Jitted IR methods always have emit bytecode to do the pre/post
      logic.
    
    After a quick inspection I found that there's no other uses of
    the callConfig field in DynamicMethod, so this commit removes it
    and deprecates the constructors and accessors. This should shrink
    all DynamicMethod subclasses by at least 4 bytes and perhaps 8. It
    also reduces the size and overhead of our generated populators,
    which might have a slight effect on startup.
    headius committed Jul 25, 2015
    Copy the full SHA
    838c8d7 View commit details
  7. Copy the full SHA
    ab235e2 View commit details
Showing with 400 additions and 777 deletions.
  1. +1 −2 core/src/main/java/org/jruby/Ruby.java
  2. +1 −2 core/src/main/java/org/jruby/RubyKernel.java
  3. +25 −25 core/src/main/java/org/jruby/RubyModule.java
  4. +2 −3 core/src/main/java/org/jruby/RubyStruct.java
  5. +2 −13 core/src/main/java/org/jruby/anno/AnnotationBinder.java
  6. +3 −8 core/src/main/java/org/jruby/anno/TypePopulator.java
  7. +0 −2 core/src/main/java/org/jruby/ext/ffi/Buffer.java
  8. +1 −2 core/src/main/java/org/jruby/ext/ffi/Pointer.java
  9. +1 −2 core/src/main/java/org/jruby/ext/ffi/jffi/DefaultMethod.java
  10. +0 −398 core/src/main/java/org/jruby/ext/ffi/jffi/InvokeDynamic.java
  11. +1 −2 core/src/main/java/org/jruby/ext/ffi/jffi/NativeInvoker.java
  12. +1 −16 core/src/main/java/org/jruby/internal/runtime/methods/AliasMethod.java
  13. +2 −2 core/src/main/java/org/jruby/internal/runtime/methods/AttrReaderMethod.java
  14. +2 −2 core/src/main/java/org/jruby/internal/runtime/methods/AttrWriterMethod.java
  15. +1 −1 core/src/main/java/org/jruby/internal/runtime/methods/CompiledIRMethod.java
  16. +1 −21 core/src/main/java/org/jruby/internal/runtime/methods/DelegatingDynamicMethod.java
  17. +47 −52 core/src/main/java/org/jruby/internal/runtime/methods/DynamicMethod.java
  18. +2 −3 core/src/main/java/org/jruby/internal/runtime/methods/HandleMethod.java
  19. +1 −1 core/src/main/java/org/jruby/internal/runtime/methods/InterpretedIRMethod.java
  20. +2 −6 core/src/main/java/org/jruby/internal/runtime/methods/InvocationMethodFactory.java
  21. +0 −1 core/src/main/java/org/jruby/internal/runtime/methods/InvokeDynamicMethodFactory.java
  22. +143 −72 core/src/main/java/org/jruby/internal/runtime/methods/JavaMethod.java
  23. +1 −1 core/src/main/java/org/jruby/internal/runtime/methods/MethodMethod.java
  24. +1 −1 core/src/main/java/org/jruby/internal/runtime/methods/MethodMissingMethod.java
  25. +1 −1 core/src/main/java/org/jruby/internal/runtime/methods/ProcMethod.java
  26. +1 −1 core/src/main/java/org/jruby/internal/runtime/methods/WrapperMethod.java
  27. +2 −2 core/src/main/java/org/jruby/ir/instructions/AliasInstr.java
  28. +1 −1 core/src/main/java/org/jruby/ir/instructions/BacktickInstr.java
  29. +2 −4 core/src/main/java/org/jruby/ir/instructions/BlockGivenInstr.java
  30. +1 −1 core/src/main/java/org/jruby/ir/instructions/BranchInstr.java
  31. +2 −5 core/src/main/java/org/jruby/ir/instructions/BreakInstr.java
  32. +2 −4 core/src/main/java/org/jruby/ir/instructions/BuildCompoundArrayInstr.java
  33. +1 −1 core/src/main/java/org/jruby/ir/instructions/BuildCompoundStringInstr.java
  34. +3 −3 core/src/main/java/org/jruby/ir/instructions/BuildDynRegExpInstr.java
  35. +3 −3 core/src/main/java/org/jruby/ir/instructions/BuildLambdaInstr.java
  36. +2 −2 core/src/main/java/org/jruby/ir/instructions/BuildRangeInstr.java
  37. +2 −2 core/src/main/java/org/jruby/ir/instructions/BuildSplatInstr.java
  38. +9 −9 core/src/main/java/org/jruby/ir/instructions/CallBase.java
  39. +2 −2 core/src/main/java/org/jruby/ir/instructions/CheckArgsArrayArityInstr.java
  40. +2 −2 core/src/main/java/org/jruby/ir/instructions/CopyInstr.java
  41. +2 −2 core/src/main/java/org/jruby/ir/instructions/DefineClassInstr.java
  42. +2 −2 core/src/main/java/org/jruby/ir/instructions/DefineClassMethodInstr.java
  43. +2 −2 core/src/main/java/org/jruby/ir/instructions/DefineMetaClassInstr.java
  44. +2 −2 core/src/main/java/org/jruby/ir/instructions/DefineModuleInstr.java
  45. +2 −2 core/src/main/java/org/jruby/ir/instructions/EQQInstr.java
  46. +3 −3 core/src/main/java/org/jruby/ir/instructions/ExceptionRegionStartMarkerInstr.java
  47. +2 −2 core/src/main/java/org/jruby/ir/instructions/GVarAliasInstr.java
  48. +2 −2 core/src/main/java/org/jruby/ir/instructions/GetClassVarContainerModuleInstr.java
  49. +2 −2 core/src/main/java/org/jruby/ir/instructions/GetGlobalVariableInstr.java
  50. +2 −2 core/src/main/java/org/jruby/ir/instructions/GetInstr.java
  51. +2 −2 core/src/main/java/org/jruby/ir/instructions/InheritanceSearchConstInstr.java
  52. +26 −1 core/src/main/java/org/jruby/ir/instructions/Instr.java
  53. +2 −2 core/src/main/java/org/jruby/ir/instructions/JumpInstr.java
  54. +2 −2 core/src/main/java/org/jruby/ir/instructions/LabelInstr.java
  55. +2 −2 core/src/main/java/org/jruby/ir/instructions/LexicalSearchConstInstr.java
  56. +3 −3 core/src/main/java/org/jruby/ir/instructions/LoadLocalVarInstr.java
  57. +2 −2 core/src/main/java/org/jruby/ir/instructions/ModuleVersionGuardInstr.java
  58. +2 −2 core/src/main/java/org/jruby/ir/instructions/MultipleAsgnBase.java
  59. +1 −3 core/src/main/java/org/jruby/ir/instructions/OneOperandBranchInstr.java
  60. +2 −2 core/src/main/java/org/jruby/ir/instructions/ProcessModuleBodyInstr.java
  61. +2 −2 core/src/main/java/org/jruby/ir/instructions/PutGlobalVarInstr.java
  62. +2 −2 core/src/main/java/org/jruby/ir/instructions/PutInstr.java
  63. +2 −2 core/src/main/java/org/jruby/ir/instructions/RecordEndBlockInstr.java
  64. +2 −2 core/src/main/java/org/jruby/ir/instructions/ReifyClosureInstr.java
  65. +2 −2 core/src/main/java/org/jruby/ir/instructions/RescueEQQInstr.java
  66. +6 −0 core/src/main/java/org/jruby/ir/instructions/ResultBaseInstr.java
  67. +3 −3 core/src/main/java/org/jruby/ir/instructions/ReturnBase.java
  68. +10 −10 core/src/main/java/org/jruby/ir/instructions/RuntimeHelperCall.java
  69. +2 −4 core/src/main/java/org/jruby/ir/instructions/SearchConstInstr.java
  70. +2 −2 core/src/main/java/org/jruby/ir/instructions/SetCapturedVarInstr.java
  71. +4 −4 core/src/main/java/org/jruby/ir/instructions/StoreLocalVarInstr.java
  72. +2 −2 core/src/main/java/org/jruby/ir/instructions/ThrowExceptionInstr.java
  73. +2 −2 core/src/main/java/org/jruby/ir/instructions/ToAryInstr.java
  74. +2 −2 core/src/main/java/org/jruby/ir/instructions/TwoOperandBranchInstr.java
  75. +2 −2 core/src/main/java/org/jruby/ir/instructions/UndefMethodInstr.java
  76. +2 −2 core/src/main/java/org/jruby/ir/instructions/YieldInstr.java
  77. +2 −2 core/src/main/java/org/jruby/ir/instructions/boxing/AluInstr.java
  78. +2 −2 core/src/main/java/org/jruby/ir/instructions/boxing/BoxInstr.java
  79. +2 −2 core/src/main/java/org/jruby/ir/instructions/boxing/UnboxInstr.java
  80. +2 −2 core/src/main/java/org/jruby/ir/instructions/defined/RestoreErrorInfoInstr.java
  81. +1 −1 core/src/main/java/org/jruby/ir/interpreter/InterpreterEngine.java
  82. +1 −1 core/src/main/java/org/jruby/javasupport/Java.java
  83. +1 −1 core/src/main/java/org/jruby/util/cli/Options.java
3 changes: 1 addition & 2 deletions core/src/main/java/org/jruby/Ruby.java
Original file line number Diff line number Diff line change
@@ -93,7 +93,6 @@
import org.jruby.internal.runtime.GlobalVariables;
import org.jruby.internal.runtime.ThreadService;
import org.jruby.internal.runtime.ValueAccessor;
import org.jruby.internal.runtime.methods.CallConfiguration;
import org.jruby.internal.runtime.methods.DynamicMethod;
import org.jruby.internal.runtime.methods.JavaMethod;
import org.jruby.ir.Compiler;
@@ -1382,7 +1381,7 @@ private void initRoot() {

// In 1.9 and later, Kernel.gsub is defined only when '-p' or '-n' is given on the command line
if (config.getKernelGsubDefined()) {
kernel.addMethod("gsub", new JavaMethod(kernel, Visibility.PRIVATE, CallConfiguration.FrameFullScopeNone) {
kernel.addMethod("gsub", new JavaMethod(kernel, Visibility.PRIVATE) {

@Override
public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject[] args, Block block) {
3 changes: 1 addition & 2 deletions core/src/main/java/org/jruby/RubyKernel.java
Original file line number Diff line number Diff line change
@@ -48,7 +48,6 @@
import org.jruby.common.IRubyWarnings.ID;
import org.jruby.exceptions.MainExitException;
import org.jruby.exceptions.RaiseException;
import org.jruby.internal.runtime.methods.CallConfiguration;
import org.jruby.internal.runtime.methods.DynamicMethod;
import org.jruby.internal.runtime.methods.JavaMethod.JavaMethodNBlock;
import org.jruby.ir.interpreter.Interpreter;
@@ -104,7 +103,7 @@ public static class MethodMissingMethod extends JavaMethodNBlock {
private final CallType callType;

public MethodMissingMethod(RubyModule implementationClass, Visibility visibility, CallType callType) {
super(implementationClass, Visibility.PRIVATE, CallConfiguration.FrameFullScopeNone);
super(implementationClass, Visibility.PRIVATE);

this.callType = callType;
this.visibility = visibility;
50 changes: 25 additions & 25 deletions core/src/main/java/org/jruby/RubyModule.java
Original file line number Diff line number Diff line change
@@ -1485,29 +1485,29 @@ public synchronized void defineAliases(List<String> aliases, String oldName) {
private DynamicMethod searchForAliasMethod(Ruby runtime, String name) {
DynamicMethod method = deepMethodSearch(name, runtime);

if (method instanceof JavaMethod) {
// JRUBY-2435: Aliasing eval and other "special" methods should display a warning
// We warn because we treat certain method names as "special" for purposes of
// optimization. Hopefully this will be enough to convince people not to alias
// them.
CallConfiguration callerReq = ((JavaMethod)method).getCallerRequirement();

if (callerReq.framing() != Framing.None ||
callerReq.scoping() != Scoping.None) {String baseName = getBaseName();
char refChar = '#';
String simpleName = getSimpleName();

if (baseName == null && this instanceof MetaClass) {
IRubyObject attached = ((MetaClass)this).getAttached();
if (attached instanceof RubyModule) {
simpleName = ((RubyModule)attached).getSimpleName();
refChar = '.';
}
}

runtime.getWarnings().warn(simpleName + refChar + name + " accesses caller's state and should not be aliased");
}
}
// if (method instanceof JavaMethod) {
// // JRUBY-2435: Aliasing eval and other "special" methods should display a warning
// // We warn because we treat certain method names as "special" for purposes of
// // optimization. Hopefully this will be enough to convince people not to alias
// // them.
// CallConfiguration callerReq = ((JavaMethod)method).getCallerRequirement();
//
// if (callerReq.framing() != Framing.None ||
// callerReq.scoping() != Scoping.None) {String baseName = getBaseName();
// char refChar = '#';
// String simpleName = getSimpleName();
//
// if (baseName == null && this instanceof MetaClass) {
// IRubyObject attached = ((MetaClass)this).getAttached();
// if (attached instanceof RubyModule) {
// simpleName = ((RubyModule)attached).getSimpleName();
// refChar = '.';
// }
// }
//
// runtime.getWarnings().warn(simpleName + refChar + name + " accesses caller's state and should not be aliased");
// }
// }

return method;
}
@@ -1608,12 +1608,12 @@ private void addAccessor(ThreadContext context, String internedName, Visibility

final String variableName = ("@" + internedName).intern();
if (readable) {
addMethod(internedName, new AttrReaderMethod(methodLocation, visibility, CallConfiguration.FrameNoneScopeNone, variableName));
addMethod(internedName, new AttrReaderMethod(methodLocation, visibility, variableName));
callMethod(context, "method_added", runtime.fastNewSymbol(internedName));
}
if (writeable) {
internedName = (internedName + "=").intern();
addMethod(internedName, new AttrWriterMethod(methodLocation, visibility, CallConfiguration.FrameNoneScopeNone, variableName));
addMethod(internedName, new AttrWriterMethod(methodLocation, visibility, variableName));
callMethod(context, "method_added", runtime.fastNewSymbol(internedName));
}
}
5 changes: 2 additions & 3 deletions core/src/main/java/org/jruby/RubyStruct.java
Original file line number Diff line number Diff line change
@@ -36,7 +36,6 @@
import org.jruby.anno.JRubyMethod;
import org.jruby.common.IRubyWarnings.ID;
import org.jruby.exceptions.RaiseException;
import org.jruby.internal.runtime.methods.CallConfiguration;
import org.jruby.internal.runtime.methods.DynamicMethod;
import org.jruby.runtime.Arity;
import org.jruby.runtime.Block;
@@ -215,7 +214,7 @@ public static RubyClass newInstance(IRubyObject recv, IRubyObject[] args, Block
final String memberName = args[i].asJavaString();
// if we are storing a name as well, index is one too high for values
final int index = (name == null && !nilName) ? i : i - 1;
newStruct.addMethod(memberName, new DynamicMethod(newStruct, Visibility.PUBLIC, CallConfiguration.FrameNoneScopeNone) {
newStruct.addMethod(memberName, new DynamicMethod(newStruct, Visibility.PUBLIC) {
@Override
public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject[] args, Block block) {
Arity.checkArgumentCount(context.runtime, name, args, 0, 0);
@@ -232,7 +231,7 @@ public DynamicMethod dup() {
return this;
}
});
newStruct.addMethod(memberName + "=", new DynamicMethod(newStruct, Visibility.PUBLIC, CallConfiguration.FrameNoneScopeNone) {
newStruct.addMethod(memberName + "=", new DynamicMethod(newStruct, Visibility.PUBLIC) {
@Override
public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject[] args, Block block) {
Arity.checkArgumentCount(context.runtime, name, args, 1, 1);
15 changes: 2 additions & 13 deletions core/src/main/java/org/jruby/anno/AnnotationBinder.java
Original file line number Diff line number Diff line change
@@ -108,7 +108,6 @@ public void processType(TypeElement cd) {
out.println("import org.jruby.RubyModule;");
out.println("import org.jruby.RubyClass;");
out.println("import org.jruby.anno.TypePopulator;");
out.println("import org.jruby.internal.runtime.methods.CallConfiguration;");
out.println("import org.jruby.internal.runtime.methods.JavaMethod;");
out.println("import org.jruby.internal.runtime.methods.DynamicMethod;");
out.println("import org.jruby.runtime.Arity;");
@@ -321,21 +320,16 @@ public void processMethodDeclaration(ExecutableElement method) {
anno.frame());
String implClass = anno.meta() ? "singletonClass" : "cls";

String callRequirement = AnnotationHelper.getCallConfigNameByAnno(anno);
String callerRequirement = AnnotationHelper.getCallerCallConfigNameByAnno(anno);

out.println(" javaMethod = new " + annotatedBindingName + "(" + implClass + ", Visibility." + anno.visibility() + ");");
out.println(" populateMethod(javaMethod, " +
+AnnotationHelper.getArityValue(anno, actualRequired) + ", \""
+ method.getSimpleName() + "\", "
+ isStatic + ", "
+ "CallConfiguration." + callRequirement + ","
+ anno.notImplemented() + ", "
+ ((TypeElement)method.getEnclosingElement()).getQualifiedName() + ".class, "
+ "\"" + method.getSimpleName() + "\", "
+ method.getReturnType().toString() + ".class, "
+ "new Class[] {" + buffer.toString() + "},"
+ "CallConfiguration." + callerRequirement + ");");
+ "new Class[] {" + buffer.toString() + "});");
generateMethodAddCalls(method, anno);
}
}
@@ -372,21 +366,16 @@ public void processMethodDeclarationMulti(ExecutableElement method) {
anno.frame());
String implClass = anno.meta() ? "singletonClass" : "cls";

String callRequirement = AnnotationHelper.getCallConfigNameByAnno(anno);
String callerRequirement = AnnotationHelper.getCallerCallConfigNameByAnno(anno);

out.println(" javaMethod = new " + annotatedBindingName + "(" + implClass + ", Visibility." + anno.visibility() + ");");
out.println(" populateMethod(javaMethod, " +
"-1, \"" +
method.getSimpleName() + "\", " +
isStatic + ", " +
"CallConfiguration." + callRequirement + ", " +
anno.notImplemented() + ", "
+ ((TypeElement)method.getEnclosingElement()).getQualifiedName() + ".class, "
+ "\"" + method.getSimpleName() + "\", "
+ method.getReturnType().toString() + ".class, "
+ "new Class[] {" + buffer.toString() + "},"
+ "CallConfiguration." + callerRequirement + ");");
+ "new Class[] {" + buffer.toString() + "});");
generateMethodAddCalls(method, anno);
}
}
11 changes: 3 additions & 8 deletions core/src/main/java/org/jruby/anno/TypePopulator.java
Original file line number Diff line number Diff line change
@@ -32,34 +32,29 @@
import java.util.Map;
import org.jruby.Ruby;
import org.jruby.RubyModule;
import org.jruby.internal.runtime.methods.CallConfiguration;
import org.jruby.internal.runtime.methods.DynamicMethod;
import org.jruby.internal.runtime.methods.JavaMethod;
import org.jruby.runtime.Arity;
import org.jruby.runtime.MethodFactory;
import org.jruby.runtime.MethodIndex;
import org.jruby.runtime.Visibility;

public abstract class TypePopulator {
public static void populateMethod(JavaMethod javaMethod, int arity, String simpleName, boolean isStatic, CallConfiguration callConfig, boolean notImplemented) {
public static void populateMethod(JavaMethod javaMethod, int arity, String simpleName, boolean isStatic, boolean notImplemented) {
javaMethod.setIsBuiltin(true);
javaMethod.setArity(Arity.createArity(arity));
javaMethod.setJavaName(simpleName);
javaMethod.setSingleton(isStatic);
javaMethod.setCallConfig(callConfig);
javaMethod.setNotImplemented(notImplemented);
}

public static void populateMethod(JavaMethod javaMethod, int arity, String simpleName, boolean isStatic, CallConfiguration callConfig, boolean notImplemented,
Class nativeTarget, String nativeName, Class nativeReturn, Class[] nativeArguments, CallConfiguration callerRequirement) {
public static void populateMethod(JavaMethod javaMethod, int arity, String simpleName, boolean isStatic, boolean notImplemented,
Class nativeTarget, String nativeName, Class nativeReturn, Class[] nativeArguments) {
javaMethod.setIsBuiltin(true);
javaMethod.setArity(Arity.createArity(arity));
javaMethod.setJavaName(simpleName);
javaMethod.setSingleton(isStatic);
javaMethod.setCallConfig(callConfig);
javaMethod.setNotImplemented(notImplemented);
javaMethod.setNativeCall(nativeTarget, nativeName, nativeReturn, nativeArguments, isStatic, false);
javaMethod.setCallerRequirement(callerRequirement);
}

public static DynamicMethod populateModuleMethod(RubyModule cls, JavaMethod javaMethod) {
2 changes: 0 additions & 2 deletions core/src/main/java/org/jruby/ext/ffi/Buffer.java
Original file line number Diff line number Diff line change
@@ -10,8 +10,6 @@
import org.jruby.RubyString;
import org.jruby.anno.JRubyClass;
import org.jruby.anno.JRubyMethod;
import org.jruby.internal.runtime.methods.CallConfiguration;
import org.jruby.internal.runtime.methods.DynamicMethod;
import org.jruby.runtime.*;
import org.jruby.runtime.builtin.IRubyObject;
import static org.jruby.runtime.Visibility.*;
3 changes: 1 addition & 2 deletions core/src/main/java/org/jruby/ext/ffi/Pointer.java
Original file line number Diff line number Diff line change
@@ -6,7 +6,6 @@
import org.jruby.*;
import org.jruby.anno.JRubyClass;
import org.jruby.anno.JRubyMethod;
import org.jruby.internal.runtime.methods.CallConfiguration;
import org.jruby.internal.runtime.methods.DynamicMethod;
import org.jruby.runtime.*;
import org.jruby.runtime.builtin.IRubyObject;
@@ -199,7 +198,7 @@ private static final class NilToPointerMethod extends DynamicMethod {
private final Pointer nullPointer;

private NilToPointerMethod(RubyModule implementationClass, Pointer nullPointer) {
super(implementationClass, Visibility.PUBLIC, CallConfiguration.FrameNoneScopeNone);
super(implementationClass, Visibility.PUBLIC);
this.nullPointer = nullPointer;
}

3 changes: 1 addition & 2 deletions core/src/main/java/org/jruby/ext/ffi/jffi/DefaultMethod.java
Original file line number Diff line number Diff line change
@@ -5,7 +5,6 @@
import com.kenai.jffi.Function;
import org.jruby.RubyModule;
import org.jruby.internal.runtime.methods.CacheableMethod;
import org.jruby.internal.runtime.methods.CallConfiguration;
import org.jruby.internal.runtime.methods.DynamicMethod;
import org.jruby.runtime.Arity;
import org.jruby.runtime.Block;
@@ -27,7 +26,7 @@ public class DefaultMethod extends DynamicMethod implements CacheableMethod {

public DefaultMethod(RubyModule implementationClass, Function function,
Signature signature, NativeInvoker defaultInvoker) {
super(implementationClass, Visibility.PUBLIC, CallConfiguration.FrameNoneScopeNone);
super(implementationClass, Visibility.PUBLIC);
this.arity = Arity.fixed(signature.getParameterCount());
this.function = function;
this.defaultInvoker = defaultInvoker;
Loading