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.develnext.jphp.debug.impl.command.support.ContextValueProvider; import org.w3c.dom.Document; import org.w3c.dom.Element; import php.runtime.Memory; import php.runtime.env.CompileScope; import php.runtime.env.Environment; import php.runtime.ext.core.LangFunctions; public class EvalCommand extends AbstractCommand { @Override public String getName() { return "eval"; } public static Memory getValue(Debugger context, String value) { DebugTick tick = context.getRegisteredTick(); Environment environment = new Environment(new CompileScope(tick.getEnvironment().getScope())); try { return LangFunctions.eval(environment, tick.getTrace(), tick.getLocals(), "return " + value + ";"); } catch (Throwable throwable) { return null; } } @Override public void run(Debugger context, CommandArguments args, Document result) { String content = args.getContent(); Element response = createResponse(args, result); response.setAttribute("success", "1"); ContextValueProvider valueProvider = new ContextValueProvider(context, result); valueProvider.setMaxData(0); Memory value = getValue(context, content); if (value == null) { response.setAttribute("success", "0"); } else { response.appendChild(valueProvider.getProperty(null, value)); } } }