Package kilim.tools

Class Asm


  • public class Asm
    extends java.lang.Object
    This is a replacement for the jasmin bytecode assembler and uses the same syntax. The main reason for writing it is that jasmin (v 2.1 at the time of writing) didn't correcly support annotations. That is, the annotations inserted by jasmin don't show up in java.lang.reflect.Method, even though the annotations are in the class file. It was easier to write this tool than to release a separate fix for jasmin.
     Usage: java kilim.tools.Asm [options] <.j file(s)>
     Options:
          -d  : output directory (default: '.')
          -f       : force            (default: false) write output even if output file is newer than source
          -q       : quiet            (default: verbose)
          -nf      : no stack frames  (default: compute stack frames)
     
    If stack frames are requested (default), the version of the class file is V1_6, otherwise it is V1_5.
    • Field Detail

      • quiet

        static boolean quiet
      • force

        static boolean force
      • outputDir

        static java.lang.String outputDir
      • wsPattern

        static java.util.regex.Pattern wsPattern
      • commentPattern

        static java.util.regex.Pattern commentPattern
      • eofOK

        private boolean eofOK
      • cv

        private org.objectweb.asm.ClassWriter cv
      • mv

        private org.objectweb.asm.MethodVisitor mv
      • maxLocals

        private int maxLocals
      • maxStack

        private int maxStack
      • declaredLabels

        private java.util.HashSet<java.lang.String> declaredLabels
      • labels

        private java.util.HashMap<java.lang.String,​org.objectweb.asm.Label> labels
      • className

        private java.lang.String className
      • methodName

        private java.lang.String methodName
      • fileName

        private java.lang.String fileName
      • line

        private Line line
      • bufferedLine

        private Line bufferedLine
      • lastMatch

        private java.util.regex.Matcher lastMatch
      • lastPattern

        private java.util.regex.Pattern lastPattern
      • reader

        private java.io.LineNumberReader reader
      • skip

        private boolean skip
      • modifiers

        static java.util.HashMap<java.lang.String,​java.lang.Integer> modifiers
      • classNamePatternStr

        private static java.lang.String classNamePatternStr
      • modifierPatternStr

        private static java.lang.String modifierPatternStr
      • classPattern

        private static java.util.regex.Pattern classPattern
      • superPattern

        private static java.util.regex.Pattern superPattern
      • implementsPattern

        private static java.util.regex.Pattern implementsPattern
      • namePatternStr

        private static java.lang.String namePatternStr
      • descPatternStr

        private static java.lang.String descPatternStr
      • fieldPattern

        private static java.util.regex.Pattern fieldPattern
      • methodNamePatternStr

        private static java.lang.String methodNamePatternStr
      • methodPattern

        private static java.util.regex.Pattern methodPattern
      • throwsPattern

        private static java.util.regex.Pattern throwsPattern
      • labelPattern

        private static java.util.regex.Pattern labelPattern
      • localsPattern

        static java.util.regex.Pattern localsPattern
      • stackPattern

        static java.util.regex.Pattern stackPattern
      • catchPattern

        static java.util.regex.Pattern catchPattern
      • annotationPattern

        static java.util.regex.Pattern annotationPattern
      • opcodeStrs

        static java.lang.String[] opcodeStrs
      • computeFrames

        private static boolean computeFrames
      • opcodeMap

        private static final java.util.HashMap<java.lang.String,​java.lang.Integer> opcodeMap
      • visitTypes

        private static final byte[] visitTypes
      • insnPattern

        static final java.util.regex.Pattern insnPattern
      • quotedPattern

        static final java.util.regex.Pattern quotedPattern
      • casePattern

        static final java.util.regex.Pattern casePattern
      • methodInvokePattern

        static final java.util.regex.Pattern methodInvokePattern
      • fieldSpecPattern

        static final java.util.regex.Pattern fieldSpecPattern
      • eofSeen

        boolean eofSeen
    • Constructor Detail

      • Asm

        public Asm​(java.lang.String afileName)
            throws java.io.IOException
        Throws:
        java.io.IOException
    • Method Detail

      • main

        public static void main​(java.lang.String[] args)
                         throws java.io.IOException
        Throws:
        java.io.IOException
      • parse

        public Asm parse()
                  throws java.io.IOException
        Throws:
        java.io.IOException
      • parseClass

        private void parseClass()
      • parseModifiers

        private int parseModifiers​(java.lang.String s)
      • parseSuper

        private java.lang.String parseSuper()
      • parseInterfaces

        private java.lang.String[] parseInterfaces()
      • parseClassBody

        private void parseClassBody()
      • parseField

        private void parseField()
      • parseMethod

        private void parseMethod()
      • parseMethodExceptions

        private java.lang.String[] parseMethodExceptions()
      • parseMethodBody

        private void parseMethodBody()
      • parseLabel

        private void parseLabel()
      • checkLabelDeclarations

        private void checkLabelDeclarations()
      • parseMethodDirective

        private void parseMethodDirective()
      • parseAnnotation

        private void parseAnnotation()
      • parseInstructions

        private void parseInstructions()
      • opcheck

        private void opcheck​(java.lang.String errMessage,
                             java.lang.String operand)
      • parseValue

        private java.lang.Object parseValue​(java.lang.String s,
                                            boolean isDoubleWord)
      • parseInt

        int parseInt​(java.lang.String s)
      • parseLong

        long parseLong​(java.lang.String s)
      • parseFloat

        float parseFloat​(java.lang.String s)
      • parseDouble

        double parseDouble​(java.lang.String s)
      • getLabel

        org.objectweb.asm.Label getLabel​(java.lang.String s)
      • err

        private void err​(java.lang.String s)
      • readLine

        private Line readLine()
      • putBackLine

        private void putBackLine()
      • getLine

        private Line getLine()
      • match

        boolean match​(java.lang.String s,
                      java.util.regex.Pattern p)
      • lineMatch

        boolean lineMatch​(java.util.regex.Pattern p)
      • group

        java.lang.String group​(int i)
      • groupCount

        int groupCount()
      • split

        static java.lang.String[] split​(java.util.regex.Pattern p,
                                        java.lang.String s)
      • outputName

        private java.lang.String outputName()
      • check

        private boolean check()
      • write

        private void write()
                    throws java.io.IOException
        Throws:
        java.io.IOException
      • mkdir

        private static void mkdir​(java.lang.String dir)
                           throws java.io.IOException
        Throws:
        java.io.IOException
      • getDirName

        private static java.lang.String getDirName​(java.lang.String className)
      • parseArgs

        private static java.util.List<java.lang.String> parseArgs​(java.lang.String[] args)