package php.runtime.env;
import php.runtime.Memory;
import php.runtime.invoke.Invoker;
import php.runtime.invoke.StaticMethodInvoker;
import php.runtime.memory.ArrayMemory;
public class SplClassLoader {
protected Invoker invoker;
protected Memory callback;
public SplClassLoader(Invoker invoker, Memory callback){
this.invoker = invoker;
this.callback = callback;
if (invoker instanceof StaticMethodInvoker && !callback.isArray()){
StaticMethodInvoker staticMethodInvoker = (StaticMethodInvoker)invoker;
this.callback = ArrayMemory.ofStrings(
staticMethodInvoker.getCalledClass(),
staticMethodInvoker.getMethod().getName()
);
}
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof SplClassLoader)) return false;
SplClassLoader that = (SplClassLoader) o;
return invoker.equals(that.invoker);
}
@Override
public int hashCode() {
int result = invoker.hashCode();
return result;
}
public SplClassLoader forEnvironment(Environment newEnvironment) {
Invoker invoker = this.invoker.forEnvironment(newEnvironment);
return new SplClassLoader(invoker, callback);
}
public boolean load(Memory... args) {
return invoker.callNoThrow(args).toBoolean();
}
public Invoker getInvoker() {
return invoker;
}
public Memory getCallback() {
return callback;
}
}