protected final boolean isValidKey(TruffleObject receiver, Object key) { if (cache.keyClass.isInstance(key)) { if (cache.memberKey && condition.profile(sendHasKeys(hasKeys, receiver))) { if (key instanceof String) { return true; } } else if (cache.numberKey && key instanceof Number && sendHasSize(hasSize, receiver)) { return true; } } return false; }
protected final boolean isValidKey(TruffleObject receiver, Object key) { if (cache.keyClass.isInstance(key)) { if (cache.memberKey && condition.profile(sendHasKeys(hasKeys, receiver))) { if (key instanceof String) { return true; } } else if (cache.numberKey && key instanceof Number && sendHasSize(hasSize, receiver)) { return true; } } return false; }
@Override public Object execute(VirtualFrame virtualFrame) { if (this.conditionProfile.profile(this.testResult(virtualFrame))) { return this.thenNode.execute(virtualFrame); } else { return this.elseNode.execute(virtualFrame); } }
@Override protected void onReturnValue(VirtualFrame frame, Object result) { long startTime; Counter parentCounter; try { startTime = frame.getLong(timeStartedSlot); parentCounter = (Counter) frame.getObject(parentCounterSlot); } catch (FrameSlotTypeException e) { throw new AssertionError(); } long timeNano = System.nanoTime() - startTime; if (CompilerDirectives.inInterpreter()) { counter.interpretedTotalTime += timeNano; } else { counter.compiledTotalTime += timeNano; } // the condition if parentCounter is usually only for a root method null // after that it is always set. So it makes sense to speculate. if (parentNotNullProfile.profile(parentCounter != null)) { // do not speculate on parentCounter.compiled condition very likely to invalidate if (parentCounter.compiled) { parentCounter.compiledChildTime += timeNano; } else { parentCounter.interpretedChildTime += timeNano; } } profiler.activeCounter = parentCounter; }
private Object convert(TruffleObject obj) { boolean isBoxedResult = ForeignAccess.sendIsBoxed(isBoxed, obj); if (isBoxedProfile.profile(isBoxedResult)) { try { Object newValue = ForeignAccess.sendUnbox(unbox, obj); return new ConvertedObject(obj, newValue); } catch (UnsupportedMessageException e) { return new ConvertedObject(obj, null); } } else { boolean isNullResult = ForeignAccess.sendIsNull(isNull, obj); if (isNullResult) { return new ConvertedObject(obj, null); } } return obj; } }
private static Object[] prepareArgumentsUncached(SingleMethod method, Object[] args, PolyglotLanguageContext languageContext, ToHostNode toJavaNode, ConditionProfile isVarArgsProfile) { Class<?>[] types = method.getParameterTypes(); Type[] genericTypes = method.getGenericParameterTypes(); Object[] convertedArguments = new Object[args.length]; if (isVarArgsProfile.profile(method.isVarArgs()) && asVarArgs(args, method, languageContext, toJavaNode)) { int parameterCount = method.getParameterCount(); for (int i = 0; i < args.length; i++) { Class<?> expectedType = i < parameterCount - 1 ? types[i] : types[parameterCount - 1].getComponentType(); Type expectedGenericType = i < parameterCount - 1 ? genericTypes[i] : getGenericComponentType(genericTypes[parameterCount - 1]); convertedArguments[i] = toJavaNode.execute(args[i], expectedType, expectedGenericType, languageContext); } convertedArguments = createVarArgsArray(method, convertedArguments, parameterCount); } else { for (int i = 0; i < args.length; i++) { convertedArguments[i] = toJavaNode.execute(args[i], types[i], genericTypes[i], languageContext); } } return convertedArguments; }
private static Object[] prepareArgumentsUncached(SingleMethodDesc method, Object[] args, Object languageContext, ToJavaNode toJavaNode, ConditionProfile isVarArgsProfile) { Class<?>[] types = method.getParameterTypes(); Type[] genericTypes = method.getGenericParameterTypes(); Object[] convertedArguments = new Object[args.length]; if (isVarArgsProfile.profile(method.isVarArgs()) && asVarArgs(args, method)) { int parameterCount = method.getParameterCount(); for (int i = 0; i < args.length; i++) { Class<?> expectedType = i < parameterCount - 1 ? types[i] : types[parameterCount - 1].getComponentType(); Type expectedGenericType = i < parameterCount - 1 ? genericTypes[i] : getGenericComponentType(genericTypes[parameterCount - 1]); convertedArguments[i] = toJavaNode.execute(args[i], expectedType, expectedGenericType, languageContext); } convertedArguments = createVarArgsArray(method, convertedArguments, parameterCount); } else { for (int i = 0; i < args.length; i++) { convertedArguments[i] = toJavaNode.execute(args[i], types[i], genericTypes[i], languageContext); } } return convertedArguments; }
boolean executable = condition.profile(sendIsExecutable(isExecutable, function)); try { if (executable) {
boolean executable = condition.profile(sendIsExecutable(isExecutable, function)); try { if (executable) {
if (invokeOrReadAndExecuteProfile.profile(KeyInfo.isInvocable(keyInfo))) { try { return ForeignAccess.sendInvoke(invokeNode, receiver, name, arguments);
if (invokeOrReadAndExecuteProfile.profile(KeyInfo.isInvocable(keyInfo))) { try { return ForeignAccess.sendInvoke(invokeNode, receiver, name, arguments);