Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.jruby.ext.ffi.jffi;
  
  import com.kenai.jffi.*;
  import org.jruby.Ruby;
 
 
 abstract public class JITNativeInvoker extends NativeInvoker {
     protected static final Invoker invoker = Invoker.getInstance();
     protected final com.kenai.jffi.Function function;
     protected final com.kenai.jffi.CallContext callContext;
     protected final long functionAddress;
     protected final Signature signature;
     protected final int arity;
     protected final NativeDataConverter resultConverter;
     protected final NativeDataConverter parameterConverter0;
     protected final NativeDataConverter parameterConverter1;
     protected final NativeDataConverter parameterConverter2;
     protected final NativeDataConverter parameterConverter3;
     protected final NativeDataConverter parameterConverter4;
     protected final NativeDataConverter parameterConverter5;
     protected final ObjectParameterInfo parameterInfo0;
     protected final ObjectParameterInfo parameterInfo1;
     protected final ObjectParameterInfo parameterInfo2;
     protected final ObjectParameterInfo parameterInfo3;
     protected final ObjectParameterInfo parameterInfo4;
     protected final ObjectParameterInfo parameterInfo5;
     protected final CachingCallSite parameterCallSite0;
     protected final CachingCallSite parameterCallSite1;
     protected final CachingCallSite parameterCallSite2;
     protected final CachingCallSite parameterCallSite3;
     protected final CachingCallSite parameterCallSite4;
     protected final CachingCallSite parameterCallSite5;
     protected final CachingCallSite parameterCallSite6;
 
     public JITNativeInvoker(RubyModule implementationClasscom.kenai.jffi.Function functionSignature signature) {
         super(implementationClassfunctionsignature);
         this. = signature.getParameterCount();
         this. = function;
         this. = function.getCallContext();
         this. = function.getFunctionAddress();
         this. = signature;
 
         // Get any result and parameter converters needed
          = DataConverters.getResultConverter(signature.getResultType());
          = getParameterConverter(signature, 0);
          = getParameterConverter(signature, 1);
          = getParameterConverter(signature, 2);
          = getParameterConverter(signature, 3);
          = getParameterConverter(signature, 4);
          = getParameterConverter(signature, 5);
          = getParameterInfo(signature, 0);
          = getParameterInfo(signature, 1);
          = getParameterInfo(signature, 2);
          = getParameterInfo(signature, 3);
          = getParameterInfo(signature, 4);
          = getParameterInfo(signature, 5);
          = getParameterCallSite(signature, 0);
          = getParameterCallSite(signature, 1);
          = getParameterCallSite(signature, 2);
          = getParameterCallSite(signature, 3);
          = getParameterCallSite(signature, 4);
          = getParameterCallSite(signature, 5);
          = getParameterCallSite(signature, 6);
     }
 
     private static NativeDataConverter getParameterConverter(Signature signatureint i) {
         return signature.getParameterCount() > i
             ? DataConverters.getParameterConverter(signature.getParameterType(i), signature.getEnums()) : null;
     }
 
     private static ObjectParameterInfo getParameterInfo(Signature signatureint i) {
         if (signature.getParameterCount() <= i) {
             return null;
         }
 
         Type type = signature.getParameterType(i);
         int flags = 0;
         NativeType nativeType  = type instanceof MappedType
                 ? ((MappedTypetype).getRealType().getNativeType() : type.getNativeType();
 
         switch (nativeType) {
             case :
             case :
             case :
                flags |= . | .;
                break;
            case :
                flags |= . | .;
                break;
            case :
            case :
                break;
            default:
                return null;
        }
        return ObjectParameterInfo.create(i..flags);
    }
    private static CachingCallSite getParameterCallSite(Signature signatureint parameterIndex) {
        if (signature.getParameterCount() <= parameterIndex) {
            return null;
        }
        Type type = signature.getParameterType(parameterIndex);
        NativeType nativeType  = type instanceof MappedType
                ? ((MappedTypetype).getRealType().getNativeType() : type.getNativeType();
        switch (nativeType) {
            case :
            case :
                return new FunctionalCachingCallSite("to_str");
            case :
            case :
            case :
            case :
                return new FunctionalCachingCallSite("to_ptr");
            default:
                return null;
        }
    }
        return ;
    }
        return ;
    }
    long getFunctionAddress() {
        return ;
    }
    @Override
    public IRubyObject call(ThreadContext contextIRubyObject selfRubyModule klazzString name) {
        throw context.runtime.newArgumentError(0, );
    }
    @Override
    public IRubyObject call(ThreadContext contextIRubyObject selfRubyModule klazzString name,
                            IRubyObject arg1) {
        throw context.runtime.newArgumentError(1, );
    }
    @Override
    public IRubyObject call(ThreadContext contextIRubyObject selfRubyModule klazzString name,
                            IRubyObject arg1IRubyObject arg2) {
        throw context.runtime.newArgumentError(2, );
    }
    @Override
    public IRubyObject call(ThreadContext contextIRubyObject selfRubyModule klazzString name,
                            IRubyObject arg1IRubyObject arg2IRubyObject arg3) {
        throw context.runtime.newArgumentError(3, );
    }
    public IRubyObject call(ThreadContext contextIRubyObject selfRubyModule klazzString name,
                            IRubyObject arg1IRubyObject arg2IRubyObject arg3IRubyObject arg4) {
        throw context.runtime.newArgumentError(4, );
    }
    public IRubyObject call(ThreadContext contextIRubyObject selfRubyModule klazzString name,
                            IRubyObject arg1IRubyObject arg2IRubyObject arg3IRubyObject arg4IRubyObject arg5) {
        throw context.runtime.newArgumentError(5, );
    }
    public IRubyObject call(ThreadContext contextIRubyObject selfRubyModule klazzString name,
                            IRubyObject arg1IRubyObject arg2IRubyObject arg3IRubyObject arg4,
                            IRubyObject arg5IRubyObject arg6) {
        throw context.runtime.newArgumentError(6, );
    }
    @Override
    public final IRubyObject call(ThreadContext contextIRubyObject self,
                                    RubyModule clazzString nameIRubyObject[] args) {
        if (args.length != ) {
            throw context.runtime.newArgumentError(args.length);
        }
        switch (args.length) {
            case 0:
                return call(contextselfclazzname);
            case 1:
                return call(contextselfclazznameargs[0]);
            case 2:
                return call(contextselfclazznameargs[0], args[1]);
            case 3:
                return call(contextselfclazznameargs[0], args[1], args[2]);
            case 4:
                return call(contextselfclazznameargs[0], args[1], args[2], args[3]);
            case 5:
                return call(contextselfclazznameargs[0], args[1], args[2], args[3], args[4]);
            case 6:
                return call(contextselfclazznameargs[0], args[1], args[2], args[3], args[4], args[5]);
            default:
                throw context.runtime.newArgumentError("too many arguments: " + args.length);
        }
    }
New to GrepCode? Check out our FAQ X