@Override public ValueType parameterType(int index) { return descriptor.parameterType(index); }
private static boolean sameParams(MethodDescriptor a, MethodDescriptor b) { if (a.parameterCount() != b.parameterCount()) { return false; } for (int i = 0; i < a.parameterCount(); ++i) { if (!a.parameterType(i).equals(b.parameterType(i))) { return false; } } return true; } }
private boolean isProperSetIndexer(MethodDescriptor desc) { return desc.parameterCount() == 2 && typeHelper.isSupportedType(desc.parameterType(0)) && typeHelper.isSupportedType(desc.parameterType(0)) && desc.getResultType() == ValueType.VOID; }
sb.append(", "); ValueType paramType = simplifyParamType(desc.parameterType(i)); sb.append(naming.getFullNameFor(JavaScriptConvGenerator.fromJsMethod)).append("(p").append(i) .append(", ")
private ValueEmitter appendSimpleArguments(ValueEmitter sb, DynamicCallSite callSite) { int parameterCount = callSite.getCalledMethod().parameterCount(); for (int i = 0; i < parameterCount; ++i) { sb = appendArgument(sb, callSite.getCalledMethod().parameterType(i), callSite.getArguments().get(i)); } return sb; }
private boolean isProperGetIndexer(MethodDescriptor desc) { return desc.parameterCount() == 1 && typeHelper.isSupportedType(desc.parameterType(0)) && typeHelper.isSupportedType(desc.getResultType()); }
case VALUE_ARGUMENT: { sb = flushAcc(sb, acc); ValueType type = callSite.getCalledMethod().parameterType(paramIndex++); sb = appendArgument(sb, type, callSite.getArguments().get(valueIndex++)); break; ValueType type = callSite.getCalledMethod().parameterType(paramIndex++); RuntimeConstant poolConstant = callSite.getBootstrapArguments().get(1 + constantIndex++); sb = appendArgument(sb, type, constant(sb.getProgramEmitter(), poolConstant));
private String extractPropertyName(Expr propertyName) { if (!(propertyName instanceof InvocationExpr)) { return null; } InvocationExpr invoke = (InvocationExpr) propertyName; if (!invoke.getMethod().getClassName().equals(JS.class.getName())) { return null; } if (!invoke.getMethod().getName().equals("wrap") || !invoke.getMethod().getDescriptor().parameterType(0).isObject("java.lang.String")) { return null; } Expr arg = invoke.getArguments().get(0); if (!(arg instanceof ConstantExpr)) { return null; } ConstantExpr constant = (ConstantExpr) arg; return constant.getValue() instanceof String ? (String) constant.getValue() : null; }
public void generateMethodParameters(CodeWriter writer, MethodDescriptor methodRef, boolean isStatic, boolean withNames) { if (methodRef.parameterCount() == 0 && isStatic) { return; } int start = 0; if (!isStatic) { writer.print("void*"); if (withNames) { writer.print(" _this_"); } } else { writer.printType(methodRef.parameterType(0)); if (withNames) { writer.print(" local_1"); } start++; } for (int i = start; i < methodRef.parameterCount(); ++i) { writer.print(", ").printType(methodRef.parameterType(i)); if (withNames) { writer.print(" ").print("local_").print(String.valueOf(i + 1)); } } }
private MethodReference getAsyncReference(MethodReference methodRef) { ValueType[] signature = new ValueType[methodRef.parameterCount() + 2]; for (int i = 0; i < methodRef.parameterCount(); ++i) { signature[i] = methodRef.getDescriptor().parameterType(i); } signature[methodRef.parameterCount()] = ValueType.parse(AsyncCallback.class); signature[methodRef.parameterCount() + 1] = ValueType.VOID; return new MethodReference(methodRef.getClassName(), methodRef.getName(), signature); }
private List<Instruction> transformSetterInvocation(InvokeInstruction insn, String property) { ValueType type = insn.getMethod().getDescriptor().parameterType(0); List<Instruction> instructions = new ArrayList<>(); if (type instanceof ValueType.Primitive) {
method.parameterType(i));
private void handleNewInstance(DependencyAgent agent, MethodDependency method) { CallLocation location = new CallLocation(method.getReference()); DependencyNode classValueNode = agent.linkMethod(getConstructors) .addLocation(location) .getVariable(0).getClassValueNode(); classValueNode.addConsumer(reflectedType -> { if (reflectedType.getName().startsWith("[")) { return; } Set<MethodDescriptor> accessibleMethods = getAccessibleMethods(agent, reflectedType.getName()); ClassReader cls = agent.getClassSource().get(reflectedType.getName()); for (MethodDescriptor methodDescriptor : accessibleMethods) { MethodReader calledMethod = cls.getMethod(methodDescriptor); MethodDependency calledMethodDep = agent.linkMethod(calledMethod.getReference()).addLocation(location); calledMethodDep.use(); for (int i = 0; i < calledMethod.parameterCount(); ++i) { propagateSet(agent, methodDescriptor.parameterType(i), method.getVariable(1).getArrayItem(), calledMethodDep.getVariable(i + 1), location); } calledMethodDep.getVariable(0).propagate(reflectedType); linkClassIfNecessary(agent, calledMethod, location); } }); classValueNode.connect(method.getResult()); }
arguments.add(pe.var(indy.getArguments().get(k), indy.getMethod().parameterType(k)));
private void handleInvoke(DependencyAgent agent, MethodDependency method) { CallLocation location = new CallLocation(method.getReference()); DependencyNode classValueNode = agent.linkMethod(getMethods) .addLocation(location) .getVariable(0).getClassValueNode(); classValueNode.addConsumer(reflectedType -> { if (reflectedType.getName().startsWith("[")) { return; } Set<MethodDescriptor> accessibleMethods = getAccessibleMethods(agent, reflectedType.getName()); ClassReader cls = agent.getClassSource().get(reflectedType.getName()); for (MethodDescriptor methodDescriptor : accessibleMethods) { MethodReader calledMethod = cls.getMethod(methodDescriptor); MethodDependency calledMethodDep = agent.linkMethod(calledMethod.getReference()).addLocation(location); calledMethodDep.use(); for (int i = 0; i < calledMethod.parameterCount(); ++i) { propagateSet(agent, methodDescriptor.parameterType(i), method.getVariable(2).getArrayItem(), calledMethodDep.getVariable(i + 1), location); } propagateSet(agent, ValueType.object(reflectedType.getName()), method.getVariable(1), calledMethodDep.getVariable(0), location); propagateGet(agent, calledMethod.getResultType(), calledMethodDep.getResult(), method.getResult(), location); linkClassIfNecessary(agent, calledMethod, location); } }); }
if (methodRef.getDescriptor().parameterType(0).isObject("java.lang.String")) { if (context.getArgument(0) instanceof ConstantExpr) { ConstantExpr constant = (ConstantExpr) context.getArgument(0); context.writeExpr(context.getArgument(0), Precedence.min()); writer.append(")"); } else if (methodRef.getDescriptor().parameterType(0) == ValueType.BOOLEAN) { if (context.getPrecedence().ordinal() >= Precedence.UNARY.ordinal()) { writer.append("(");
case "get": case "getProperty": if (methodRef.getDescriptor().parameterType(1) == ValueType.INTEGER) { context.writeExpr(context.getArgument(0)); context.getWriter().append('['); case "put": context.getWriter().append('('); if (methodRef.getDescriptor().parameterType(1) == ValueType.INTEGER) { context.writeExpr(context.getArgument(0)); context.getWriter().append('[');
@Override public ValueType parameterType(int index) { return descriptor.parameterType(index); }
private boolean isProperSetIndexer(MethodDescriptor desc) { return desc.parameterCount() == 2 && typeHelper.isSupportedType(desc.parameterType(0)) && typeHelper.isSupportedType(desc.parameterType(0)) && desc.getResultType() == ValueType.VOID; }
private MethodReference getAsyncReference(MethodReference methodRef) { ValueType[] signature = new ValueType[methodRef.parameterCount() + 2]; for (int i = 0; i < methodRef.parameterCount(); ++i) { signature[i] = methodRef.getDescriptor().parameterType(i); } signature[methodRef.parameterCount()] = ValueType.parse(AsyncCallback.class); signature[methodRef.parameterCount() + 1] = ValueType.VOID; return new MethodReference(methodRef.getClassName(), methodRef.getName(), signature); }