Example #1
0
    public IRubyObject get(
        ThreadContext context, StructLayout.Storage cache, Member m, IRubyObject ptr) {
      final long address = ((Pointer) ptr).getMemoryIO().getAddress(m.getOffset(ptr));

      AbstractInvoker fptr = (AbstractInvoker) cache.getCachedValue(m);
      if (fptr != null && fptr.getAddress() == address) {
        return fptr;
      }

      fptr =
          Factory.getInstance()
              .newFunction(
                  context.getRuntime(),
                  ((Pointer) ptr).getPointer(context.getRuntime(), m.getOffset(ptr)),
                  (CallbackInfo) m.type);
      cache.putCachedValue(m, fptr);

      return fptr;
    }