org.jruby.cext
Class NativeMethod
java.lang.Object
org.jruby.internal.runtime.methods.DynamicMethod
org.jruby.cext.NativeMethod
- Direct Known Subclasses:
- NativeMethod0, NativeMethod1, NativeMethod2, NativeMethod3, NativeProcMethod
public class NativeMethod
- extends DynamicMethod
NativeMethod
represents a method handle to a C extension function in JRuby,
to provide entry points into C code. Native methods setup and tear down scope and context
around a native method call and lock the GIL
. Native methods restrict concurrency
in C extensions to avoid threading issues in C code.
Method Summary |
IRubyObject |
call(ThreadContext context,
IRubyObject recv,
RubyModule clazz,
java.lang.String name,
IRubyObject[] args)
A default implementation of n-arity, non-block 'call' method,
which simply calls the n-arity, block-receiving version with
the arg list and Block.NULL_BLOCK. |
IRubyObject |
call(ThreadContext context,
IRubyObject recv,
RubyModule clazz,
java.lang.String name,
IRubyObject[] args,
Block block)
The minimum 'call' method required for a dynamic method handle. |
DynamicMethod |
dup()
Duplicate this method, returning DynamicMethod referencing the same code
and with the same attributes. |
Arity |
getArity()
Retrieve the arity of this method, used for reporting arity to Ruby
code. |
boolean |
isNative()
Returns true if this method is backed by native (i.e. |
Methods inherited from class org.jruby.internal.runtime.methods.DynamicMethod |
calculateProtectedClass, call, call, call, call, call, call, call, call, call, call, call, call, call, call, call, call, call, call, call, call, call, call, getCallConfig, getImplementationClass, getName, getNativeCall, getProtectedClass, getRealMethod, getSerialNumber, getVisibility, handleBreak, handleRedo, handleReturn, init, isBuiltin, isCallableFrom, isNotImplemented, isUndefined, setCallConfig, setImplementationClass, setIsBuiltin, setName, setNativeCall, setNotImplemented, setVisibility |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
arity
protected final Arity arity
function
protected final long function
NativeMethod
public NativeMethod(RubyModule clazz,
int arity,
long function)
dup
public final DynamicMethod dup()
- Description copied from class:
DynamicMethod
- Duplicate this method, returning DynamicMethod referencing the same code
and with the same attributes.
It is not required that this method produce a new object if the
semantics of the DynamicMethod subtype do not require such.
- Specified by:
dup
in class DynamicMethod
- Returns:
- An identical DynamicMethod object to the target.
getArity
public final Arity getArity()
- Description copied from class:
DynamicMethod
- Retrieve the arity of this method, used for reporting arity to Ruby
code. This arity may or may not reflect the actual specific or variable
arities of the referenced method.
- Overrides:
getArity
in class DynamicMethod
- Returns:
- The arity of the method, as reported to Ruby consumers.
isNative
public final boolean isNative()
- Description copied from class:
DynamicMethod
- Returns true if this method is backed by native (i.e. Java) code.
- Overrides:
isNative
in class DynamicMethod
- Returns:
- true If backed by Java code or JVM bytecode; false otherwise
call
public IRubyObject call(ThreadContext context,
IRubyObject recv,
RubyModule clazz,
java.lang.String name,
IRubyObject[] args)
- Description copied from class:
DynamicMethod
- A default implementation of n-arity, non-block 'call' method,
which simply calls the n-arity, block-receiving version with
the arg list and Block.NULL_BLOCK.
- Overrides:
call
in class DynamicMethod
- Parameters:
context
- The thread context for the currently executing threadrecv
- The 'self' or 'receiver' object to use for this callname
- The incoming name used to invoke this method
- Returns:
- The result of the call
call
public IRubyObject call(ThreadContext context,
IRubyObject recv,
RubyModule clazz,
java.lang.String name,
IRubyObject[] args,
Block block)
- Description copied from class:
DynamicMethod
- The minimum 'call' method required for a dynamic method handle.
Subclasses must impleemnt this method, but may implement the other
signatures to provide faster, non-boxing call paths. Typically
subclasses will implement this method to check variable arity calls,
then performing a specific-arity invocation to the appropriate method
or performing variable-arity logic in-line.
- Specified by:
call
in class DynamicMethod
- Parameters:
context
- The thread context for the currently executing threadrecv
- The 'self' or 'receiver' object to use for this callname
- The incoming name used to invoke this methodargs
- The argument list to this invocationblock
- The block passed to this invocation
- Returns:
- The result of the call
Copyright © 2002-2009 JRuby Team. All Rights Reserved.