@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, @Cached("mapGet(receiver, key)") Object cachedValue) { return cachedValue; }
@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; }
@Specialization(guards = {"cachedMethod.equals(method)"}, limit = "LIMIT") @SuppressWarnings("unused") protected Object doCachedMethod(PolyglotLanguageContext languageContext, TruffleObject receiver, Method method, Object[] arguments, @Cached("method") Method cachedMethod, @Cached("method.getName()") String name, @Cached("getMethodReturnType(method)") Class<?> returnClass, @Cached("getMethodGenericReturnType(method)") Type returnType, @Cached("INVOKE.createNode()") Node invokeNode, @Cached("KEY_INFO.createNode()") Node keyInfoNode, @Cached("READ.createNode()") Node readNode, @Cached("IS_EXECUTABLE.createNode()") Node isExecutableNode, @Cached("EXECUTE.createNode()") Node executeNode, @Cached("createBinaryProfile()") ConditionProfile branchProfile, @Cached("create()") ToHostNode toJava) { Object result = invokeOrExecute(languageContext, receiver, arguments, name, invokeNode, keyInfoNode, readNode, isExecutableNode, executeNode, branchProfile); return toJava.execute(result, returnClass, returnType, languageContext); }
@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 = {"onlyStatic == cachedStatic", "clazz == cachedClazz", "cachedName.equals(name)"}, limit = "LIMIT") static int doCached(Class<?> clazz, String name, boolean onlyStatic, @Cached("onlyStatic") boolean cachedStatic, @Cached("clazz") Class<?> cachedClazz, @Cached("name") String cachedName, @Cached("doUncached(clazz, name, onlyStatic)") int cachedKeyInfo) { assert cachedKeyInfo == doUncached(clazz, name, onlyStatic); return cachedKeyInfo; }
@SuppressWarnings("unused") @Specialization(guards = {"onlyStatic == cachedStatic", "clazz == cachedClazz", "cachedName.equals(name)"}, limit = "LIMIT") static JavaMethodDesc doCached(Class<?> clazz, String name, boolean onlyStatic, @Cached("onlyStatic") boolean cachedStatic, @Cached("clazz") Class<?> cachedClazz, @Cached("name") String cachedName, @Cached("doUncached(clazz, name, onlyStatic)") JavaMethodDesc cachedMethod) { assert cachedMethod == JavaInteropReflect.findMethod(clazz, name, onlyStatic); return cachedMethod; }
@Specialization(guards = {"sessions.length == 1", "threadId == currentThreadId"}, limit = "CACHE_LIMIT") protected void executeCached(boolean suspensionEnabled, @SuppressWarnings("unused") DebuggerSession[] sessions, @SuppressWarnings("unused") long threadId, @SuppressWarnings("unused") @Cached("currentThreadId()") long currentThreadId, @Cached("getThreadSuspension(sessions)") ThreadSuspension threadSuspension) { threadSuspension.enabled = suspensionEnabled; }
@Specialization(guards = {"sessions.length == 1", "threadId == currentThreadId"}, limit = "CACHE_LIMIT") protected void executeCached(boolean suspensionEnabled, @SuppressWarnings("unused") DebuggerSession[] sessions, @SuppressWarnings("unused") long threadId, @SuppressWarnings("unused") @Cached("currentThreadId()") long currentThreadId, @Cached("getThreadSuspension(sessions)") ThreadSuspension threadSuspension) { threadSuspension.enabled = suspensionEnabled; }
@SuppressWarnings("unused") @Specialization(guards = {"onlyStatic == cachedStatic", "clazz == cachedClazz", "cachedName.equals(name)"}, limit = "LIMIT") static int doCached(Class<?> clazz, String name, boolean onlyStatic, @Cached("onlyStatic") boolean cachedStatic, @Cached("clazz") Class<?> cachedClazz, @Cached("name") String cachedName, @Cached("doUncached(clazz, name, onlyStatic)") int cachedKeyInfo) { assert cachedKeyInfo == doUncached(clazz, name, onlyStatic); return cachedKeyInfo; }
@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 = "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("createInlinedCallNode(createCanHandleTarget(foreignAccess))") 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; }