Skip to content

Commit

Permalink
upgrade to asm5 to support jdk 1.8
Browse files Browse the repository at this point in the history
  • Loading branch information
mth committed Jan 24, 2015
1 parent 2f57726 commit c8e0066
Show file tree
Hide file tree
Showing 7 changed files with 50 additions and 36 deletions.
6 changes: 3 additions & 3 deletions build.xml
Expand Up @@ -3,17 +3,17 @@

<target name="prepare-build">
<property file="properties"/>
<property name="asm" value="${basedir}/asm-3.1-p1r.jar"/>
<property name="asm" value="${basedir}/asm-5.0.3rr.jar"/>
<property name="build" value="${basedir}/.build"/>
<property name="jardir" value="${basedir}"/>
<property name="docdir" value="${build}/doc"/>
<available property="has.asm" file="${asm}"/>
</target>

<target name="fetch" depends="prepare-build" unless="has.asm">
<property name="asmt" value="${build}/asm-3.1-p1.jar"/>
<property name="asmt" value="${build}/asm-5.0.3.jar"/>
<mkdir dir="${build}/util"/>
<get src="http://dot.planet.ee/yeti/asm-3.1-p1.jar"
<get src="http://dot.planet.ee/yeti/asm-5.0.3.jar"
dest="${asmt}" verbose="true"/>
<javac destdir="${build}/util" srcdir="${basedir}/util"
includes="Rename.java" encoding="UTF-8"
Expand Down
3 changes: 3 additions & 0 deletions c/ClassFinder.java
Expand Up @@ -206,6 +206,9 @@ JavaTypeReader readClass(String className) {
ClassReader.SKIP_CODE | ClassReader.SKIP_FRAMES);
} catch (IOException ex) {
return null;
} catch (Exception ex) {
throw new RuntimeException("Internal error reading class " +
className + ": " + ex.getMessage(), ex);
}
return t;
}
Expand Down
6 changes: 5 additions & 1 deletion c/JavaType.java
Expand Up @@ -42,7 +42,7 @@ public JavaClassNotFoundException(String what) {
}
}

