Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (233620 => 233621)
--- trunk/Source/_javascript_Core/ChangeLog 2018-07-07 20:29:01 UTC (rev 233620)
+++ trunk/Source/_javascript_Core/ChangeLog 2018-07-07 20:29:31 UTC (rev 233621)
@@ -1,5 +1,20 @@
2018-07-07 Yusuke Suzuki <[email protected]>
+ [JSC] Optimize layout of RegExp to reduce padding
+ https://bugs.webkit.org/show_bug.cgi?id=187438
+
+ Reviewed by Mark Lam.
+
+ Reduce the size of RegExp from 168 to 144.
+
+ * runtime/RegExp.cpp:
+ (JSC::RegExp::RegExp):
+ * runtime/RegExp.h:
+ * runtime/RegExpKey.h:
+ * yarr/YarrErrorCode.h:
+
+2018-07-07 Yusuke Suzuki <[email protected]>
+
[JSC] Optimize layout of ValueProfile to reduce padding
https://bugs.webkit.org/show_bug.cgi?id=187439
Modified: trunk/Source/_javascript_Core/runtime/RegExp.cpp (233620 => 233621)
--- trunk/Source/_javascript_Core/runtime/RegExp.cpp 2018-07-07 20:29:01 UTC (rev 233620)
+++ trunk/Source/_javascript_Core/runtime/RegExp.cpp 2018-07-07 20:29:31 UTC (rev 233621)
@@ -211,7 +211,6 @@
RegExp::RegExp(VM& vm, const String& patternString, RegExpFlags flags)
: JSCell(vm, vm.regExpStructure.get())
- , m_state(NotCompiled)
, m_patternString(patternString)
, m_flags(flags)
{
Modified: trunk/Source/_javascript_Core/runtime/RegExp.h (233620 => 233621)
--- trunk/Source/_javascript_Core/runtime/RegExp.h 2018-07-07 20:29:01 UTC (rev 233620)
+++ trunk/Source/_javascript_Core/runtime/RegExp.h 2018-07-07 20:29:31 UTC (rev 233621)
@@ -132,7 +132,7 @@
static RegExp* createWithoutCaching(VM&, const String&, RegExpFlags);
- enum RegExpState {
+ enum RegExpState : uint8_t {
ParseError,
JITCode,
ByteCode,
@@ -151,13 +151,15 @@
void matchCompareWithInterpreter(const String&, int startOffset, int* offsetVector, int jitResult);
#endif
+ String m_patternString;
RegExpState m_state { NotCompiled };
- String m_patternString;
RegExpFlags m_flags;
+ ConcurrentJSLock m_lock;
Yarr::ErrorCode m_constructionErrorCode { Yarr::ErrorCode::NoError };
unsigned m_numSubpatterns { 0 };
Vector<String> m_captureGroupNames;
HashMap<String, unsigned> m_namedGroupToParenIndex;
+ std::unique_ptr<Yarr::BytecodePattern> m_regExpBytecode;
#if ENABLE(REGEXP_TRACING)
double m_rtMatchOnlyTotalSubjectStringLen { 0.0 };
double m_rtMatchTotalSubjectStringLen { 0.0 };
@@ -166,12 +168,10 @@
unsigned m_rtMatchCallCount { 0 };
unsigned m_rtMatchFoundCount { 0 };
#endif
- ConcurrentJSLock m_lock;
#if ENABLE(YARR_JIT)
Yarr::YarrCodeBlock m_regExpJITCode;
#endif
- std::unique_ptr<Yarr::BytecodePattern> m_regExpBytecode;
};
} // namespace JSC
Modified: trunk/Source/_javascript_Core/runtime/RegExpKey.h (233620 => 233621)
--- trunk/Source/_javascript_Core/runtime/RegExpKey.h 2018-07-07 20:29:01 UTC (rev 233620)
+++ trunk/Source/_javascript_Core/runtime/RegExpKey.h 2018-07-07 20:29:31 UTC (rev 233621)
@@ -32,7 +32,7 @@
namespace JSC {
-enum RegExpFlags {
+enum RegExpFlags : int8_t {
NoFlags = 0,
FlagGlobal = 1,
FlagIgnoreCase = 2,
Modified: trunk/Source/_javascript_Core/yarr/YarrErrorCode.h (233620 => 233621)
--- trunk/Source/_javascript_Core/yarr/YarrErrorCode.h 2018-07-07 20:29:01 UTC (rev 233620)
+++ trunk/Source/_javascript_Core/yarr/YarrErrorCode.h 2018-07-07 20:29:31 UTC (rev 233621)
@@ -32,7 +32,7 @@
namespace Yarr {
-enum class ErrorCode : unsigned {
+enum class ErrorCode : uint8_t {
NoError = 0,
PatternTooLarge,
QuantifierOutOfOrder,