#ifndef _REGEXP_OBJECT_H_
#define _REGEXP_OBJECT_H_
#include "internal.h"
#include "function_object.h"
#include "regexp.h"
namespace KJS {
class ExecState;
class RegExpPrototypeImp : public ObjectImp {
public:
RegExpPrototypeImp(ExecState *exec,
ObjectPrototypeImp *objProto,
FunctionPrototypeImp *funcProto);
virtual const ClassInfo *classInfo() const { return &info; }
static const ClassInfo info;
};
class RegExpProtoFuncImp : public InternalFunctionImp {
public:
RegExpProtoFuncImp(ExecState *exec,
FunctionPrototypeImp *funcProto, int i, int len);
virtual bool implementsCall() const;
virtual Value call(ExecState *exec, Object &thisObj, const List &args);
enum { Exec, Test, ToString };
private:
int id;
};
class RegExpImp : public ObjectImp {
public:
RegExpImp(RegExpPrototypeImp *regexpProto);
~RegExpImp();
void setRegExp(RegExp *r) { reg = r; }
RegExp* regExp() const { return reg; }
virtual const ClassInfo *classInfo() const { return &info; }
static const ClassInfo info;
private:
RegExp *reg;
};
class RegExpObjectImp : public InternalFunctionImp {
public:
RegExpObjectImp(ExecState *exec,
FunctionPrototypeImp *funcProto,
RegExpPrototypeImp *regProto);
virtual ~RegExpObjectImp();
virtual bool implementsConstruct() const;
virtual Object construct(ExecState *exec, const List &args);
virtual bool implementsCall() const;
virtual Value call(ExecState *exec, Object &thisObj, const List &args);
Value get(ExecState *exec, const Identifier &p) const;
int ** registerRegexp( const RegExp* re, const UString& s );
void setSubPatterns(int num) { lastNrSubPatterns = num; }
Object arrayOfMatches(ExecState *exec, const UString &result) const;
private:
UString lastString;
int *lastOvector;
uint lastNrSubPatterns;
};
};
#endif