class JavaTypeReader implements ClassVisitor, Opcodes {
class JavaTypeReader extends ClassVisitor implements Opcodes {
Map vars = new HashMap();
Map fields = new HashMap();
Map staticFields = new HashMap();
Expand All @@ -54,6 +54,10 @@ class JavaTypeReader implements ClassVisitor, Opcodes {
String[] interfaces;
int access;

JavaTypeReader() {
super(ASM5);
}

public void visit(int version, int access, String name, String signature,
String superName, String[] interfaces) {
if (superName != null)
Expand Down
6 changes: 5 additions & 1 deletion c/TypeAttr.java
Expand Up @@ -426,10 +426,14 @@ Tag yetiType() {
}
}

class YetiTypeVisitor implements ClassVisitor {
class YetiTypeVisitor extends ClassVisitor {
TypeAttr typeAttr;
private boolean deprecated;

YetiTypeVisitor() {
super(Opcodes.ASM5);
}

public void visit(int version, int access, String name, String signature,
String superName, String[] interfaces) {
deprecated = (access & Opcodes.ACC_DEPRECATED) != 0;
Expand Down
8 changes: 4 additions & 4 deletions c/YetiCode.java
Expand Up @@ -226,7 +226,7 @@ void createInit(int mod, String parent) {
MethodVisitor m = cw.visitMethod(mod, "<init>", "()V", null, null);
// super()
m.visitVarInsn(ALOAD, 0);
m.visitMethodInsn(INVOKESPECIAL, parent, "<init>", "()V");
m.visitMethodInsn(INVOKESPECIAL, parent, "<init>", "()V", false);
m.visitInsn(RETURN);
m.visitMaxs(0, 0);
m.visitEnd();
Expand Down Expand Up @@ -316,7 +316,7 @@ void captureCast(String type) {

void visitInit(String type, String descr) {
insn(-2);
m.visitMethodInsn(INVOKESPECIAL, type, "<init>", descr);
m.visitMethodInsn(INVOKESPECIAL, type, "<init>", descr, false);
lastType = type;
}

Expand All @@ -340,15 +340,15 @@ void fieldInsn(int opcode, String owner, String name, String desc) {

void methodInsn(int opcode, String owner, String name, String desc) {
insn(-1);
m.visitMethodInsn(opcode, owner, name, desc);
m.visitMethodInsn(opcode, owner, name, desc, opcode == INVOKEINTERFACE);
}

void visitApply(Code arg, int line) {
arg.gen(this);
insn(-1);
visitLine(line);
m.visitMethodInsn(INVOKEVIRTUAL, "yeti/lang/Fun",
"apply", "(Ljava/lang/Object;)Ljava/lang/Object;");
"apply", "(Ljava/lang/Object;)Ljava/lang/Object;", false);
}

void jumpInsn(int opcode, Label label) {
Expand Down
2 changes: 1 addition & 1 deletion util/Rename.java
Expand Up @@ -59,7 +59,7 @@ public static void main(String[] args) throws Exception {
JarFile in = new JarFile(args[0]);
JarOutputStream out =
new JarOutputStream(new FileOutputStream(args[1]));
byte[] buf = new byte[65536];
byte[] buf = new byte[0x20000];
for (Enumeration e = in.entries(); e.hasMoreElements();) {
ZipEntry z = (ZipEntry) e.nextElement();
if (z.isDirectory())
Expand Down
55 changes: 29 additions & 26 deletions util/SpecialLib.java
Expand Up @@ -33,9 +33,9 @@
import java.io.*;
import yeti.renamed.asm3.*;

class LListAdapter extends ClassAdapter implements Opcodes {
class LListAdapter extends ClassVisitor implements Opcodes {
LListAdapter(ClassVisitor cv) {
super(cv);
super(ASM5, cv);
}

public MethodVisitor visitMethod(int access, String name, String desc,
Expand All @@ -58,7 +58,7 @@ public void visitEnd() {
mv.visitLabel(retry);
mv.visitIincInsn(0, 1);
mv.visitMethodInsn(INVOKEVIRTUAL, "yeti/lang/AIter",
"next", "()Lyeti/lang/AIter;");
"next", "()Lyeti/lang/AIter;", false);
mv.visitInsn(DUP);
mv.visitJumpInsn(IFNONNULL, retry);
mv.visitLabel(end);
Expand All @@ -79,12 +79,13 @@ public void visitEnd() {
mv.visitLabel(retry = new Label());
mv.visitInsn(DUP2); // fun iter fun iter
mv.visitMethodInsn(INVOKEVIRTUAL, "yeti/lang/AIter",
"first", "()Ljava/lang/Object;");
"first", "()Ljava/lang/Object;", false);
mv.visitMethodInsn(INVOKEVIRTUAL, "yeti/lang/Fun",
"apply", "(Ljava/lang/Object;)Ljava/lang/Object;");
"apply", "(Ljava/lang/Object;)Ljava/lang/Object;",
false);
mv.visitInsn(POP);
mv.visitMethodInsn(INVOKEVIRTUAL, "yeti/lang/AIter",
"next", "()Lyeti/lang/AIter;");
"next", "()Lyeti/lang/AIter;", false);
mv.visitInsn(DUP);
mv.visitJumpInsn(IFNONNULL, retry);
mv.visitLabel(end);
Expand All @@ -105,12 +106,12 @@ public void visitEnd() {
mv.visitInsn(SWAP);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, "yeti/lang/AIter",
"first", "()Ljava/lang/Object;");
"first", "()Ljava/lang/Object;", false);
mv.visitMethodInsn(INVOKEVIRTUAL, "yeti/lang/Fun", "apply",
"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", false);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, "yeti/lang/AIter",
"next", "()Lyeti/lang/AIter;");
"next", "()Lyeti/lang/AIter;", false);
mv.visitInsn(DUP);
mv.visitVarInsn(ASTORE, 0);
mv.visitJumpInsn(IFNONNULL, retry);
Expand All @@ -129,20 +130,20 @@ public void visitEnd() {
mv.visitTypeInsn(NEW, "yeti/lang/MList");
mv.visitInsn(DUP);
mv.visitMethodInsn(INVOKESPECIAL, "yeti/lang/MList",
"<init>", "()V");
"<init>", "()V", false);
mv.visitVarInsn(ASTORE, 0);
mv.visitLabel(retry = new Label());
mv.visitInsn(DUP2); // fun iter fun iter
mv.visitMethodInsn(INVOKEVIRTUAL, "yeti/lang/AIter",
"first", "()Ljava/lang/Object;"); // i -> v
mv.visitMethodInsn(INVOKEVIRTUAL, "yeti/lang/Fun", // f v -> v'
"apply", "(Ljava/lang/Object;)Ljava/lang/Object;");
"first", "()Ljava/lang/Object;", false); // i -> v
mv.visitMethodInsn(INVOKEVIRTUAL, "yeti/lang/Fun", "apply", // f v -> v'
"(Ljava/lang/Object;)Ljava/lang/Object;", false);
mv.visitVarInsn(ALOAD, 0);
mv.visitInsn(SWAP);
mv.visitMethodInsn(INVOKEVIRTUAL, "yeti/lang/MList",
"add", "(Ljava/lang/Object;)V"); // l v' -> ()
mv.visitMethodInsn(INVOKEVIRTUAL, "yeti/lang/AIter",
"next", "()Lyeti/lang/AIter;"); // i -> i'
mv.visitMethodInsn(INVOKEVIRTUAL, "yeti/lang/MList", "add",
"(Ljava/lang/Object;)V", false); // l v' -> ()
mv.visitMethodInsn(INVOKEVIRTUAL, "yeti/lang/AIter", "next",
"()Lyeti/lang/AIter;", false); // i -> i'
mv.visitInsn(DUP);
mv.visitJumpInsn(IFNONNULL, retry);
mv.visitVarInsn(ALOAD, 0);
Expand All @@ -160,7 +161,7 @@ public void visitEnd() {
mv.visitInsn(ACONST_NULL);
mv.visitVarInsn(ASTORE, 0);
mv.visitMethodInsn(INVOKESPECIAL, "yeti/lang/MList",
"<init>", "(Lyeti/lang/AIter;)V");
"<init>", "(Lyeti/lang/AIter;)V", false);
mv.visitInsn(ARETURN);
mv.visitMaxs(0, 0);
mv.visitEnd();
Expand All @@ -176,7 +177,7 @@ public void visitEnd() {
mv.visitVarInsn(ILOAD, 1);
mv.visitJumpInsn(IFLE, drop);
mv.visitMethodInsn(INVOKEVIRTUAL, "yeti/lang/AList",
"rest", "()Lyeti/lang/AList;"); // i -> i'
"rest", "()Lyeti/lang/AList;", false); // i -> i'
mv.visitIincInsn(1, -1);
mv.visitInsn(DUP);
mv.visitJumpInsn(IFNONNULL, retry);
Expand All @@ -186,8 +187,8 @@ public void visitEnd() {
mv.visitVarInsn(ILOAD, 2);
mv.visitJumpInsn(IFLT, end = new Label());
mv.visitVarInsn(ILOAD, 2);
mv.visitMethodInsn(INVOKESTATIC, "yeti/lang/TakeList",
"take", "(Lyeti/lang/AIter;I)Lyeti/lang/AList;");
mv.visitMethodInsn(INVOKESTATIC, "yeti/lang/TakeList", "take",
"(Lyeti/lang/AIter;I)Lyeti/lang/AList;", false);
mv.visitLabel(end);
mv.visitInsn(ARETURN);
mv.visitMaxs(0, 0);
Expand Down Expand Up @@ -232,7 +233,8 @@ void fun2_() throws Exception {
"(Lyeti/lang/Fun2;Ljava/lang/Object;)V", null, null);
mv.visitCode();
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL, "yeti/lang/Fun", "<init>", "()V");
mv.visitMethodInsn(INVOKESPECIAL, "yeti/lang/Fun",
"<init>", "()V", false);
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 1);
mv.visitFieldInsn(PUTFIELD, "yeti/lang/Fun2_",
Expand All @@ -259,7 +261,7 @@ void fun2_() throws Exception {
mv.visitInsn(ACONST_NULL);
mv.visitVarInsn(ASTORE, 1);
mv.visitMethodInsn(INVOKEVIRTUAL, "yeti/lang/Fun2", "apply",
"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", false);
mv.visitInsn(ARETURN);
mv.visitMaxs(0, 0);
mv.visitEnd();
Expand All @@ -278,7 +280,8 @@ void compose() throws Exception {
"(Ljava/lang/Object;Ljava/lang/Object;)V", null, null);
mv.visitCode();
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL, "yeti/lang/Fun", "<init>", "()V");
mv.visitMethodInsn(INVOKESPECIAL, "yeti/lang/Fun",
"<init>", "()V", false);
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 1);
mv.visitTypeInsn(CHECKCAST, "yeti/lang/Fun");
Expand Down Expand Up @@ -306,9 +309,9 @@ void compose() throws Exception {
mv.visitInsn(ACONST_NULL);
mv.visitVarInsn(ASTORE, 1);
mv.visitMethodInsn(INVOKEVIRTUAL, "yeti/lang/Fun", "apply",
"(Ljava/lang/Object;)Ljava/lang/Object;");
"(Ljava/lang/Object;)Ljava/lang/Object;", false);
mv.visitMethodInsn(INVOKEVIRTUAL, "yeti/lang/Fun", "apply",
"(Ljava/lang/Object;)Ljava/lang/Object;");
"(Ljava/lang/Object;)Ljava/lang/Object;", false);
mv.visitInsn(ARETURN);
mv.visitMaxs(0, 0);
mv.visitEnd();
Expand Down

0 comments on commit c8e0066

Please sign in to comment.