package php.runtime.ext.core.classes;
import php.runtime.Memory;
import php.runtime.annotation.Reflection.Arg;
import php.runtime.annotation.Reflection.Name;
import php.runtime.annotation.Reflection.Signature;
import php.runtime.common.HintType;
import php.runtime.env.Environment;
import php.runtime.lang.BaseWrapper;
import php.runtime.lang.ForeachIterator;
import php.runtime.loader.sourcemap.SourceMap;
import php.runtime.memory.ArrayMemory;
import php.runtime.memory.LongMemory;
import php.runtime.memory.StringMemory;
import php.runtime.reflection.ClassEntity;
import java.util.Map;
@Name("php\\lang\\SourceMap")
public class WrapSourceMap extends BaseWrapper<SourceMap> {
public WrapSourceMap(Environment env, ClassEntity clazz) {
super(env, clazz);
}
public WrapSourceMap(Environment env, SourceMap wrappedObject) {
super(env, wrappedObject);
}
@Signature(@Arg("moduleName"))
public Memory __construct(Environment env, Memory... args) {
__wrappedObject = new SourceMap(args[0].toString());
return Memory.NULL;
}
@Signature
public Memory getModuleName(Environment env, Memory... args) {
return StringMemory.valueOf(getWrappedObject().getModuleName());
}
@Signature({
@Arg("compiledLine"),
})
public Memory getSourceLine(Environment env, Memory... args) {
int sourceLine = getWrappedObject().getSourceLine(args[0].toInteger());
return LongMemory.valueOf(sourceLine);
}
@Signature({
@Arg("sourceLine"),
})
public Memory getCompiledLine(Environment env, Memory... args) {
int sourceLine = getWrappedObject().getCompiledLine(args[0].toInteger());
return LongMemory.valueOf(sourceLine);
}
@Signature({
@Arg(value = "inserts", type = HintType.ARRAY),
@Arg("allCountLines")
})
public Memory insertLines(Environment env, Memory... args) {
ArrayMemory _inserts = args[0].toValue(ArrayMemory.class);
int[][] inserts = new int[_inserts.size()][];
ForeachIterator iterator = _inserts.getNewIterator(env);
int i = 0;
while (iterator.next()) {
Memory value = iterator.getValue();
inserts[i++] = new int[] {value.valueOfIndex(0).toInteger(), value.valueOfIndex(1).toInteger()};
}
getWrappedObject().insertLines(inserts, args[1].toInteger());
return Memory.NULL;
}
@Signature({
@Arg("sourceLine"),
@Arg("compiledLine")
})
public Memory addLine(Environment env, Memory... args) {
getWrappedObject().addLine(args[0].toInteger(), args[1].toInteger());
return Memory.NULL;
}
@Signature
public Memory clear(Environment env, Memory... args) {
getWrappedObject().clear();
return Memory.NULL;
}
@Signature
public Memory toArray(Environment env, Memory... args) {
Map<Integer, SourceMap.Item> itemsByLine = getWrappedObject().getItemsByCompiled();
ArrayMemory r = new ArrayMemory();
for (Map.Entry<Integer, SourceMap.Item> entry : itemsByLine.entrySet()) {
r.refOfIndex(entry.getKey()).assign(entry.getValue().sourceLine);
}
return r.toConstant();
}
}