
After go1.16, go will use module mode by default, even when the repository is checked out under GOPATH or in a one-off directory. Add go.mod, go.sum to keep this repo buildable without opting out of the module mode. > go mod init github.com/mmcgrana/gobyexample > go mod tidy > go mod vendor In module mode, the 'vendor' directory is special and its contents will be actively maintained by the go command. pygments aren't the dependency the go will know about, so it will delete the contents from vendor directory. Move it to `third_party` directory now. And, vendor the blackfriday package. Note: the tutorial contents are not affected by the change in go1.16 because all the examples in this tutorial ask users to run the go command with the explicit list of files to be compiled (e.g. `go run hello-world.go` or `go build command-line-arguments.go`). When the source list is provided, the go command does not have to compute the build list and whether it's running in GOPATH mode or module mode becomes irrelevant.
565 lines
9.2 KiB
Plaintext
565 lines
9.2 KiB
Plaintext
; Example JVM assembly
|
|
; Tested with JasminXT 2.4
|
|
|
|
.bytecode 49.0
|
|
.source HelloWorld.java
|
|
.class public final enum HelloWorld
|
|
.super java/lang/Object
|
|
.implements java/io/Serializable
|
|
.signature "Ljava/lang/Object;Ljava/io/Serializable;"
|
|
.enclosing method hw/jasmin.HelloWorldRunner.run()V
|
|
.deprecated
|
|
.annotation visible HelloWorld
|
|
I I = 0
|
|
.end annotation
|
|
.debug "Happy debugging!"
|
|
|
|
.inner interface public InnerInterface inner 'HelloWorld$InnerInterface' outer HelloWorld
|
|
.inner class public InnerClass inner HelloWorld$InnerClass outer 'HelloWorld'
|
|
|
|
.field public volatile transient I I
|
|
.field static protected final serialVersionUID 'J' signature "TJ;" = 2147483648
|
|
.field annotation protected 'protected' [[[Lcom/oracle/util/Checksums;
|
|
.deprecated
|
|
.signature "[[[Lcom/oracle/util/Checksums;"
|
|
.attribute foo "foo.txt"
|
|
.attribute 'foo' "foo.txt"
|
|
.end field
|
|
.field public newline I
|
|
.field public static defaultString 'Ljava/lang/String;'
|
|
|
|
.method public <init>()V
|
|
.limit stack 3
|
|
.line 7
|
|
.var 0 is self LHelloWorld; from 0 to 1
|
|
aload_0
|
|
invokenonvirtual java/lang/Object/<init>()V
|
|
return
|
|
.end method
|
|
|
|
.method static public main([Ljava/lang/String;)V
|
|
.limit locals 7
|
|
.limit stack 10
|
|
.throws java.lang/RuntimeException
|
|
.catch java/lang.ClassCastException from cast to 'extra_l' using /extra
|
|
.signature "([Ljava/lang/String;)V"
|
|
.stack
|
|
offset /Input
|
|
locals Object java/lang/String
|
|
locals Uninitialized 'End'
|
|
locals Uninitialized 0
|
|
locals Top
|
|
locals Integer
|
|
locals Float
|
|
locals Long
|
|
locals Double
|
|
locals Null
|
|
locals UninitializedThis
|
|
stack Object java/lang/String
|
|
stack Uninitialized End
|
|
stack 'Uninitialized' 0
|
|
stack 'Top'
|
|
stack Integer
|
|
stack Float
|
|
stack Long
|
|
stack Double
|
|
stack Null
|
|
stack UninitializedThis
|
|
.end stack
|
|
.stack use 1 locals
|
|
offset 'extra'
|
|
.end stack
|
|
.stack use locals
|
|
.end stack
|
|
.line 0xd
|
|
.var 0 is args [Ljava/lang/String;
|
|
aload_w 0
|
|
arraylength
|
|
ifne /Input
|
|
iconst_1
|
|
anewarray java/lang/String
|
|
checkcast [Ljava/lang/String;
|
|
astore_0
|
|
aload_0
|
|
iconst_0
|
|
ldc "World"
|
|
dup
|
|
putstatic HelloWorld.defaultString Ljava/lang/String;
|
|
aastore
|
|
/Input:
|
|
iconst_2
|
|
iconst_3
|
|
multianewarray [[C 2
|
|
astore_1
|
|
aload_1
|
|
iconst_0
|
|
aaload
|
|
astore_2
|
|
aload_1
|
|
iconst_1
|
|
aaload
|
|
astore_3
|
|
|
|
<<o:
|
|
aload_3
|
|
iconst_0
|
|
invokestatic HelloWorld/int()I
|
|
castore
|
|
|
|
<<\u0020:
|
|
aload_3
|
|
dconst_1
|
|
dconst_0
|
|
dsub
|
|
d2i
|
|
invokestatic HelloWorld/double()D
|
|
d2i
|
|
castore
|
|
|
|
<<!:
|
|
aload_3
|
|
lconst_0
|
|
dup2
|
|
lxor
|
|
lconst_1
|
|
dup2
|
|
ladd
|
|
lsub
|
|
lneg
|
|
l2i
|
|
invokestatic HelloWorld/long()J
|
|
l2i
|
|
castore
|
|
|
|
<<H:
|
|
aload_2
|
|
fconst_0
|
|
fconst_1
|
|
fconst_2
|
|
dup_x2
|
|
fdiv
|
|
fmul
|
|
f2l
|
|
l2i
|
|
swap
|
|
invokestatic HelloWorld/float(F)F
|
|
f2i
|
|
castore
|
|
|
|
<<e :
|
|
aload_2
|
|
iconst_1
|
|
i2s
|
|
i2c
|
|
i2b
|
|
iconst_1
|
|
newarray short
|
|
dup
|
|
iconst_0
|
|
iconst_1
|
|
newarray byte
|
|
dup
|
|
iconst_0
|
|
sipush 0x65
|
|
bastore
|
|
iconst_0
|
|
baload
|
|
sastore
|
|
iconst_0
|
|
saload
|
|
int2short
|
|
int2char
|
|
int2byte
|
|
castore
|
|
|
|
<<l :
|
|
aload_2
|
|
iconst_2
|
|
bipush 0x1b
|
|
*2:
|
|
iconst_1
|
|
ishl
|
|
dup
|
|
lookupswitch
|
|
0: '/lookupswitch'
|
|
0x6c: /lookupswitch
|
|
default: *2
|
|
/lookupswitch:
|
|
castore
|
|
|
|
ldc2_w 2
|
|
dup2
|
|
lcmp
|
|
.set i 4
|
|
.set 'j' 5
|
|
.var 4 is i I from 'i++' to End
|
|
.var 5 is j I signature "I" from i++ to End
|
|
istore 4
|
|
goto 1
|
|
i++:
|
|
iinc 4 1
|
|
1: iconst_0
|
|
istore_w 5
|
|
goto_w 2
|
|
j++:
|
|
iinc_w 5 1
|
|
2: getstatic java/lang/System/out Ljava/io/PrintStream;
|
|
aload_1
|
|
iload 4
|
|
aaload
|
|
iload_w 5
|
|
caload
|
|
invokevirtual java/io/PrintStream/print(C)V
|
|
iload 5
|
|
iconst_1
|
|
if_icmpne $+6
|
|
jsr extra
|
|
iload 5
|
|
iconst_2
|
|
if_icmplt j++
|
|
iconst_1
|
|
iload 4
|
|
if_icmpgt i++
|
|
|
|
<<\u00a0:
|
|
getstatic java/lang/System/out Ljava/io/PrintStream;
|
|
invokestatic HelloWorld/get"example()LHelloWorld;
|
|
getfield HelloWorld/newline I
|
|
invokevirtual java/io/PrintStream/print(C)V
|
|
End:
|
|
return
|
|
|
|
extra:
|
|
astore 6
|
|
iload 4
|
|
tableswitch 0 1
|
|
extra_l
|
|
extra_string
|
|
default: 'End'
|
|
nop
|
|
extra_string:
|
|
getstatic java/lang/System/out Ljava/io/PrintStream;
|
|
aload 0
|
|
iconst_0
|
|
aaload
|
|
invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V
|
|
cast:
|
|
ldc java/lang/String
|
|
checkcast java/lang/Class
|
|
pop
|
|
ldc Ljava/lang/String;
|
|
checkcast Ljava/lang/Class;
|
|
pop
|
|
iconst_1
|
|
dup
|
|
newarray boolean
|
|
checkcast [Z
|
|
pop
|
|
newarray 'int'
|
|
checkcast HelloWorld
|
|
checkcast LHelloWorld;
|
|
pop
|
|
extra_l:
|
|
getstatic java/lang/System/out Ljava/io/PrintStream;
|
|
dup
|
|
ldc "\123.\456.\u006c.\n.\r.\t.\f.\b.\".\'.\\"
|
|
iconst_5
|
|
invokeinterface java/lang/CharSequence/charAt(I)C 2
|
|
invokevirtual java/io/PrintStream/print(C)V
|
|
/extra:
|
|
pop
|
|
ret 6
|
|
.end method
|
|
|
|
.method private static get"example()LHelloWorld;
|
|
.limit locals 3
|
|
.limit stack 4
|
|
.catch all from 7 to 53 using 59
|
|
aconst_null
|
|
dup
|
|
dup
|
|
astore_w 0
|
|
try:
|
|
goto $+0x11
|
|
finally:
|
|
astore_w 2
|
|
putfield HelloWorld/newline I
|
|
ret_w 2
|
|
nop
|
|
aload_0
|
|
areturn
|
|
ifnonnull $-2
|
|
ifnull $+3
|
|
new HelloWorld
|
|
dup
|
|
dup
|
|
invokespecial HelloWorld/<init>()V
|
|
astore 0
|
|
aload 0
|
|
monitorenter
|
|
monitorexit
|
|
new java/lang/RuntimeException
|
|
dup
|
|
invokespecial java/lang/RuntimeException/<init>()V
|
|
athrow
|
|
aconst_null
|
|
/try:
|
|
dup
|
|
aconst_null
|
|
if_acmpeq $+3
|
|
areturn
|
|
catch:
|
|
jsr $+10
|
|
aload_0
|
|
dup
|
|
aconst_null
|
|
if_acmpne /try
|
|
areturn
|
|
astore_1
|
|
aload_0
|
|
ldc 10
|
|
jsr_w finally
|
|
ret 1
|
|
'single\u0020quoted\u0020label': ; Messes up [@ below if lexed sloppily
|
|
.end method
|
|
|
|
.method varargs private static int()I
|
|
.annotation invisible HelloWorld
|
|
[@ [@ WhatIsThis??? = .annotation ; name, type, exttype
|
|
I I = 1 ; name, type
|
|
another-I I = 2
|
|
Enum e Ljava/util/logging/Level; = FINE
|
|
.end annotation
|
|
.annotation
|
|
s s = "foo"
|
|
another-s s = "bar"
|
|
Enum [e Ljava/util/logging/Level; = FINE FINE 'FINE' FINE
|
|
.end annotation
|
|
float F = 123.456
|
|
.end annotation
|
|
.annotation visibleparam 1 LHelloWorld;
|
|
x [I = 0x01 0x02 0x03
|
|
y I = 2
|
|
.end annotation
|
|
.annotation invisibleparam 255 HelloWorld
|
|
a F = 1.2
|
|
b D = 3.4
|
|
.end annotation
|
|
.annotation default
|
|
I = 0
|
|
.end annotation
|
|
.limit locals 4
|
|
.limit stack 20
|
|
iconst_1
|
|
newarray int
|
|
dup
|
|
dup
|
|
instanceof [Z
|
|
bipush 0x9
|
|
bipush 0xB
|
|
iand
|
|
iconst_5
|
|
iconst_4
|
|
dup_x1
|
|
iconst_m1
|
|
iadd
|
|
bipush +-111
|
|
ineg
|
|
swap
|
|
idiv
|
|
dup_x2
|
|
dup
|
|
ishr
|
|
ishl
|
|
imul
|
|
ior
|
|
bipush -73
|
|
ixor
|
|
isub
|
|
dup
|
|
iconst_1
|
|
iadd
|
|
irem
|
|
iastore
|
|
iconst_0
|
|
iaload
|
|
istore_0
|
|
iload_0
|
|
istore_1
|
|
iload_1
|
|
istore_2
|
|
iload_2
|
|
istore_3
|
|
iload_3
|
|
dup
|
|
dup
|
|
dup2_x1
|
|
if_icmpeq $+33
|
|
dup
|
|
dup
|
|
if_icmpge $+28
|
|
dup
|
|
dup
|
|
if_icmple $+23
|
|
dup
|
|
ifle $+19
|
|
dup
|
|
ifeq $+15
|
|
dup
|
|
iflt $+11
|
|
dup
|
|
ifgt $+7
|
|
dup
|
|
ifge $+3
|
|
ireturn
|
|
.end method
|
|
|
|
.method static private fpstrict double()D
|
|
.limit locals 7
|
|
.limit stack 11
|
|
dconst_1
|
|
dconst_0
|
|
dcmpg
|
|
newarray double
|
|
dup
|
|
dconst_0
|
|
dup2
|
|
dcmpl
|
|
ldc2_w 128.
|
|
ldc2_w -240.221d
|
|
dneg
|
|
ldc2_w 158.d
|
|
dup2
|
|
dadd
|
|
dup2_x2
|
|
drem
|
|
ddiv
|
|
pop2
|
|
dconst_1
|
|
dmul
|
|
d2f
|
|
f2d
|
|
d2l
|
|
l2i
|
|
iconst_2
|
|
iushr
|
|
i2d
|
|
dastore
|
|
iconst_0
|
|
daload
|
|
dstore_0
|
|
dload_0
|
|
dstore_1
|
|
dload_1
|
|
dstore_2
|
|
dload_2
|
|
dstore_3
|
|
dload_3
|
|
dstore 4
|
|
dload 4
|
|
dstore_w 5
|
|
dload_w 5
|
|
dreturn
|
|
.end method
|
|
|
|
.method static long()J
|
|
.limit locals 7
|
|
.limit stack 11
|
|
iconst_1
|
|
newarray long
|
|
dup
|
|
iconst_0
|
|
ldc2_w 5718613688
|
|
ldc2_w 3143486100
|
|
ldc2_w 0x3
|
|
ldiv
|
|
lmul
|
|
ldc2_w -10000000000
|
|
lrem
|
|
ldc_w 0x60
|
|
i2l
|
|
lor
|
|
ldc 0x33
|
|
i2l
|
|
land
|
|
dup2
|
|
iconst_1
|
|
lshl
|
|
iconst_3
|
|
lshr
|
|
iconst_3
|
|
lushr
|
|
ladd
|
|
l2d
|
|
d2l
|
|
l2f
|
|
f2l
|
|
lastore
|
|
iconst_0
|
|
laload
|
|
lstore_0
|
|
lload_0
|
|
lstore_1
|
|
lload_1
|
|
lstore_2
|
|
lload_2
|
|
lstore_3
|
|
lload_3
|
|
lstore 4
|
|
lload 4
|
|
lstore_w 5
|
|
lload_w 5
|
|
lreturn
|
|
.end method
|
|
|
|
.method private static float(F)F
|
|
.limit locals 6
|
|
.limit stack 9
|
|
iconst_1
|
|
newarray float
|
|
dup
|
|
fload_0
|
|
dup
|
|
fcmpg
|
|
fload_0
|
|
dup
|
|
dup
|
|
dup
|
|
dup2_x2
|
|
fadd
|
|
fsub
|
|
fneg
|
|
frem
|
|
ldc 70
|
|
i2f
|
|
fadd
|
|
fadd
|
|
swap
|
|
pop
|
|
fastore
|
|
fload_0
|
|
dup
|
|
fcmpl
|
|
faload
|
|
fstore_0
|
|
fload_0
|
|
fstore_1
|
|
fload_1
|
|
fstore_2
|
|
fload_2
|
|
fstore_3
|
|
fload_3
|
|
fstore 4
|
|
fload 4
|
|
fstore_w 5
|
|
fload_w 5
|
|
freturn
|
|
.end method
|
|
|
|
.method abstract bridge synthetic 'acc1()V'
|
|
breakpoint
|
|
.end method
|
|
|
|
.method native synchronized acc2()V
|
|
.end method
|