#ifndef METHODRETURNVALUEBASE_H_
#define METHODRETURNVALUEBASE_H_


#include "smoke.h"
#include "smokephp.h"
#include "marshall.h"

class MethodReturnValueBase : public Marshall
{
public:
	MethodReturnValueBase(Smoke *smoke, const Smoke::Index meth, const Smoke::Stack stack, zval* &retval);
	virtual ~MethodReturnValueBase();
	const Smoke::Method &method();
	Smoke::StackItem &item();
	Smoke *smoke();
	SmokeType type();
	void next();
	bool cleanup();
	void unsupported();
	zval* var();
	bool doAlloc() { return true; }

protected:
	Smoke *_smoke;
	Smoke::Index _method;
	Smoke::Stack _stack;
	SmokeType _st;
	zval* &_retval;
};

#endif /*METHODRETURNVALUEBASE_H_*/
