Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  
  package org.jruby.ext.ffi.jffi;
  
 
 public class DefaultMethod extends DynamicMethod implements CacheableMethod {
     protected final Signature signature;
     private final NativeInvoker defaultInvoker;
     private volatile NativeInvoker compiledInvoker;
     private JITHandle jitHandle;
     protected final Arity arity;
     protected final Function function;
 
 
     public DefaultMethod(RubyModule implementationClassFunction function,
                          Signature signatureNativeInvoker defaultInvoker) {
         super(implementationClass..);
         this. = Arity.fixed(signature.getParameterCount());
         this. = function;
         this. = defaultInvoker;
         this. = signature;
     }
 
     @Override
     public final DynamicMethod dup() {
         return this;
     }
 
     @Override
     public final Arity getArity() {
         return ;
     }
 
     @Override
     public final boolean isNative() {
         return true;
     }
 
     public DynamicMethod getMethodForCaching() {
         return  != null ?  : this;
     }
 
     Signature getSignature() {
         return ;
     }
 
         return .getCallContext();
     }
 
     long getFunctionAddress() {
         return .getFunctionAddress();
     }
 
     protected final NativeInvoker getNativeInvoker() {
         return  != null ?  : tryCompilation();
     }
 
     private synchronized JITHandle getJITHandle() {
         if ( == null) {
              = JITCompiler.getInstance().getHandle();
         }
         return ;
     }
 
     private synchronized NativeInvoker tryCompilation() {
 
         if ( != null) {
             return ;
         }
 
         if (invoker != null) {
              = invoker;
             return ;
         }
         
         //
         // Once compilation has failed, always fallback to the default invoker
         //
         if (getJITHandle().compilationFailed()) {
              = ;
         }
         
         return ;
    }
    @Override
    public IRubyObject call(ThreadContext contextIRubyObject self,
                            RubyModule clazzString nameIRubyObject[] args) {
        return getNativeInvoker().call(contextselfclazznameargs);
    }
    @Override
    public IRubyObject call(ThreadContext contextIRubyObject self,
            RubyModule clazzString nameIRubyObject[] argsBlock block) {
        return getNativeInvoker().call(contextselfclazznameargsblock);
    }
    public final NativeInvoker forceCompilation() {
        NativeInvoker invoker = null;
        while (!getJITHandle().compilationFailed() && (invoker = getJITHandle().compile(getImplementationClass(), )) == null)
            ;
        return invoker;
    }
New to GrepCode? Check out our FAQ X