package php.runtime.memory.helper;
import php.runtime.Memory;
import php.runtime.common.Messages;
import php.runtime.env.Environment;
import php.runtime.env.TraceInfo;
import php.runtime.exceptions.support.ErrorType;
import php.runtime.memory.ReferenceMemory;
import php.runtime.reflection.ClassEntity;
import php.runtime.reflection.ConstantEntity;
public class ClassConstantMemory extends ReferenceMemory {
private final String name;
private final String lowerName;
private final String className;
private final String classLowerName;
public ClassConstantMemory(String className, String name){
super();
this.className = className;
this.classLowerName = className.toLowerCase();
this.name = name;
this.lowerName = name.toLowerCase();
}
@Override
public Memory toImmutable(Environment env, TraceInfo trace) {
ClassEntity classEntity = env.fetchClass(className, classLowerName, true);
if (classEntity == null) {
env.error(trace, ErrorType.E_ERROR, Messages.ERR_CLASS_NOT_FOUND, className);
return NULL;
}
ConstantEntity entity = classEntity.findConstant(name);
if (entity == null){
env.error(trace, ErrorType.E_ERROR, Messages.ERR_UNDEFINED_CLASS_CONSTANT, className + "::" + name);
return NULL;
}
return entity.getValue();
}
public String getName() {
return name;
}
public String getClassName() {
return className;
}
@Override
public Memory toValue() {
return this;
}
}