package php.runtime.ext;
import php.runtime.Startup;
import php.runtime.env.CompileScope;
import php.runtime.env.Environment;
import php.runtime.env.handler.ProgramShutdownHandler;
import php.runtime.exceptions.support.ErrorType;
import php.runtime.ext.core.*;
import php.runtime.ext.core.classes.*;
import php.runtime.ext.core.classes.format.WrapProcessor;
import php.runtime.ext.core.classes.lib.*;
import php.runtime.ext.core.classes.lib.legacy.OldBinUtils;
import php.runtime.ext.core.classes.lib.legacy.OldItemsUtils;
import php.runtime.ext.core.classes.lib.legacy.OldMirrorUtils;
import php.runtime.ext.core.classes.lib.legacy.OldNumUtils;
import php.runtime.ext.core.classes.net.WrapServerSocket;
import php.runtime.ext.core.classes.net.WrapSocket;
import php.runtime.ext.core.classes.net.WrapSocketException;
import php.runtime.ext.core.classes.stream.*;
import php.runtime.ext.core.classes.time.*;
import php.runtime.ext.core.classes.util.*;
import php.runtime.ext.core.reflection.*;
import php.runtime.ext.support.Extension;
import php.runtime.ext.support.compile.CompileConstant;
import php.runtime.loader.sourcemap.SourceMap;
import java.io.IOException;
import java.net.SocketException;
import java.util.TimerTask;
import java.util.concurrent.TimeoutException;
public class CoreExtension extends Extension implements ProgramShutdownHandler {
public final static String NAMESPACE = "php\\";
@Override
public String getName() {
return "Core";
}
@Override
public String[] getPackageNames() {
return new String[] { "std", "core" };
}
@Override
public Status getStatus() {
return Status.STABLE;
}
@Override
public void onRegister(CompileScope scope) {
scope.registerProgramShutdownHandler(this);
registerFunctions(new LangFunctions());
registerConstants(new LangConstants());
registerConstants(new InfoConstants());
registerFunctions(new InfoFunctions());
registerConstants(new MathConstants());
registerFunctions(new MathFunctions());
registerFunctions(new StringFunctions());
registerConstants(new ArrayConstants());
registerFunctions(new ArrayFunctions());
registerConstants(new OutputConstants());
registerFunctions(new OutputFunctions());
// T_ERROR
for (ErrorType el : ErrorType.values())
constants.put(el.name(), new CompileConstant(el.name(), el.value));
registerJavaException(scope, WrapJavaExceptions.IllegalArgumentException.class, IllegalArgumentException.class);
registerJavaException(scope, WrapJavaExceptions.IllegalStateException.class, IllegalStateException.class);
registerJavaException(scope, WrapJavaExceptions.NumberFormatException.class, NumberFormatException.class);
registerJavaException(scope, WrapJavaExceptions.InterruptedException.class, InterruptedException.class);
registerClass(scope, CharUtils.class);
registerClass(scope, StrUtils.class);
registerClass(scope, BinUtils.class);
registerClass(scope, NumUtils.class);
registerClass(scope, ItemsUtils.class);
registerClass(scope, MirrorUtils.class);
registerClass(scope, FsUtils.class);
registerClass(scope, OldBinUtils.class);
registerClass(scope, OldItemsUtils.class);
registerClass(scope, OldNumUtils.class);
registerClass(scope, OldMirrorUtils.class);
registerClass(scope, SharedUtils.SharedMemory.class);
registerClass(scope, SharedUtils.SharedCollection.class);
registerClass(scope, SharedUtils.SharedValue.class);
registerClass(scope, SharedUtils.SharedStack.class);
registerClass(scope, SharedUtils.SharedQueue.class);
registerClass(scope, SharedUtils.SharedMap.class);
registerClass(scope, SharedUtils.class);
registerClass(scope, WrapPackageLoader.class);
registerClass(scope, WrapClassLoader.class);
registerClass(scope, WrapClassLoader.WrapLauncherClassLoader.class);
registerClass(scope, WrapLocale.class);
registerClass(scope, WrapScanner.class);
registerClass(scope, WrapFlow.class);
registerClass(scope, WrapConfiguration.class);
registerClass(scope, WrapRegex.class);
registerJavaExceptionForContext(scope, WrapRegex.RegexException.class, WrapRegex.class);
registerClass(scope, WrapTimeZone.class);
registerClass(scope, WrapTimeFormat.class);
registerClass(scope, WrapTime.class);
registerWrapperClass(scope, TimerTask.class, WrapTimer.class);
registerClass(scope, WrapInvoker.class);
registerClass(scope, WrapModule.class);
registerClass(scope, WrapPackage.class);
registerWrapperClass(scope, SourceMap.class, WrapSourceMap.class);
registerClass(scope, WrapEnvironment.class);
registerClass(scope, WrapEnvironmentVariables.class);
registerClass(scope, WrapThreadGroup.class);
registerClass(scope, WrapThread.class);
registerClass(scope, WrapSystem.class);
registerClass(scope, Reflector.class);
registerClass(scope, Reflection.class);
registerClass(scope, ReflectionException.class);
registerClass(scope, ReflectionExtension.class);
registerClass(scope, ReflectionFunctionAbstract.class);
registerClass(scope, ReflectionFunction.class);
registerClass(scope, ReflectionParameter.class);
registerClass(scope, ReflectionProperty.class);
registerClass(scope, ReflectionMethod.class);
registerClass(scope, ReflectionClass.class);
registerClass(scope, ReflectionObject.class);
registerClass(scope, WrapJavaExceptions.NotImplementedException.class);
// stream
registerJavaException(scope, WrapIOException.class, IOException.class);
registerClass(scope, FileObject.class);
registerClass(scope, Stream.class);
registerClass(scope, FileStream.class);
registerClass(scope, MiscStream.class);
registerClass(scope, MemoryMiscStream.class);
registerClass(scope, ResourceStream.class);
// net
registerClass(scope, WrapSocket.class);
registerClass(scope, WrapServerSocket.class);
registerJavaException(scope, WrapSocketException.class, SocketException.class);
registerClass(scope, WrapThreadPool.class);
registerClass(scope, WrapFuture.class);
registerJavaException(scope, WrapJavaExceptions.TimeoutException.class, TimeoutException.class);
registerClass(scope, WrapProcessor.class);
registerClass(scope, WrapProcessor.ProcessorException.class);
registerClass(scope, WrapProcess.class);
}
@Override
public void onLoad(Environment env) {
Stream.initEnvironment(env);
}
@Override
public void onShutdown(CompileScope scope, Environment env) {
WrapTimer.cancelAll();
}
}