diff --git a/Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp b/Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp
index 4ecac8e..8b15846 100644
--- a/Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp
+++ b/Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp
@@ -102,10 +102,10 @@
 int testExecutionTimeLimit()
 {
     static const TierOptions tierOptionsList[] = {
-        { "LLINT",    0,   "--enableConcurrentJIT=false --useLLInt=true --useJIT=false" },
-        { "Baseline", 0,   "--enableConcurrentJIT=false --useLLInt=true --useJIT=true --useDFGJIT=false" },
-        { "DFG",      0,   "--enableConcurrentJIT=false --useLLInt=true --useJIT=true --useDFGJIT=true --useFTLJIT=false" },
-        { "FTL",      200, "--enableConcurrentJIT=false --useLLInt=true --useJIT=true --useDFGJIT=true --useFTLJIT=true" },
+        { "LLINT",    0,   "--useConcurrentJIT=false --useLLInt=true --useJIT=false" },
+        { "Baseline", 0,   "--useConcurrentJIT=false --useLLInt=true --useJIT=true --useDFGJIT=false" },
+        { "DFG",      0,   "--useConcurrentJIT=false --useLLInt=true --useJIT=true --useDFGJIT=true --useFTLJIT=false" },
+        { "FTL",      200, "--useConcurrentJIT=false --useLLInt=true --useJIT=true --useDFGJIT=true --useFTLJIT=true" },
     };
     
     bool failed = false;
diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog
index b367456..0e8232c 100644
--- a/Source/JavaScriptCore/ChangeLog
+++ b/Source/JavaScriptCore/ChangeLog
@@ -1,5 +1,145 @@
 2015-10-14  Mark Lam  <mark.lam@apple.com>
 
+        Rename some JSC option names to be more uniform.
+        https://bugs.webkit.org/show_bug.cgi?id=150127
+
+        Reviewed by Geoffrey Garen.
+
+        Renaming JSC_enableXXX options to JSC_useXXX, and JSC_showXXX options to JSC_dumpXXX.
+        Also will renaming a few other miscellaneous to options, to abide by this scheme.
+
+        Also renaming some functions to match the option names where relevant.
+
+        * API/tests/ExecutionTimeLimitTest.cpp:
+        (testExecutionTimeLimit):
+        * assembler/AbstractMacroAssembler.h:
+        (JSC::optimizeForARMv7IDIVSupported):
+        (JSC::optimizeForARM64):
+        (JSC::optimizeForX86):
+        * assembler/LinkBuffer.cpp:
+        (JSC::shouldDumpDisassemblyFor):
+        (JSC::LinkBuffer::finalizeCodeWithoutDisassembly):
+        (JSC::shouldShowDisassemblyFor): Deleted.
+        * assembler/LinkBuffer.h:
+        * bytecode/CodeBlock.cpp:
+        (JSC::CodeBlock::jettison):
+        * bytecode/CodeBlockJettisoningWatchpoint.cpp:
+        (JSC::CodeBlockJettisoningWatchpoint::fireInternal):
+        * bytecompiler/BytecodeGenerator.cpp:
+        (JSC::BytecodeGenerator::BytecodeGenerator):
+        * dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:
+        (JSC::DFG::AdaptiveInferredPropertyValueWatchpoint::fire):
+        * dfg/DFGAdaptiveStructureWatchpoint.cpp:
+        (JSC::DFG::AdaptiveStructureWatchpoint::fireInternal):
+        * dfg/DFGByteCodeParser.cpp:
+        (JSC::DFG::ByteCodeParser::handleInlining):
+        (JSC::DFG::ByteCodeParser::handleGetById):
+        (JSC::DFG::ByteCodeParser::handlePutById):
+        (JSC::DFG::ByteCodeParser::parse):
+        * dfg/DFGCommon.h:
+        (JSC::DFG::leastUpperBound):
+        (JSC::DFG::shouldDumpDisassembly):
+        (JSC::DFG::shouldShowDisassembly): Deleted.
+        * dfg/DFGDriver.cpp:
+        (JSC::DFG::compileImpl):
+        * dfg/DFGJITCompiler.cpp:
+        (JSC::DFG::JITCompiler::JITCompiler):
+        (JSC::DFG::JITCompiler::disassemble):
+        * dfg/DFGJumpReplacement.cpp:
+        (JSC::DFG::JumpReplacement::fire):
+        * dfg/DFGOSREntry.cpp:
+        (JSC::DFG::prepareOSREntry):
+        * dfg/DFGOSRExitCompiler.cpp:
+        * dfg/DFGOSRExitFuzz.h:
+        (JSC::DFG::doOSRExitFuzzing):
+        * dfg/DFGPlan.cpp:
+        (JSC::DFG::Plan::compileInThreadImpl):
+        * dfg/DFGSpeculativeJIT.cpp:
+        (JSC::DFG::SpeculativeJIT::compileArithSqrt):
+        * dfg/DFGTierUpCheckInjectionPhase.cpp:
+        (JSC::DFG::TierUpCheckInjectionPhase::run):
+        * ftl/FTLCompile.cpp:
+        (JSC::FTL::mmAllocateDataSection):
+        * ftl/FTLJITCode.cpp:
+        (JSC::FTL::JITCode::~JITCode):
+        * ftl/FTLLowerDFGToLLVM.cpp:
+        (JSC::FTL::DFG::LowerDFGToLLVM::callCheck):
+        * ftl/FTLOSRExitCompiler.cpp:
+        (JSC::FTL::compileStub):
+        (JSC::FTL::compileFTLOSRExit):
+        * ftl/FTLState.h:
+        (JSC::FTL::verboseCompilationEnabled):
+        (JSC::FTL::shouldDumpDisassembly):
+        (JSC::FTL::shouldShowDisassembly): Deleted.
+        * heap/Heap.cpp:
+        (JSC::Heap::addToRememberedSet):
+        (JSC::Heap::didFinishCollection):
+        (JSC::Heap::shouldDoFullCollection):
+        * heap/Heap.h:
+        (JSC::Heap::isDeferred):
+        (JSC::Heap::structureIDTable):
+        * heap/HeapStatistics.cpp:
+        (JSC::StorageStatistics::storageCapacity):
+        (JSC::HeapStatistics::dumpObjectStatistics):
+        (JSC::HeapStatistics::showObjectStatistics): Deleted.
+        * heap/HeapStatistics.h:
+        * interpreter/StackVisitor.cpp:
+        (JSC::StackVisitor::Frame::createArguments):
+        * jit/AssemblyHelpers.cpp:
+        (JSC::AssemblyHelpers::callExceptionFuzz):
+        * jit/ExecutableAllocationFuzz.cpp:
+        (JSC::doExecutableAllocationFuzzing):
+        * jit/ExecutableAllocationFuzz.h:
+        (JSC::doExecutableAllocationFuzzingIfEnabled):
+        * jit/JIT.cpp:
+        (JSC::JIT::privateCompile):
+        * jit/JITCode.cpp:
+        (JSC::JITCodeWithCodeRef::~JITCodeWithCodeRef):
+        * jit/PolymorphicCallStubRoutine.cpp:
+        (JSC::PolymorphicCallNode::unlink):
+        (JSC::PolymorphicCallNode::clearCallLinkInfo):
+        (JSC::PolymorphicCallStubRoutine::PolymorphicCallStubRoutine):
+        * jit/Repatch.cpp:
+        (JSC::linkFor):
+        (JSC::unlinkFor):
+        (JSC::linkVirtualFor):
+        * jsc.cpp:
+        (functionEnableExceptionFuzz):
+        (jscmain):
+        * llvm/InitializeLLVM.cpp:
+        (JSC::initializeLLVMImpl):
+        * runtime/ExceptionFuzz.cpp:
+        (JSC::doExceptionFuzzing):
+        * runtime/ExceptionFuzz.h:
+        (JSC::doExceptionFuzzingIfEnabled):
+        * runtime/JSGlobalObject.cpp:
+        (JSC::JSGlobalObject::init):
+        * runtime/Options.cpp:
+        (JSC::recomputeDependentOptions):
+        (JSC::Options::initialize):
+        (JSC::Options::dumpOptionsIfNeeded):
+        (JSC::Options::setOption):
+        (JSC::Options::dumpAllOptions):
+        (JSC::Options::dumpAllOptionsInALine):
+        (JSC::Options::dumpOption):
+        * runtime/Options.h:
+        * runtime/VM.cpp:
+        (JSC::VM::VM):
+        * runtime/VM.h:
+        (JSC::VM::exceptionFuzzingBuffer):
+        * runtime/WriteBarrierInlines.h:
+        (JSC::WriteBarrierBase<T>::set):
+        (JSC::WriteBarrierBase<Unknown>::set):
+        * tests/executableAllocationFuzz.yaml:
+        * tests/stress/arrowfunction-typeof.js:
+        * tests/stress/disable-function-dot-arguments.js:
+        (foo):
+        * tests/stress/math-sqrt-basics-disable-architecture-specific-optimizations.js:
+        (sqrtOnInteger):
+        * tests/stress/regress-148564.js:
+
+2015-10-14  Mark Lam  <mark.lam@apple.com>
+
         Speculative build fix: the CallSiteIndex constructor is explicit and requires an uint32_t.
 
         Not Reviewed.
diff --git a/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h b/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h
index 8ad5f6d..27587ff 100644
--- a/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h
+++ b/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h
@@ -69,17 +69,17 @@
 
 inline bool optimizeForARMv7IDIVSupported()
 {
-    return isARMv7IDIVSupported() && Options::enableArchitectureSpecificOptimizations();
+    return isARMv7IDIVSupported() && Options::useArchitectureSpecificOptimizations();
 }
 
 inline bool optimizeForARM64()
 {
-    return isARM64() && Options::enableArchitectureSpecificOptimizations();
+    return isARM64() && Options::useArchitectureSpecificOptimizations();
 }
 
 inline bool optimizeForX86()
 {
-    return isX86() && Options::enableArchitectureSpecificOptimizations();
+    return isX86() && Options::useArchitectureSpecificOptimizations();
 }
 
 class LinkBuffer;
diff --git a/Source/JavaScriptCore/assembler/LinkBuffer.cpp b/Source/JavaScriptCore/assembler/LinkBuffer.cpp
index 0bc71f7..d770244 100644
--- a/Source/JavaScriptCore/assembler/LinkBuffer.cpp
+++ b/Source/JavaScriptCore/assembler/LinkBuffer.cpp
@@ -37,11 +37,11 @@
 
 namespace JSC {
 
-bool shouldShowDisassemblyFor(CodeBlock* codeBlock)
+bool shouldDumpDisassemblyFor(CodeBlock* codeBlock)
 {
-    if (JITCode::isOptimizingJIT(codeBlock->jitType()) && Options::showDFGDisassembly())
+    if (JITCode::isOptimizingJIT(codeBlock->jitType()) && Options::dumpDFGDisassembly())
         return true;
-    return Options::showDisassembly();
+    return Options::dumpDisassembly();
 }
 
 LinkBuffer::CodeRef LinkBuffer::finalizeCodeWithoutDisassembly()
diff --git a/Source/JavaScriptCore/assembler/LinkBuffer.h b/Source/JavaScriptCore/assembler/LinkBuffer.h
index 8517ab1..ce893bf 100644
--- a/Source/JavaScriptCore/assembler/LinkBuffer.h
+++ b/Source/JavaScriptCore/assembler/LinkBuffer.h
@@ -325,10 +325,10 @@
      ? ((linkBufferReference).finalizeCodeWithDisassembly dataLogFArgumentsForHeading) \
      : (linkBufferReference).finalizeCodeWithoutDisassembly())
 
-bool shouldShowDisassemblyFor(CodeBlock*);
+bool shouldDumpDisassemblyFor(CodeBlock*);
 
 #define FINALIZE_CODE_FOR(codeBlock, linkBufferReference, dataLogFArgumentsForHeading)  \
-    FINALIZE_CODE_IF(shouldShowDisassemblyFor(codeBlock) || Options::asyncDisassembly(), linkBufferReference, dataLogFArgumentsForHeading)
+    FINALIZE_CODE_IF(shouldDumpDisassemblyFor(codeBlock) || Options::asyncDisassembly(), linkBufferReference, dataLogFArgumentsForHeading)
 
 // Use this to finalize code, like so:
 //
@@ -343,14 +343,14 @@
 //
 // ... and so on.
 //
-// Note that the dataLogFArgumentsForHeading are only evaluated when showDisassembly
+// Note that the dataLogFArgumentsForHeading are only evaluated when dumpDisassembly
 // is true, so you can hide expensive disassembly-only computations inside there.
 
 #define FINALIZE_CODE(linkBufferReference, dataLogFArgumentsForHeading)  \
-    FINALIZE_CODE_IF(JSC::Options::asyncDisassembly() || JSC::Options::showDisassembly(), linkBufferReference, dataLogFArgumentsForHeading)
+    FINALIZE_CODE_IF(JSC::Options::asyncDisassembly() || JSC::Options::dumpDisassembly(), linkBufferReference, dataLogFArgumentsForHeading)
 
 #define FINALIZE_DFG_CODE(linkBufferReference, dataLogFArgumentsForHeading)  \
-    FINALIZE_CODE_IF(JSC::Options::asyncDisassembly() || JSC::Options::showDisassembly() || Options::showDFGDisassembly(), linkBufferReference, dataLogFArgumentsForHeading)
+    FINALIZE_CODE_IF(JSC::Options::asyncDisassembly() || JSC::Options::dumpDisassembly() || Options::dumpDFGDisassembly(), linkBufferReference, dataLogFArgumentsForHeading)
 
 } // namespace JSC
 
