compilerinlinetest.java

来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 108 行

JAVA
108
字号
/*
 * $Id: CompilerInlineTest.java,v 1.2 2004/02/26 10:33:49 epr Exp $
 */
package org.jnode.test;

import java.io.File;
import java.io.PrintWriter;

import org.jnode.assembler.NativeStream;
import org.jnode.assembler.ObjectResolver;
import org.jnode.assembler.x86.TextX86Stream;
import org.jnode.vm.VmSystemClassLoader;
import org.jnode.vm.classmgr.VmClassLoader;
import org.jnode.vm.classmgr.VmMethod;
import org.jnode.vm.classmgr.VmType;
import org.jnode.vm.compiler.CompiledMethod;
import org.jnode.vm.compiler.CompilerBytecodeViewer;
import org.jnode.vm.compiler.CompilerBytecodeVisitor;
import org.jnode.vm.compiler.InliningBytecodeVisitor;
import org.jnode.vm.compiler.NativeCodeCompiler;
import org.jnode.vm.x86.VmX86Architecture;
import org.jnode.vm.x86.X86CpuID;

/**
 * @author Ewout Prangsma (epr@users.sourceforge.net)
 */
public class CompilerInlineTest {

    public static void main(String[] args) throws Exception {
        final String clsName = InlineTestClass.class.getName();

        final VmSystemClassLoader cl = new VmSystemClassLoader(new File(".")
                .toURL(), new VmX86Architecture());
        VmType.initializeForBootImage(cl);
        final VmType type = cl.loadClass(clsName, true);

        // Now inline the foo method
        final VmMethod method = type.getMethod("foo", "()V");

        TestCompiler cmp = new TestCompiler(cl);
        try {
            cmp.compileBootstrap(method, cmp.createNativeStream(null), 0);
        } catch (NullPointerException ex) {
            // I know, just ignore
            //ex.printStackTrace();
        }

    }

    static class TestCompiler extends NativeCodeCompiler {

        private final VmClassLoader loader;

        public TestCompiler(VmClassLoader loader) {
            this.loader = loader;
        }

        /**
         * @see org.jnode.vm.compiler.NativeCodeCompiler#createBytecodeVisitor(org.jnode.vm.classmgr.VmMethod,
         *      org.jnode.vm.compiler.CompiledMethod,
         *      org.jnode.assembler.NativeStream, int, boolean)
         */
        protected CompilerBytecodeVisitor createBytecodeVisitor(
                VmMethod method, CompiledMethod cm, NativeStream os, int level,
                boolean isBootstrap) {

            return new InliningBytecodeVisitor(new CompilerBytecodeViewer(),
                    loader);
        }

        /**
         * @see org.jnode.vm.compiler.NativeCodeCompiler#createNativeStream(org.jnode.assembler.ObjectResolver)
         */
        public NativeStream createNativeStream(ObjectResolver resolver) {
            return new TextX86Stream(new PrintWriter(System.out), X86CpuID
                    .createID(null));
        }

        /**
         * @see org.jnode.vm.compiler.NativeCodeCompiler#doCompileAbstract(org.jnode.vm.classmgr.VmMethod,
         *      org.jnode.assembler.NativeStream, int, boolean)
         */
        protected CompiledMethod doCompileAbstract(VmMethod method,
                NativeStream os, int level, boolean isBootstrap) {
            return null;
        }

        /**
         * @see org.jnode.vm.compiler.NativeCodeCompiler#dumpStatistics()
         */
        public void dumpStatistics() {
        }

        /**
         * @see org.jnode.vm.compiler.NativeCodeCompiler#initialize(org.jnode.vm.classmgr.VmClassLoader)
         */
        public void initialize(VmClassLoader loader) {
        }
        
        /**
         * @see org.jnode.vm.compiler.NativeCodeCompiler#getMagic()
         */
        public final int getMagic() {
            return -1;
        }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?