package php.runtime.invoke;
import php.runtime.Memory;
import php.runtime.env.Environment;
import php.runtime.env.TraceInfo;
import php.runtime.lang.IObject;
import php.runtime.memory.ArrayMemory;
import php.runtime.memory.StringMemory;
import php.runtime.reflection.MethodEntity;
class MagicDynamicMethodInvoker extends DynamicMethodInvoker {
protected final Memory methodName;
public MagicDynamicMethodInvoker(Environment env, TraceInfo trace,
IObject object, MethodEntity method, String methodName) {
super(env, trace, object, method);
this.methodName = new StringMemory(methodName);
}
@Override
public void pushCall(TraceInfo trace, Memory[] args) {
env.pushCall(trace, object, args, methodName.toString(), method.getClazz().getName(), object.getReflection().getName());
env.pushCall(
trace, object,
new Memory[]{methodName, new ArrayMemory(true, args)},
method.getName(), method.getClazz().getName(), object.getReflection().getName()
);
}
@Override
public void popCall() {
env.popCall();
env.popCall();
}
@Override
protected Memory invoke(Memory... args) throws Throwable {
return super.invoke(methodName, new ArrayMemory(false, args));
}
}