@Override public int hashCode() { return toString().hashCode(); }
private String getFullNameFor(MethodReference method, char classifier) { MethodReference originalMethod = method; method = getRealMethod(method); if (method == null) { method = originalMethod; } MethodReference resolvedMethod = method; return privateAliases.computeIfAbsent(classifier + method.toString(), key -> aliasProvider.getStaticMethodAlias(resolvedMethod)); }
@Override public WasmExpression apply(InvocationExpr invocation, WasmIntrinsicManager manager) { switch (invocation.getMethod().getName()) { case "getStaticGCRoots": { WasmInt32Constant constant = new WasmInt32Constant(0); staticGcRootsExpressions.add(constant); return constant; } } throw new IllegalArgumentException(invocation.getMethod().toString()); } }
@Override public WasmExpression apply(InvocationExpr invocation, WasmIntrinsicManager manager) { switch (invocation.getMethod().getName()) { case "getClass": return manager.generate(invocation.getArguments().get(0)); default: throw new IllegalArgumentException(invocation.getMethod().toString()); } } }
@Override public WasmExpression apply(InvocationExpr invocation, WasmIntrinsicManager manager) { switch (invocation.getMethod().getName()) { case "getPlatformObject": case "asJavaClass": return manager.generate(invocation.getArguments().get(0)); case "createQueue": return new WasmInt32Constant(0); default: throw new IllegalArgumentException(invocation.getMethod().toString()); } } }
@Override public WasmExpression apply(InvocationExpr invocation, WasmIntrinsicManager manager) { switch (invocation.getMethod().getName()) { case "getMetadata": case "getJavaClass": return manager.generate(invocation.getArguments().get(0)); case "setJavaClass": return new WasmBlock(false); default: throw new IllegalArgumentException(invocation.getMethod().toString()); } } }
throw new IllegalArgumentException(invocation.getMethod().toString());
@Override public WasmExpression apply(InvocationExpr invocation, WasmIntrinsicManager manager) { switch (invocation.getMethod().getName()) { case "getPlatformClass": { int offset = classGenerator.getFieldOffset(classField); WasmExpression object = manager.generate(invocation.getArguments().get(0)); if (offset > 0) { object = new WasmIntBinary(WasmIntType.INT32, WasmIntBinaryOperation.ADD, object, new WasmInt32Constant(offset)); } WasmExpression classPtr = new WasmLoadInt32(4, object, WasmInt32Subtype.INT32); return new WasmIntBinary(WasmIntType.INT32, WasmIntBinaryOperation.SHL, classPtr, new WasmInt32Constant(3)); } default: throw new IllegalArgumentException(invocation.getMethod().toString()); } } }
throw new IllegalArgumentException(invocation.getMethod().toString());
@Override public void invoke(VariableReader receiver, VariableReader instance, MethodReference method, List<? extends VariableReader> arguments, InvocationType type) { if (receiver != null) { appendLocalVar(receiver).append(" := "); } if (instance == null) { append("invokeStatic "); } else { switch (type) { case SPECIAL: append("invoke "); break; case VIRTUAL: append("invokeVirtual "); break; } } escapeIdentifierIfNeeded(method.toString()); if (instance != null) { append(' ').appendLocalVar(instance); } for (int i = 0; i < arguments.size(); ++i) { if (instance != null || i > 0) { append(","); } append(' ').appendLocalVar(arguments.get(i)); } }
@Override public WasmExpression apply(InvocationExpr invocation, WasmIntrinsicManager manager) { switch (invocation.getMethod().getName()) { case "toAddress": case "cast": return manager.generate(invocation.getArguments().get(0)); case "sizeOf": { ValueType.Object type = (ValueType.Object) ((ConstantExpr) invocation.getArguments().get(0)).getValue(); return new WasmInt32Constant(classGenerator.getClassSize(type.getClassName())); } case "add": { WasmExpression base = manager.generate(invocation.getArguments().get(1)); WasmExpression offset = manager.generate(invocation.getArguments().get(2)); Object type = ((ConstantExpr) invocation.getArguments().get(0)).getValue(); String className = ((ValueType.Object) type).getClassName(); int size = classGenerator.getClassSize(className); int alignment = classGenerator.getClassAlignment(className); size = WasmClassGenerator.align(size, alignment); offset = new WasmIntBinary(WasmIntType.INT32, WasmIntBinaryOperation.MUL, offset, new WasmInt32Constant(size)); return new WasmIntBinary(WasmIntType.INT32, WasmIntBinaryOperation.ADD, base, offset); } default: throw new IllegalArgumentException(invocation.getMethod().toString()); } } }
throw new IllegalArgumentException(invocation.getMethod().toString());
refAnnot.getValues().put("value", new AnnotationValue(method.getReference().toString())); createMethod.getAnnotations().add(refAnnot);
@Override public int hashCode() { return toString().hashCode(); }
private String getFullNameFor(MethodReference method, char classifier) throws NamingException { MethodReference originalMethod = method; method = getRealMethod(method); if (method == null) { throw new NamingException("Can't provide name for method as it was not found: " + originalMethod); } MethodReference resolvedMethod = method; return privateAliases.computeIfAbsent(classifier + method.toString(), key -> aliasProvider.getStaticMethodAlias(resolvedMethod)); }
@Override public WasmExpression apply(InvocationExpr invocation, WasmIntrinsicManager manager) { switch (invocation.getMethod().getName()) { case "getStaticGCRoots": { WasmInt32Constant constant = new WasmInt32Constant(0); staticGcRootsExpressions.add(constant); return constant; } } throw new IllegalArgumentException(invocation.getMethod().toString()); } }
@Override public WasmExpression apply(InvocationExpr invocation, WasmIntrinsicManager manager) { switch (invocation.getMethod().getName()) { case "getClass": return manager.generate(invocation.getArguments().get(0)); default: throw new IllegalArgumentException(invocation.getMethod().toString()); } } }
@Override public WasmExpression apply(InvocationExpr invocation, WasmIntrinsicManager manager) { switch (invocation.getMethod().getName()) { case "getMetadata": case "getJavaClass": return manager.generate(invocation.getArguments().get(0)); case "setJavaClass": return new WasmBlock(false); default: throw new IllegalArgumentException(invocation.getMethod().toString()); } } }