// Copyright (c) Corporation for National Research Initiatives
package org.python.core;
import java.security.SecureClassLoader;
import java.util.Vector;
/**
* A java2 classloader for loading compiled python modules.
*/
class BytecodeLoader2 extends SecureClassLoader implements Loader {
private Vector parents;
public BytecodeLoader2() {
this.parents = BytecodeLoader.init();
}
public void addParent(ClassLoader referent) {
if (!this.parents.contains(referent)) {
this.parents.add(0, referent);
}
}
// override from abstract base class
protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
Class c = findLoadedClass(name);
if (c != null) {
return c;
}
return BytecodeLoader.findParentClass(this.parents, name);
}
public Class loadClassFromBytes(String name, byte[] data) {
Class c = defineClass(name, data, 0, data.length, this.getClass().getProtectionDomain());
resolveClass(c);
BytecodeLoader.compileClass(c);
return c;
}
}