package org.develnext.jphp.debug.impl.command;
import org.develnext.jphp.debug.impl.DebugTick;
import org.develnext.jphp.debug.impl.Debugger;
import org.develnext.jphp.debug.impl.command.support.CommandArguments;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import php.runtime.Memory;
import php.runtime.memory.ArrayMemory;
import php.runtime.memory.DoubleMemory;
import php.runtime.memory.LongMemory;
import php.runtime.memory.StringMemory;
public class PropertySetCommand extends AbstractCommand {
@Override
public String getName() {
return "property_set";
}
@Override
public void run(Debugger context, CommandArguments args, Document result) {
DebugTick tick = context.getRegisteredTick();
Element response = createResponse(args, result);
response.setAttribute("success", "1");
String varName = args.get("n");
if (varName.startsWith("$")) {
varName = varName.substring(1);
}
Memory data = EvalCommand.getValue(context, args.getContent());
ArrayMemory locals = tick.getLocals();
if (!locals.containsKey(varName) || data == null) {
response.setAttribute("success", "0");
return;
}
Memory memory = locals.refOfIndex(varName);
Memory.Type type = null;
if (args.containsKey("t")) {
switch (args.get("t")) {
case "boolean":
case "bool":
type = Memory.Type.BOOL;
break;
case "int":
case "integer":
type = Memory.Type.INT;
break;
case "float":
case "double":
type = Memory.Type.DOUBLE;
break;
case "string":
type = Memory.Type.STRING;
break;
case "array":
type = Memory.Type.ARRAY;
break;
case "null":
type = Memory.Type.NULL;
break;
}
}
if (type != null) {
switch (type) {
case BOOL:
data = data.toBoolean() ? Memory.TRUE : Memory.FALSE;
break;
case INT:
data = LongMemory.valueOf(data.toLong());
break;
case DOUBLE:
data = DoubleMemory.valueOf(data.toDouble());
break;
case NULL:
data = Memory.NULL;
break;
case ARRAY:
data = new ArrayMemory();
break;
}
}
memory.assign(data);
}
}