Skip to content

Instantly share code, notes, and snippets.

@killme2008
Last active February 22, 2016 08:12
Show Gist options
  • Select an option

  • Save killme2008/b0d88de0a08df8bf7ca3 to your computer and use it in GitHub Desktop.

Select an option

Save killme2008/b0d88de0a08df8bf7ca3 to your computer and use it in GitHub Desktop.
Invoke function bytecode without direct-linking in clojure 1.8
(-> 1 double square)
public final class user$eval5993 extends clojure/lang/AFunction {
// compiled from: NO_SOURCE_FILE
// debug info: SMAP
NO_SOURCE_FILE.java
Clojure
*S Clojure
*F
+ 1 NO_SOURCE_FILE
NO_SOURCE_PATH
*L
0#1,1:0
*E
// access flags 0x1
public <init>()V
L0
LINENUMBER 11 L0
L1
ALOAD 0
INVOKESPECIAL clojure/lang/AFunction.<init> ()V
L2
RETURN
MAXSTACK = 0
MAXLOCALS = 0
// access flags 0x9
public static invokeStatic()Ljava/lang/Object;
L0
LINENUMBER 11 L0
GETSTATIC user$eval5993.const__0 : Lclojure/lang/Var;
INVOKEVIRTUAL clojure/lang/Var.getRawRoot ()Ljava/lang/Object;
L1
LINENUMBER 11 L1
CHECKCAST clojure/lang/IFn
GETSTATIC user$eval5993.const__1 : Lclojure/lang/Var;
INVOKEVIRTUAL clojure/lang/Var.getRawRoot ()Ljava/lang/Object;
L2
LINENUMBER 11 L2
CHECKCAST clojure/lang/IFn
GETSTATIC user$eval5993.const__2 : Ljava/lang/Object;
L3
LINENUMBER 11 L3
INVOKEINTERFACE clojure/lang/IFn.invoke (Ljava/lang/Object;)Ljava/lang/Object;
L4
LINENUMBER 11 L4
INVOKEINTERFACE clojure/lang/IFn.invoke (Ljava/lang/Object;)Ljava/lang/Object;
L5
ARETURN
MAXSTACK = 0
MAXLOCALS = 0
// access flags 0x1
public invoke()Ljava/lang/Object;
L0
LINENUMBER 11 L0
INVOKESTATIC user$eval5993.invokeStatic ()Ljava/lang/Object;
ARETURN
MAXSTACK = 0
MAXLOCALS = 0
// access flags 0x19
public final static Lclojure/lang/Var; const__0
// access flags 0x19
public final static Lclojure/lang/Var; const__1
// access flags 0x19
public final static Ljava/lang/Object; const__2
// access flags 0x9
public static <clinit>()V
L0
LINENUMBER 11 L0
LDC "user"
LDC "square"
INVOKESTATIC clojure/lang/RT.var (Ljava/lang/String;Ljava/lang/String;)Lclojure/lang/Var;
CHECKCAST clojure/lang/Var
PUTSTATIC user$eval5993.const__0 : Lclojure/lang/Var;
LDC "user"
LDC "double"
INVOKESTATIC clojure/lang/RT.var (Ljava/lang/String;Ljava/lang/String;)Lclojure/lang/Var;
CHECKCAST clojure/lang/Var
PUTSTATIC user$eval5993.const__1 : Lclojure/lang/Var;
LCONST_1
INVOKESTATIC java/lang/Long.valueOf (J)Ljava/lang/Long;
PUTSTATIC user$eval5993.const__2 : Ljava/lang/Object;
RETURN
MAXSTACK = 0
MAXLOCALS = 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment