Skip to content

Instantly share code, notes, and snippets.

@headius
Created August 8, 2016 20:07
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 headius/bbf80f8dcca87cd651b7d67398c0190a to your computer and use it in GitHub Desktop.
Save headius/bbf80f8dcca87cd651b7d67398c0190a to your computer and use it in GitHub Desktop.
Bytecode for a simple numeric loop in JRuby
public static RUBY$method$foo$1(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/parser/StaticScope;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/Block;Lorg/jruby/RubyModule;Ljava/lang/String;)Lorg/jruby/runtime/builtin/IRubyObject;
L0
NOP
NOP
L1
LINENUMBER 2 L1
ALOAD 0
INVOKEDYNAMIC fixnum(Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject; [
// handle kind 0x6 : INVOKESTATIC
org/jruby/ir/targets/FixnumObjectSite.bootstrap(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;J)Ljava/lang/invoke/CallSite;
// arguments:
0
]
ASTORE 7
L2
LINENUMBER 3 L2
FRAME APPEND [T org/jruby/runtime/builtin/IRubyObject]
NOP
ALOAD 0
ALOAD 2
ALOAD 7
INVOKEDYNAMIC fixnumOperator:\=\^(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject; [
// handle kind 0x6 : INVOKESTATIC
org/jruby/runtime/invokedynamic/MathLinker.fixnumOperatorBootstrap(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;JILjava/lang/String;I)Ljava/lang/invoke/CallSite;
// arguments:
10000000,
0,
"",
0
]
ASTORE 8
ALOAD 8
INVOKEINTERFACE org/jruby/runtime/builtin/IRubyObject.isTrue ()Z
IFEQ L3
NOP
ALOAD 0
INVOKEDYNAMIC checkpoint(Lorg/jruby/runtime/ThreadContext;)V [
// handle kind 0x6 : INVOKESTATIC
org/jruby/ir/targets/Bootstrap.checkpointBootstrap(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
// arguments: none
]
L4
LINENUMBER 4 L4
ALOAD 0
ALOAD 2
ALOAD 7
INVOKEDYNAMIC fixnumOperator:+(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject; [
// handle kind 0x6 : INVOKESTATIC
org/jruby/runtime/invokedynamic/MathLinker.fixnumOperatorBootstrap(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;JILjava/lang/String;I)Ljava/lang/invoke/CallSite;
// arguments:
1,
0,
"",
0
]
ASTORE 9
ALOAD 9
ASTORE 7
GOTO L2
L3
FRAME APPEND [org/jruby/runtime/builtin/IRubyObject]
NOP
ALOAD 0
INVOKEDYNAMIC nil(Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject; [
// handle kind 0x6 : INVOKESTATIC
org/jruby/ir/targets/Bootstrap.contextValue(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
// arguments: none
]
ARETURN
L5
FRAME FULL [] [java/lang/Throwable]
ATHROW
L6
LOCALVARIABLE $context Lorg/jruby/runtime/ThreadContext; L0 L6 0
LOCALVARIABLE $scope Lorg/jruby/parser/StaticScope; L0 L6 1
LOCALVARIABLE $self Lorg/jruby/runtime/builtin/IRubyObject; L0 L6 2
LOCALVARIABLE $blockArg Lorg/jruby/runtime/Block; L0 L6 3
LOCALVARIABLE $class Lorg/jruby/RubyModule; L0 L6 4
LOCALVARIABLE $callName Ljava/lang/String; L0 L6 5
LOCALVARIABLE $dynamicScope Lorg/jruby/runtime/builtin/IRubyObject; L0 L6 6
LOCALVARIABLE $t_i_6 Lorg/jruby/runtime/builtin/IRubyObject; L0 L6 7
LOCALVARIABLE $v_4 Lorg/jruby/runtime/builtin/IRubyObject; L0 L6 8
LOCALVARIABLE $v_5 Lorg/jruby/runtime/builtin/IRubyObject; L0 L6 9
MAXSTACK = 3
MAXLOCALS = 10
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment