diff -r 8cb6ebbd4823 -r a6c71e376889 rt/emul/mini/src/main/java/java/lang/ClassLoader.java --- a/rt/emul/mini/src/main/java/java/lang/ClassLoader.java Thu Oct 03 14:45:25 2013 +0200 +++ b/rt/emul/mini/src/main/java/java/lang/ClassLoader.java Sun Oct 20 20:36:03 2013 +0200 @@ -24,6 +24,7 @@ */ package java.lang; +import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.IOException; import java.net.URL; @@ -892,9 +893,45 @@ return Object.class.getResource("/" + name); } + @JavaScriptBody(args = { "name", "skip" }, body + = "return (vm.loadBytes) ? vm.loadBytes(name, skip) : null;" + ) + static native byte[] getResourceAsStream0(String name, int skip); + private static Enumeration getBootstrapResources(String name) { - URL u = Object.class.getResource("/" + name); - return new OneOrZeroEnum(u); + return new ResEnum(name); + } + + private static class ResEnum implements Enumeration { + private final String name; + private URL next; + private int skip; + + public ResEnum(String name) { + this.name = name; + } + + + public boolean hasMoreElements() { + if (next == null && skip >= 0) { + byte[] arr = getResourceAsStream0(name, skip++); + if (arr != null) { + next = Class.newResourceURL(name, new ByteArrayInputStream(arr)); + } else { + skip = -1; + } + } + return next != null; + } + + public URL nextElement() { + URL r = next; + if (r == null) { + throw new NoSuchElementException(); + } + next = null; + return r; + } } private static class OneOrZeroEnum implements Enumeration {