diff --git a/Source/JavaScriptCore/bytecode/CodeBlock.cpp b/Source/JavaScriptCore/bytecode/CodeBlock.cpp
index cc332e6..d2ad516 100644
--- a/Source/JavaScriptCore/bytecode/CodeBlock.cpp
+++ b/Source/JavaScriptCore/bytecode/CodeBlock.cpp
@@ -3142,7 +3142,7 @@
     RELEASE_ASSERT(reason != Profiler::NotJettisoned);
     
 #if ENABLE(DFG_JIT)
-    if (DFG::shouldShowDisassembly()) {
+    if (DFG::shouldDumpDisassembly()) {
         dataLog("Jettisoning ", *this);
         if (mode == CountReoptimization)
             dataLog(" and counting reoptimization");
@@ -3153,7 +3153,7 @@
     }
     
     if (reason == Profiler::JettisonDueToWeakReference) {
-        if (DFG::shouldShowDisassembly()) {
+        if (DFG::shouldDumpDisassembly()) {
             dataLog(*this, " will be jettisoned because of the following dead references:\n");
             DFG::CommonData* dfgCommon = m_jitCode->dfgCommon();
             for (unsigned i = 0; i < dfgCommon->transitions.size(); ++i) {
@@ -3195,7 +3195,7 @@
         }
     }
     
-    if (DFG::shouldShowDisassembly())
+    if (DFG::shouldDumpDisassembly())
         dataLog("    Did invalidate ", *this, "\n");
     
     // Count the reoptimization if that's what the user wanted.
@@ -3203,7 +3203,7 @@
         // FIXME: Maybe this should call alternative().
         // https://bugs.webkit.org/show_bug.cgi?id=123677
         baselineAlternative()->countReoptimization();
-        if (DFG::shouldShowDisassembly())
+        if (DFG::shouldDumpDisassembly())
             dataLog("    Did count reoptimization for ", *this, "\n");
     }
     
@@ -3225,7 +3225,7 @@
         m_globalObject->vm(), alternative(), codeType(), specializationKind());
 
 #if ENABLE(DFG_JIT)
-    if (DFG::shouldShowDisassembly())
+    if (DFG::shouldDumpDisassembly())
         dataLog("    Did install baseline version of ", *this, "\n");
 #endif // ENABLE(DFG_JIT)
 }
