# HG changeset patch # User Thomas Wuerthinger # Date 1339689798 -7200 # Node ID e1b29c5163548b22d52fef98ae29c7ba1d154894 # Parent 4967be7265bc663073513951d3ff10ef2ad94291 Implement addEntryMethod in boot image generator. Add Graal.getRequiredCapability utility to Graal class. diff -r 4967be7265bc -r e1b29c516354 graal/com.oracle.graal.api/src/com/oracle/graal/api/Graal.java --- a/graal/com.oracle.graal.api/src/com/oracle/graal/api/Graal.java Thu Jun 14 17:54:59 2012 +0200 +++ b/graal/com.oracle.graal.api/src/com/oracle/graal/api/Graal.java Thu Jun 14 18:03:18 2012 +0200 @@ -22,7 +22,6 @@ */ package com.oracle.graal.api; - public class Graal { private static GraalRuntime runtime; @@ -49,4 +48,12 @@ }; } } + + public static T getRequiredCapability(Class clazz) { + T t = getRuntime().getCapability(clazz); + if (t == null) { + throw new IllegalAccessError("Runtime does not expose required capability " + clazz.getName()); + } + return t; + } } diff -r 4967be7265bc -r e1b29c516354 graal/com.oracle.graal.boot.test/src/com/oracle/graal/boot/HelloWorldTest.java --- a/graal/com.oracle.graal.boot.test/src/com/oracle/graal/boot/HelloWorldTest.java Thu Jun 14 17:54:59 2012 +0200 +++ b/graal/com.oracle.graal.boot.test/src/com/oracle/graal/boot/HelloWorldTest.java Thu Jun 14 18:03:18 2012 +0200 @@ -22,25 +22,13 @@ */ package com.oracle.graal.boot; -import java.io.*; -import java.lang.reflect.*; - import com.oracle.graal.boot.test.helloworld.*; public class HelloWorldTest { - public static void main(String[] args) throws NoSuchMethodException, SecurityException, IOException { - Method entryPoint = HelloWorldTestProgram.class.getMethod("main", String[].class); - System.out.println(HelloWorldTestProgram.class.getCanonicalName()); - InputStream inputStream = HelloWorldTestProgram.class.getClassLoader().getResourceAsStream(HelloWorldTestProgram.class.getName().replace('.', '/').concat(".class")); - - byte[] byteCodes = new byte[inputStream.available()]; - inputStream.read(byteCodes); - System.out.println(byteCodes); - ClassLoader l = new ClassLoader() { - - - }; - + public static void main(String[] args) { + BootImageGenerator generator = new BootImageGenerator(); + generator.addEntryMethod(HelloWorldTestProgram.class, "main", String[].class); + generator.logState(); } } diff -r 4967be7265bc -r e1b29c516354 graal/com.oracle.graal.boot/src/com/oracle/graal/boot/BootImageGenerator.java --- a/graal/com.oracle.graal.boot/src/com/oracle/graal/boot/BootImageGenerator.java Thu Jun 14 17:54:59 2012 +0200 +++ b/graal/com.oracle.graal.boot/src/com/oracle/graal/boot/BootImageGenerator.java Thu Jun 14 18:03:18 2012 +0200 @@ -24,12 +24,15 @@ import java.lang.reflect.*; +import com.oracle.graal.api.*; +import com.oracle.graal.api.meta.*; import com.oracle.graal.debug.*; public class BootImageGenerator { private final BootImageClassLoader classLoader = new BootImageClassLoader(); + private final MetaAccessProvider metaAccess = Graal.getRequiredCapability(MetaAccessProvider.class); public void addEntryMethod(Class clazz, String name, Class ... parameterTypes) { Class convertedClass = classLoader.convert(clazz); @@ -40,6 +43,16 @@ throw new RuntimeException("Could not find method " + name + " with parameter types " + parameterTypes + " in class " + convertedClass.getCanonicalName()); } Debug.log("Adding method %s.%s to the boot image", method.getClass().getName(), method.getName()); + addEntryMethod(metaAccess.getResolvedJavaMethod(method)); } + + private void addEntryMethod(ResolvedJavaMethod javaMethod) { + + } + + + public void logState() { + Debug.log("State"); + } } diff -r 4967be7265bc -r e1b29c516354 mx/projects --- a/mx/projects Thu Jun 14 17:54:59 2012 +0200 +++ b/mx/projects Thu Jun 14 18:03:18 2012 +0200 @@ -147,7 +147,7 @@ # graal.boot project@com.oracle.graal.boot@subDir=graal project@com.oracle.graal.boot@sourceDirs=src -project@com.oracle.graal.boot@dependencies=com.oracle.graal.compiler +project@com.oracle.graal.boot@dependencies=com.oracle.graal.compiler,com.oracle.graal.api project@com.oracle.graal.boot@checkstyle=com.oracle.graal.graph project@com.oracle.graal.boot@javaCompliance=1.7