public Object access(RegexObject receiver, String name, Object[] args) { if (!name.equals("exec")) { throw UnknownIdentifierException.raise(name); } if (args.length != 2) { throw ArityException.raise(2, args.length); } return executeNode.execute(receiver, args[0], args[1]); } }
public Object access(RegexObjectExecMethod receiver, Object[] args) { if (args.length != 2) { throw ArityException.raise(2, args.length); } return executeNode.execute(receiver.getRegexObject(), args[0], args[1]); } }
public Object access(CompiledRegexObject receiver, Object[] args) { if (args.length != 3) { throw ArityException.raise(3, args.length); } if (!(args[0] instanceof RegexObject)) { throw UnsupportedTypeException.raise(args); } return doExecute.execute(receiver.getCompiledRegex(), (RegexObject) args[0], args[1], args[2]); } }
public Object access(RegexEngine receiver, Object[] args) { if (!(args.length == 1 || args.length == 2)) { throw ArityException.raise(2, args.length); } String pattern = expectPatternNode.execute(args[0]); String flags = args.length == 2 ? expectFlagsNode.execute(args[1]) : ""; RegexSource regexSource = new RegexSource(pattern, flags); return receiver.compile(regexSource); } }
public Object access(RegexCompiler receiver, Object[] args) { if (!(args.length == 1 || args.length == 2)) { throw ArityException.raise(2, args.length); } if (!(args[0] instanceof String)) { throw UnsupportedTypeException.raise(args); } String pattern = (String) args[0]; String flags = ""; if (args.length == 2) { if (!(args[1] instanceof String)) { throw UnsupportedTypeException.raise(args); } flags = (String) args[1]; } RegexSource regexSource = new RegexSource(pattern, flags); return receiver.compile(regexSource); } }
private Object newArray(HostObject receiver, Object[] args) { if (args.length != 1) { throw ArityException.raise(1, args.length); } if (toJava == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); toJava = insert(ToHostNode.create()); } int length; try { length = (int) toJava.execute(args[0], int.class, null, receiver.languageContext); } catch (ClassCastException | NullPointerException e) { // conversion failed by ToJavaNode throw UnsupportedTypeException.raise(e, args); } Object array = Array.newInstance(receiver.asClass().getComponentType(), length); return HostObject.forObject(array, receiver.languageContext); }
throw ArityException.raise((args.length > maxOverallArity ? maxOverallArity : minOverallArity), args.length);
private Object newArray(JavaObject receiver, Object[] args) { if (args.length != 1) { throw ArityException.raise(1, args.length); } if (toJava == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); toJava = insert(ToJavaNode.create()); } int length; try { length = (int) toJava.execute(args[0], int.class, null, receiver.languageContext); } catch (ClassCastException | NullPointerException e) { // conversion failed by ToJavaNode throw UnsupportedTypeException.raise(e, args); } Object array = Array.newInstance(receiver.asClass().getComponentType(), length); return JavaObject.forObject(array, receiver.languageContext); }
public Object access(ComplexNumber complex, String identifier, Object[] arguments) { if (arguments.length != 1) { throw ArityException.raise(1, arguments.length); } if (!(arguments[0] instanceof ComplexNumber)) { throw UnsupportedTypeException.raise(arguments); } ComplexNumber a = complex; ComplexNumber b = (ComplexNumber) arguments[0]; switch (identifier) { case ADD: return add(a, b); case SUB: return sub(a, b); default: throw UnknownIdentifierException.raise(identifier); } }
throw ArityException.raise((args.length > maxOverallArity ? maxOverallArity : minOverallArity), args.length);
public Object access(RegexEngineBuilder receiver, Object[] args) { if (args.length > 2) { throw ArityException.raise(2, args.length); } RegexOptions options = RegexOptions.DEFAULT; if (args.length >= 1) { options = RegexOptions.parse(expectOptionsNode.execute(args[0])); } TruffleObject fallbackCompiler = null; if (args.length >= 2) { if (!(args[1] instanceof TruffleObject && ForeignAccess.sendIsExecutable(isExecutableNode, (TruffleObject) args[1]))) { throw UnsupportedTypeException.raise(args); } fallbackCompiler = (TruffleObject) args[1]; } return createRegexEngine(receiver.language, options, fallbackCompiler); }
@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(replaces = {"doFixed", "doVarArgs"}) Object doSingleUncached(SingleMethod method, Object obj, Object[] args, PolyglotLanguageContext languageContext, @Cached("create()") ToHostNode 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); }
@SuppressWarnings("unused") @ExplodeLoop @Specialization(guards = {"!method.isVarArgs()", "method == cachedMethod"}, limit = "LIMIT") Object doFixed(SingleMethod method, Object obj, Object[] args, PolyglotLanguageContext languageContext, @Cached("method") SingleMethod cachedMethod, @Cached("createToHost(method.getParameterCount())") ToHostNode[] toJavaNodes, @Cached("createClassProfile()") ValueProfile receiverProfile) { int arity = cachedMethod.getParameterCount(); if (args.length != arity) { throw ArityException.raise(arity, args.length); } Class<?>[] types = cachedMethod.getParameterTypes(); Type[] genericTypes = cachedMethod.getGenericParameterTypes(); Object[] convertedArguments = new Object[args.length]; for (int i = 0; i < toJavaNodes.length; i++) { convertedArguments[i] = toJavaNodes[i].execute(args[i], types[i], genericTypes[i], languageContext); } return doInvoke(cachedMethod, receiverProfile.profile(obj), convertedArguments, languageContext); }
@SuppressWarnings("unused") @ExplodeLoop @Specialization(guards = {"!method.isVarArgs()", "method == cachedMethod"}, limit = "LIMIT") Object doFixed(SingleMethodDesc method, Object obj, Object[] args, Object languageContext, @Cached("method") SingleMethodDesc cachedMethod, @Cached("createToJava(method.getParameterCount())") ToJavaNode[] toJavaNodes, @Cached("createClassProfile()") ValueProfile receiverProfile) { int arity = cachedMethod.getParameterCount(); if (args.length != arity) { throw ArityException.raise(arity, args.length); } Class<?>[] types = cachedMethod.getParameterTypes(); Type[] genericTypes = cachedMethod.getGenericParameterTypes(); Object[] convertedArguments = new Object[args.length]; for (int i = 0; i < toJavaNodes.length; i++) { convertedArguments[i] = toJavaNodes[i].execute(args[i], types[i], genericTypes[i], languageContext); } return doInvoke(cachedMethod, receiverProfile.profile(obj), convertedArguments, languageContext); }
@SuppressWarnings("unused") @Specialization(guards = {"method.isVarArgs()", "method == cachedMethod"}, limit = "LIMIT") Object doVarArgs(SingleMethodDesc method, Object obj, Object[] args, Object languageContext, @Cached("method") SingleMethodDesc cachedMethod, @Cached("create()") ToJavaNode toJavaNode, @Cached("createClassProfile()") ValueProfile receiverProfile) { int parameterCount = cachedMethod.getParameterCount(); int minArity = parameterCount - 1; if (args.length < minArity) { throw ArityException.raise(minArity, args.length); } Class<?>[] types = cachedMethod.getParameterTypes(); Type[] genericTypes = cachedMethod.getGenericParameterTypes(); Object[] convertedArguments = new Object[args.length]; for (int i = 0; i < minArity; i++) { convertedArguments[i] = toJavaNode.execute(args[i], types[i], genericTypes[i], languageContext); } if (asVarArgs(args, cachedMethod)) { for (int i = minArity; i < args.length; i++) { Class<?> expectedType = types[minArity].getComponentType(); Type expectedGenericType = getGenericComponentType(genericTypes[minArity]); convertedArguments[i] = toJavaNode.execute(args[i], expectedType, expectedGenericType, languageContext); } convertedArguments = createVarArgsArray(cachedMethod, convertedArguments, parameterCount); } else { convertedArguments[minArity] = toJavaNode.execute(args[minArity], types[minArity], genericTypes[minArity], languageContext); } return doInvoke(cachedMethod, receiverProfile.profile(obj), convertedArguments, languageContext); }
@SuppressWarnings("unused") @Specialization(guards = {"method.isVarArgs()", "method == cachedMethod"}, limit = "LIMIT") Object doVarArgs(SingleMethod method, Object obj, Object[] args, PolyglotLanguageContext languageContext, @Cached("method") SingleMethod cachedMethod, @Cached("create()") ToHostNode toJavaNode, @Cached("createClassProfile()") ValueProfile receiverProfile) { int parameterCount = cachedMethod.getParameterCount(); int minArity = parameterCount - 1; if (args.length < minArity) { throw ArityException.raise(minArity, args.length); } Class<?>[] types = cachedMethod.getParameterTypes(); Type[] genericTypes = cachedMethod.getGenericParameterTypes(); Object[] convertedArguments = new Object[args.length]; for (int i = 0; i < minArity; i++) { convertedArguments[i] = toJavaNode.execute(args[i], types[i], genericTypes[i], languageContext); } if (asVarArgs(args, cachedMethod, languageContext, toJavaNode)) { for (int i = minArity; i < args.length; i++) { Class<?> expectedType = types[minArity].getComponentType(); Type expectedGenericType = getGenericComponentType(genericTypes[minArity]); convertedArguments[i] = toJavaNode.execute(args[i], expectedType, expectedGenericType, languageContext); } convertedArguments = createVarArgsArray(cachedMethod, convertedArguments, parameterCount); } else { convertedArguments[minArity] = toJavaNode.execute(args[minArity], types[minArity], genericTypes[minArity], languageContext); } return doInvoke(cachedMethod, receiverProfile.profile(obj), convertedArguments, languageContext); }