96      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab c d e f g h i j k l m n o p q r s t u v w x y z { | } ~            !"#$%&'()*+,-./012345 Safe-Inferred Safe-Inferred 6789:;< 6789:;< Safe-Inferred     Safe-Inferred Manifest entry JAR MANIFEST.MF  =    =None? Any (class field method/ ...) attribute format. * Some formats specify special formats for attributeValue. "Class method format )Class field format 0 Class method argument signature 2Method argument signature 3Return value signature 6Class field signature 7Field signature format 8 [{type}9L  {class name} :Z ;S <J =I >F ?D @C AB BGeneric .class file format DMagic value: 0xCAFEBABE G"Number of items in constants pool HConstants pool itself ISee JVM.Types.AccessFlag J)Constants pool item index for this class K-/.-- for super class, zero for java.lang.Object L!Number of implemented interfaces M7Constants pool item indexes for implemented interfaces NNumber of class fileds O Class fields PNumber of class methods QClass methods RNumber of class attributes SClass attributes TConstant pool UConstant pool item c6Name and signature pair. Used for methods and fields. g$Fields and methods have signatures. i5Access flags. Used for classess, methods, variables. j0x0400 k0x0200 Class is interface l%0x0100 Implemented in other language m0x0080 n0x0040 Could not be cached o0x0020 Uses monitors p-0x0010 No further subclassing or assignments q!0x0008 Static method or variable r#0x0004 Visible only for subclasses s&0x0002 Visible only for defined class t0x0001 Visible for all u)Object (class, method, field) attributes vObject (class, method, field  &) access flags wLink to some object xDirect representation stage y File stage >Read one-byte Char {'Size of attributes set at Direct stage |/Associative list of attributes at Direct stage }%Size of attributes set at File stage ~1Name of the CClass. Error on any other constant. 'Default (empty) class file definition. ?6Try to read integer value from decimal representation @Read string up to `;' A!Read arguments signatures (up to `)')  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxByC>z{|}~?D@AEFGHIJKLMNOPQRSTUVWXYZ[m !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy\]^z{|}~k !7A@?>=<;:986013542yxTw"#$%&'()*+,-./BCDEFGHIJKLMNOPQRSUba`_^]\[ZYWVXXitsrqponmlkjvughcdefz~}{|; !"#$%&'()*+,-./01235467 A@?>=<;:98BCDEFGHIJKLMNOPQRSTUba`_^]\[ZYWVXXcdefghi tsrqponmlkjuvwxByC>z{|}~?D@AEFGHIJKLMNOPQRSTUVWXYZ[None!JVM array type (primitive types) 11 10 9 8 7 6 5 4 :JVM instruction set. For comments, see JVM specification. 201 200 199 198 197 196 195 194 193 192 191 190 189  188, see  ArrayType 187 185 184 183 182 181 180 179 178 177 176 175 174 173 172 171 170 169 168 167  165, 166 159, 160, 161, 162, 163, 164 153, 154, 155, 156, 157, 158  151, 152  149, 150 148 147 146 145 144 143 142 141 140 139 138 137 136 135 134 133 132 131 130 129 128 127 126 125 124 123 122 121 120 119 118 117 116 115 114 113 112 111 110 109 108 107 106 105 104 103 102 101 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 75, 76, 77, 78 71, 72, 73, 74 67, 68, 69, 70 63, 64, 65, 66 59, 60, 61, 62 58 57 56 55 54 53 52 51  50  49  48  47  46 42, 43, 44, 45 38, 39, 40, 41 34, 35, 36, 37 30, 31, 32, 33 26, 27, 28, 29 25 24 23 22 21 20 19 18 17 16 15 14 13  12 !11 "10 #9 $8 %7 &6 '5 (4 )3 *2 +1 ,0 -Exception descriptor 3!Format of Code method attribute. =MComparation operation type. Not all CMP instructions support all operations. DFImmediate constant. Corresponding value will be added to base opcode. E3 F2 G1 H0 _1Read sequence of instructions (to end of stream) `%Parse opcode with immediate constant a#Put opcode with immediate constant bPut opcode with one argument JEncode list of instructions KDecode Java method LEncode Java method cQCalculate padding for current bytecode offset (cf. TABLESWITCH and LOOKUPSWITCH)       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH_` Base opcode Instruction constructor Opcode to parse a Base opcode Constant to add to opcode IdbOpcode First argument eOpcode First argument Second argument JKLcfghij      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKL,+*)('&%$#"!      -./0123456789:;<DHGFE=CBA@?>IJLK,+*)('&%$#"!      -./0123 456789:;<=CBA@?>DHGFE_`aIdbeJKLcfghijNoneMNOPQRSTUVWXklmnopqr MNOPQRSTUVWX VWTUQSRMPONX MPONQSRTUVWXklmnopqrNoneYClassPath monad ZClassPath entry [Class loaded from .jar file \Not loaded .jar file ]Class loaded from .class file ^Not loaded .class file _Directories tree YZ[\]^_`ast YZ[\]^_`a _a`Z^]\[YYZ^]\[_a`st Nonebmap on forest cmapM on forest d mapM on tree g map on tree iMerge ClassPath forest.  For example, [org haskell, orgjava] --> [org/{haskell, java}]. j"Add one ClassPath tree to forest. bcdefghij bcdefghij bcdefghij bcdefghij Noneklmnopuklmnopklmnpoklmnopu NoneqParse .class file data rParse class data from file v4Find index of given string in the list of constants w4Find index of given string in the list of constants v Try to get class method by name w$Try to get object attribute by name xATry to get Code for class method (no Code for interface methods) qrstuxvwyz{|}~vwx Method name qrstuvwxqrtusvwxqrstuxvwyz{|}~vwx NonezRead all entires from JAR file {Read one class from JAR file yz{|}yz{|}yz{|}yz{|} None<For given list of glob masks, return list of matching files ~$Append one file to ClassPath forest 'Add one directory to current ClassPath Run ClassPath monad 3Run ClassPath monad and return resulting ClassPath $Load one class in current ClassPath Get one ClassPath entry ~YZ[\]^_`abcdefghij~~~None+Read MainClass Entry of a MANIFEST.MF file <Read entries from JAR file, using MANIFEST.MF if it exists.  Add given JAR file to ClassPath NoneIO version of Generate monad Generate monad Generator state +Already generated code (in current method) !Already generated constants pool (Next index to be used in constants pool  Already generated class methods Current method &Maximum stack size for current method 5Maximum number of local variables for current method Empty generator state Update ClassPath Add a constant to pool Lookup in a pool Add a constant into pool *Generate one (zero-arguments) instruction &Generate one one-argument instruction &Generate one one-argument instruction *Set maximum stack size for current method 9Set maximum number of local variables for current method Start generating new method End of method generation Generate new method #Get a class from current ClassPath 1Get class field signature from current ClassPath 2Get class method signature from current ClassPath %Access the generated bytecode length (Convert Generator state to method Code. Start class generation. Generate a class Generate a class 2-Access flags for method (public, static etc)  Method name Signatures of method arguments Method return signature Generator for method code $ NoneWide instruction       !"#      !"#      !"#      !"#None$%      !"#$%$%$%None&Dump a class to console. &&&&None/java.lang.Object. init () method 0#java.lang.Integer.valueOf() method '()*+,-./0 '()*+,-./0 '()*+,-./0 '()*+,-./0None1java.io.PrintStream class name 2(java.io.PrintStream class as field type 12345123451234512345 !!"#$%&&'()*+,-./001234456789::;<=>?@@ABCDEFGHIJKLMNOPQQRSTUVWXYZ[\]^_`abcdefghijklmnopqqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789::;<=>??@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^__``abcdefghi j k l m n o p q r s t u v w x y z { | } ~             +      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx y z { | } ~          hs-java-0.3.4Java.META.TypesJava.META.ParserJava.META.Spec Java.META JVM.ClassFile JVM.AssemblerJVM.ExceptionsJava.ClassPath.TypesJava.ClassPath.Common JVM.Common JVM.ConverterJava.JAR.ArchiveJava.ClassPathJava.JARJVM.Builder.MonadJVM.Builder.Instructions JVM.BuilderJVM.Dump Java.LangJava.IOMETASection parseMetaFile parseMetaMetaSpecloadFirstSectionloadOtherSection storeMetaloadSpec lookupList bool2string string2bool ManifestEntrymeNamemeSealed meContentTypemeBeanManifestmanifestVersion createdBysealedsignatureVersion classPath mainClassmanifestEntries HasAttributes attributes Attribute attributeNameattributeLengthattributeValueMethodmethodAccessFlags methodNamemethodSignaturemethodAttributesCountmethodAttributesFieldfieldAccessFlags fieldNamefieldSignaturefieldAttributesCountfieldAttributesMethodSignatureArgumentSignatureReturnSignature ReturnsVoidReturnsFieldSignature FieldTypeArray ObjectTypeBoolTypeShortIntLongIntIntType FloatType DoubleTypeCharByte SignedByteClassmagic minorVersion majorVersionconstsPoolSize constsPool accessFlags thisClass superClassinterfacesCount interfacesclassFieldsCount classFieldsclassMethodsCount classMethodsclassAttributesCountclassAttributesPoolConstantCUnicodeCUTF8 getString CNameTypeCDoubleCLongCFloatCIntegerCString CIfaceMethodCMethodCFieldCClassNameTypentName ntSignature HasSignature Signature AccessFlag ACC_ABSTRACT ACC_INTERFACE ACC_NATIVE ACC_TRANSIENT ACC_VOLATILEACC_SYNCHRONIZED ACC_FINAL ACC_STATIC ACC_PROTECTED ACC_PRIVATE ACC_PUBLIC Attributes AccessFlagsLinkDirectFiletoStringarsizearlistapsize className defaultClasslong lookupField fieldNameTypemethodNameType lookupMethod ArrayTypeT_LONGT_INTT_SHORTT_BYTET_DOUBLET_FLOATT_CHAR T_BOOLEAN InstructionJSR_WGOTO_W IFNONNULLIFNULLMULTINANEWARRAYWIDE MONITOREXIT MONITORENTER INSTANCEOF CHECKCASTATHROW ARRAYLENGTH ANEWARRAYNEWARRAYNEWINVOKEINTERFACE INVOKESTATIC INVOKESPECIAL INVOKEVIRTUALPUTFIELDGETFIELD PUTSTATIC GETSTATICRETURNARETURNDRETURNFRETURNLRETURNIRETURN LOOKUPSWITCH TABLESWITCHRETJSRGOTOIF_ACMPIF_ICMPIFDCMPFCMPLCMPI2SI2CI2BD2FD2LD2IF2DF2LF2IL2DL2FL2II2DI2FI2LIINCLXORIXORLORIORLANDIANDLUSHRIUSHRLSHRISHRLSHLISHLDNEGFNEGLNEGINEGDREMFREMLREMIREMDDIVFDIVLDIVIDIVDMULFMULLMULIMULDSUBFSUBLSUBISUBDADDFADDLADDIADDSWAPDUP2_X2DUP2_X1DUP2DUP_X2DUP_X1DUPPOP2POPSASTORECASTOREBASTOREAASTOREDASTOREFASTORELASTOREIASTOREASTORE_DSTORE_FSTORE_LSTORE_ISTORE_ASTOREDSTOREFSTORELSTOREISTORESALOADCALOADBALOADAALOADDALOADFALOADLALOADIALOADALOAD_DLOAD_FLOAD_LLOAD_ILOAD_ALOADDLOADFLOADLLOADILOADLDC2WLDC2LDC1SIPUSHBIPUSHDCONST_1DCONST_0FCONST_2FCONST_1FCONST_0LCONST_1LCONST_0ICONST_5ICONST_4ICONST_3ICONST_2ICONST_1ICONST_0 ICONST_M1 ACONST_NULLNOP CodeExceptioneStartPCeEndPC eHandlerPC eCatchTypeCode codeStackSize codeMaxLocals codeLengthcodeInstructionscodeExceptionsNcodeExceptions codeAttrsNcodeAttributesCMPC_LEC_GTC_GEC_LTC_NEC_EQIMMI3I2I1I0 atype2byteencodeInstructions decodeMethod encodeMethod ENotFoundMethodNotFound FieldNotFound ClassNotFound ENotLoaded JARNotLoadedClassFileNotLoadedUnexpectedEndMethod NoItemInPoolforce ClassPathCPEntry LoadedJAR NotLoadedJARLoaded NotLoadedTree DirectorymapFmapFMmapTMmapFMFmapTMFmapT buildTreemergemerge1 toCharListpoolSize! showListIx byteString mapFindIndex parseClassparseClassFile encodeClassclassFile2DirectclassDirect2File methodByName attrByName methodCode readJAREntry readAllJAR readFromJARcheckClassTreezipJAR appendPath addDirectory runClassPath execClassPath loadClassgetEntry readManifest readMainClassreadJARaddJAR GenerateIOGenerate GeneratorthrowGGState generated currentPool nextPoolIndex doneMethods currentMethod stackSizelocals emptyGState withClassPath addToPooli0i1i8 setStackSize setMaxLocals newMethod getClassFieldgetClassMethodgenerateCodeLength generateIOgeneratenop aconst_null iconst_m1iconst_0iconst_1iconst_2iconst_3iconst_4iconst_5lconst_0lconst_1fconst_0fconst_1fconst_2dconst_0dconst_1bipushsipushldc1ldc2ldc2wiloadlloadfloaddloadaloadiload_lload_fload_dload_aload_ialoadlaloadfaloaddaloadaaloadcaloadsaloadistorelstorefstoredstoreastoreistore_lstore_fstore_dstore_astore_iastorelastorefastoredastoreaastorebastorecastoresastorepoppop2dupdup_x1dup_x2dup2dup2_x1dup2_x2swapiaddladdfadddaddisublsubfsubdsubimullmulfmuldmulidivldivfdivddiviremlremfremdremineglnegfnegdnegishllshlishrlshriushrlushriandlandiorlorixorlxoriinci2li2fi2dl2il2fl2df2if2lf2dd2id2ld2fi2bi2ci2slcmpwidenewnewArray allocNewArray invokeVirtual invokeStatic invokeSpecialgetStaticField loadString allocArrayarrayOf sizedArray dumpClass objectClass stringClass integerClass systemClassobjectstringintegersystem objectInitvalueOfInteger printStreamprintStreamClassprintlnoutprintfpNewLine blanklinepSectionpHeaderpValue manyLinespMETA$fMetaSpecManifestgetChar8getIntgetToSemicolongetArgs putString whileJustputPoolgetPool$fHasAttributesMethod$fHasAttributesField$fHasAttributesClass$fBinaryAttribute$fBinaryMethod $fBinaryField$fBinaryMethodSignature$fShowMethodSignature$fBinaryReturnSignature$fShowReturnSignature$fBinaryFieldType$fShowFieldType $fBinaryClass$fShowConstant$fBinaryNameType$fShowNameType$fHasSignatureMethod$fHasSignatureField$fDefaultAttributes$fDefaultAttributes0ARAPattributesListreadInstructionsimmputImmput1padding byte2atypeput2$fBinaryStateIntegerInstruction$fBinaryStateIntegerArrayType$fBinaryStateIntegerCode$fBinaryStateIntegerAttribute!$fBinaryStateIntegerCodeException$fExceptionENotFound$fShowENotFound$fExceptionENotLoaded$fShowENotLoaded$fExceptionUnexpectedEndMethod$fShowUnexpectedEndMethod$fShowNoItemInPool$fExceptionNoItemInPool $fShowCPEntry $fShowTree$fDefaultByteString poolIndexpoolClassIndexpoolDirect2File poolNTIndexfieldDirect2FilemethodDirect2FileattrInfopoolFile2DirectaccessFile2DirectaccessDirect2FilefieldFile2DirectmethodFile2DirectattributesFile2DirectglobreadOneaddItem lookupPool startMethod endMethodgetClassencodedCodeLengthgenCode initClass runGenerateIO runGenerateexecGenerateIO execGenerateaddNTaddSigputInstruction$fGeneratoreGenerate$fGeneratoreGenerateIO $fMonadIOEMT$fMonadStatestEMT$fMonadStatestEMT0