package php.runtime.memory.support.operation;
import php.runtime.Memory;
import php.runtime.common.HintType;
import php.runtime.env.Environment;
import php.runtime.env.TraceInfo;
import php.runtime.exceptions.CriticalException;
import php.runtime.lang.ForeachIterator;
import php.runtime.memory.support.MemoryOperation;
import php.runtime.reflection.ParameterEntity;
import php.runtime.reflection.support.TypeChecker;
public class ForeachIteratorMemoryOperation extends MemoryOperation<ForeachIterator> {
@Override
public Class<?>[] getOperationClasses() {
return new Class<?>[] { ForeachIterator.class };
}
@Override
public ForeachIterator convert(Environment env, TraceInfo trace, Memory arg) throws Throwable {
return arg.isNull() ? null : arg.getNewIterator(env);
}
@Override
public Memory unconvert(Environment env, TraceInfo trace, ForeachIterator arg) throws Throwable {
throw new CriticalException("Unsupported operation");
}
@Override
public void applyTypeHinting(ParameterEntity parameter) {
parameter.setTypeChecker(TypeChecker.of(HintType.TRAVERSABLE));
}
}