Skip to content

Instantly share code, notes, and snippets.

@gerritjvv
Created November 23, 2014 16:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gerritjvv/257f8713622b7ddac9ef to your computer and use it in GitHub Desktop.
Save gerritjvv/257f8713622b7ddac9ef to your computer and use it in GitHub Desktop.
NPE-LongTypeHinting
(defn safe-inc [^long l ^long x]
(if l
(+ l x)
x))
// Compiled from form-init2140241509718408406.clj (version 1.5 : 49.0, super bit)
public final class no.disassemble$eval1740$safe_inc__1741 extends clojure.lang.AFunction implements clojure.lang.IFn$LLO {
// Field descriptor #9 Lclojure/lang/Var;
public static final clojure.lang.Var const__0;
// Method descriptor #11 ()V
// Stack: 2, Locals: 0
public static {};
0 ldc <String "clojure.core"> [13]
2 ldc <String "+"> [15]
4 invokestatic clojure.lang.RT.var(java.lang.String, java.lang.String) : clojure.lang.Var [21]
7 checkcast clojure.lang.Var [23]
10 putstatic no.disassemble$eval1740$safe_inc__1741.const__0 : clojure.lang.Var [25]
13 return
Line numbers:
[pc: 0, line: 2]
// Method descriptor #11 ()V
// Stack: 1, Locals: 1
public disassemble$eval1740$safe_inc__1741();
0 aload_0 [this]
1 invokespecial clojure.lang.AFunction() [28]
4 return
Line numbers:
[pc: 0, line: 2]
// Method descriptor #30 (JJ)Ljava/lang/Object;
// Stack: 4, Locals: 5
public final java.lang.Object invokePrim(long l, long arg1);
0 lload_1 [l]
1 invokestatic clojure.lang.Numbers.num(long) : java.lang.Number [36]
4 dup
5 ifnull 25
8 getstatic java.lang.Boolean.FALSE : java.lang.Boolean [42]
11 if_acmpeq 26
14 lload_1 [l]
15 lload_3 [arg1]
16 invokestatic clojure.lang.Numbers.add(long, long) : long [46]
19 invokestatic clojure.lang.Numbers.num(long) : java.lang.Number [36]
22 goto 30
25 pop
26 lload_3 [arg1]
27 invokestatic clojure.lang.Numbers.num(long) : java.lang.Number [36]
30 areturn
Line numbers:
[pc: 0, line: 2]
[pc: 0, line: 3]
[pc: 14, line: 4]
Local variable table:
[pc: 0, pc: 30] local: this index: 0 type: java.lang.Object
[pc: 0, pc: 30] local: l index: 1 type: long
[pc: 0, pc: 30] local: x index: 2 type: long
// Method descriptor #53 (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
// Stack: 5, Locals: 3
public java.lang.Object invoke(java.lang.Object arg0, java.lang.Object arg1);
0 aload_0 [this]
1 aload_1 [arg0]
2 checkcast java.lang.Number [55]
5 invokestatic clojure.lang.RT.longCast(java.lang.Object) : long [59]
8 aload_2 [arg1]
9 checkcast java.lang.Number [55]
12 invokestatic clojure.lang.RT.longCast(java.lang.Object) : long [59]
15 invokeinterface clojure.lang.IFn$LLO.invokePrim(long, long) : java.lang.Object [61] [nargs: 5]
20 areturn
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment