@Specialization(guards = {"receiver == cachedReceiver", "cachedKey.equals(key)", "cachedContainsKey"}, limit = "8") Object readCached(@SuppressWarnings("unused") TruffleReadOnlyMap receiver, @SuppressWarnings("unused") String key, @Cached("receiver") @SuppressWarnings("unused") TruffleReadOnlyMap cachedReceiver, @Cached("key") @SuppressWarnings("unused") String cachedKey, @Cached("mapContainsKey(receiver, key)") @SuppressWarnings("unused") boolean cachedContainsKey) { return KeyInfo.READABLE; }
@SuppressWarnings("unused") @Specialization(guards = {"onlyStatic == cachedStatic", "clazz == cachedClazz", "cachedName.equals(name)"}, limit = "LIMIT") static HostMethodDesc doCached(Class<?> clazz, String name, boolean onlyStatic, @Cached("onlyStatic") boolean cachedStatic, @Cached("clazz") Class<?> cachedClazz, @Cached("name") String cachedName, @Cached("doUncached(clazz, name, onlyStatic)") HostMethodDesc cachedMethod) { assert cachedMethod == HostInteropReflect.findMethod(clazz, name, onlyStatic); return cachedMethod; }
@SuppressWarnings("unused") @Specialization(guards = {"onlyStatic == cachedStatic", "clazz == cachedClazz", "cachedName.equals(name)"}, limit = "LIMIT") static JavaFieldDesc doCached(Class<?> clazz, String name, boolean onlyStatic, @Cached("onlyStatic") boolean cachedStatic, @Cached("clazz") Class<?> cachedClazz, @Cached("name") String cachedName, @Cached("doUncached(clazz, name, onlyStatic)") JavaFieldDesc cachedField) { assert cachedField == JavaInteropReflect.findField(clazz, name, onlyStatic); return cachedField; }
@SuppressWarnings("unused") @Specialization(guards = {"onlyStatic == cachedStatic", "clazz == cachedClazz", "cachedName.equals(name)"}, limit = "LIMIT") static HostFieldDesc doCached(Class<?> clazz, String name, boolean onlyStatic, @Cached("onlyStatic") boolean cachedStatic, @Cached("clazz") Class<?> cachedClazz, @Cached("name") String cachedName, @Cached("doUncached(clazz, name, onlyStatic)") HostFieldDesc cachedField) { assert cachedField == HostInteropReflect.findField(clazz, name, onlyStatic); return cachedField; }
@SuppressWarnings("unused") @Specialization(guards = {"clazz == cachedClazz", "cachedName.equals(name)"}, limit = "LIMIT") static Class<?> doCached(Class<?> clazz, String name, @Cached("clazz") Class<?> cachedClazz, @Cached("name") String cachedName, @Cached("doUncached(clazz, name)") Class<?> cachedInnerClass) { assert cachedInnerClass == JavaInteropReflect.findInnerClass(clazz, name); return cachedInnerClass; }
@SuppressWarnings("unused") @Specialization(guards = {"clazz == cachedClazz", "cachedName.equals(name)"}, limit = "LIMIT") static Class<?> doCached(Class<?> clazz, String name, @Cached("clazz") Class<?> cachedClazz, @Cached("name") String cachedName, @Cached("doUncached(clazz, name)") Class<?> cachedInnerClass) { assert cachedInnerClass == HostInteropReflect.findInnerClass(clazz, name); return cachedInnerClass; }
@SuppressWarnings("unused") @Specialization(guards = "acceptCached(receiver, foreignAccess, canHandleCall)", limit = "CACHE_SIZE") protected static Object doCached(TruffleObject receiver, Object[] arguments, @Cached("receiver.getForeignAccess()") ForeignAccess foreignAccess, @Cached("createInlinedCallNode(createMessageTarget(foreignAccess))") DirectCallNode sendMessageCall, @Cached("createCanHandleInlinedCallNode(foreignAccess, receiver)") DirectCallNode canHandleCall) { return sendMessageCall.call(arguments); }
@SuppressWarnings("unused") @Specialization(guards = {"clazz == cachedClazz"}, limit = "LIMIT") static JavaMethodDesc doCached(Class<?> clazz, @Cached("clazz") Class<?> cachedClazz, @Cached("doUncached(clazz)") JavaMethodDesc cachedMethod) { assert cachedMethod == doUncached(clazz); return cachedMethod; }
@SuppressWarnings("unused") @Specialization(guards = {"argsLength == cachedArgsLength"}, limit = "LIMIT") static boolean doCached(JavaMethodDesc method, int argsLength, @Cached("argsLength") int cachedArgsLength, @Cached("doUncached(method, argsLength)") boolean applicableByArity) { assert applicableByArity == JavaInteropReflect.isApplicableByArity(method, argsLength); return applicableByArity; }
@Specialization(guards = "symbol.equals(cachedSymbol)", limit = "8", replaces = "readIdentity") public Object readEquals(PythonFlags receiver, @SuppressWarnings("unused") String symbol, @Cached("symbol") @SuppressWarnings("unused") String cachedSymbol, @Cached("buildFlagGetter(symbol)") PythonFlagsGetFlagNode getFlagNode) { return getFlagNode.execute(receiver); }
@Specialization(guards = "symbol == cachedSymbol", limit = "7") public Object readIdentity(RegexFlags receiver, @SuppressWarnings("unused") String symbol, @Cached("symbol") @SuppressWarnings("unused") String cachedSymbol, @Cached("getResultProperty(symbol)") RegexFlagsPropertyNode propertyNode) { return propertyNode.execute(receiver); }
@SuppressWarnings("unused") @Specialization(guards = {"clazz == cachedClazz"}, limit = "LIMIT") static HostMethodDesc doCached(Class<?> clazz, @Cached("clazz") Class<?> cachedClazz, @Cached("doUncached(clazz)") HostMethodDesc cachedMethod) { assert cachedMethod == doUncached(clazz); return cachedMethod; }
@Specialization(guards = {"receiver.isArray()", "index.getClass() == clazz"}) protected final Object doArrayCached(HostObject receiver, Number index, Object value, @Cached("index.getClass()") Class<? extends Number> clazz) { return doArrayAccess(receiver, clazz.cast(index).intValue(), value); }
@Specialization(guards = {"receiver.isArray()", "index.getClass() == clazz"}, replaces = "doArrayIntIndex") protected Object doArrayCached(HostObject receiver, Number index, @Cached("index.getClass()") Class<? extends Number> clazz) { return doArrayAccess(receiver, clazz.cast(index).intValue()); }
@Specialization(guards = "receiver == cachedReceiver", limit = "1") Object readCached(@SuppressWarnings("unused") RegexFlags receiver, String symbol, @Cached("receiver") RegexFlags cachedReceiver) { return cache.execute(cachedReceiver, symbol); }
@Specialization(replaces = "doOverloadedCached") Object doOverloadedUncached(OverloadedMethod method, Object obj, Object[] args, PolyglotLanguageContext languageContext, @Cached("create()") ToHostNode toJavaNode, @Cached("createBinaryProfile()") ConditionProfile isVarArgsProfile) { SingleMethod overload = selectOverload(method, args, languageContext); Object[] convertedArguments = prepareArgumentsUncached(overload, args, languageContext, toJavaNode, isVarArgsProfile); return doInvoke(overload, obj, convertedArguments, languageContext); }
@SuppressWarnings("unused") @Specialization(guards = {"field == cachedField"}, limit = "LIMIT") static Object doCached(SingleFieldDesc field, JavaObject object, @Cached("field") SingleFieldDesc cachedField) { Object val = cachedField.get(object.obj); return JavaInterop.toGuestValue(val, object.languageContext); }
@Specialization int doLazyCaptureGroups(LazyCaptureGroupsResult receiver, int groupNumber, @Cached("create()") LazyCaptureGroupGetResultNode getResultNode) { return fromSingleArray(getResultNode.execute(receiver), groupNumber) - 1; }
@Specialization(replaces = {"doFixed", "doVarArgs"}) Object doSingleUncached(SingleMethodDesc method, Object obj, Object[] args, Object languageContext, @Cached("create()") ToJavaNode toJavaNode, @Cached("createBinaryProfile()") ConditionProfile isVarArgsProfile) { int parameterCount = method.getParameterCount(); int minArity = method.isVarArgs() ? parameterCount - 1 : parameterCount; if (args.length < minArity) { throw ArityException.raise(minArity, args.length); } Object[] convertedArguments = prepareArgumentsUncached(method, args, languageContext, toJavaNode, isVarArgsProfile); return doInvoke(method, obj, convertedArguments, languageContext); }
@Specialization(guards = {"receiver.getResult() == null", "receiver.getFindStartCallTarget() == null"}) int[] doLazyCaptureGroupsCalc(LazyCaptureGroupsResult receiver, @Cached("create()") CalcResultNode calcResult) { calcResult.execute(receiver.getCaptureGroupCallTarget(), receiver.createArgsCGNoFindStart()); return receiver.getResult(); }