diff --git a/Source/JavaScriptCore/bytecode/CodeBlockJettisoningWatchpoint.cpp b/Source/JavaScriptCore/bytecode/CodeBlockJettisoningWatchpoint.cpp
index f9c6b1e..50cf737 100644
--- a/Source/JavaScriptCore/bytecode/CodeBlockJettisoningWatchpoint.cpp
+++ b/Source/JavaScriptCore/bytecode/CodeBlockJettisoningWatchpoint.cpp
@@ -34,7 +34,7 @@
 
 void CodeBlockJettisoningWatchpoint::fireInternal(const FireDetail& detail)
 {
-    if (DFG::shouldShowDisassembly())
+    if (DFG::shouldDumpDisassembly())
         dataLog("Firing watchpoint ", RawPointer(this), " on ", *m_codeBlock, "\n");
 
     m_codeBlock->jettison(Profiler::JettisonDueToUnprofiledWatchpoint, CountReoptimization, &detail);
diff --git a/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp b/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
index 764dabb..1849c9e 100644
--- a/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
+++ b/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
@@ -198,7 +198,7 @@
     // op_will_call / op_did_call pairs before and after a call, which are not
     // compatible with tail calls (we have no way of emitting op_did_call).
     // https://bugs.webkit.org/show_bug.cgi?id=148819
-    , m_inTailPosition(Options::enableTailCalls() && constructorKind() == ConstructorKind::None && isStrictMode() && !m_shouldEmitProfileHooks)
+    , m_inTailPosition(Options::useTailCalls() && constructorKind() == ConstructorKind::None && isStrictMode() && !m_shouldEmitProfileHooks)
 {
     for (auto& constantRegister : m_linkTimeConstantRegisters)
         constantRegister = nullptr;
diff --git a/Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp b/Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp
index 355657f..95fa39c 100644
--- a/Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp
+++ b/Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp
@@ -69,7 +69,7 @@
         return;
     }
     
-    if (DFG::shouldShowDisassembly()) {
+    if (DFG::shouldDumpDisassembly()) {
         dataLog(
             "Firing watchpoint ", RawPointer(this), " (", m_key, ") on ", *m_codeBlock, "\n");
     }
diff --git a/Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp b/Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp
index e2a5474..0854c56 100644
--- a/Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp
+++ b/Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp
@@ -57,7 +57,7 @@
         return;
     }
     
-    if (DFG::shouldShowDisassembly()) {
+    if (DFG::shouldDumpDisassembly()) {
         dataLog(
             "Firing watchpoint ", RawPointer(this), " (", m_key, ") on ", *m_codeBlock, "\n");
     }
diff --git a/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp b/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
index 635751e..0f941f6 100644
--- a/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
+++ b/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
@@ -1763,7 +1763,7 @@
     // the DFG. And by polyvariant profiling we mean polyvariant profiling of *this* call. Note that
     // we could improve that aspect of this by doing polymorphic inlining but having the profiling
     // also.
-    if (!isFTL(m_graph.m_plan.mode) || !Options::enablePolymorphicCallInlining()
+    if (!isFTL(m_graph.m_plan.mode) || !Options::usePolymorphicCallInlining()
         || InlineCallFrame::isVarargs(kind)) {
         if (verbose) {
             dataLog("Bailing inlining (hard).\n");
@@ -2743,7 +2743,7 @@
 {
     NodeType getById = getByIdStatus.makesCalls() ? GetByIdFlush : GetById;
     
-    if (!getByIdStatus.isSimple() || !getByIdStatus.numVariants() || !Options::enableAccessInlining()) {
+    if (!getByIdStatus.isSimple() || !getByIdStatus.numVariants() || !Options::useAccessInlining()) {
         set(VirtualRegister(destinationOperand),
             addToGraph(getById, OpInfo(identifierNumber), OpInfo(prediction), base));
         return;
@@ -2751,7 +2751,7 @@
     
     if (getByIdStatus.numVariants() > 1) {
         if (getByIdStatus.makesCalls() || !isFTL(m_graph.m_plan.mode)
-            || !Options::enablePolymorphicAccessInlining()) {
+            || !Options::usePolymorphicAccessInlining()) {
             set(VirtualRegister(destinationOperand),
                 addToGraph(getById, OpInfo(identifierNumber), OpInfo(prediction), base));
             return;
@@ -2866,7 +2866,7 @@
     Node* base, unsigned identifierNumber, Node* value,
     const PutByIdStatus& putByIdStatus, bool isDirect)
 {
-    if (!putByIdStatus.isSimple() || !putByIdStatus.numVariants() || !Options::enableAccessInlining()) {
+    if (!putByIdStatus.isSimple() || !putByIdStatus.numVariants() || !Options::useAccessInlining()) {
         if (!putByIdStatus.isSet())
             addToGraph(ForceOSRExit);
         emitPutById(base, identifierNumber, value, putByIdStatus, isDirect);
@@ -2875,7 +2875,7 @@
     
     if (putByIdStatus.numVariants() > 1) {
         if (!isFTL(m_graph.m_plan.mode) || putByIdStatus.makesCalls()
-            || !Options::enablePolymorphicAccessInlining()) {
+            || !Options::usePolymorphicAccessInlining()) {
             emitPutById(base, identifierNumber, value, putByIdStatus, isDirect);
             return;
         }
@@ -4830,10 +4830,10 @@
     
     m_dfgCodeBlock = m_graph.m_plan.profiledDFGCodeBlock;
     if (isFTL(m_graph.m_plan.mode) && m_dfgCodeBlock
-        && Options::enablePolyvariantDevirtualization()) {
-        if (Options::enablePolyvariantCallInlining())
+        && Options::usePolyvariantDevirtualization()) {
+        if (Options::usePolyvariantCallInlining())
             CallLinkStatus::computeDFGStatuses(m_dfgCodeBlock, m_callContextMap);
-        if (Options::enablePolyvariantByIdInlining())
+        if (Options::usePolyvariantByIdInlining())
             m_dfgCodeBlock->getStubInfoMap(m_dfgStubInfos);
     }
     
diff --git a/Source/JavaScriptCore/dfg/DFGCommon.h b/Source/JavaScriptCore/dfg/DFGCommon.h
index 14d254c..a19f3c1 100644
--- a/Source/JavaScriptCore/dfg/DFGCommon.h
+++ b/Source/JavaScriptCore/dfg/DFGCommon.h
@@ -366,10 +366,10 @@
 }
 
 // Unconditionally disable DFG disassembly support if the DFG is not compiled in.
-inline bool shouldShowDisassembly(CompilationMode mode = DFGMode)
+inline bool shouldDumpDisassembly(CompilationMode mode = DFGMode)
 {
 #if ENABLE(DFG_JIT)
-    return Options::showDisassembly() || Options::showDFGDisassembly() || (isFTL(mode) && Options::showFTLDisassembly());
+    return Options::dumpDisassembly() || Options::dumpDFGDisassembly() || (isFTL(mode) && Options::dumpFTLDisassembly());
 #else
     UNUSED_PARAM(mode);
     return false;
diff --git a/Source/JavaScriptCore/dfg/DFGDriver.cpp b/Source/JavaScriptCore/dfg/DFGDriver.cpp
index aca733a..0369848 100644
--- a/Source/JavaScriptCore/dfg/DFGDriver.cpp
+++ b/Source/JavaScriptCore/dfg/DFGDriver.cpp
@@ -91,7 +91,7 @@
         new Plan(codeBlock, profiledDFGCodeBlock, mode, osrEntryBytecodeIndex, mustHandleValues));
     
     plan->callback = callback;
-    if (Options::enableConcurrentJIT()) {
+    if (Options::useConcurrentJIT()) {
         Worklist* worklist = ensureGlobalWorklistFor(mode);
         if (logCompilationChanges(mode))
             dataLog("Deferring DFG compilation of ", *codeBlock, " with queue length ", worklist->queueLength(), ".\n");
diff --git a/Source/JavaScriptCore/dfg/DFGJITCompiler.cpp b/Source/JavaScriptCore/dfg/DFGJITCompiler.cpp
index b8f38810..3deec6c 100644
--- a/Source/JavaScriptCore/dfg/DFGJITCompiler.cpp
+++ b/Source/JavaScriptCore/dfg/DFGJITCompiler.cpp
@@ -53,7 +53,7 @@
     , m_jitCode(adoptRef(new JITCode()))
     , m_blockHeads(dfg.numBlocks())
 {
-    if (shouldShowDisassembly() || m_graph.m_vm.m_perBytecodeProfiler)
+    if (shouldDumpDisassembly() || m_graph.m_vm.m_perBytecodeProfiler)
         m_disassembler = std::make_unique<Disassembler>(dfg);
 }
 
@@ -473,7 +473,7 @@
 
 void JITCompiler::disassemble(LinkBuffer& linkBuffer)
 {
-    if (shouldShowDisassembly()) {
+    if (shouldDumpDisassembly()) {
         m_disassembler->dump(linkBuffer);
         linkBuffer.didAlreadyDisassemble();
     }
diff --git a/Source/JavaScriptCore/dfg/DFGJumpReplacement.cpp b/Source/JavaScriptCore/dfg/DFGJumpReplacement.cpp
index fa002f4..5337529 100644
--- a/Source/JavaScriptCore/dfg/DFGJumpReplacement.cpp
+++ b/Source/JavaScriptCore/dfg/DFGJumpReplacement.cpp
@@ -36,7 +36,7 @@
 
 void JumpReplacement::fire()
 {
-    if (Options::showDisassembly())
+    if (Options::dumpDisassembly())
         dataLogF("Firing jump replacement watchpoint from %p, to %p.\n", m_source.dataLocation(), m_destination.dataLocation());
     MacroAssembler::replaceWithJump(m_source, m_destination);
 }
diff --git a/Source/JavaScriptCore/dfg/DFGOSREntry.cpp b/Source/JavaScriptCore/dfg/DFGOSREntry.cpp
index 48a4f01..80e6880 100644
--- a/Source/JavaScriptCore/dfg/DFGOSREntry.cpp
+++ b/Source/JavaScriptCore/dfg/DFGOSREntry.cpp
@@ -98,7 +98,7 @@
     ASSERT(codeBlock->alternative()->jitType() == JITCode::BaselineJIT);
     ASSERT(!codeBlock->jitCodeMap());
 
-    if (!Options::enableOSREntryToDFG())
+    if (!Options::useOSREntryToDFG())
         return 0;
 
     if (Options::verboseOSR()) {
diff --git a/Source/JavaScriptCore/dfg/DFGOSRExitCompiler.cpp b/Source/JavaScriptCore/dfg/DFGOSRExitCompiler.cpp
index 3a81452..76a0807 100644
--- a/Source/JavaScriptCore/dfg/DFGOSRExitCompiler.cpp
+++ b/Source/JavaScriptCore/dfg/DFGOSRExitCompiler.cpp
@@ -163,7 +163,7 @@
         
         LinkBuffer patchBuffer(*vm, jit, codeBlock);
         exit.m_code = FINALIZE_CODE_IF(
-            shouldShowDisassembly() || Options::verboseOSR(),
+            shouldDumpDisassembly() || Options::verboseOSR(),
             patchBuffer,
             ("DFG OSR exit #%u (%s, %s) from %s, with operands = %s",
                 exitIndex, toCString(exit.m_codeOrigin).data(),
diff --git a/Source/JavaScriptCore/dfg/DFGOSRExitFuzz.h b/Source/JavaScriptCore/dfg/DFGOSRExitFuzz.h
index 2feee59..8121f1c 100644
--- a/Source/JavaScriptCore/dfg/DFGOSRExitFuzz.h
+++ b/Source/JavaScriptCore/dfg/DFGOSRExitFuzz.h
@@ -34,7 +34,7 @@
 
 inline bool doOSRExitFuzzing()
 {
-    if (!Options::enableOSRExitFuzz())
+    if (!Options::useOSRExitFuzz())
         return false;
     
     g_numberOfStaticOSRExitFuzzChecks++;
diff --git a/Source/JavaScriptCore/dfg/DFGPlan.cpp b/Source/JavaScriptCore/dfg/DFGPlan.cpp
index 6b4150b..36154d2 100644
--- a/Source/JavaScriptCore/dfg/DFGPlan.cpp
+++ b/Source/JavaScriptCore/dfg/DFGPlan.cpp
@@ -263,7 +263,7 @@
 
     performLiveCatchVariablePreservationPhase(dfg);
 
-    if (Options::enableMaximalFlushInsertionPhase())
+    if (Options::useMaximalFlushInsertionPhase())
         performMaximalFlushInsertion(dfg);
     
     performCPSRethreading(dfg);
@@ -359,7 +359,7 @@
         performCleanUp(dfg);
         performCPSRethreading(dfg);
         performDCE(dfg);
-        if (Options::enableCopyBarrierOptimization())
+        if (Options::useCopyBarrierOptimization())
             performCopyBarrierOptimization(dfg);
         performPhantomInsertion(dfg);
         performStackLayout(dfg);
@@ -406,7 +406,7 @@
         performCleanUp(dfg); // Reduce the graph size a lot.
         changed = false;
         changed |= performStrengthReduction(dfg);
-        if (Options::enableObjectAllocationSinking()) {
+        if (Options::useObjectAllocationSinking()) {
             changed |= performCriticalEdgeBreaking(dfg);
             changed |= performObjectAllocationSinking(dfg);
         }
@@ -436,11 +436,11 @@
         performLivenessAnalysis(dfg);
         performCFA(dfg);
         performGlobalStoreBarrierInsertion(dfg);
-        if (Options::enableMovHintRemoval())
+        if (Options::useMovHintRemoval())
             performMovHintRemoval(dfg);
         performCleanUp(dfg);
         performDCE(dfg); // We rely on this to kill dead code that won't be recognized as dead by LLVM.
-        if (Options::enableCopyBarrierOptimization())
+        if (Options::useCopyBarrierOptimization())
             performCopyBarrierOptimization(dfg);
         performStackLayout(dfg);
         performLivenessAnalysis(dfg);
@@ -452,7 +452,7 @@
             return FailPath;
         }
 
-        dumpAndVerifyGraph(dfg, "Graph just before FTL lowering:", shouldShowDisassembly(mode));
+        dumpAndVerifyGraph(dfg, "Graph just before FTL lowering:", shouldDumpDisassembly(mode));
         
         bool haveLLVM;
         Safepoint::Result safepointResult;
diff --git a/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp b/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
index 84378b7..8f53211 100755
--- a/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
+++ b/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
@@ -3734,7 +3734,7 @@
     SpeculateDoubleOperand op1(this, node->child1());
     FPRReg op1FPR = op1.fpr();
 
-    if (!MacroAssembler::supportsFloatingPointSqrt() || !Options::enableArchitectureSpecificOptimizations()) {
+    if (!MacroAssembler::supportsFloatingPointSqrt() || !Options::useArchitectureSpecificOptimizations()) {
         flushRegisters();
         FPRResult result(this);
         callOperation(sqrt, result.fpr(), op1FPR);
diff --git a/Source/JavaScriptCore/dfg/DFGTierUpCheckInjectionPhase.cpp b/Source/JavaScriptCore/dfg/DFGTierUpCheckInjectionPhase.cpp
index 9609534..b13cddd 100644
--- a/Source/JavaScriptCore/dfg/DFGTierUpCheckInjectionPhase.cpp
+++ b/Source/JavaScriptCore/dfg/DFGTierUpCheckInjectionPhase.cpp
@@ -61,7 +61,7 @@
         if (level == FTL::CannotCompile)
             return false;
         
-        if (!Options::enableOSREntryToFTL())
+        if (!Options::useOSREntryToFTL())
             level = FTL::CanCompile;
 
         // First we find all the loops that contain a LoopHint for which we cannot OSR enter.
diff --git a/Source/JavaScriptCore/ftl/FTLCompile.cpp b/Source/JavaScriptCore/ftl/FTLCompile.cpp
index 482f419..a36b704 100644
--- a/Source/JavaScriptCore/ftl/FTLCompile.cpp
+++ b/Source/JavaScriptCore/ftl/FTLCompile.cpp
@@ -844,7 +844,7 @@
             llvm->RunPassManager(modulePasses, module);
         }
 
-        if (shouldShowDisassembly() || verboseCompilationEnabled())
+        if (shouldDumpDisassembly() || verboseCompilationEnabled())
             state.dumpState(module, "after optimization");
         
         // FIXME: Need to add support for the case where JIT memory allocation failed.
@@ -863,7 +863,7 @@
     if (state.allocationFailed)
         return;
     
-    if (shouldShowDisassembly()) {
+    if (shouldDumpDisassembly()) {
         for (unsigned i = 0; i < state.jitCode->handles().size(); ++i) {
             ExecutableMemoryHandle* handle = state.jitCode->handles()[i].get();
             dataLog(
@@ -888,14 +888,14 @@
     std::unique_ptr<RegisterAtOffsetList> registerOffsets = parseUnwindInfo(
         state.unwindDataSection, state.unwindDataSectionSize,
         state.generatedFunction);
-    if (shouldShowDisassembly()) {
+    if (shouldDumpDisassembly()) {
         dataLog("Unwind info for ", CodeBlockWithJITType(state.graph.m_codeBlock, JITCode::FTLJIT), ":\n");
         dataLog("    ", *registerOffsets, "\n");
     }
     state.graph.m_codeBlock->setCalleeSaveRegisters(WTF::move(registerOffsets));
     
     if (state.stackmapsSection && state.stackmapsSection->size()) {
-        if (shouldShowDisassembly()) {
+        if (shouldDumpDisassembly()) {
             dataLog(
                 "Generated LLVM stackmaps section for ",
                 CodeBlockWithJITType(state.graph.m_codeBlock, JITCode::FTLJIT), ":\n");
@@ -907,7 +907,7 @@
             ArrayBuffer::create(state.stackmapsSection->base(), state.stackmapsSection->size()));
         state.jitCode->stackmaps.parse(stackmapsData.get());
     
-        if (shouldShowDisassembly()) {
+        if (shouldDumpDisassembly()) {
             dataLog("    Structured data:\n");
             state.jitCode->stackmaps.dumpMultiline(WTF::dataFile(), "        ");
         }
@@ -919,7 +919,7 @@
         if (state.allocationFailed)
             return;
         
-        if (shouldShowDisassembly() || Options::asyncDisassembly()) {
+        if (shouldDumpDisassembly() || Options::asyncDisassembly()) {
             for (unsigned i = 0; i < state.jitCode->handles().size(); ++i) {
                 if (state.codeSectionNames[i] != SECTION_NAME("text"))
                     continue;
diff --git a/Source/JavaScriptCore/ftl/FTLJITCode.cpp b/Source/JavaScriptCore/ftl/FTLJITCode.cpp
index 2bc6bbe..d65854e 100644
--- a/Source/JavaScriptCore/ftl/FTLJITCode.cpp
+++ b/Source/JavaScriptCore/ftl/FTLJITCode.cpp
@@ -39,7 +39,7 @@
 
 JITCode::~JITCode()
 {
-    if (FTL::shouldShowDisassembly()) {
+    if (FTL::shouldDumpDisassembly()) {
         dataLog("Destroying FTL JIT code at ");
         CommaPrinter comma;
         for (auto& handle : m_handles)
diff --git a/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp b/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp
index 57b6dab..a954a26 100644
--- a/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp
+++ b/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp
@@ -8623,7 +8623,7 @@
     
     void callCheck()
     {
-        if (Options::enableExceptionFuzz())
+        if (Options::useExceptionFuzz())
             m_out.call(m_out.operation(operationExceptionFuzz), m_callFrame);
         
         LBasicBlock continuation = FTL_NEW_BLOCK(m_out, ("Exception check continuation"));
diff --git a/Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp b/Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp
index 3265adc..bac30c6 100644
--- a/Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp
+++ b/Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp
@@ -492,7 +492,7 @@
     
     LinkBuffer patchBuffer(*vm, jit, codeBlock);
     exit.m_code = FINALIZE_CODE_IF(
-        shouldShowDisassembly() || Options::verboseOSR() || Options::verboseFTLOSRExit(),
+        shouldDumpDisassembly() || Options::verboseOSR() || Options::verboseFTLOSRExit(),
         patchBuffer,
         ("FTL OSR exit #%u (%s, %s) from %s, with operands = %s, and record = %s",
             exitID, toCString(exit.m_codeOrigin).data(),
@@ -505,7 +505,7 @@
 {
     SamplingRegion samplingRegion("FTL OSR Exit Compilation");
 
-    if (shouldShowDisassembly() || Options::verboseOSR() || Options::verboseFTLOSRExit())
+    if (shouldDumpDisassembly() || Options::verboseOSR() || Options::verboseFTLOSRExit())
         dataLog("Compiling OSR exit with exitID = ", exitID, "\n");
     
     CodeBlock* codeBlock = exec->codeBlock();
@@ -522,7 +522,7 @@
     JITCode* jitCode = codeBlock->jitCode()->ftl();
     OSRExit& exit = jitCode->osrExit[exitID];
     
-    if (shouldShowDisassembly() || Options::verboseOSR() || Options::verboseFTLOSRExit()) {
+    if (shouldDumpDisassembly() || Options::verboseOSR() || Options::verboseFTLOSRExit()) {
         dataLog("    Owning block: ", pointerDump(codeBlock), "\n");
         dataLog("    Origin: ", exit.m_codeOrigin, "\n");
         if (exit.m_codeOriginForExitProfile != exit.m_codeOrigin)
diff --git a/Source/JavaScriptCore/ftl/FTLState.h b/Source/JavaScriptCore/ftl/FTLState.h
index a4308f2..3c7312b 100644
--- a/Source/JavaScriptCore/ftl/FTLState.h
+++ b/Source/JavaScriptCore/ftl/FTLState.h
@@ -49,9 +49,9 @@
     return DFG::verboseCompilationEnabled(DFG::FTLMode);
 }
 
-inline bool shouldShowDisassembly()
+inline bool shouldDumpDisassembly()
 {
-    return DFG::shouldShowDisassembly(DFG::FTLMode);
+    return DFG::shouldDumpDisassembly(DFG::FTLMode);
 }
 
 class State {
diff --git a/Source/JavaScriptCore/heap/Heap.cpp b/Source/JavaScriptCore/heap/Heap.cpp
index 777249a..6029ac8 100644
--- a/Source/JavaScriptCore/heap/Heap.cpp
+++ b/Source/JavaScriptCore/heap/Heap.cpp
@@ -989,7 +989,7 @@
 void Heap::addToRememberedSet(const JSCell* cell)
 {
     ASSERT(cell);
-    ASSERT(!Options::enableConcurrentJIT() || !isCompilationThread());
+    ASSERT(!Options::useConcurrentJIT() || !isCompilationThread());
     ASSERT(cell->cellState() == CellState::OldBlack);
     // Indicate that this object is grey and that it's one of the following:
     // - A re-greyed object during a concurrent collection.
@@ -1317,11 +1317,11 @@
     if (Options::useZombieMode())
         zombifyDeadObjects();
 
-    if (Options::objectsAreImmortal())
+    if (Options::useImmortalObjects())
         markDeadObjects();
 
-    if (Options::showObjectStatistics())
-        HeapStatistics::showObjectStatistics(this);
+    if (Options::dumpObjectStatistics())
+        HeapStatistics::dumpObjectStatistics(this);
 
     if (Options::logGC() == GCLogging::Verbose)
         GCLogging::dumpObjectGraph(this);
@@ -1479,7 +1479,7 @@
 
 bool Heap::shouldDoFullCollection(HeapOperation requestedCollectionType) const
 {
-    if (Options::alwaysDoFullCollection())
+    if (!Options::useGenerationalGC())
         return true;
 
     switch (requestedCollectionType) {
diff --git a/Source/JavaScriptCore/heap/Heap.h b/Source/JavaScriptCore/heap/Heap.h
index ebb7a69..5bff0cb 100644
--- a/Source/JavaScriptCore/heap/Heap.h
+++ b/Source/JavaScriptCore/heap/Heap.h
@@ -221,7 +221,7 @@
     
     void addReference(JSCell*, ArrayBuffer*);
     
-    bool isDeferred() const { return !!m_deferralDepth || Options::disableGC(); }
+    bool isDeferred() const { return !!m_deferralDepth || !Options::useGC(); }
 
     StructureIDTable& structureIDTable() { return m_structureIDTable; }
 
diff --git a/Source/JavaScriptCore/heap/HeapStatistics.cpp b/Source/JavaScriptCore/heap/HeapStatistics.cpp
index 3081f88..12d12ce 100644
--- a/Source/JavaScriptCore/heap/HeapStatistics.cpp
+++ b/Source/JavaScriptCore/heap/HeapStatistics.cpp
@@ -216,7 +216,7 @@
     return m_storageCapacity;
 }
 
-void HeapStatistics::showObjectStatistics(Heap* heap)
+void HeapStatistics::dumpObjectStatistics(Heap* heap)
 {
     dataLogF("\n=== Heap Statistics: ===\n");
     dataLogF("size: %ldkB\n", static_cast<long>(heap->m_sizeAfterLastCollect / KB));
diff --git a/Source/JavaScriptCore/heap/HeapStatistics.h b/Source/JavaScriptCore/heap/HeapStatistics.h
index ca0f43b..1ffda6e 100644
--- a/Source/JavaScriptCore/heap/HeapStatistics.h
+++ b/Source/JavaScriptCore/heap/HeapStatistics.h
@@ -41,7 +41,7 @@
     static void initialize();
     static void recordGCPauseTime(double start, double end);
 
-    static void showObjectStatistics(Heap*);
+    static void dumpObjectStatistics(Heap*);
 
 private:
     static void logStatistics();
diff --git a/Source/JavaScriptCore/interpreter/StackVisitor.cpp b/Source/JavaScriptCore/interpreter/StackVisitor.cpp
index 85b0187..de924cdb 100644
--- a/Source/JavaScriptCore/interpreter/StackVisitor.cpp
+++ b/Source/JavaScriptCore/interpreter/StackVisitor.cpp
@@ -283,7 +283,7 @@
     CallFrame* physicalFrame = m_callFrame;
     ClonedArguments* arguments;
     ArgumentsMode mode;
-    if (Options::enableFunctionDotArguments())
+    if (Options::useFunctionDotArguments())
         mode = ArgumentsMode::Cloned;
     else
         mode = ArgumentsMode::FakeValues;
diff --git a/Source/JavaScriptCore/jit/AssemblyHelpers.cpp b/Source/JavaScriptCore/jit/AssemblyHelpers.cpp
index eae7e11..70a1e9d 100644
--- a/Source/JavaScriptCore/jit/AssemblyHelpers.cpp
+++ b/Source/JavaScriptCore/jit/AssemblyHelpers.cpp
@@ -288,7 +288,7 @@
 
 void AssemblyHelpers::callExceptionFuzz()
 {
-    if (!Options::enableExceptionFuzz())
+    if (!Options::useExceptionFuzz())
         return;
 
     EncodedJSValue* buffer = vm()->exceptionFuzzingBuffer(sizeof(EncodedJSValue) * (GPRInfo::numberOfRegisters + FPRInfo::numberOfRegisters));
diff --git a/Source/JavaScriptCore/jit/ExecutableAllocationFuzz.cpp b/Source/JavaScriptCore/jit/ExecutableAllocationFuzz.cpp
index 9cee5d9..b4f5665 100644
--- a/Source/JavaScriptCore/jit/ExecutableAllocationFuzz.cpp
+++ b/Source/JavaScriptCore/jit/ExecutableAllocationFuzz.cpp
@@ -40,7 +40,7 @@
 
 ExecutableAllocationFuzzResult doExecutableAllocationFuzzing()
 {
-    ASSERT(Options::enableExecutableAllocationFuzz());
+    ASSERT(Options::useExecutableAllocationFuzz());
     
     unsigned oldValue;
     unsigned newValue;
diff --git a/Source/JavaScriptCore/jit/ExecutableAllocationFuzz.h b/Source/JavaScriptCore/jit/ExecutableAllocationFuzz.h
index 4997d21..b15cdef 100644
--- a/Source/JavaScriptCore/jit/ExecutableAllocationFuzz.h
+++ b/Source/JavaScriptCore/jit/ExecutableAllocationFuzz.h
@@ -39,7 +39,7 @@
 
 inline ExecutableAllocationFuzzResult doExecutableAllocationFuzzingIfEnabled()
 {
-    if (LIKELY(!Options::enableExecutableAllocationFuzz()))
+    if (LIKELY(!Options::useExecutableAllocationFuzz()))
         return AllowNormalExecutableAllocation;
     
     return doExecutableAllocationFuzzing();
diff --git a/Source/JavaScriptCore/jit/JIT.cpp b/Source/JavaScriptCore/jit/JIT.cpp
index b8f2162..5fad85b 100644
--- a/Source/JavaScriptCore/jit/JIT.cpp
+++ b/Source/JavaScriptCore/jit/JIT.cpp
@@ -500,7 +500,7 @@
     if (m_vm->typeProfiler())
         m_vm->typeProfilerLog()->processLogEntries(ASCIILiteral("Preparing for JIT compilation."));
     
-    if (Options::showDisassembly() || m_vm->m_perBytecodeProfiler)
+    if (Options::dumpDisassembly() || m_vm->m_perBytecodeProfiler)
         m_disassembler = std::make_unique<JITDisassembler>(m_codeBlock);
     if (m_vm->m_perBytecodeProfiler) {
         m_compilation = adoptRef(
@@ -691,7 +691,7 @@
     if (m_codeBlock->codeType() == FunctionCode)
         withArityCheck = patchBuffer.locationOf(arityCheck);
 
-    if (Options::showDisassembly()) {
+    if (Options::dumpDisassembly()) {
         m_disassembler->dump(patchBuffer);
         patchBuffer.didAlreadyDisassemble();
     }
diff --git a/Source/JavaScriptCore/jit/JITCode.cpp b/Source/JavaScriptCore/jit/JITCode.cpp
index 852b0ee..26b69c5 100644
--- a/Source/JavaScriptCore/jit/JITCode.cpp
+++ b/Source/JavaScriptCore/jit/JITCode.cpp
@@ -118,7 +118,7 @@
 
 JITCodeWithCodeRef::~JITCodeWithCodeRef()
 {
-    if ((Options::showDisassembly() || (isOptimizingJIT(jitType()) && Options::showDFGDisassembly()))
+    if ((Options::dumpDisassembly() || (isOptimizingJIT(jitType()) && Options::dumpDFGDisassembly()))
         && m_ref.executableMemory())
         dataLog("Destroying JIT code at ", pointerDump(m_ref.executableMemory()), "\n");
 }
diff --git a/Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp b/Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp
index e648e40..b774df8 100644
--- a/Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp
+++ b/Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp
@@ -44,7 +44,7 @@
 void PolymorphicCallNode::unlink(VM& vm)
 {
     if (m_callLinkInfo) {
-        if (Options::showDisassembly())
+        if (Options::dumpDisassembly())
             dataLog("Unlinking polymorphic call at ", m_callLinkInfo->callReturnLocation(), ", ", m_callLinkInfo->codeOrigin(), "\n");
 
         m_callLinkInfo->unlink(vm);
@@ -56,7 +56,7 @@
 
 void PolymorphicCallNode::clearCallLinkInfo()
 {
-    if (Options::showDisassembly())
+    if (Options::dumpDisassembly())
         dataLog("Clearing call link info for polymorphic call at ", m_callLinkInfo->callReturnLocation(), ", ", m_callLinkInfo->codeOrigin(), "\n");
 
     m_callLinkInfo = nullptr;
@@ -76,7 +76,7 @@
 {
     for (PolymorphicCallCase callCase : cases) {
         m_variants.append(WriteBarrier<JSCell>(vm, owner, callCase.variant().rawCalleeCell()));
-        if (shouldShowDisassemblyFor(callerFrame->codeBlock()))
+        if (shouldDumpDisassemblyFor(callerFrame->codeBlock()))
             dataLog("Linking polymorphic call in ", *callerFrame->codeBlock(), " at ", callerFrame->codeOrigin(), " to ", callCase.variant(), ", codeBlock = ", pointerDump(callCase.codeBlock()), "\n");
         if (CodeBlock* codeBlock = callCase.codeBlock())
             codeBlock->linkIncomingPolymorphicCall(callerFrame, m_callNodes.add(&info));
diff --git a/Source/JavaScriptCore/jit/Repatch.cpp b/Source/JavaScriptCore/jit/Repatch.cpp
index e88ca05..6099dc4 100644
--- a/Source/JavaScriptCore/jit/Repatch.cpp
+++ b/Source/JavaScriptCore/jit/Repatch.cpp
@@ -550,7 +550,7 @@
     ASSERT(!callLinkInfo.isLinked());
     callLinkInfo.setCallee(exec->callerFrame()->vm(), callLinkInfo.hotPathBegin(), callerCodeBlock, callee);
     callLinkInfo.setLastSeenCallee(exec->callerFrame()->vm(), callerCodeBlock, callee);
-    if (shouldShowDisassemblyFor(callerCodeBlock))
+    if (shouldDumpDisassemblyFor(callerCodeBlock))
         dataLog("Linking call in ", *callerCodeBlock, " at ", callLinkInfo.codeOrigin(), " to ", pointerDump(calleeCodeBlock), ", entrypoint at ", codePtr, "\n");
     MacroAssembler::repatchNearCall(callLinkInfo.hotPathOther(), CodeLocationLabel(codePtr));
     
@@ -590,7 +590,7 @@
 
 void unlinkFor(VM& vm, CallLinkInfo& callLinkInfo)
 {
-    if (Options::showDisassembly())
+    if (Options::dumpDisassembly())
         dataLog("Unlinking call from ", callLinkInfo.callReturnLocation(), "\n");
     
     revertCall(&vm, callLinkInfo, vm.getCTIStub(linkCallThunkGenerator));
@@ -602,7 +602,7 @@
     CodeBlock* callerCodeBlock = exec->callerFrame()->codeBlock();
     VM* vm = callerCodeBlock->vm();
 
-    if (shouldShowDisassemblyFor(callerCodeBlock))
+    if (shouldDumpDisassemblyFor(callerCodeBlock))
         dataLog("Linking virtual call at ", *callerCodeBlock, " ", exec->callerFrame()->codeOrigin(), "\n");
     
     MacroAssemblerCodeRef virtualThunk = virtualThunkFor(vm, callLinkInfo);
diff --git a/Source/JavaScriptCore/jsc.cpp b/Source/JavaScriptCore/jsc.cpp
index 95bcdad..5728f00 100644
--- a/Source/JavaScriptCore/jsc.cpp
+++ b/Source/JavaScriptCore/jsc.cpp
@@ -1489,7 +1489,7 @@
 
 EncodedJSValue JSC_HOST_CALL functionEnableExceptionFuzz(ExecState*)
 {
-    Options::enableExceptionFuzz() = true;
+    Options::useExceptionFuzz() = true;
     return JSValue::encode(jsUndefined());
 }
 
@@ -1962,13 +1962,13 @@
         }
         
 #if ENABLE(JIT)
-        if (Options::enableExceptionFuzz())
+        if (Options::useExceptionFuzz())
             printf("JSC EXCEPTION FUZZ: encountered %u checks.\n", numberOfExceptionFuzzChecks());
         bool fireAtEnabled =
             Options::fireExecutableAllocationFuzzAt() || Options::fireExecutableAllocationFuzzAtOrAfter();
-        if (Options::enableExecutableAllocationFuzz() && (!fireAtEnabled || Options::verboseExecutableAllocationFuzz()))
+        if (Options::useExecutableAllocationFuzz() && (!fireAtEnabled || Options::verboseExecutableAllocationFuzz()))
             printf("JSC EXECUTABLE ALLOCATION FUZZ: encountered %u checks.\n", numberOfExecutableAllocationFuzzChecks());
-        if (Options::enableOSRExitFuzz()) {
+        if (Options::useOSRExitFuzz()) {
             printf("JSC OSR EXIT FUZZ: encountered %u static checks.\n", numberOfStaticOSRExitFuzzChecks());
             printf("JSC OSR EXIT FUZZ: encountered %u dynamic checks.\n", numberOfOSRExitFuzzChecks());
         }
diff --git a/Source/JavaScriptCore/llvm/InitializeLLVM.cpp b/Source/JavaScriptCore/llvm/InitializeLLVM.cpp
index 47348bc..53e673d 100644
--- a/Source/JavaScriptCore/llvm/InitializeLLVM.cpp
+++ b/Source/JavaScriptCore/llvm/InitializeLLVM.cpp
@@ -41,23 +41,23 @@
 {
     const bool verbose =
         Options::verboseFTLCompilation()
-        || Options::showFTLDisassembly()
+        || Options::dumpFTLDisassembly()
         || Options::verboseFTLFailure()
         || Options::verboseCompilation()
-        || Options::showDFGDisassembly()
-        || Options::showDisassembly();
+        || Options::dumpDFGDisassembly()
+        || Options::dumpDisassembly();
     
     LLVMInitializerFunction initializer = getLLVMInitializerFunction(verbose);
     if (!initializer)
         return;
     
-    bool enableFastISel = Options::enableLLVMFastISel();
+    bool enableFastISel = Options::useLLVMFastISel();
     llvm = initializer(WTFLogAlwaysAndCrash, &enableFastISel);
     if (!llvm) {
         if (verbose)
             dataLog("LLVM initilization failed.\n");
     }
-    if (Options::enableLLVMFastISel() && !enableFastISel) {
+    if (Options::useLLVMFastISel() && !enableFastISel) {
         if (verbose)
             dataLog("Fast ISel requested but LLVM not new enough.\n");
     }
diff --git a/Source/JavaScriptCore/runtime/ExceptionFuzz.cpp b/Source/JavaScriptCore/runtime/ExceptionFuzz.cpp
index 744b1a6..3fb2787 100644
--- a/Source/JavaScriptCore/runtime/ExceptionFuzz.cpp
+++ b/Source/JavaScriptCore/runtime/ExceptionFuzz.cpp
@@ -38,7 +38,7 @@
 // Call this only if you know that exception fuzzing is enabled.
 void doExceptionFuzzing(ExecState* exec, const char* where, void* returnPC)
 {
-    ASSERT(Options::enableExceptionFuzz());
+    ASSERT(Options::useExceptionFuzz());
 
     DeferGCForAWhile deferGC(exec->vm().heap);
     
diff --git a/Source/JavaScriptCore/runtime/ExceptionFuzz.h b/Source/JavaScriptCore/runtime/ExceptionFuzz.h
index d9a6b4b..d96c756 100644
--- a/Source/JavaScriptCore/runtime/ExceptionFuzz.h
+++ b/Source/JavaScriptCore/runtime/ExceptionFuzz.h
@@ -38,7 +38,7 @@
 // This is what you should call if you don't know if fuzzing is enabled.
 ALWAYS_INLINE void doExceptionFuzzingIfEnabled(ExecState* exec, const char* where, void* returnPC)
 {
-    if (LIKELY(!Options::enableExceptionFuzz()))
+    if (LIKELY(!Options::useExceptionFuzz()))
         return;
     doExceptionFuzzing(exec, where, returnPC);
 }
diff --git a/Source/JavaScriptCore/runtime/JSGlobalObject.cpp b/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
index 5272678..fb6cd9e 100644
--- a/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
+++ b/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
@@ -552,7 +552,7 @@
     JSConsole* consoleObject = JSConsole::create(vm, m_consoleStructure.get());
     putDirectWithoutTransition(vm, Identifier::fromString(exec, "console"), consoleObject, DontEnum);
 
-    if (UNLIKELY(Options::enableDollarVM())) {
+    if (UNLIKELY(Options::useDollarVM())) {
         JSDollarVMPrototype* dollarVMPrototype = JSDollarVMPrototype::create(vm, this, JSDollarVMPrototype::createStructure(vm, this, m_objectPrototype.get()));
         m_dollarVMStructure.set(vm, this, JSDollarVM::createStructure(vm, this, dollarVMPrototype));
         JSDollarVM* dollarVM = JSDollarVM::create(vm, m_dollarVMStructure.get());
diff --git a/Source/JavaScriptCore/runtime/Options.cpp b/Source/JavaScriptCore/runtime/Options.cpp
index b33858f..58df78a 100644
--- a/Source/JavaScriptCore/runtime/Options.cpp
+++ b/Source/JavaScriptCore/runtime/Options.cpp
@@ -262,7 +262,7 @@
     Options::useRegExpJIT() = false;
 #endif
 #if !ENABLE(CONCURRENT_JIT)
-    Options::enableConcurrentJIT() = false;
+    Options::useConcurrentJIT() = false;
 #endif
 #if !ENABLE(DFG_JIT)
     Options::useDFGJIT() = false;
@@ -276,9 +276,9 @@
     if (!MacroAssemblerX86::supportsFloatingPoint())
         Options::useJIT() = false;
 #endif
-    if (Options::showDisassembly()
-        || Options::showDFGDisassembly()
-        || Options::showFTLDisassembly()
+    if (Options::dumpDisassembly()
+        || Options::dumpDFGDisassembly()
+        || Options::dumpFTLDisassembly()
         || Options::dumpBytecodeAtDFGTime()
         || Options::dumpGraphAtEachPhase()
         || Options::verboseCompilation()
@@ -306,11 +306,11 @@
         Options::thresholdForFTLOptimizeAfterWarmUp() = 20;
         Options::thresholdForFTLOptimizeSoon() = 20;
         Options::maximumEvalCacheableSourceLength() = 150000;
-        Options::enableConcurrentJIT() = false;
+        Options::useConcurrentJIT() = false;
     }
-    if (Options::enableMaximalFlushInsertionPhase()) {
-        Options::enableOSREntryToDFG() = false;
-        Options::enableOSREntryToFTL() = false;
+    if (Options::useMaximalFlushInsertionPhase()) {
+        Options::useOSREntryToDFG() = false;
+        Options::useOSREntryToFTL() = false;
     }
 
     // Compute the maximum value of the reoptimization retry counter. This is simply
@@ -342,7 +342,7 @@
     
                 // It *probably* makes sense for other platforms to enable this.
 #if PLATFORM(IOS) && CPU(ARM64)
-                enableLLVMFastISel() = true;
+                useLLVMFastISel() = true;
 #endif
         
             // Allow environment vars to override options if applicable.
@@ -396,8 +396,8 @@
 
 void Options::dumpOptionsIfNeeded()
 {
-    if (Options::showOptions()) {
-        DumpLevel level = static_cast<DumpLevel>(Options::showOptions());
+    if (Options::dumpOptions()) {
+        DumpLevel level = static_cast<DumpLevel>(Options::dumpOptions());
         if (level > DumpLevel::Verbose)
             level = DumpLevel::Verbose;
             
@@ -417,7 +417,7 @@
         }
 
         StringBuilder builder;
-        dumpAllOptions(builder, level, title, nullptr, "   ", "\n", ShowDefaults);
+        dumpAllOptions(builder, level, title, nullptr, "   ", "\n", DumpDefaults);
         dataLog(builder.toString());
     }
 }
@@ -528,7 +528,7 @@
 }
 
 void Options::dumpAllOptions(StringBuilder& builder, DumpLevel level, const char* title,
-    const char* separator, const char* optionHeader, const char* optionFooter, ShowDefaultsOption showDefaultsOption)
+    const char* separator, const char* optionHeader, const char* optionFooter, DumpDefaultsOption dumpDefaultsOption)
 {
     if (title) {
         builder.append(title);
@@ -538,24 +538,24 @@
     for (int id = 0; id < numberOfOptions; id++) {
         if (separator && id)
             builder.append(separator);
-        dumpOption(builder, level, static_cast<OptionID>(id), optionHeader, optionFooter, showDefaultsOption);
+        dumpOption(builder, level, static_cast<OptionID>(id), optionHeader, optionFooter, dumpDefaultsOption);
     }
 }
 
 void Options::dumpAllOptionsInALine(StringBuilder& builder)
 {
-    dumpAllOptions(builder, DumpLevel::All, nullptr, " ", nullptr, nullptr, DontShowDefaults);
+    dumpAllOptions(builder, DumpLevel::All, nullptr, " ", nullptr, nullptr, DontDumpDefaults);
 }
 
 void Options::dumpAllOptions(FILE* stream, DumpLevel level, const char* title)
 {
     StringBuilder builder;
-    dumpAllOptions(builder, level, title, nullptr, "   ", "\n", ShowDefaults);
+    dumpAllOptions(builder, level, title, nullptr, "   ", "\n", DumpDefaults);
     fprintf(stream, "%s", builder.toString().ascii().data());
 }
 
 void Options::dumpOption(StringBuilder& builder, DumpLevel level, OptionID id,
-    const char* header, const char* footer, ShowDefaultsOption showDefaultsOption)
+    const char* header, const char* footer, DumpDefaultsOption dumpDefaultsOption)
 {
     if (id >= numberOfOptions)
         return; // Illegal option.
@@ -573,7 +573,7 @@
     builder.append('=');
     option.dump(builder);
 
-    if (wasOverridden && (showDefaultsOption == ShowDefaults)) {
+    if (wasOverridden && (dumpDefaultsOption == DumpDefaults)) {
         builder.append(" (default: ");
         option.defaultOption().dump(builder);
         builder.append(")");
diff --git a/Source/JavaScriptCore/runtime/Options.h b/Source/JavaScriptCore/runtime/Options.h
index be4f228..e6cd501 100644
--- a/Source/JavaScriptCore/runtime/Options.h
+++ b/Source/JavaScriptCore/runtime/Options.h
@@ -102,7 +102,7 @@
 typedef const char* optionString;
 
 #define JSC_OPTIONS(v) \
-    v(unsigned, showOptions, 0, "shows JSC options (0 = None, 1 = Overridden only, 2 = All, 3 = Verbose)") \
+    v(unsigned, dumpOptions, 0, "dumps JSC options (0 = None, 1 = Overridden only, 2 = All, 3 = Verbose)") \
     \
     v(bool, useLLInt,  true, "allows the LLINT to be used if true") \
     v(bool, useJIT,    true, "allows the baseline JIT to be used if true") \
@@ -130,15 +130,15 @@
     v(bool, forceDebuggerBytecodeGeneration, false, nullptr) \
     v(bool, forceProfilerBytecodeGeneration, false, nullptr) \
     \
-    v(bool, enableFunctionDotArguments, true, nullptr) \
-    v(bool, enableTailCalls, false, nullptr) \
+    v(bool, useFunctionDotArguments, true, nullptr) \
+    v(bool, useTailCalls, false, nullptr) \
     \
-    /* showDisassembly implies showDFGDisassembly. */ \
-    v(bool, showDisassembly, false, "dumps disassembly of all JIT compiled code upon compilation") \
+    /* dumpDisassembly implies dumpDFGDisassembly. */ \
+    v(bool, dumpDisassembly, false, "dumps disassembly of all JIT compiled code upon compilation") \
     v(bool, asyncDisassembly, false, nullptr) \
-    v(bool, showDFGDisassembly, false, "dumps disassembly of DFG function upon compilation") \
-    v(bool, showFTLDisassembly, false, "dumps disassembly of FTL function upon compilation") \
-    v(bool, showAllDFGNodes, false, nullptr) \
+    v(bool, dumpDFGDisassembly, false, "dumps disassembly of DFG function upon compilation") \
+    v(bool, dumpFTLDisassembly, false, "dumps disassembly of FTL function upon compilation") \
+    v(bool, dumpAllDFGNodes, false, nullptr) \
     v(optionRange, bytecodeRangeToDFGCompile, 0, "bytecode size range to allow DFG compilation on, e.g. 1:100") \
     v(optionString, dfgWhitelist, nullptr, "file with list of function signatures to allow DFG compilation on") \
     v(bool, dumpSourceAtDFGTime, false, "dumps source code of JS function being DFG compiled") \
@@ -166,15 +166,15 @@
     v(bool, alwaysComputeHash, false, nullptr) \
     v(bool, testTheFTL, false, nullptr) \
     v(bool, verboseSanitizeStack, false, nullptr) \
-    v(bool, alwaysDoFullCollection, false, nullptr) \
+    v(bool, useGenerationalGC, true, nullptr) \
     v(bool, eagerlyUpdateTopCallFrame, false, nullptr) \
     \
-    v(bool, enableOSREntryToDFG, true, nullptr) \
-    v(bool, enableOSREntryToFTL, true, nullptr) \
+    v(bool, useOSREntryToDFG, true, nullptr) \
+    v(bool, useOSREntryToFTL, true, nullptr) \
     \
     v(bool, useFTLJIT, true, "allows the FTL JIT to be used if true") \
     v(bool, useFTLTBAA, true, nullptr) \
-    v(bool, enableLLVMFastISel, false, nullptr) \
+    v(bool, useLLVMFastISel, false, nullptr) \
     v(bool, useLLVMSmallCodeModel, false, nullptr) \
     v(bool, dumpLLVMIR, false, nullptr) \
     v(bool, validateFTLOSRExitLiveness, false, nullptr) \
@@ -190,33 +190,33 @@
     v(bool, ftlCrashesIfCantInitializeLLVM, false, nullptr) \
     v(bool, clobberAllRegsInFTLICSlowPath, !ASSERT_DISABLED, nullptr) \
     v(bool, assumeAllRegsInFTLICAreLive, false, nullptr) \
-    v(bool, enableAccessInlining, true, nullptr) \
+    v(bool, useAccessInlining, true, nullptr) \
     v(unsigned, maxAccessVariantListSize, 8, nullptr) \
-    v(bool, enablePolyvariantDevirtualization, true, nullptr) \
-    v(bool, enablePolymorphicAccessInlining, true, nullptr) \
-    v(bool, enablePolymorphicCallInlining, true, nullptr) \
+    v(bool, usePolyvariantDevirtualization, true, nullptr) \
+    v(bool, usePolymorphicAccessInlining, true, nullptr) \
+    v(bool, usePolymorphicCallInlining, true, nullptr) \
     v(unsigned, maxPolymorphicCallVariantListSize, 15, nullptr) \
     v(unsigned, maxPolymorphicCallVariantListSizeForTopTier, 5, nullptr) \
     v(unsigned, maxPolymorphicCallVariantsForInlining, 5, nullptr) \
     v(unsigned, frequentCallThreshold, 2, nullptr) \
     v(double, minimumCallToKnownRate, 0.51, nullptr) \
     v(bool, createPreHeaders, true, nullptr) \
-    v(bool, enableMovHintRemoval, true, nullptr) \
-    v(bool, enableObjectAllocationSinking, true, nullptr) \
-    v(bool, enableCopyBarrierOptimization, true, nullptr) \
+    v(bool, useMovHintRemoval, true, nullptr) \
+    v(bool, useObjectAllocationSinking, true, nullptr) \
+    v(bool, useCopyBarrierOptimization, true, nullptr) \
     \
-    v(bool, enableConcurrentJIT, true, "allows the DFG / FTL compilation in threads other than the executing JS thread") \
+    v(bool, useConcurrentJIT, true, "allows the DFG / FTL compilation in threads other than the executing JS thread") \
     v(unsigned, numberOfDFGCompilerThreads, computeNumberOfWorkerThreads(2, 2) - 1, nullptr) \
     v(unsigned, numberOfFTLCompilerThreads, computeNumberOfWorkerThreads(8, 2) - 1, nullptr) \
     v(int32, priorityDeltaOfDFGCompilerThreads, computePriorityDeltaOfWorkerThreads(-1, 0), nullptr) \
     v(int32, priorityDeltaOfFTLCompilerThreads, computePriorityDeltaOfWorkerThreads(-2, 0), nullptr) \
     \
-    v(bool, enableProfiler, false, nullptr) \
+    v(bool, useProfiler, false, nullptr) \
     \
     v(bool, forceUDis86Disassembler, false, nullptr) \
     v(bool, forceLLVMDisassembler, false, nullptr) \
     \
-    v(bool, enableArchitectureSpecificOptimizations, true, nullptr) \
+    v(bool, useArchitectureSpecificOptimizations, true, nullptr) \
     \
     v(bool, breakOnThrow, false, nullptr) \
     \
@@ -240,10 +240,10 @@
     \
     v(unsigned, maximumVarargsForInlining, 100, nullptr) \
     \
-    v(bool, enablePolyvariantCallInlining, true, nullptr) \
-    v(bool, enablePolyvariantByIdInlining, true, nullptr) \
+    v(bool, usePolyvariantCallInlining, true, nullptr) \
+    v(bool, usePolyvariantByIdInlining, true, nullptr) \
     \
-    v(bool, enableMaximalFlushInsertionPhase, false, "Setting to true enables the DFG's MaximalFlushInsertionPhase to run.") \
+    v(bool, useMaximalFlushInsertionPhase, false, "Setting to true allows the DFG's MaximalFlushInsertionPhase to run.") \
     \
     v(unsigned, maximumBinaryStringSwitchCaseLength, 50, nullptr) \
     v(unsigned, maximumBinaryStringSwitchTotalLength, 2000, nullptr) \
@@ -306,35 +306,35 @@
     v(unsigned, forcedWeakRandomSeed, 0, nullptr) \
     \
     v(bool, useZombieMode, false, "debugging option to scribble over dead objects with 0xdeadbeef") \
-    v(bool, objectsAreImmortal, false, "debugging option to keep all objects alive forever") \
-    v(bool, showObjectStatistics, false, nullptr) \
+    v(bool, useImmortalObjects, false, "debugging option to keep all objects alive forever") \
+    v(bool, dumpObjectStatistics, false, nullptr) \
     \
     v(gcLogLevel, logGC, GCLogging::None, "debugging option to log GC activity (0 = None, 1 = Basic, 2 = Verbose)") \
-    v(bool, disableGC, false, nullptr) \
+    v(bool, useGC, true, nullptr) \
     v(unsigned, gcMaxHeapSize, 0, nullptr) \
     v(unsigned, forceRAMSize, 0, nullptr) \
     v(bool, recordGCPauseTimes, false, nullptr) \
     v(bool, logHeapStatisticsAtExit, false, nullptr) \
-    v(bool, enableTypeProfiler, false, nullptr) \
-    v(bool, enableControlFlowProfiler, false, nullptr) \
+    v(bool, useTypeProfiler, false, nullptr) \
+    v(bool, useControlFlowProfiler, false, nullptr) \
     \
     v(bool, verifyHeap, false, nullptr) \
     v(unsigned, numberOfGCCyclesToRecordForVerification, 3, nullptr) \
     \
-    v(bool, enableExceptionFuzz, false, nullptr) \
+    v(bool, useExceptionFuzz, false, nullptr) \
     v(unsigned, fireExceptionFuzzAt, 0, nullptr) \
     \
-    v(bool, enableExecutableAllocationFuzz, false, nullptr) \
+    v(bool, useExecutableAllocationFuzz, false, nullptr) \
     v(unsigned, fireExecutableAllocationFuzzAt, 0, nullptr) \
     v(unsigned, fireExecutableAllocationFuzzAtOrAfter, 0, nullptr) \
     v(bool, verboseExecutableAllocationFuzz, false, nullptr) \
     \
-    v(bool, enableOSRExitFuzz, false, nullptr) \
+    v(bool, useOSRExitFuzz, false, nullptr) \
     v(unsigned, fireOSRExitFuzzAtStatic, 0, nullptr) \
     v(unsigned, fireOSRExitFuzzAt, 0, nullptr) \
     v(unsigned, fireOSRExitFuzzAtOrAfter, 0, nullptr) \
     \
-    v(bool, enableDollarVM, false, "installs the $vm debugging tool in global objects") \
+    v(bool, useDollarVM, false, "installs the $vm debugging tool in global objects") \
     v(optionString, functionOverrides, nullptr, "file with debugging overrides for function bodies") \
     \
     v(unsigned, watchdog, 0, "watchdog timeout (0 = Disabled, N = a timeout period of N milliseconds)") \
@@ -419,15 +419,15 @@
 
     Options();
 
-    enum ShowDefaultsOption {
-        DontShowDefaults,
-        ShowDefaults
+    enum DumpDefaultsOption {
+        DontDumpDefaults,
+        DumpDefaults
     };
     static void dumpOptionsIfNeeded();
     static void dumpAllOptions(StringBuilder&, DumpLevel, const char* title,
-        const char* separator, const char* optionHeader, const char* optionFooter, ShowDefaultsOption);
+        const char* separator, const char* optionHeader, const char* optionFooter, DumpDefaultsOption);
     static void dumpOption(StringBuilder&, DumpLevel, OptionID,
-        const char* optionHeader, const char* optionFooter, ShowDefaultsOption);
+        const char* optionHeader, const char* optionFooter, DumpDefaultsOption);
 
     // Declare the singleton instance of the options store:
     JS_EXPORTDATA static Entry s_options[numberOfOptions];
diff --git a/Source/JavaScriptCore/runtime/VM.cpp b/Source/JavaScriptCore/runtime/VM.cpp
index 695fadc..5135f40 100644
--- a/Source/JavaScriptCore/runtime/VM.cpp
+++ b/Source/JavaScriptCore/runtime/VM.cpp
@@ -281,7 +281,7 @@
     
     LLInt::Data::performAssertions(*this);
     
-    if (Options::enableProfiler()) {
+    if (Options::useProfiler()) {
         m_perBytecodeProfiler = std::make_unique<Profiler::Database>(*this);
 
         StringPrintStream pathOut;
@@ -303,9 +303,9 @@
     // won't use this.
     m_typedArrayController = adoptRef(new SimpleTypedArrayController());
 
-    if (Options::enableTypeProfiler())
+    if (Options::useTypeProfiler())
         enableTypeProfiler();
-    if (Options::enableControlFlowProfiler())
+    if (Options::useControlFlowProfiler())
         enableControlFlowProfiler();
 
     if (Options::watchdog()) {
diff --git a/Source/JavaScriptCore/runtime/VM.h b/Source/JavaScriptCore/runtime/VM.h
index 050d63f..38b6f43 100644
--- a/Source/JavaScriptCore/runtime/VM.h
+++ b/Source/JavaScriptCore/runtime/VM.h
@@ -493,7 +493,7 @@
 
     EncodedJSValue* exceptionFuzzingBuffer(size_t size)
     {
-        ASSERT(Options::enableExceptionFuzz());
+        ASSERT(Options::useExceptionFuzz());
         if (!m_exceptionFuzzBuffer)
             m_exceptionFuzzBuffer = MallocPtr<EncodedJSValue>::malloc(size);
         return m_exceptionFuzzBuffer.get();
diff --git a/Source/JavaScriptCore/runtime/WriteBarrierInlines.h b/Source/JavaScriptCore/runtime/WriteBarrierInlines.h
index 8271e48..3b332f3 100644
--- a/Source/JavaScriptCore/runtime/WriteBarrierInlines.h
+++ b/Source/JavaScriptCore/runtime/WriteBarrierInlines.h
@@ -35,7 +35,7 @@
 inline void WriteBarrierBase<T>::set(VM& vm, const JSCell* owner, T* value)
 {
     ASSERT(value);
-    ASSERT(!Options::enableConcurrentJIT() || !isCompilationThread());
+    ASSERT(!Options::useConcurrentJIT() || !isCompilationThread());
     validateCell(value);
     setEarlyValue(vm, owner, value);
 }
@@ -57,7 +57,7 @@
 
 inline void WriteBarrierBase<Unknown>::set(VM& vm, const JSCell* owner, JSValue value)
 {
-    ASSERT(!Options::enableConcurrentJIT() || !isCompilationThread());
+    ASSERT(!Options::useConcurrentJIT() || !isCompilationThread());
     m_value = JSValue::encode(value);
     vm.heap.writeBarrier(owner, value);
 }
diff --git a/Source/JavaScriptCore/tests/executableAllocationFuzz.yaml b/Source/JavaScriptCore/tests/executableAllocationFuzz.yaml
index 66e651c..b0ea004 100644
--- a/Source/JavaScriptCore/tests/executableAllocationFuzz.yaml
+++ b/Source/JavaScriptCore/tests/executableAllocationFuzz.yaml
@@ -27,5 +27,5 @@
           skip
       else
           runExecutableAllocationFuzz("default")
-          runExecutableAllocationFuzz("no-cjit", "--enableConcurrentJIT=false")
+          runExecutableAllocationFuzz("no-cjit", "--useConcurrentJIT=false")
       end
diff --git a/Source/JavaScriptCore/tests/stress/arrowfunction-typeof.js b/Source/JavaScriptCore/tests/stress/arrowfunction-typeof.js
index 753ec0d..14c03c7 100644
--- a/Source/JavaScriptCore/tests/stress/arrowfunction-typeof.js
+++ b/Source/JavaScriptCore/tests/stress/arrowfunction-typeof.js
@@ -15,7 +15,7 @@
   testCase(typeof af2, "function", "Error: Not correct type of the arrow function #2");
 
 //Fixme: Some bug in inlining typeof with following run parameters ftl-no-cjit-no-inline-validate
-// --useFTLJIT\=true --enableFunctionDotArguments\=true --enableConcurrentJIT=false --thresholdForJITAfterWarmUp=100  --validateGraph=true --maximumInliningDepth=1
+// --useFTLJIT\=true --useFunctionDotArguments\=true --useConcurrentJIT=false --thresholdForJITAfterWarmUp=100  --validateGraph=true --maximumInliningDepth=1
 //
 // for (var i = 0; i < 10000; ++i)  {
 //   if (typeof (function () {}) !== 'function')
diff --git a/Source/JavaScriptCore/tests/stress/disable-function-dot-arguments.js b/Source/JavaScriptCore/tests/stress/disable-function-dot-arguments.js
index ba94fc3..1996ce1 100644
--- a/Source/JavaScriptCore/tests/stress/disable-function-dot-arguments.js
+++ b/Source/JavaScriptCore/tests/stress/disable-function-dot-arguments.js
@@ -1,4 +1,4 @@
-//@ run("function-dot-arguments", "--enableFunctionDotArguments=false")
+//@ run("function-dot-arguments", "--useFunctionDotArguments=false")
 
 function foo() {
     var a = bar.arguments;
diff --git a/Source/JavaScriptCore/tests/stress/math-sqrt-basics-disable-architecture-specific-optimizations.js b/Source/JavaScriptCore/tests/stress/math-sqrt-basics-disable-architecture-specific-optimizations.js
index c29bf56..3332523 100644
--- a/Source/JavaScriptCore/tests/stress/math-sqrt-basics-disable-architecture-specific-optimizations.js
+++ b/Source/JavaScriptCore/tests/stress/math-sqrt-basics-disable-architecture-specific-optimizations.js
@@ -1,5 +1,5 @@
-//@ run("no-architecture-specific-optimizations", "--enableArchitectureSpecificOptimizations=false", *NO_CJIT_OPTIONS)
-//@ run("no-architecture-specific-optimizations-ftl", "--enableArchitectureSpecificOptimizations=false", *FTL_OPTIONS)
+//@ run("no-architecture-specific-optimizations", "--useArchitectureSpecificOptimizations=false", *NO_CJIT_OPTIONS)
+//@ run("no-architecture-specific-optimizations-ftl", "--useArchitectureSpecificOptimizations=false", *FTL_OPTIONS)
 
 // Basic cases of Math.sqrt().
 function sqrtOnInteger(radicand) {
diff --git a/Source/JavaScriptCore/tests/stress/regress-148564.js b/Source/JavaScriptCore/tests/stress/regress-148564.js
index f70567a..52675b8 100644
--- a/Source/JavaScriptCore/tests/stress/regress-148564.js
+++ b/Source/JavaScriptCore/tests/stress/regress-148564.js
@@ -5,7 +5,7 @@
 // In order to manifest, the bug being tested requires all these conditions to be true:
 // 1. A put operation must not being optimized by the DFG into a PutByOffset.
 //    It needs to be a PutById node instead so that it will use the inline cache.
-//    This is satisfied by using the --enableAccessInlining=false option above.
+//    This is satisfied by using the --useAccessInlining=false option above.
 //
 // 2. The PutById's execution must go through its transition stub.
 //
