@Override public WasmExpression apply(InvocationExpr invocation, WasmIntrinsicManager manager) { switch (invocation.getMethod().getName()) { case "timeZoneDetectionEnabled": { boolean enabled = properties.getProperty("java.util.TimeZone.autodetect", "false").equals("true"); return new WasmInt32Constant(enabled ? 1 : 0); } default: throw new AssertionError(); } } }
@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 void visit(InvocationExpr expr) { super.visit(expr); dependencies.add(expr.getMethod().getClassName()); }
@Override public WasmExpression apply(InvocationExpr invocation, WasmIntrinsicManager manager) { switch (invocation.getMethod().getName()) { case "wrap": return manager.generate(invocation.getArguments().get(0)); default: throw new AssertionError(); } } }
@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()); } } }
@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 void apply(IntrinsicContext context, InvocationExpr invocation) { switch (invocation.getMethod().getName()) { case "getJavaClass": case "getMetadata": context.emit(invocation.getArguments().get(0)); break; case "setJavaClass": break; } } }
@Override public void apply(IntrinsicContext context, InvocationExpr invocation) { switch (invocation.getMethod().getName()) { case "getStaticGCRoots": context.writer().print("gc_staticRoots"); break; } } }
@Override public void apply(IntrinsicContext context, InvocationExpr invocation) { switch (invocation.getMethod().getName()) { case "divideUnsigned": writeBinary(context, invocation, "/"); break; case "remainderUnsigned": writeBinary(context, invocation, "%"); break; } }
@Override public void apply(IntrinsicContext context, InvocationExpr invocation) { switch (invocation.getMethod().getName()) { case "divideUnsigned": writeBinary(context, invocation, "/"); break; case "remainderUnsigned": writeBinary(context, invocation, "%"); break; } }
@Override public void apply(IntrinsicContext context, InvocationExpr invocation) { switch (invocation.getMethod().getName()) { case "timeZoneDetectionEnabled": { boolean enabled = properties.getProperty("java.util.TimeZone.autodetect", "false").equals("true"); context.writer().print(enabled ? "1" : "0"); break; } case "getNativeOffset": context.writer().print("teavm_timeZoneOffset()"); break; } }
@Override public void apply(IntrinsicContext context, InvocationExpr invocation) { context.writer().print("gc_").print(invocation.getMethod().getName()); } }
@Override public void apply(IntrinsicContext context, InvocationExpr invocation) { switch (invocation.getMethod().getName()) { case "getPlatformObject": case "asJavaClass": context.emit(invocation.getArguments().get(0)); break; case "createQueue": context.writer().print("NULL"); break; } } }
@Override public WasmExpression apply(InvocationExpr invocation, WasmIntrinsicManager manager) { InvocationExpr expr = new InvocationExpr(); MethodReference method = new MethodReference(WasmRuntime.class.getName(), invocation.getMethod().getDescriptor()); expr.setMethod(method); expr.setType(InvocationType.SPECIAL); expr.getArguments().addAll(invocation.getArguments()); return manager.generate(expr); } }
@Override public void apply(IntrinsicContext context, InvocationExpr invocation) { switch (invocation.getMethod().getName()) { case "findCallSiteById": context.writer().print("(callSites + "); context.emit(invocation.getArguments().get(0)); context.writer().print(")"); break; } } }
@Override public void apply(IntrinsicContext context, InvocationExpr invocation) { switch (invocation.getMethod().getName()) { case "getPlatformClass": context.writer().print("CLASS_OF("); context.emit(invocation.getArguments().get(0)); context.writer().print(")"); break; } } }
@Override public void apply(IntrinsicContext context, InvocationExpr invocation) { writeInitializer(context, invocation); context.writer().print(context.names().forMethod(invocation.getMethod())); }
@Override public WasmExpression apply(InvocationExpr invocation, WasmIntrinsicManager manager) { switch (invocation.getMethod().getName()) { case "getArrayItem": return fieldAccess(manager, invocation, ITEM_TYPE_FIELD); case "getSuperclass": return fieldAccess(manager, invocation, SUPERCLASS_FIELD); case "getName": return fieldAccess(manager, invocation, NAME_FIELD); default: return new WasmUnreachable(); } }
@Override public WasmExpression apply(InvocationExpr invocation, WasmIntrinsicManager manager) { switch (invocation.getMethod().getName()) { case "pack": return new WasmIntBinary(WasmIntType.INT32, WasmIntBinaryOperation.SHR_UNSIGNED, manager.generate(invocation.getArguments().get(0)), new WasmInt32Constant(3)); case "unpack": return new WasmIntBinary(WasmIntType.INT32, WasmIntBinaryOperation.SHL, manager.generate(invocation.getArguments().get(0)), new WasmInt32Constant(3)); default: throw new AssertionError(); } } }