X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/2d39b0e377c0896910ee49ae70082ba665faf986..ed1e77d3adeb83d26fd1dfb16dd84cabdcefd250:/runtime/RegExpObject.h diff --git a/runtime/RegExpObject.h b/runtime/RegExpObject.h index 2b49ba2..a1f571d 100644 --- a/runtime/RegExpObject.h +++ b/runtime/RegExpObject.h @@ -26,82 +26,82 @@ namespace JSC { - class RegExpObject : public JSNonFinalObject { - public: - typedef JSNonFinalObject Base; - - static RegExpObject* create(VM& vm, Structure* structure, RegExp* regExp) - { - RegExpObject* object = new (NotNull, allocateCell(vm.heap)) RegExpObject(vm, structure, regExp); - object->finishCreation(vm); - return object; - } - - void setRegExp(VM& vm, RegExp* r) { m_regExp.set(vm, this, r); } - RegExp* regExp() const { return m_regExp.get(); } - - void setLastIndex(ExecState* exec, size_t lastIndex) - { +class RegExpObject : public JSNonFinalObject { +public: + typedef JSNonFinalObject Base; + static const unsigned StructureFlags = Base::StructureFlags | OverridesGetOwnPropertySlot | OverridesGetPropertyNames; + + static RegExpObject* create(VM& vm, Structure* structure, RegExp* regExp) + { + RegExpObject* object = new (NotNull, allocateCell(vm.heap)) RegExpObject(vm, structure, regExp); + object->finishCreation(vm); + return object; + } + + void setRegExp(VM& vm, RegExp* r) { m_regExp.set(vm, this, r); } + RegExp* regExp() const { return m_regExp.get(); } + + void setLastIndex(ExecState* exec, size_t lastIndex) + { + m_lastIndex.setWithoutWriteBarrier(jsNumber(lastIndex)); + if (LIKELY(m_lastIndexIsWritable)) m_lastIndex.setWithoutWriteBarrier(jsNumber(lastIndex)); - if (LIKELY(m_lastIndexIsWritable)) - m_lastIndex.setWithoutWriteBarrier(jsNumber(lastIndex)); - else - throwTypeError(exec, StrictModeReadonlyPropertyWriteError); - } - void setLastIndex(ExecState* exec, JSValue lastIndex, bool shouldThrow) - { - if (LIKELY(m_lastIndexIsWritable)) - m_lastIndex.set(exec->vm(), this, lastIndex); - else if (shouldThrow) - throwTypeError(exec, StrictModeReadonlyPropertyWriteError); - } - JSValue getLastIndex() const - { - return m_lastIndex.get(); - } - - bool test(ExecState* exec, JSString* string) { return match(exec, string); } - JSValue exec(ExecState*, JSString*); - - static bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&); - static void put(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&); - - DECLARE_EXPORT_INFO; - - static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype) - { - return Structure::create(vm, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), info()); - } - - protected: - JS_EXPORT_PRIVATE RegExpObject(VM&, Structure*, RegExp*); - JS_EXPORT_PRIVATE void finishCreation(VM&); - - static const unsigned StructureFlags = OverridesVisitChildren | OverridesGetOwnPropertySlot | Base::StructureFlags; - - static void visitChildren(JSCell*, SlotVisitor&); - - JS_EXPORT_PRIVATE static bool deleteProperty(JSCell*, ExecState*, PropertyName); - JS_EXPORT_PRIVATE static void getOwnNonIndexPropertyNames(JSObject*, ExecState*, PropertyNameArray&, EnumerationMode); - JS_EXPORT_PRIVATE static void getPropertyNames(JSObject*, ExecState*, PropertyNameArray&, EnumerationMode); - JS_EXPORT_PRIVATE static bool defineOwnProperty(JSObject*, ExecState*, PropertyName, const PropertyDescriptor&, bool shouldThrow); - - private: - MatchResult match(ExecState*, JSString*); - - WriteBarrier m_regExp; - WriteBarrier m_lastIndex; - bool m_lastIndexIsWritable; - }; - - RegExpObject* asRegExpObject(JSValue); - - inline RegExpObject* asRegExpObject(JSValue value) + else + throwTypeError(exec, StrictModeReadonlyPropertyWriteError); + } + void setLastIndex(ExecState* exec, JSValue lastIndex, bool shouldThrow) + { + if (LIKELY(m_lastIndexIsWritable)) + m_lastIndex.set(exec->vm(), this, lastIndex); + else if (shouldThrow) + throwTypeError(exec, StrictModeReadonlyPropertyWriteError); + } + JSValue getLastIndex() const + { + return m_lastIndex.get(); + } + + bool test(ExecState* exec, JSString* string) { return match(exec, string); } + JSValue exec(ExecState*, JSString*); + + static bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&); + static void put(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&); + + DECLARE_EXPORT_INFO; + + static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype) { - ASSERT(asObject(value)->inherits(RegExpObject::info())); - return static_cast(asObject(value)); + return Structure::create(vm, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), info()); } +protected: + JS_EXPORT_PRIVATE RegExpObject(VM&, Structure*, RegExp*); + JS_EXPORT_PRIVATE void finishCreation(VM&); + + static void visitChildren(JSCell*, SlotVisitor&); + + JS_EXPORT_PRIVATE static bool deleteProperty(JSCell*, ExecState*, PropertyName); + JS_EXPORT_PRIVATE static void getOwnNonIndexPropertyNames(JSObject*, ExecState*, PropertyNameArray&, EnumerationMode); + JS_EXPORT_PRIVATE static void getPropertyNames(JSObject*, ExecState*, PropertyNameArray&, EnumerationMode); + JS_EXPORT_PRIVATE static void getGenericPropertyNames(JSObject*, ExecState*, PropertyNameArray&, EnumerationMode); + JS_EXPORT_PRIVATE static bool defineOwnProperty(JSObject*, ExecState*, PropertyName, const PropertyDescriptor&, bool shouldThrow); + +private: + MatchResult match(ExecState*, JSString*); + + WriteBarrier m_regExp; + WriteBarrier m_lastIndex; + bool m_lastIndexIsWritable; +}; + +RegExpObject* asRegExpObject(JSValue); + +inline RegExpObject* asRegExpObject(JSValue value) +{ + ASSERT(asObject(value)->inherits(RegExpObject::info())); + return static_cast(asObject(value)); +} + } // namespace JSC #endif // RegExpObject_h