MCPcopy Index your code
hub / github.com/clojure/clojure / emitTypedArgs

Method emitTypedArgs

src/jvm/clojure/lang/Compiler.java:1848–1899  ·  view source on GitHub ↗
(ObjExpr objx, GeneratorAdapter gen, Class[] parameterTypes, IPersistentVector args)

Source from the content-addressed store, hash-verified

1846 }
1847
1848 public static void emitTypedArgs(ObjExpr objx, GeneratorAdapter gen, Class[] parameterTypes, IPersistentVector args){
1849 for(int i = 0; i < parameterTypes.length; i++)
1850 {
1851 Expr e = (Expr) args.nth(i);
1852 try
1853 {
1854 final Class primc = maybePrimitiveType(e);
1855 if(primc == parameterTypes[i])
1856 {
1857 final MaybePrimitiveExpr pe = (MaybePrimitiveExpr) e;
1858 pe.emitUnboxed(C.EXPRESSION, objx, gen);
1859 }
1860 else if(primc == int.class && parameterTypes[i] == long.class)
1861 {
1862 final MaybePrimitiveExpr pe = (MaybePrimitiveExpr) e;
1863 pe.emitUnboxed(C.EXPRESSION, objx, gen);
1864 gen.visitInsn(I2L);
1865 }
1866 else if(primc == long.class && parameterTypes[i] == int.class)
1867 {
1868 final MaybePrimitiveExpr pe = (MaybePrimitiveExpr) e;
1869 pe.emitUnboxed(C.EXPRESSION, objx, gen);
1870 if(RT.booleanCast(RT.UNCHECKED_MATH.deref()))
1871 gen.invokeStatic(RT_TYPE, Method.getMethod("int uncheckedIntCast(long)"));
1872 else
1873 gen.invokeStatic(RT_TYPE, Method.getMethod("int intCast(long)"));
1874 }
1875 else if(primc == float.class && parameterTypes[i] == double.class)
1876 {
1877 final MaybePrimitiveExpr pe = (MaybePrimitiveExpr) e;
1878 pe.emitUnboxed(C.EXPRESSION, objx, gen);
1879 gen.visitInsn(F2D);
1880 }
1881 else if(primc == double.class && parameterTypes[i] == float.class)
1882 {
1883 final MaybePrimitiveExpr pe = (MaybePrimitiveExpr) e;
1884 pe.emitUnboxed(C.EXPRESSION, objx, gen);
1885 gen.visitInsn(D2F);
1886 }
1887 else if(!FISupport.maybeEmitFIAdapter(objx, gen, e, parameterTypes[i]))
1888 {
1889 e.emit(C.EXPRESSION, objx, gen);
1890 HostExpr.emitUnboxArg(objx, gen, parameterTypes[i]);
1891 }
1892 }
1893 catch(Exception e1)
1894 {
1895 throw Util.sneakyThrow(e1);
1896 }
1897
1898 }
1899 }
1900}
1901
1902static class InstanceMethodExpr extends MethodExpr{

Callers 8

emitUnboxedMethod · 0.95
emitMethod · 0.95
emitUnboxedMethod · 0.95
emitMethod · 0.95
emitMethod · 0.95
emitUnboxedMethod · 0.95
emitProtoMethod · 0.95

Calls 12

emitUnboxedMethod · 0.95
booleanCastMethod · 0.95
getMethodMethod · 0.95
maybeEmitFIAdapterMethod · 0.95
emitMethod · 0.95
emitUnboxArgMethod · 0.95
sneakyThrowMethod · 0.95
maybePrimitiveTypeMethod · 0.80
nthMethod · 0.65
derefMethod · 0.65
visitInsnMethod · 0.45
invokeStaticMethod · 0.45

Tested by

no test coverage detected