package php.runtime.lang.exception;
import php.runtime.Memory;
import php.runtime.annotation.Reflection;
import php.runtime.annotation.Reflection.BaseType;
import php.runtime.annotation.Reflection.Name;
import php.runtime.annotation.Reflection.Signature;
import php.runtime.common.HintType;
import php.runtime.common.Modifier;
import php.runtime.env.Environment;
import php.runtime.exceptions.support.ErrorType;
import php.runtime.lang.BaseException;
import php.runtime.lang.exception.BaseBaseException;
import php.runtime.memory.LongMemory;
import php.runtime.reflection.ClassEntity;
@BaseType
@Name("Error")
@Signature(root = true, value =
{
@Reflection.Arg(value = "message", modifier = Modifier.PROTECTED, type = HintType.STRING),
@Reflection.Arg(value = "code", modifier = Modifier.PROTECTED, type = HintType.INT),
@Reflection.Arg(value = "previous", modifier = Modifier.PROTECTED, type = HintType.OBJECT),
@Reflection.Arg(value = "trace", modifier = Modifier.PROTECTED, type = HintType.ARRAY),
@Reflection.Arg(value = "file", modifier = Modifier.PROTECTED, type = HintType.STRING),
@Reflection.Arg(value = "line", modifier = Modifier.PROTECTED, type = HintType.INT),
@Reflection.Arg(value = "position", modifier = Modifier.PROTECTED, type = HintType.INT)
}
)
public class BaseError extends BaseBaseException implements BaseThrowable {
protected ErrorType errorType = ErrorType.E_CORE_ERROR;
public BaseError(Environment env) {
super(env);
}
public BaseError(Environment env, ErrorType errorType) {
super(env);
this.errorType = errorType;
}
public BaseError(Environment env, ClassEntity clazz) {
super(env, clazz);
errorType = ErrorType.E_ERROR;
}
@Signature
public Memory getErrorType() {
return LongMemory.valueOf(errorType.value);
}
@Signature({
@Reflection.Arg(value = "message", optional = @Reflection.Optional(value = "", type = HintType.STRING)),
@Reflection.Arg(value = "code", optional = @Reflection.Optional(value = "0", type = HintType.INT)),
@Reflection.Arg(value = "previous", nativeType = BaseThrowable.class, optional = @Reflection.Optional(value = "NULL"))
})
public Memory __construct(Environment env, Memory... args) {
clazz.refOfProperty(props, "message").assign(args[0].toString());
if (args.length > 1)
clazz.refOfProperty(props, "code").assign(args[1].toLong());
if (args.length > 2)
clazz.refOfProperty(props, "previous").assign(args[2]);
return Memory.NULL;
}
@Override
@Signature
final public Memory getMessage(Environment env, Memory... args) {
return super.getMessage(env, args);
}
@Override
@Signature
final public Memory getCode(Environment env, Memory... args) {
return super.getCode(env, args);
}
@Override
@Signature
final public Memory getLine(Environment env, Memory... args) {
return super.getLine(env, args);
}
@Override
@Signature
final public Memory getPosition(Environment env, Memory... args) {
return super.getPosition(env, args);
}
@Override
@Signature
final public Memory getFile(Environment env, Memory... args) {
return super.getFile(env, args);
}
@Override
@Signature
final public Memory getTrace(Environment env, Memory... args) {
return super.getTrace(env, args);
}
@Override
@Signature
final public Memory getPrevious(Environment env, Memory... args) {
return super.getPrevious(env, args);
}
@Override
@Signature
public Memory __toString(Environment env, Memory... args) {
return super.__toString(env, args);
}
@Override
@Signature
final public Memory getTraceAsString(Environment env, Memory... args) {
return super.getTraceAsString(env, args);
}
@Signature
private Memory __clone(Environment env, Memory... args) {
return Memory.NULL;
}
}