private static MethodHandle BindCaller(MethodHandle target, Class hostClass)
        {
            MethodHandle cbmh = MethodHandleImpl.BindCaller(target, hostClass);

            if (target.VarargsCollector)
            {
                MethodType type  = cbmh.Type();
                int        arity = type.ParameterCount();
                return(cbmh.AsVarargsCollector(type.ParameterType(arity - 1)));
            }
            return(cbmh);
        }
Esempio n. 2
0
        static MethodHandleNatives()
        {
            registerNatives();
            COUNT_GWT = getConstant(Constants.GC_COUNT_GWT) != 0;

            // The JVM calls MethodHandleNatives.<clinit>.  Cascade the <clinit> calls as needed:
            MethodHandleImpl.InitStatics();
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final int HR_MASK = ((1 << REF_getField) | (1 << REF_putField) | (1 << REF_invokeVirtual) | (1 << REF_invokeSpecial) | (1 << REF_invokeInterface));
            int HR_MASK = ((1 << REF_getField) | (1 << REF_putField) | (1 << REF_invokeVirtual) | (1 << REF_invokeSpecial) | (1 << REF_invokeInterface));

            for (sbyte refKind = REF_NONE + 1; refKind < REF_LIMIT; refKind++)
            {
                assert(RefKindHasReceiver(refKind) == (((1 << refKind) & HR_MASK) != 0)) : refKind;
            }
            assert(VerifyConstants());
        }
Esempio n. 3
0
    // hooked up via map.xml (as a replacement for makePairwiseConvertByEditor)
    public static MethodHandle makePairwiseConvert(MethodHandle target, MethodType srcType, bool strict, bool monobox)
    {
#if FIRST_PASS
        return(null);
#else
        object[] convSpecs           = MethodHandleImpl.computeValueConversions(srcType, target.type(), strict, monobox);
        List <LambdaForm.Name> names = new List <LambdaForm.Name>();
        names.Add(new LambdaForm.Name(0, LambdaForm.BasicType.L_TYPE));
        for (int i = 0; i < srcType.parameterCount(); i++)
        {
            names.Add(new LambdaForm.Name(i + 1, LambdaForm.BasicType.basicType(srcType.parameterType(i))));
        }
        LambdaForm.Name[] invokeArgs = new LambdaForm.Name[srcType.parameterCount()];
        for (int i = 0; i < invokeArgs.Length; i++)
        {
            object convSpec = convSpecs[i];
            if (convSpec == null)
            {
                invokeArgs[i] = names[i + 1];
            }
            else
            {
                LambdaForm.Name temp = new LambdaForm.Name(convSpec as MethodHandle ?? MethodHandleImpl.Lazy.MH_castReference.bindTo(convSpec), names[i + 1]);
                names.Add(temp);
                invokeArgs[i] = temp;
            }
        }
        names.Add(new LambdaForm.Name(target, invokeArgs));
        if (convSpecs[convSpecs.Length - 1] != null)
        {
            object convSpec = convSpecs[convSpecs.Length - 1];
            if (convSpec != java.lang.Void.TYPE)
            {
                names.Add(new LambdaForm.Name(convSpec as MethodHandle ?? MethodHandleImpl.Lazy.MH_castReference.bindTo(convSpec), names[names.Count - 1]));
            }
        }
        if (target.type().returnType() == java.lang.Void.TYPE && srcType.returnType() != java.lang.Void.TYPE)
        {
            names.Add(new LambdaForm.Name(LambdaForm.constantZero(LambdaForm.BasicType.basicType(srcType.returnType()))));
        }
        LambdaForm form = new LambdaForm("PairwiseConvert", srcType.parameterCount() + 1, names.ToArray());
        return(new LightWeightMethodHandle(srcType, form));
#endif
    }
Esempio n. 4
0
 static CallSite()
 {
     MethodHandleImpl.InitStatics();
     try
     {
         GET_TARGET = IMPL_LOOKUP.findVirtual(typeof(CallSite), "getTarget", MethodType.MethodType(typeof(MethodHandle)));
         THROW_UCS  = IMPL_LOOKUP.findStatic(typeof(CallSite), "uninitializedCallSite", MethodType.MethodType(typeof(Object), typeof(Object[])));
     }
     catch (ReflectiveOperationException e)
     {
         throw newInternalError(e);
     }
     try
     {
         TARGET_OFFSET = UNSAFE.objectFieldOffset(typeof(CallSite).getDeclaredField("target"));
     }
     catch (Exception ex)
     {
         throw new Error(ex);
     }
 }