Package kilim.tools
Class Asm
- java.lang.Object
-
- kilim.tools.Asm
-
public class Asm extends java.lang.ObjectThis 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: -dIf stack frames are requested (default), the version of the class file is V1_6, otherwise it is V1_5.: 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)
-
-
Field Summary
Fields Modifier and Type Field Description (package private) static java.util.regex.PatternannotationPatternprivate LinebufferedLine(package private) static java.util.regex.PatterncasePattern(package private) static java.util.regex.PatterncatchPatternprivate java.lang.StringclassNameprivate static java.lang.StringclassNamePatternStrprivate static java.util.regex.PatternclassPattern(package private) static java.util.regex.PatterncommentPatternprivate static booleancomputeFramesprivate org.objectweb.asm.ClassWritercvprivate java.util.HashSet<java.lang.String>declaredLabelsprivate static java.lang.StringdescPatternStrprivate booleaneofOK(package private) booleaneofSeenprivate static intFIELDprivate static java.util.regex.PatternfieldPattern(package private) static java.util.regex.PatternfieldSpecPatternprivate java.lang.StringfileName(package private) static booleanforceprivate static intIINCprivate static java.util.regex.PatternimplementsPatternprivate static intINSN(package private) static java.util.regex.PatterninsnPatternprivate static intINTprivate static intJUMPprivate static java.util.regex.PatternlabelPatternprivate java.util.HashMap<java.lang.String,org.objectweb.asm.Label>labelsprivate java.util.regex.MatcherlastMatchprivate java.util.regex.PatternlastPatternprivate static intLDCprivate Lineline(package private) static java.util.regex.PatternlocalsPatternprivate static intLOOKUPSWITCHprivate intmaxLocalsprivate intmaxStackprivate static intMETHOD(package private) static java.util.regex.PatternmethodInvokePatternprivate java.lang.StringmethodNameprivate static java.lang.StringmethodNamePatternStrprivate static java.util.regex.PatternmethodPatternprivate static java.lang.StringmodifierPatternStr(package private) static java.util.HashMap<java.lang.String,java.lang.Integer>modifiersprivate static intMULTIANEWARRAYprivate org.objectweb.asm.MethodVisitormvprivate static java.lang.StringnamePatternStrprivate static java.util.HashMap<java.lang.String,java.lang.Integer>opcodeMap(package private) static java.lang.String[]opcodeStrs(package private) static java.lang.StringoutputDir(package private) static booleanquiet(package private) static java.util.regex.PatternquotedPatternprivate java.io.LineNumberReaderreaderprivate booleanskip(package private) static java.util.regex.PatternstackPatternprivate static java.util.regex.PatternsuperPatternprivate static intTABLESWITCHprivate static java.util.regex.PatternthrowsPatternprivate static intTYPEprivate static intVARprivate static byte[]visitTypes(package private) static java.util.regex.PatternwsPattern
-
Constructor Summary
Constructors Constructor Description Asm(java.lang.String afileName)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private booleancheck()private voidcheckLabelDeclarations()private voiderr(java.lang.String s)private static java.lang.StringgetDirName(java.lang.String className)(package private) org.objectweb.asm.LabelgetLabel(java.lang.String s)private LinegetLine()(package private) java.lang.Stringgroup(int i)(package private) intgroupCount()(package private) booleanlineMatch(java.util.regex.Pattern p)static voidmain(java.lang.String[] args)(package private) booleanmatch(java.lang.String s, java.util.regex.Pattern p)private static voidmkdir(java.lang.String dir)private voidopcheck(java.lang.String errMessage, java.lang.String operand)private java.lang.StringoutputName()Asmparse()private voidparseAnnotation()private static java.util.List<java.lang.String>parseArgs(java.lang.String[] args)private voidparseClass()private voidparseClassBody()(package private) doubleparseDouble(java.lang.String s)private voidparseField()(package private) floatparseFloat(java.lang.String s)private voidparseInstructions()(package private) intparseInt(java.lang.String s)private java.lang.String[]parseInterfaces()private voidparseLabel()(package private) longparseLong(java.lang.String s)private voidparseMethod()private voidparseMethodBody()private voidparseMethodDirective()private java.lang.String[]parseMethodExceptions()private intparseModifiers(java.lang.String s)private java.lang.StringparseSuper()private java.lang.ObjectparseValue(java.lang.String s, boolean isDoubleWord)private voidputBackLine()private LinereadLine()(package private) static java.lang.String[]split(java.util.regex.Pattern p, java.lang.String s)private voidwrite()
-
-
-
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
-
INSN
private static final int INSN
- See Also:
- Constant Field Values
-
VAR
private static final int VAR
- See Also:
- Constant Field Values
-
LDC
private static final int LDC
- See Also:
- Constant Field Values
-
JUMP
private static final int JUMP
- See Also:
- Constant Field Values
-
TABLESWITCH
private static final int TABLESWITCH
- See Also:
- Constant Field Values
-
LOOKUPSWITCH
private static final int LOOKUPSWITCH
- See Also:
- Constant Field Values
-
FIELD
private static final int FIELD
- See Also:
- Constant Field Values
-
METHOD
private static final int METHOD
- See Also:
- Constant Field Values
-
TYPE
private static final int TYPE
- See Also:
- Constant Field Values
-
MULTIANEWARRAY
private static final int MULTIANEWARRAY
- See Also:
- Constant Field Values
-
INT
private static final int INT
- See Also:
- Constant Field Values
-
IINC
private static final int IINC
- See Also:
- Constant Field Values
-
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
-
-
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)
-
-