Fix existing usage of final/override/virtual in JSC and WTF
authorross.kirsling@sony.com <ross.kirsling@sony.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 12 May 2020 19:13:18 +0000 (19:13 +0000)
committerross.kirsling@sony.com <ross.kirsling@sony.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 12 May 2020 19:13:18 +0000 (19:13 +0000)
https://bugs.webkit.org/show_bug.cgi?id=211772

Reviewed by Darin Adler.

Source/JavaScriptCore:

* API/JSAPIWrapperObject.mm:
* API/JSManagedValue.mm:
* API/JSScriptSourceProvider.h:
* API/ObjCCallbackFunction.mm:
* API/glib/JSAPIWrapperGlobalObject.cpp:
* API/glib/JSAPIWrapperObjectGLib.cpp:
* API/glib/JSCWeakValue.cpp:
* bytecode/AccessCaseSnippetParams.cpp:
* bytecode/AccessCaseSnippetParams.h:
* bytecode/CodeBlock.cpp:
* bytecode/StructureStubClearingWatchpoint.h:
* bytecode/VariableWriteFireDetail.h:
* bytecode/Watchpoint.h:
* dfg/DFGAdaptiveInferredPropertyValueWatchpoint.h:
* dfg/DFGArrayifySlowPathGenerator.h:
* dfg/DFGCallArrayAllocatorSlowPathGenerator.h:
* dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:
* dfg/DFGSaneStringGetByValSlowPathGenerator.h:
* dfg/DFGSlowPathGenerator.h:
* dfg/DFGSnippetParams.h:
* dfg/DFGWorklist.cpp:
* ftl/FTLSnippetParams.h:
* heap/BlockDirectory.cpp:
* heap/EdenGCActivityCallback.h:
* heap/FullGCActivityCallback.h:
* heap/Heap.cpp:
* heap/Heap.h:
* heap/IncrementalSweeper.h:
* heap/IsoCellSet.cpp:
* heap/IsoCellSetInlines.h:
* heap/IsoHeapCellType.h:
* heap/IsoInlinedHeapCellType.h:
* heap/ParallelSourceAdapter.h:
* heap/StopIfNecessaryTimer.h:
* heap/Subspace.cpp:
* heap/SubspaceInlines.h:
* inspector/InjectedScript.h:
* inspector/JSGlobalObjectConsoleClient.h:
* inspector/JSGlobalObjectInspectorController.h:
* inspector/JSGlobalObjectScriptDebugServer.h:
* inspector/JSInjectedScriptHost.cpp:
* inspector/agents/InspectorAgent.h:
* inspector/agents/InspectorScriptProfilerAgent.h:
* inspector/agents/InspectorTargetAgent.h:
* inspector/agents/JSGlobalObjectAuditAgent.h:
* inspector/agents/JSGlobalObjectDebuggerAgent.h:
* inspector/agents/JSGlobalObjectRuntimeAgent.h:
* inspector/augmentable/AlternateDispatchableAgent.h:
* inspector/remote/RemoteConnectionToTarget.h:
* inspector/remote/RemoteInspector.h:
* inspector/remote/socket/RemoteInspectorServer.h:
* inspector/scripts/codegen/cpp_generator_templates.py:
* inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:
* inspector/scripts/tests/all/expected/definitions-with-mac-platform.json-result:
* inspector/scripts/tests/generic/expected/command-targetType-matching-domain-debuggableType.json-result:
* inspector/scripts/tests/generic/expected/commands-with-async-attribute.json-result:
* inspector/scripts/tests/generic/expected/commands-with-optional-call-return-parameters.json-result:
* inspector/scripts/tests/generic/expected/domain-debuggableTypes.json-result:
* inspector/scripts/tests/generic/expected/domain-targetType-matching-domain-debuggableType.json-result:
* inspector/scripts/tests/generic/expected/domain-targetTypes.json-result:
* inspector/scripts/tests/generic/expected/domains-with-varying-command-sizes.json-result:
* inspector/scripts/tests/generic/expected/enum-values.json-result:
* inspector/scripts/tests/generic/expected/event-targetType-matching-domain-debuggableType.json-result:
* inspector/scripts/tests/generic/expected/generate-domains-with-feature-guards.json-result:
* inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result:
* jit/JITWorklist.cpp:
* parser/Nodes.h:
* parser/SourceProvider.h:
* runtime/DataView.h:
* runtime/DoublePredictionFuzzerAgent.h:
* runtime/FileBasedFuzzerAgent.h:
* runtime/GenericTypedArrayView.h:
* runtime/JSMicrotask.cpp:
* runtime/NarrowingNumberPredictionFuzzerAgent.h:
* runtime/ObjectPropertyChangeAdaptiveWatchpoint.h:
* runtime/PredictionFileCreatingFuzzerAgent.h:
* runtime/PromiseTimer.h:
* runtime/RandomizingFuzzerAgent.h:
* runtime/RegExpCache.h:
* runtime/Structure.cpp:
* runtime/StructureRareData.cpp:
* runtime/VMTraps.cpp:
* runtime/WideningNumberPredictionFuzzerAgent.h:
* tools/JSDollarVM.cpp:
* wasm/WasmBBQPlan.h:
* wasm/WasmCallee.h:
* wasm/WasmLLIntPlan.h:
* wasm/WasmOMGForOSREntryPlan.h:
* wasm/WasmOMGPlan.h:
* wasm/WasmWorklist.cpp:
* yarr/YarrJIT.cpp:

Source/WTF:

* wtf/Assertions.cpp:
* wtf/Expected.h:
* wtf/FilePrintStream.h:
* wtf/JSONValues.h:
* wtf/LockedPrintStream.h:
* wtf/OSLogPrintStream.h:
* wtf/ParallelHelperPool.cpp:
* wtf/RunLoop.h:
* wtf/SharedTask.h:
* wtf/StringPrintStream.h:
* wtf/WorkQueue.h:
* wtf/WorkerPool.cpp:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@261569 268f45cc-cd09-0410-ab3c-d52691b4dbfc

105 files changed:
Source/JavaScriptCore/API/JSAPIWrapperObject.mm
Source/JavaScriptCore/API/JSManagedValue.mm
Source/JavaScriptCore/API/JSScriptSourceProvider.h
Source/JavaScriptCore/API/ObjCCallbackFunction.mm
Source/JavaScriptCore/API/glib/JSAPIWrapperGlobalObject.cpp
Source/JavaScriptCore/API/glib/JSAPIWrapperObjectGLib.cpp
Source/JavaScriptCore/API/glib/JSCWeakValue.cpp
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/bytecode/AccessCaseSnippetParams.cpp
Source/JavaScriptCore/bytecode/AccessCaseSnippetParams.h
Source/JavaScriptCore/bytecode/CodeBlock.cpp
Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h
Source/JavaScriptCore/bytecode/VariableWriteFireDetail.h
Source/JavaScriptCore/bytecode/Watchpoint.h
Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.h
Source/JavaScriptCore/dfg/DFGArrayifySlowPathGenerator.h
Source/JavaScriptCore/dfg/DFGCallArrayAllocatorSlowPathGenerator.h
Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h
Source/JavaScriptCore/dfg/DFGSaneStringGetByValSlowPathGenerator.h
Source/JavaScriptCore/dfg/DFGSlowPathGenerator.h
Source/JavaScriptCore/dfg/DFGSnippetParams.h
Source/JavaScriptCore/dfg/DFGWorklist.cpp
Source/JavaScriptCore/ftl/FTLSnippetParams.h
Source/JavaScriptCore/heap/BlockDirectory.cpp
Source/JavaScriptCore/heap/EdenGCActivityCallback.h
Source/JavaScriptCore/heap/FullGCActivityCallback.h
Source/JavaScriptCore/heap/Heap.cpp
Source/JavaScriptCore/heap/Heap.h
Source/JavaScriptCore/heap/IncrementalSweeper.h
Source/JavaScriptCore/heap/IsoCellSet.cpp
Source/JavaScriptCore/heap/IsoCellSetInlines.h
Source/JavaScriptCore/heap/IsoHeapCellType.h
Source/JavaScriptCore/heap/IsoInlinedHeapCellType.h
Source/JavaScriptCore/heap/ParallelSourceAdapter.h
Source/JavaScriptCore/heap/StopIfNecessaryTimer.h
Source/JavaScriptCore/heap/Subspace.cpp
Source/JavaScriptCore/heap/SubspaceInlines.h
Source/JavaScriptCore/inspector/InjectedScript.h
Source/JavaScriptCore/inspector/JSGlobalObjectConsoleClient.h
Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.h
Source/JavaScriptCore/inspector/JSGlobalObjectScriptDebugServer.h
Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp
Source/JavaScriptCore/inspector/agents/InspectorAgent.h
Source/JavaScriptCore/inspector/agents/InspectorScriptProfilerAgent.h
Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.h
Source/JavaScriptCore/inspector/agents/JSGlobalObjectAuditAgent.h
Source/JavaScriptCore/inspector/agents/JSGlobalObjectDebuggerAgent.h
Source/JavaScriptCore/inspector/agents/JSGlobalObjectRuntimeAgent.h
Source/JavaScriptCore/inspector/augmentable/AlternateDispatchableAgent.h
Source/JavaScriptCore/inspector/remote/RemoteConnectionToTarget.h
Source/JavaScriptCore/inspector/remote/RemoteInspector.h
Source/JavaScriptCore/inspector/remote/socket/RemoteInspectorServer.h
Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator_templates.py
Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py
Source/JavaScriptCore/inspector/scripts/tests/all/expected/definitions-with-mac-platform.json-result
Source/JavaScriptCore/inspector/scripts/tests/generic/expected/command-targetType-matching-domain-debuggableType.json-result
Source/JavaScriptCore/inspector/scripts/tests/generic/expected/commands-with-async-attribute.json-result
Source/JavaScriptCore/inspector/scripts/tests/generic/expected/commands-with-optional-call-return-parameters.json-result
Source/JavaScriptCore/inspector/scripts/tests/generic/expected/domain-debuggableTypes.json-result
Source/JavaScriptCore/inspector/scripts/tests/generic/expected/domain-targetType-matching-domain-debuggableType.json-result
Source/JavaScriptCore/inspector/scripts/tests/generic/expected/domain-targetTypes.json-result
Source/JavaScriptCore/inspector/scripts/tests/generic/expected/domains-with-varying-command-sizes.json-result
Source/JavaScriptCore/inspector/scripts/tests/generic/expected/enum-values.json-result
Source/JavaScriptCore/inspector/scripts/tests/generic/expected/event-targetType-matching-domain-debuggableType.json-result
Source/JavaScriptCore/inspector/scripts/tests/generic/expected/generate-domains-with-feature-guards.json-result
Source/JavaScriptCore/inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result
Source/JavaScriptCore/jit/JITWorklist.cpp
Source/JavaScriptCore/parser/Nodes.h
Source/JavaScriptCore/parser/SourceProvider.h
Source/JavaScriptCore/runtime/DataView.h
Source/JavaScriptCore/runtime/DoublePredictionFuzzerAgent.h
Source/JavaScriptCore/runtime/FileBasedFuzzerAgent.h
Source/JavaScriptCore/runtime/GenericTypedArrayView.h
Source/JavaScriptCore/runtime/JSMicrotask.cpp
Source/JavaScriptCore/runtime/NarrowingNumberPredictionFuzzerAgent.h
Source/JavaScriptCore/runtime/ObjectPropertyChangeAdaptiveWatchpoint.h
Source/JavaScriptCore/runtime/PredictionFileCreatingFuzzerAgent.h
Source/JavaScriptCore/runtime/PromiseTimer.h
Source/JavaScriptCore/runtime/RandomizingFuzzerAgent.h
Source/JavaScriptCore/runtime/RegExpCache.h
Source/JavaScriptCore/runtime/Structure.cpp
Source/JavaScriptCore/runtime/StructureRareData.cpp
Source/JavaScriptCore/runtime/VMTraps.cpp
Source/JavaScriptCore/runtime/WideningNumberPredictionFuzzerAgent.h
Source/JavaScriptCore/tools/JSDollarVM.cpp
Source/JavaScriptCore/wasm/WasmBBQPlan.h
Source/JavaScriptCore/wasm/WasmCallee.h
Source/JavaScriptCore/wasm/WasmLLIntPlan.h
Source/JavaScriptCore/wasm/WasmOMGForOSREntryPlan.h
Source/JavaScriptCore/wasm/WasmOMGPlan.h
Source/JavaScriptCore/wasm/WasmWorklist.cpp
Source/JavaScriptCore/yarr/YarrJIT.cpp
Source/WTF/ChangeLog
Source/WTF/wtf/Assertions.cpp
Source/WTF/wtf/Expected.h
Source/WTF/wtf/FilePrintStream.h
Source/WTF/wtf/JSONValues.h
Source/WTF/wtf/LockedPrintStream.h
Source/WTF/wtf/OSLogPrintStream.h
Source/WTF/wtf/ParallelHelperPool.cpp
Source/WTF/wtf/RunLoop.h
Source/WTF/wtf/SharedTask.h
Source/WTF/wtf/StringPrintStream.h
Source/WTF/wtf/WorkQueue.h
Source/WTF/wtf/WorkerPool.cpp

index 91bcca5..e29faf9 100644 (file)
 
 #if JSC_OBJC_API_ENABLED
 
-class JSAPIWrapperObjectHandleOwner : public JSC::WeakHandleOwner {
+class JSAPIWrapperObjectHandleOwner final : public JSC::WeakHandleOwner {
 public:
-    void finalize(JSC::Handle<JSC::Unknown>, void*) override;
-    bool isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown>, void* context, JSC::SlotVisitor&, const char**) override;
+    void finalize(JSC::Handle<JSC::Unknown>, void*) final;
+    bool isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown>, void* context, JSC::SlotVisitor&, const char**) final;
 };
 
 static JSAPIWrapperObjectHandleOwner* jsAPIWrapperObjectHandleOwner()
index 63d6492..c18737b 100644 (file)
 #import "JSCInlines.h"
 #import <wtf/NeverDestroyed.h>
 
-class JSManagedValueHandleOwner : public JSC::WeakHandleOwner {
+class JSManagedValueHandleOwner final : public JSC::WeakHandleOwner {
 public:
-    void finalize(JSC::Handle<JSC::Unknown>, void* context) override;
-    bool isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown>, void* context, JSC::SlotVisitor&, const char**) override;
+    void finalize(JSC::Handle<JSC::Unknown>, void* context) final;
+    bool isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown>, void* context, JSC::SlotVisitor&, const char**) final;
 };
 
 static JSManagedValueHandleOwner& managedValueHandleOwner()
index 09e4018..677b7a0 100644 (file)
@@ -29,7 +29,7 @@
 
 @class JSScript;
 
-class JSScriptSourceProvider : public JSC::SourceProvider {
+class JSScriptSourceProvider final : public JSC::SourceProvider {
 public:
     template<typename... Args>
     static Ref<JSScriptSourceProvider> create(JSScript *script, Args&&... args)
@@ -37,9 +37,9 @@ public:
         return adoptRef(*new JSScriptSourceProvider(script, std::forward<Args>(args)...));
     }
 
-    unsigned hash() const override;
-    StringView source() const override;
-    RefPtr<JSC::CachedBytecode> cachedBytecode() const override;
+    unsigned hash() const final;
+    StringView source() const final;
+    RefPtr<JSC::CachedBytecode> cachedBytecode() const final;
 
 private:
     template<typename... Args>
index 115e51d..7454f98 100644 (file)
@@ -55,8 +55,8 @@ CallbackArgument::~CallbackArgument()
 {
 }
 
-class CallbackArgumentBoolean : public CallbackArgument {
-    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef*) override
+class CallbackArgumentBoolean final : public CallbackArgument {
+    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef*) final
     {
         bool value = JSValueToBoolean([context JSGlobalContextRef], argument);
         [invocation setArgument:&value atIndex:argumentNumber];
@@ -64,8 +64,8 @@ class CallbackArgumentBoolean : public CallbackArgument {
 };
 
 template<typename T>
-class CallbackArgumentInteger : public CallbackArgument {
-    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef* exception) override
+class CallbackArgumentInteger final : public CallbackArgument {
+    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef* exception) final
     {
         ASSERT(exception && !*exception);
         T value = (T)JSC::toInt32(JSValueToNumber([context JSGlobalContextRef], argument, exception));
@@ -76,8 +76,8 @@ class CallbackArgumentInteger : public CallbackArgument {
 };
 
 template<typename T>
-class CallbackArgumentDouble : public CallbackArgument {
-    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef* exception) override
+class CallbackArgumentDouble final : public CallbackArgument {
+    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef* exception) final
     {
         ASSERT(exception && !*exception);
         T value = (T)JSValueToNumber([context JSGlobalContextRef], argument, exception);
@@ -87,23 +87,23 @@ class CallbackArgumentDouble : public CallbackArgument {
     }
 };
 
-class CallbackArgumentJSValue : public CallbackArgument {
-    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef*) override
+class CallbackArgumentJSValue final : public CallbackArgument {
+    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef*) final
     {
         JSValue *value = [JSValue valueWithJSValueRef:argument inContext:context];
         [invocation setArgument:&value atIndex:argumentNumber];
     }
 };
 
-class CallbackArgumentId : public CallbackArgument {
-    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef*) override
+class CallbackArgumentId final : public CallbackArgument {
+    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef*) final
     {
         id value = valueToObject(context, argument);
         [invocation setArgument:&value atIndex:argumentNumber];
     }
 };
 
-class CallbackArgumentOfClass : public CallbackArgument {
+class CallbackArgumentOfClass final : public CallbackArgument {
 public:
     CallbackArgumentOfClass(Class cls)
         : m_class(cls)
@@ -111,7 +111,7 @@ public:
     }
 
 private:
-    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef* exception) override
+    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef* exception) final
     {
         ASSERT(exception && !*exception);
         JSGlobalContextRef contextRef = [context JSGlobalContextRef];
@@ -134,8 +134,8 @@ private:
     RetainPtr<Class> m_class;
 };
 
-class CallbackArgumentNSNumber : public CallbackArgument {
-    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef* exception) override
+class CallbackArgumentNSNumber final : public CallbackArgument {
+    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef* exception) final
     {
         ASSERT(exception && !*exception);
         id value = valueToNumber([context JSGlobalContextRef], argument, exception);
@@ -145,8 +145,8 @@ class CallbackArgumentNSNumber : public CallbackArgument {
     }
 };
 
-class CallbackArgumentNSString : public CallbackArgument {
-    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef* exception) override
+class CallbackArgumentNSString final : public CallbackArgument {
+    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef* exception) final
     {
         ASSERT(exception && !*exception);
         id value = valueToString([context JSGlobalContextRef], argument, exception);
@@ -156,8 +156,8 @@ class CallbackArgumentNSString : public CallbackArgument {
     }
 };
 
-class CallbackArgumentNSDate : public CallbackArgument {
-    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef* exception) override
+class CallbackArgumentNSDate final : public CallbackArgument {
+    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef* exception) final
     {
         ASSERT(exception && !*exception);
         id value = valueToDate([context JSGlobalContextRef], argument, exception);
@@ -167,8 +167,8 @@ class CallbackArgumentNSDate : public CallbackArgument {
     }
 };
 
-class CallbackArgumentNSArray : public CallbackArgument {
-    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef* exception) override
+class CallbackArgumentNSArray final : public CallbackArgument {
+    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef* exception) final
     {
         ASSERT(exception && !*exception);
         id value = valueToArray([context JSGlobalContextRef], argument, exception);
@@ -178,8 +178,8 @@ class CallbackArgumentNSArray : public CallbackArgument {
     }
 };
 
-class CallbackArgumentNSDictionary : public CallbackArgument {
-    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef* exception) override
+class CallbackArgumentNSDictionary final : public CallbackArgument {
+    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef* exception) final
     {
         ASSERT(exception && !*exception);
         id value = valueToDictionary([context JSGlobalContextRef], argument, exception);
@@ -189,7 +189,7 @@ class CallbackArgumentNSDictionary : public CallbackArgument {
     }
 };
 
-class CallbackArgumentStruct : public CallbackArgument {
+class CallbackArgumentStruct final : public CallbackArgument {
 public:
     CallbackArgumentStruct(NSInvocation *conversionInvocation, const char* encodedType)
         : m_conversionInvocation(conversionInvocation)
@@ -198,7 +198,7 @@ public:
     }
     
 private:
-    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef*) override
+    void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef*) final
     {
         JSValue *value = [JSValue valueWithJSValueRef:argument inContext:context];
         [m_conversionInvocation invokeWithTarget:value];
@@ -210,7 +210,7 @@ private:
     StructBuffer m_buffer;
 };
 
-class ArgumentTypeDelegate {
+class ArgumentTypeDelegate final {
 public:
     typedef std::unique_ptr<CallbackArgument> ResultType;
 
@@ -289,15 +289,15 @@ public:
     virtual JSValueRef get(NSInvocation *, JSContext *, JSValueRef*) = 0;
 };
 
-class CallbackResultVoid : public CallbackResult {
-    JSValueRef get(NSInvocation *, JSContext *context, JSValueRef*) override
+class CallbackResultVoid final : public CallbackResult {
+    JSValueRef get(NSInvocation *, JSContext *context, JSValueRef*) final
     {
         return JSValueMakeUndefined([context JSGlobalContextRef]);
     }
 };
 
-class CallbackResultId : public CallbackResult {
-    JSValueRef get(NSInvocation *invocation, JSContext *context, JSValueRef*) override
+class CallbackResultId final : public CallbackResult {
+    JSValueRef get(NSInvocation *invocation, JSContext *context, JSValueRef*) final
     {
         id value;
         [invocation getReturnValue:&value];
@@ -306,8 +306,8 @@ class CallbackResultId : public CallbackResult {
 };
 
 template<typename T>
-class CallbackResultNumeric : public CallbackResult {
-    JSValueRef get(NSInvocation *invocation, JSContext *context, JSValueRef*) override
+class CallbackResultNumeric final : public CallbackResult {
+    JSValueRef get(NSInvocation *invocation, JSContext *context, JSValueRef*) final
     {
         T value;
         [invocation getReturnValue:&value];
@@ -315,8 +315,8 @@ class CallbackResultNumeric : public CallbackResult {
     }
 };
 
-class CallbackResultBoolean : public CallbackResult {
-    JSValueRef get(NSInvocation *invocation, JSContext *context, JSValueRef*) override
+class CallbackResultBoolean final : public CallbackResult {
+    JSValueRef get(NSInvocation *invocation, JSContext *context, JSValueRef*) final
     {
         bool value;
         [invocation getReturnValue:&value];
@@ -324,7 +324,7 @@ class CallbackResultBoolean : public CallbackResult {
     }
 };
 
-class CallbackResultStruct : public CallbackResult {
+class CallbackResultStruct final : public CallbackResult {
 public:
     CallbackResultStruct(NSInvocation *conversionInvocation, const char* encodedType)
         : m_conversionInvocation(conversionInvocation)
@@ -333,7 +333,7 @@ public:
     }
     
 private:
-    JSValueRef get(NSInvocation *invocation, JSContext *context, JSValueRef*) override
+    JSValueRef get(NSInvocation *invocation, JSContext *context, JSValueRef*) final
     {
         [invocation getReturnValue:m_buffer];
 
@@ -350,7 +350,7 @@ private:
     StructBuffer m_buffer;
 };
 
-class ResultTypeDelegate {
+class ResultTypeDelegate final {
 public:
     typedef std::unique_ptr<CallbackResult> ResultType;
 
@@ -409,7 +409,7 @@ enum CallbackType {
 
 namespace JSC {
 
-class ObjCCallbackFunctionImpl {
+class ObjCCallbackFunctionImpl final {
     WTF_MAKE_FAST_ALLOCATED;
 public:
     ObjCCallbackFunctionImpl(NSInvocation *invocation, CallbackType type, Class instanceClass, std::unique_ptr<CallbackArgument> arguments, std::unique_ptr<CallbackResult> result)
index e2b6592..d8afe80 100644 (file)
@@ -31,9 +31,9 @@
 #include "Structure.h"
 #include <wtf/NeverDestroyed.h>
 
-class JSAPIWrapperGlobalObjectHandleOwner : public JSC::WeakHandleOwner {
+class JSAPIWrapperGlobalObjectHandleOwner final : public JSC::WeakHandleOwner {
 public:
-    void finalize(JSC::Handle<JSC::Unknown>, void*) override;
+    void finalize(JSC::Handle<JSC::Unknown>, void*) final;
 };
 
 static JSAPIWrapperGlobalObjectHandleOwner* jsAPIWrapperGlobalObjectHandleOwner()
index ea34123..2334a1b 100644 (file)
 #include "Structure.h"
 #include <wtf/NeverDestroyed.h>
 
-class JSAPIWrapperObjectHandleOwner : public JSC::WeakHandleOwner {
+class JSAPIWrapperObjectHandleOwner final : public JSC::WeakHandleOwner {
 public:
-    void finalize(JSC::Handle<JSC::Unknown>, void*) override;
-    bool isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown>, void* context, JSC::SlotVisitor&, const char**) override;
+    void finalize(JSC::Handle<JSC::Unknown>, void*) final;
+    bool isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown>, void* context, JSC::SlotVisitor&, const char**) final;
 };
 
 static JSAPIWrapperObjectHandleOwner* jsAPIWrapperObjectHandleOwner()
index e5c04ec..df9799b 100644 (file)
@@ -70,9 +70,9 @@ static void jscWeakValueClear(JSCWeakValue* weakValue)
     priv->weakValueRef.clear();
 }
 
-class JSCWeakValueHandleOwner : public JSC::WeakHandleOwner {
+class JSCWeakValueHandleOwner final : public JSC::WeakHandleOwner {
 public:
-    void finalize(JSC::Handle<JSC::Unknown>, void* context) override
+    void finalize(JSC::Handle<JSC::Unknown>, void* context) final
     {
         auto* weakValue = JSC_WEAK_VALUE(context);
         jscWeakValueClear(weakValue);
index 4fee59a..fa99427 100644 (file)
@@ -1,5 +1,104 @@
 2020-05-12  Ross Kirsling  <ross.kirsling@sony.com>
 
+        Fix existing usage of final/override/virtual in JSC and WTF
+        https://bugs.webkit.org/show_bug.cgi?id=211772
+
+        Reviewed by Darin Adler.
+
+        * API/JSAPIWrapperObject.mm:
+        * API/JSManagedValue.mm:
+        * API/JSScriptSourceProvider.h:
+        * API/ObjCCallbackFunction.mm:
+        * API/glib/JSAPIWrapperGlobalObject.cpp:
+        * API/glib/JSAPIWrapperObjectGLib.cpp:
+        * API/glib/JSCWeakValue.cpp:
+        * bytecode/AccessCaseSnippetParams.cpp:
+        * bytecode/AccessCaseSnippetParams.h:
+        * bytecode/CodeBlock.cpp:
+        * bytecode/StructureStubClearingWatchpoint.h:
+        * bytecode/VariableWriteFireDetail.h:
+        * bytecode/Watchpoint.h:
+        * dfg/DFGAdaptiveInferredPropertyValueWatchpoint.h:
+        * dfg/DFGArrayifySlowPathGenerator.h:
+        * dfg/DFGCallArrayAllocatorSlowPathGenerator.h:
+        * dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:
+        * dfg/DFGSaneStringGetByValSlowPathGenerator.h:
+        * dfg/DFGSlowPathGenerator.h:
+        * dfg/DFGSnippetParams.h:
+        * dfg/DFGWorklist.cpp:
+        * ftl/FTLSnippetParams.h:
+        * heap/BlockDirectory.cpp:
+        * heap/EdenGCActivityCallback.h:
+        * heap/FullGCActivityCallback.h:
+        * heap/Heap.cpp:
+        * heap/Heap.h:
+        * heap/IncrementalSweeper.h:
+        * heap/IsoCellSet.cpp:
+        * heap/IsoCellSetInlines.h:
+        * heap/IsoHeapCellType.h:
+        * heap/IsoInlinedHeapCellType.h:
+        * heap/ParallelSourceAdapter.h:
+        * heap/StopIfNecessaryTimer.h:
+        * heap/Subspace.cpp:
+        * heap/SubspaceInlines.h:
+        * inspector/InjectedScript.h:
+        * inspector/JSGlobalObjectConsoleClient.h:
+        * inspector/JSGlobalObjectInspectorController.h:
+        * inspector/JSGlobalObjectScriptDebugServer.h:
+        * inspector/JSInjectedScriptHost.cpp:
+        * inspector/agents/InspectorAgent.h:
+        * inspector/agents/InspectorScriptProfilerAgent.h:
+        * inspector/agents/InspectorTargetAgent.h:
+        * inspector/agents/JSGlobalObjectAuditAgent.h:
+        * inspector/agents/JSGlobalObjectDebuggerAgent.h:
+        * inspector/agents/JSGlobalObjectRuntimeAgent.h:
+        * inspector/augmentable/AlternateDispatchableAgent.h:
+        * inspector/remote/RemoteConnectionToTarget.h:
+        * inspector/remote/RemoteInspector.h:
+        * inspector/remote/socket/RemoteInspectorServer.h:
+        * inspector/scripts/codegen/cpp_generator_templates.py:
+        * inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:
+        * inspector/scripts/tests/all/expected/definitions-with-mac-platform.json-result:
+        * inspector/scripts/tests/generic/expected/command-targetType-matching-domain-debuggableType.json-result:
+        * inspector/scripts/tests/generic/expected/commands-with-async-attribute.json-result:
+        * inspector/scripts/tests/generic/expected/commands-with-optional-call-return-parameters.json-result:
+        * inspector/scripts/tests/generic/expected/domain-debuggableTypes.json-result:
+        * inspector/scripts/tests/generic/expected/domain-targetType-matching-domain-debuggableType.json-result:
+        * inspector/scripts/tests/generic/expected/domain-targetTypes.json-result:
+        * inspector/scripts/tests/generic/expected/domains-with-varying-command-sizes.json-result:
+        * inspector/scripts/tests/generic/expected/enum-values.json-result:
+        * inspector/scripts/tests/generic/expected/event-targetType-matching-domain-debuggableType.json-result:
+        * inspector/scripts/tests/generic/expected/generate-domains-with-feature-guards.json-result:
+        * inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result:
+        * jit/JITWorklist.cpp:
+        * parser/Nodes.h:
+        * parser/SourceProvider.h:
+        * runtime/DataView.h:
+        * runtime/DoublePredictionFuzzerAgent.h:
+        * runtime/FileBasedFuzzerAgent.h:
+        * runtime/GenericTypedArrayView.h:
+        * runtime/JSMicrotask.cpp:
+        * runtime/NarrowingNumberPredictionFuzzerAgent.h:
+        * runtime/ObjectPropertyChangeAdaptiveWatchpoint.h:
+        * runtime/PredictionFileCreatingFuzzerAgent.h:
+        * runtime/PromiseTimer.h:
+        * runtime/RandomizingFuzzerAgent.h:
+        * runtime/RegExpCache.h:
+        * runtime/Structure.cpp:
+        * runtime/StructureRareData.cpp:
+        * runtime/VMTraps.cpp:
+        * runtime/WideningNumberPredictionFuzzerAgent.h:
+        * tools/JSDollarVM.cpp:
+        * wasm/WasmBBQPlan.h:
+        * wasm/WasmCallee.h:
+        * wasm/WasmLLIntPlan.h:
+        * wasm/WasmOMGForOSREntryPlan.h:
+        * wasm/WasmOMGPlan.h:
+        * wasm/WasmWorklist.cpp:
+        * yarr/YarrJIT.cpp:
+
+2020-05-12  Ross Kirsling  <ross.kirsling@sony.com>
+
         [clang-tidy] Run modernize-use-override over JSC, then ensure as much as possible is final
         https://bugs.webkit.org/show_bug.cgi?id=211743
 
index 69b5ee1..8fb9183 100644 (file)
@@ -35,7 +35,7 @@
 namespace JSC {
 
 template<typename JumpType, typename FunctionType, typename ResultType, typename... Arguments>
-class SlowPathCallGeneratorWithArguments : public AccessCaseSnippetParams::SlowPathCallGenerator {
+class SlowPathCallGeneratorWithArguments final : public AccessCaseSnippetParams::SlowPathCallGenerator {
 public:
     SlowPathCallGeneratorWithArguments(JumpType from, CCallHelpers::Label to, FunctionType function, ResultType result, std::tuple<Arguments...> arguments)
         : m_from(from)
@@ -84,7 +84,7 @@ public:
         return exceptions;
     }
 
-    CCallHelpers::JumpList generate(AccessGenerationState& state, const RegisterSet& usedRegistersBySnippet, CCallHelpers& jit) override
+    CCallHelpers::JumpList generate(AccessGenerationState& state, const RegisterSet& usedRegistersBySnippet, CCallHelpers& jit) final
     {
         m_from.link(&jit);
         CCallHelpers::JumpList exceptions = generateImpl(state, usedRegistersBySnippet, jit, std::make_index_sequence<std::tuple_size<std::tuple<Arguments...>>::value>());
@@ -92,7 +92,7 @@ public:
         return exceptions;
     }
 
-protected:
+private:
     JumpType m_from;
     CCallHelpers::Label m_to;
     FunctionType m_function;
index 2c2ba5f..23dd77b 100644 (file)
@@ -33,7 +33,7 @@ namespace JSC {
 
 struct AccessGenerationState;
 
-class AccessCaseSnippetParams : public SnippetParams {
+class AccessCaseSnippetParams final : public SnippetParams {
 public:
     AccessCaseSnippetParams(VM& vm, Vector<Value>&& regs, Vector<GPRReg>&& gpScratch, Vector<FPRReg>&& fpScratch)
         : SnippetParams(vm, WTFMove(regs), WTFMove(gpScratch), WTFMove(fpScratch))
@@ -50,7 +50,7 @@ public:
     CCallHelpers::JumpList emitSlowPathCalls(AccessGenerationState&, const RegisterSet& usedRegistersBySnippet, CCallHelpers&);
 
 private:
-#define JSC_DEFINE_CALL_OPERATIONS(OperationType, ResultType, ...) void addSlowPathCallImpl(CCallHelpers::JumpList, CCallHelpers&, OperationType, ResultType, std::tuple<__VA_ARGS__> args) override;
+#define JSC_DEFINE_CALL_OPERATIONS(OperationType, ResultType, ...) void addSlowPathCallImpl(CCallHelpers::JumpList, CCallHelpers&, OperationType, ResultType, std::tuple<__VA_ARGS__> args) final;
     SNIPPET_SLOW_PATH_CALLS(JSC_DEFINE_CALL_OPERATIONS)
 #undef JSC_DEFINE_CALL_OPERATIONS
     Vector<std::unique_ptr<SlowPathCallGenerator>> m_generators;
index 834082d..5aa7db4 100644 (file)
@@ -266,7 +266,7 @@ void CodeBlock::dumpBytecode(PrintStream& out, unsigned bytecodeOffset, const IC
 
 namespace {
 
-class PutToScopeFireDetail : public FireDetail {
+class PutToScopeFireDetail final : public FireDetail {
 public:
     PutToScopeFireDetail(CodeBlock* codeBlock, const Identifier& ident)
         : m_codeBlock(codeBlock)
@@ -274,7 +274,7 @@ public:
     {
     }
     
-    void dump(PrintStream& out) const override
+    void dump(PrintStream& out) const final
     {
         out.print("Linking put_to_scope in ", FunctionExecutableDump(jsCast<FunctionExecutable*>(m_codeBlock->ownerExecutable())), " for ", m_ident);
     }
index aeb3456..2754b31 100644 (file)
@@ -64,7 +64,7 @@ class AdaptiveValueStructureStubClearingWatchpoint final : public AdaptiveInferr
     WTF_MAKE_NONCOPYABLE(AdaptiveValueStructureStubClearingWatchpoint);
     WTF_MAKE_FAST_ALLOCATED;
 
-    void handleFire(VM&, const FireDetail&) override;
+    void handleFire(VM&, const FireDetail&) final;
 
 public:
     AdaptiveValueStructureStubClearingWatchpoint(const ObjectPropertyCondition& key, WatchpointsOnStructureStubInfo& holder)
@@ -79,7 +79,7 @@ private:
     PackedPtr<WatchpointsOnStructureStubInfo> m_holder;
 };
 
-class WatchpointsOnStructureStubInfo {
+class WatchpointsOnStructureStubInfo final {
     WTF_MAKE_NONCOPYABLE(WatchpointsOnStructureStubInfo);
     WTF_MAKE_FAST_ALLOCATED;
 public:
index 42ffb1b..b8ddbdc 100644 (file)
@@ -32,7 +32,7 @@ namespace JSC {
 class JSObject;
 class PropertyName;
 
-class VariableWriteFireDetail : public FireDetail {
+class VariableWriteFireDetail final : public FireDetail {
 public:
     VariableWriteFireDetail(JSObject* object, const PropertyName& name)
         : m_object(object)
@@ -40,7 +40,7 @@ public:
     {
     }
     
-    JS_EXPORT_PRIVATE void dump(PrintStream&) const override;
+    JS_EXPORT_PRIVATE void dump(PrintStream&) const final;
     
     JS_EXPORT_PRIVATE static void touch(VM&, WatchpointSet*, JSObject*, const PropertyName&);
 
index 51bce38..77c6dfc 100644 (file)
@@ -57,21 +57,21 @@ public:
     virtual void dump(PrintStream&) const = 0;
 };
 
-class StringFireDetail : public FireDetail {
+class StringFireDetail final : public FireDetail {
 public:
     StringFireDetail(const char* string)
         : m_string(string)
     {
     }
     
-    void dump(PrintStream& out) const override;
+    void dump(PrintStream& out) const final;
 
 private:
     const char* m_string;
 };
 
 template<typename... Types>
-class LazyFireDetail : public FireDetail {
+class LazyFireDetail final : public FireDetail {
 public:
     LazyFireDetail(const Types&... args)
     {
@@ -80,7 +80,7 @@ public:
         });
     }
 
-    void dump(PrintStream& out) const override { m_lambda(out); }
+    void dump(PrintStream& out) const final { m_lambda(out); }
 
 private:
     ScopedLambda<void(PrintStream&)> m_lambda;
index d17e198..2776d91 100644 (file)
@@ -37,9 +37,9 @@ public:
     AdaptiveInferredPropertyValueWatchpoint(const ObjectPropertyCondition&, CodeBlock*);
 
 private:
-    bool isValid() const override;
+    bool isValid() const final;
 
-    void handleFire(VM&, const FireDetail&) override;
+    void handleFire(VM&, const FireDetail&) final;
 
     CodeBlock* m_codeBlock;
 };
index 55a989d..e978b6f 100644 (file)
@@ -36,7 +36,7 @@
 
 namespace JSC { namespace DFG {
 
-class ArrayifySlowPathGenerator : public JumpingSlowPathGenerator<MacroAssembler::JumpList> {
+class ArrayifySlowPathGenerator final : public JumpingSlowPathGenerator<MacroAssembler::JumpList> {
 public:
     ArrayifySlowPathGenerator(
         const MacroAssembler::JumpList& from, SpeculativeJIT* jit, Node* node, GPRReg baseGPR,
@@ -68,8 +68,8 @@ public:
         m_badIndexingTypeJump = jit->speculationCheck(BadIndexingType, JSValueSource::unboxedCell(m_baseGPR), nullptr);
     }
     
-protected:
-    void generateInternal(SpeculativeJIT* jit) override
+private:
+    void generateInternal(SpeculativeJIT* jit) final
     {
         linkFrom(jit);
         
@@ -132,8 +132,7 @@ protected:
         
         jumpTo(jit);
     }
-    
-private:
+
     NodeType m_op;
     RegisteredStructure m_structure;
     ArrayMode m_arrayMode;
index feefefc..23fd454 100644 (file)
@@ -33,7 +33,7 @@
 
 namespace JSC { namespace DFG {
 
-class CallArrayAllocatorSlowPathGenerator : public JumpingSlowPathGenerator<MacroAssembler::JumpList> {
+class CallArrayAllocatorSlowPathGenerator final : public JumpingSlowPathGenerator<MacroAssembler::JumpList> {
 public:
     CallArrayAllocatorSlowPathGenerator(
         MacroAssembler::JumpList from, SpeculativeJIT* jit, P_JITOperation_VmStZB function,
@@ -49,8 +49,8 @@ public:
         jit->silentSpillAllRegistersImpl(false, m_plans, resultGPR);
     }
 
-protected:
-    void generateInternal(SpeculativeJIT* jit) override
+private:
+    void generateInternal(SpeculativeJIT* jit) final
     {
         linkFrom(jit);
         for (unsigned i = 0; i < m_plans.size(); ++i)
@@ -62,8 +62,7 @@ protected:
         jit->m_jit.loadPtr(MacroAssembler::Address(m_resultGPR, JSObject::butterflyOffset()), m_storageGPR);
         jumpTo(jit);
     }
-    
-private:
+
     P_JITOperation_VmStZB m_function;
     GPRReg m_resultGPR;
     GPRReg m_storageGPR;
@@ -72,7 +71,7 @@ private:
     Vector<SilentRegisterSavePlan, 2> m_plans;
 };
 
-class CallArrayAllocatorWithVariableSizeSlowPathGenerator : public JumpingSlowPathGenerator<MacroAssembler::JumpList> {
+class CallArrayAllocatorWithVariableSizeSlowPathGenerator final : public JumpingSlowPathGenerator<MacroAssembler::JumpList> {
 public:
     CallArrayAllocatorWithVariableSizeSlowPathGenerator(
         MacroAssembler::JumpList from, SpeculativeJIT* jit, P_JITOperation_GStZB function,
@@ -89,8 +88,8 @@ public:
         jit->silentSpillAllRegistersImpl(false, m_plans, resultGPR);
     }
 
-protected:
-    void generateInternal(SpeculativeJIT* jit) override
+private:
+    void generateInternal(SpeculativeJIT* jit) final
     {
         linkFrom(jit);
         for (unsigned i = 0; i < m_plans.size(); ++i)
@@ -111,8 +110,7 @@ protected:
         jit->m_jit.exceptionCheck();
         jumpTo(jit);
     }
-    
-private:
+
     P_JITOperation_GStZB m_function;
     RegisteredStructure m_contiguousStructure;
     RegisteredStructure m_arrayStorageOrContiguousStructure;
@@ -123,7 +121,7 @@ private:
     Vector<SilentRegisterSavePlan, 2> m_plans;
 };
 
-class CallArrayAllocatorWithVariableStructureVariableSizeSlowPathGenerator : public JumpingSlowPathGenerator<MacroAssembler::JumpList> {
+class CallArrayAllocatorWithVariableStructureVariableSizeSlowPathGenerator final : public JumpingSlowPathGenerator<MacroAssembler::JumpList> {
 public:
     CallArrayAllocatorWithVariableStructureVariableSizeSlowPathGenerator(
         MacroAssembler::JumpList from, SpeculativeJIT* jit, P_JITOperation_GStZB function,
@@ -139,8 +137,8 @@ public:
         jit->silentSpillAllRegistersImpl(false, m_plans, resultGPR);
     }
 
-protected:
-    void generateInternal(SpeculativeJIT* jit) override
+private:
+    void generateInternal(SpeculativeJIT* jit) final
     {
         linkFrom(jit);
         for (unsigned i = 0; i < m_plans.size(); ++i)
@@ -151,8 +149,7 @@ protected:
         jit->m_jit.exceptionCheck();
         jumpTo(jit);
     }
-    
-private:
+
     P_JITOperation_GStZB m_function;
     GPRReg m_resultGPR;
     CCallHelpers::TrustedImmPtr m_globalObject;
index 0ddb308..3020503 100644 (file)
@@ -35,7 +35,7 @@
 namespace JSC { namespace DFG {
 
 // This calls operationCreateDirectArguments but then restores the value of lengthGPR.
-class CallCreateDirectArgumentsSlowPathGenerator : public JumpingSlowPathGenerator<MacroAssembler::JumpList> {
+class CallCreateDirectArgumentsSlowPathGenerator final : public JumpingSlowPathGenerator<MacroAssembler::JumpList> {
 public:
     CallCreateDirectArgumentsSlowPathGenerator(
         MacroAssembler::JumpList from, SpeculativeJIT* jit, GPRReg resultGPR, RegisteredStructure structure,
@@ -49,8 +49,8 @@ public:
         jit->silentSpillAllRegistersImpl(false, m_plans, resultGPR);
     }
 
-protected:
-    void generateInternal(SpeculativeJIT* jit) override
+private:
+    void generateInternal(SpeculativeJIT* jit) final
     {
         linkFrom(jit);
         for (unsigned i = 0; i < m_plans.size(); ++i)
@@ -64,8 +64,7 @@ protected:
             MacroAssembler::Address(m_resultGPR, DirectArguments::offsetOfLength()), m_lengthGPR);
         jumpTo(jit);
     }
-    
-private:
+
     GPRReg m_resultGPR;
     RegisteredStructure m_structure;
     GPRReg m_lengthGPR;
index bde6676..fabce01 100644 (file)
@@ -34,7 +34,7 @@
 
 namespace JSC { namespace DFG {
 
-class SaneStringGetByValSlowPathGenerator : public JumpingSlowPathGenerator<MacroAssembler::Jump> {
+class SaneStringGetByValSlowPathGenerator final : public JumpingSlowPathGenerator<MacroAssembler::Jump> {
 public:
     SaneStringGetByValSlowPathGenerator(
         const MacroAssembler::Jump& from, SpeculativeJIT* jit, JSValueRegs resultRegs, CCallHelpers::TrustedImmPtr globalObject, GPRReg baseReg, GPRReg propertyReg)
@@ -47,8 +47,8 @@ public:
         jit->silentSpillAllRegistersImpl(false, m_plans, extractResult(resultRegs));
     }
     
-protected:
-    void generateInternal(SpeculativeJIT* jit) override
+private:
+    void generateInternal(SpeculativeJIT* jit) final
     {
         linkFrom(jit);
         
@@ -77,8 +77,7 @@ protected:
         
         jumpTo(jit);
     }
-    
-private:
+
     JSValueRegs m_resultRegs;
     CCallHelpers::TrustedImmPtr m_globalObject;
     GPRReg m_baseReg;
index f1d3b0b..981e86c 100644 (file)
@@ -156,8 +156,7 @@ protected:
 };
 
 template<typename JumpType, typename FunctionType, typename ResultType, typename... Arguments>
-class CallResultAndArgumentsSlowPathGenerator
-    : public CallSlowPathGenerator<JumpType, ResultType> {
+class CallResultAndArgumentsSlowPathGenerator final : public CallSlowPathGenerator<JumpType, ResultType> {
 public:
     CallResultAndArgumentsSlowPathGenerator(
         JumpType from, SpeculativeJIT* jit, FunctionType function,
@@ -168,7 +167,7 @@ public:
     {
     }
 
-protected:
+private:
     template<size_t... ArgumentsIndex>
     void unpackAndGenerate(SpeculativeJIT* jit, std::index_sequence<ArgumentsIndex...>)
     {
@@ -180,7 +179,7 @@ protected:
         this->tearDown(jit);
     }
 
-    void generateInternal(SpeculativeJIT* jit) override
+    void generateInternal(SpeculativeJIT* jit) final
     {
         unpackAndGenerate(jit, std::make_index_sequence<std::tuple_size<std::tuple<Arguments...>>::value>());
     }
@@ -209,7 +208,7 @@ inline std::unique_ptr<SlowPathGenerator> slowPathCall(
 }
 
 template<typename JumpType, typename DestinationType, typename SourceType, unsigned numberOfAssignments>
-class AssigningSlowPathGenerator : public JumpingSlowPathGenerator<JumpType> {
+class AssigningSlowPathGenerator final : public JumpingSlowPathGenerator<JumpType> {
 public:
     AssigningSlowPathGenerator(
         JumpType from, SpeculativeJIT* jit,
@@ -223,8 +222,8 @@ public:
         }
     }
 
-protected:
-    void generateInternal(SpeculativeJIT* jit) override
+private:
+    void generateInternal(SpeculativeJIT* jit) final
     {
         this->linkFrom(jit);
         for (unsigned i = numberOfAssignments; i--;)
@@ -232,7 +231,6 @@ protected:
         this->jumpTo(jit);
     }
 
-private:
     DestinationType m_destination[numberOfAssignments];
     SourceType m_source[numberOfAssignments];
 };
index 6af1462..e42c270 100644 (file)
@@ -34,7 +34,7 @@ namespace JSC { namespace DFG {
     
 class SpeculativeJIT;
 
-class SnippetParams : public JSC::SnippetParams {
+class SnippetParams final : public JSC::SnippetParams {
 public:
     SnippetParams(SpeculativeJIT* jit, Vector<Value>&& regs, Vector<GPRReg>&& gpScratch, Vector<FPRReg>&& fpScratch)
         : JSC::SnippetParams(jit->vm(), WTFMove(regs), WTFMove(gpScratch), WTFMove(fpScratch))
@@ -43,7 +43,7 @@ public:
     }
 
 private:
-#define JSC_DEFINE_CALL_OPERATIONS(OperationType, ResultType, ...) void addSlowPathCallImpl(CCallHelpers::JumpList, CCallHelpers&, OperationType, ResultType, std::tuple<__VA_ARGS__> args) override;
+#define JSC_DEFINE_CALL_OPERATIONS(OperationType, ResultType, ...) void addSlowPathCallImpl(CCallHelpers::JumpList, CCallHelpers&, OperationType, ResultType, std::tuple<__VA_ARGS__> args) final;
     SNIPPET_SLOW_PATH_CALLS(JSC_DEFINE_CALL_OPERATIONS)
 #undef JSC_DEFINE_CALL_OPERATIONS
 
index 6720e23..bcf0e69 100644 (file)
@@ -37,7 +37,7 @@ namespace JSC { namespace DFG {
 
 #if ENABLE(DFG_JIT)
 
-class Worklist::ThreadBody : public AutomaticThread {
+class Worklist::ThreadBody final : public AutomaticThread {
 public:
     ThreadBody(const AbstractLocker& locker, Worklist& worklist, ThreadData& data, Box<Lock> lock, Ref<AutomaticThreadCondition>&& condition, int relativePriority)
         : AutomaticThread(locker, lock, WTFMove(condition), ThreadType::Compiler)
@@ -47,13 +47,13 @@ public:
     {
     }
 
-    const char* name() const override
+    const char* name() const final
     {
         return m_worklist.m_threadName.data();
     }
 
-protected:
-    PollResult poll(const AbstractLocker& locker) override
+private:
+    PollResult poll(const AbstractLocker& locker) final
     {
         if (m_worklist.m_queue.isEmpty())
             return PollResult::Wait;
@@ -73,7 +73,7 @@ protected:
     
     class WorkScope;
     friend class WorkScope;
-    class WorkScope {
+    class WorkScope final {
     public:
         WorkScope(ThreadBody& thread)
             : m_thread(thread)
@@ -93,7 +93,7 @@ protected:
         ThreadBody& m_thread;
     };
     
-    WorkResult work() override
+    WorkResult work() final
     {
         WorkScope workScope(*this);
 
@@ -140,7 +140,7 @@ protected:
         return WorkResult::Continue;
     }
     
-    void threadDidStart() override
+    void threadDidStart() final
     {
         dataLogLnIf(Options::verboseCompilationQueue(), m_worklist, ": Thread started");
         
@@ -150,7 +150,7 @@ protected:
         m_compilationScope = makeUnique<CompilationScope>();
     }
     
-    void threadIsStopping(const AbstractLocker&) override
+    void threadIsStopping(const AbstractLocker&) final
     {
         // We're holding the Worklist::m_lock, so we should be careful not to deadlock.
         
@@ -162,7 +162,6 @@ protected:
         m_plan = nullptr;
     }
 
-private:
     Worklist& m_worklist;
     ThreadData& m_data;
     int m_relativePriority;
index f13fd12..1af2bd3 100644 (file)
@@ -36,7 +36,7 @@ namespace JSC { namespace FTL {
 
 class State;
 
-class SnippetParams : public JSC::SnippetParams {
+class SnippetParams final : public JSC::SnippetParams {
 public:
     SnippetParams(State& state, const B3::StackmapGenerationParams& params, DFG::Node* node, Box<CCallHelpers::JumpList> exceptions, Vector<Value>&& regs, Vector<GPRReg>&& gpScratch, Vector<FPRReg>&& fpScratch)
         : JSC::SnippetParams(state.vm(), WTFMove(regs), WTFMove(gpScratch), WTFMove(fpScratch))
@@ -48,7 +48,7 @@ public:
     }
 
 private:
-#define JSC_DEFINE_CALL_OPERATIONS(OperationType, ResultType, ...) void addSlowPathCallImpl(CCallHelpers::JumpList, CCallHelpers&, OperationType, ResultType, std::tuple<__VA_ARGS__> args) override;
+#define JSC_DEFINE_CALL_OPERATIONS(OperationType, ResultType, ...) void addSlowPathCallImpl(CCallHelpers::JumpList, CCallHelpers&, OperationType, ResultType, std::tuple<__VA_ARGS__> args) final;
     SNIPPET_SLOW_PATH_CALLS(JSC_DEFINE_CALL_OPERATIONS)
 #undef JSC_DEFINE_CALL_OPERATIONS
 
index 12c9c6f..5ce2261 100644 (file)
@@ -309,14 +309,14 @@ void BlockDirectory::assertNoUnswept()
 
 RefPtr<SharedTask<MarkedBlock::Handle*()>> BlockDirectory::parallelNotEmptyBlockSource()
 {
-    class Task : public SharedTask<MarkedBlock::Handle*()> {
+    class Task final : public SharedTask<MarkedBlock::Handle*()> {
     public:
         Task(BlockDirectory& directory)
             : m_directory(directory)
         {
         }
         
-        MarkedBlock::Handle* run() override
+        MarkedBlock::Handle* run() final
         {
             if (m_done)
                 return nullptr;
index 05cf282..515aff1 100644 (file)
 
 namespace JSC {
 
-class JS_EXPORT_PRIVATE EdenGCActivityCallback : public GCActivityCallback {
+class JS_EXPORT_PRIVATE EdenGCActivityCallback final : public GCActivityCallback {
 public:
     EdenGCActivityCallback(Heap*);
 
-    void doCollection(VM&) override;
+    void doCollection(VM&) final;
 
-protected:
-    Seconds lastGCLength(Heap&) override;
-    double gcTimeSlice(size_t bytes) override;
-    double deathRate(Heap&) override;
+private:
+    Seconds lastGCLength(Heap&) final;
+    double gcTimeSlice(size_t bytes) final;
+    double deathRate(Heap&) final;
 };
 
 inline RefPtr<GCActivityCallback> GCActivityCallback::tryCreateEdenTimer(Heap* heap)
index 650ae13..fa1ca35 100644 (file)
 
 namespace JSC {
 
-class JS_EXPORT_PRIVATE FullGCActivityCallback : public GCActivityCallback {
+class JS_EXPORT_PRIVATE FullGCActivityCallback final : public GCActivityCallback {
 public:
     FullGCActivityCallback(Heap*);
 
-    void doCollection(VM&) override;
+    void doCollection(VM&) final;
 
     bool didGCRecently() const { return m_didGCRecently; }
     void setDidGCRecently() { m_didGCRecently = true; }
 
-protected:
-    Seconds lastGCLength(Heap&) override;
-    double gcTimeSlice(size_t bytes) override;
-    double deathRate(Heap&) override;
+private:
+    Seconds lastGCLength(Heap&) final;
+    double gcTimeSlice(size_t bytes) final;
+    double deathRate(Heap&) final;
 
     bool m_didGCRecently { false };
 };
index 86dd6fa..4b90aac 100644 (file)
@@ -237,7 +237,7 @@ private:
 
 } // anonymous namespace
 
-class Heap::HeapThread : public AutomaticThread {
+class Heap::HeapThread final : public AutomaticThread {
 public:
     HeapThread(const AbstractLocker& locker, Heap& heap)
         : AutomaticThread(locker, heap.m_threadLock, heap.m_threadCondition.copyRef())
@@ -245,13 +245,13 @@ public:
     {
     }
 
-    const char* name() const override
+    const char* name() const final
     {
         return "JSC Heap Collector Thread";
     }
     
-protected:
-    PollResult poll(const AbstractLocker& locker) override
+private:
+    PollResult poll(const AbstractLocker& locker) final
     {
         if (m_heap.m_threadShouldStop) {
             m_heap.notifyThreadStopping(locker);
@@ -265,23 +265,22 @@ protected:
         return PollResult::Wait;
     }
     
-    WorkResult work() override
+    WorkResult work() final
     {
         m_heap.collectInCollectorThread();
         return WorkResult::Continue;
     }
     
-    void threadDidStart() override
+    void threadDidStart() final
     {
         Thread::registerGCThread(GCThreadType::Main);
     }
 
-    void threadIsStopping(const AbstractLocker&) override
+    void threadIsStopping(const AbstractLocker&) final
     {
         m_heap.m_collectorThreadIsRunning = false;
     }
 
-private:
     Heap& m_heap;
 };
 
index b0b361b..77d4de1 100644 (file)
@@ -431,12 +431,12 @@ private:
 
     static constexpr size_t minExtraMemory = 256;
     
-    class CFinalizerOwner : public WeakHandleOwner {
-        void finalize(Handle<Unknown>, void* context) override;
+    class CFinalizerOwner final : public WeakHandleOwner {
+        void finalize(Handle<Unknown>, void* context) final;
     };
 
-    class LambdaFinalizerOwner : public WeakHandleOwner {
-        void finalize(Handle<Unknown>, void* context) override;
+    class LambdaFinalizerOwner final : public WeakHandleOwner {
+        void finalize(Handle<Unknown>, void* context) final;
     };
 
     JS_EXPORT_PRIVATE bool isValidAllocation(size_t);
index 12646de..4de3860 100644 (file)
@@ -32,7 +32,7 @@ namespace JSC {
 class Heap;
 class BlockDirectory;
 
-class IncrementalSweeper : public JSRunLoopTimer {
+class IncrementalSweeper final : public JSRunLoopTimer {
 public:
     using Base = JSRunLoopTimer;
     JS_EXPORT_PRIVATE explicit IncrementalSweeper(Heap*);
@@ -40,7 +40,7 @@ public:
     JS_EXPORT_PRIVATE void startSweeping(Heap&);
     void freeFastMallocMemoryAfterSweeping() { m_shouldFreeFastMallocMemoryAfterSweeping = true; }
 
-    void doWork(VM&) override;
+    void doWork(VM&) final;
     void stopSweeping();
 
 private:
index 786d115..b20d614 100644 (file)
@@ -48,7 +48,7 @@ IsoCellSet::~IsoCellSet()
 
 Ref<SharedTask<MarkedBlock::Handle*()>> IsoCellSet::parallelNotEmptyMarkedBlockSource()
 {
-    class Task : public SharedTask<MarkedBlock::Handle*()> {
+    class Task final : public SharedTask<MarkedBlock::Handle*()> {
     public:
         Task(IsoCellSet& set)
             : m_set(set)
@@ -56,7 +56,7 @@ Ref<SharedTask<MarkedBlock::Handle*()>> IsoCellSet::parallelNotEmptyMarkedBlockS
         {
         }
         
-        MarkedBlock::Handle* run() override
+        MarkedBlock::Handle* run() final
         {
             if (m_done)
                 return nullptr;
index f4faef7..dc2c8b7 100644 (file)
@@ -94,7 +94,7 @@ void IsoCellSet::forEachMarkedCell(const Func& func)
 template<typename Func>
 Ref<SharedTask<void(SlotVisitor&)>> IsoCellSet::forEachMarkedCellInParallel(const Func& func)
 {
-    class Task : public SharedTask<void(SlotVisitor&)> {
+    class Task final : public SharedTask<void(SlotVisitor&)> {
     public:
         Task(IsoCellSet& set, const Func& func)
             : m_set(set)
@@ -103,7 +103,7 @@ Ref<SharedTask<void(SlotVisitor&)>> IsoCellSet::forEachMarkedCellInParallel(cons
         {
         }
         
-        void run(SlotVisitor& visitor) override
+        void run(SlotVisitor& visitor) final
         {
             while (MarkedBlock::Handle* handle = m_blockSource->run()) {
                 unsigned blockIndex = handle->index();
index 661b6fc..85fa9e9 100644 (file)
@@ -42,8 +42,8 @@ public:
         return makeUnique<IsoHeapCellType>(CellType::needsDestruction ? NeedsDestruction : DoesNotNeedDestruction, &CellType::destroy);
     }
 
-    JS_EXPORT_PRIVATE void finishSweep(MarkedBlock::Handle&, FreeList*) override;
-    JS_EXPORT_PRIVATE void destroy(VM&, JSCell*) override;
+    JS_EXPORT_PRIVATE void finishSweep(MarkedBlock::Handle&, FreeList*) final;
+    JS_EXPORT_PRIVATE void destroy(VM&, JSCell*) final;
 
     ALWAYS_INLINE void operator()(VM&, JSCell* cell) const
     {
index 4b56635..5d6e768 100644 (file)
@@ -45,12 +45,12 @@ public:
         }
     };
 
-    void finishSweep(MarkedBlock::Handle& handle, FreeList* freeList) override
+    void finishSweep(MarkedBlock::Handle& handle, FreeList* freeList) final
     {
         handle.finishSweepKnowingHeapCellType(freeList, DestroyFunc());
     }
 
-    void destroy(VM&, JSCell* cell) override
+    void destroy(VM&, JSCell* cell) final
     {
         CellType::destroy(cell);
     }
index f4b6456..bff43dc 100644 (file)
@@ -31,7 +31,7 @@
 namespace JSC {
 
 template<typename OuterType, typename InnerType, typename UnwrapFunc>
-class ParallelSourceAdapter : public SharedTask<InnerType()> {
+class ParallelSourceAdapter final : public SharedTask<InnerType()> {
 public:
     ParallelSourceAdapter(RefPtr<SharedTask<OuterType()>> outerSource, const UnwrapFunc& unwrapFunc)
         : m_outerSource(outerSource)
@@ -39,7 +39,7 @@ public:
     {
     }
     
-    InnerType run() override
+    InnerType run() final
     {
         auto locker = holdLock(m_lock);
         do {
index f6b9524..dd1583f 100644 (file)
@@ -31,12 +31,12 @@ namespace JSC {
 
 class Heap;
 
-class StopIfNecessaryTimer : public JSRunLoopTimer {
+class StopIfNecessaryTimer final : public JSRunLoopTimer {
 public:
     using Base = JSRunLoopTimer;
     explicit StopIfNecessaryTimer(VM&);
     
-    void doWork(VM&) override;
+    void doWork(VM&) final;
     
     void scheduleSoon();
 };
index 613ba52..84e34c3 100644 (file)
@@ -90,14 +90,14 @@ MarkedBlock::Handle* Subspace::findEmptyBlockToSteal()
 
 Ref<SharedTask<BlockDirectory*()>> Subspace::parallelDirectorySource()
 {
-    class Task : public SharedTask<BlockDirectory*()> {
+    class Task final : public SharedTask<BlockDirectory*()> {
     public:
         Task(BlockDirectory* directory)
             : m_directory(directory)
         {
         }
         
-        BlockDirectory* run() override
+        BlockDirectory* run() final
         {
             auto locker = holdLock(m_lock);
             BlockDirectory* result = m_directory;
index f4ff70c..062ad96 100644 (file)
@@ -88,7 +88,7 @@ void Subspace::forEachMarkedCell(const Func& func)
 template<typename Func>
 Ref<SharedTask<void(SlotVisitor&)>> Subspace::forEachMarkedCellInParallel(const Func& func)
 {
-    class Task : public SharedTask<void(SlotVisitor&)> {
+    class Task final : public SharedTask<void(SlotVisitor&)> {
     public:
         Task(Subspace& subspace, const Func& func)
             : m_subspace(subspace)
@@ -97,7 +97,7 @@ Ref<SharedTask<void(SlotVisitor&)>> Subspace::forEachMarkedCellInParallel(const
         {
         }
         
-        void run(SlotVisitor& visitor) override
+        void run(SlotVisitor& visitor) final
         {
             while (MarkedBlock::Handle* handle = m_blockSource->run()) {
                 handle->forEachMarkedCell(
index e53cc60..cdee45f 100644 (file)
@@ -45,11 +45,11 @@ namespace Inspector {
 class InjectedScriptModule;
 class InspectorEnvironment;
 
-class JS_EXPORT_PRIVATE InjectedScript : public InjectedScriptBase {
+class JS_EXPORT_PRIVATE InjectedScript final : public InjectedScriptBase {
 public:
     InjectedScript();
     InjectedScript(Deprecated::ScriptObject, InspectorEnvironment*);
-    ~InjectedScript() override;
+    ~InjectedScript() final;
 
     struct ExecuteOptions {
         String objectGroup;
index e172793..4da7473 100644 (file)
@@ -39,7 +39,7 @@ class JSGlobalObjectConsoleClient final : public JSC::ConsoleClient {
     WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit JSGlobalObjectConsoleClient(InspectorConsoleAgent*);
-    ~JSGlobalObjectConsoleClient() override { }
+    ~JSGlobalObjectConsoleClient() final { }
 
     static bool logToSystemConsole();
     static void setLogToSystemConsole(bool);
@@ -48,19 +48,19 @@ public:
     void setInspectorScriptProfilerAgent(InspectorScriptProfilerAgent* agent) { m_scriptProfilerAgent = agent; }
 
 private:
-    void messageWithTypeAndLevel(MessageType, MessageLevel, JSC::JSGlobalObject*, Ref<ScriptArguments>&&) override;
-    void count(JSC::JSGlobalObject*, const String& label) override;
-    void countReset(JSC::JSGlobalObject*, const String& label) override;
-    void profile(JSC::JSGlobalObject*, const String& title) override;
-    void profileEnd(JSC::JSGlobalObject*, const String& title) override;
-    void takeHeapSnapshot(JSC::JSGlobalObject*, const String& title) override;
-    void time(JSC::JSGlobalObject*, const String& label) override;
-    void timeLog(JSC::JSGlobalObject*, const String& label, Ref<ScriptArguments>&&) override;
-    void timeEnd(JSC::JSGlobalObject*, const String& label) override;
-    void timeStamp(JSC::JSGlobalObject*, Ref<ScriptArguments>&&) override;
-    void record(JSC::JSGlobalObject*, Ref<ScriptArguments>&&) override;
-    void recordEnd(JSC::JSGlobalObject*, Ref<ScriptArguments>&&) override;
-    void screenshot(JSC::JSGlobalObject*, Ref<ScriptArguments>&&) override;
+    void messageWithTypeAndLevel(MessageType, MessageLevel, JSC::JSGlobalObject*, Ref<ScriptArguments>&&) final;
+    void count(JSC::JSGlobalObject*, const String& label) final;
+    void countReset(JSC::JSGlobalObject*, const String& label) final;
+    void profile(JSC::JSGlobalObject*, const String& title) final;
+    void profileEnd(JSC::JSGlobalObject*, const String& title) final;
+    void takeHeapSnapshot(JSC::JSGlobalObject*, const String& title) final;
+    void time(JSC::JSGlobalObject*, const String& label) final;
+    void timeLog(JSC::JSGlobalObject*, const String& label, Ref<ScriptArguments>&&) final;
+    void timeEnd(JSC::JSGlobalObject*, const String& label) final;
+    void timeStamp(JSC::JSGlobalObject*, Ref<ScriptArguments>&&) final;
+    void record(JSC::JSGlobalObject*, Ref<ScriptArguments>&&) final;
+    void recordEnd(JSC::JSGlobalObject*, Ref<ScriptArguments>&&) final;
+    void screenshot(JSC::JSGlobalObject*, Ref<ScriptArguments>&&) final;
 
     void warnUnimplemented(const String& method);
     void internalAddMessage(MessageType, MessageLevel, JSC::JSGlobalObject*, Ref<ScriptArguments>&&);
index 61bf041..cdf3de7 100644 (file)
@@ -67,7 +67,7 @@ class JSGlobalObjectInspectorController final
     WTF_MAKE_FAST_ALLOCATED;
 public:
     JSGlobalObjectInspectorController(JSC::JSGlobalObject&);
-    ~JSGlobalObjectInspectorController() override;
+    ~JSGlobalObjectInspectorController() final;
 
     void connectFrontend(FrontendChannel&, bool isAutomaticInspection, bool immediatelyPause);
     void disconnectFrontend(FrontendChannel&);
@@ -83,22 +83,22 @@ public:
 
     JSC::ConsoleClient* consoleClient() const;
 
-    bool developerExtrasEnabled() const override;
-    bool canAccessInspectedScriptState(JSC::JSGlobalObject*) const override { return true; }
-    InspectorFunctionCallHandler functionCallHandler() const override;
-    InspectorEvaluateHandler evaluateHandler() const override;
-    void frontendInitialized() override;
+    bool developerExtrasEnabled() const final;
+    bool canAccessInspectedScriptState(JSC::JSGlobalObject*) const final { return true; }
+    InspectorFunctionCallHandler functionCallHandler() const final;
+    InspectorEvaluateHandler evaluateHandler() const final;
+    void frontendInitialized() final;
     WTF::Stopwatch& executionStopwatch() const final;
-    JSGlobalObjectScriptDebugServer& scriptDebugServer() override;
-    JSC::VM& vm() override;
+    JSGlobalObjectScriptDebugServer& scriptDebugServer() final;
+    JSC::VM& vm() final;
 
 #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
-    AugmentableInspectorControllerClient* augmentableInspectorControllerClient() const override { return m_augmentingClient; } 
-    void setAugmentableInspectorControllerClient(AugmentableInspectorControllerClient* client) override { m_augmentingClient = client; }
+    AugmentableInspectorControllerClient* augmentableInspectorControllerClient() const final { return m_augmentingClient; } 
+    void setAugmentableInspectorControllerClient(AugmentableInspectorControllerClient* client) final { m_augmentingClient = client; }
 
-    const FrontendRouter& frontendRouter() const override { return m_frontendRouter.get(); }
-    BackendDispatcher& backendDispatcher() override { return m_backendDispatcher.get(); }
-    void appendExtraAgent(std::unique_ptr<InspectorAgentBase>) override;
+    const FrontendRouter& frontendRouter() const final { return m_frontendRouter.get(); }
+    BackendDispatcher& backendDispatcher() final { return m_backendDispatcher.get(); }
+    void appendExtraAgent(std::unique_ptr<InspectorAgentBase>) final;
 #endif
 
 private:
index a198448..daabcf7 100644 (file)
@@ -35,25 +35,25 @@ class JSGlobalObjectScriptDebugServer final : public ScriptDebugServer {
     WTF_MAKE_FAST_ALLOCATED;
 public:
     JSGlobalObjectScriptDebugServer(JSC::JSGlobalObject&);
-    ~JSGlobalObjectScriptDebugServer() override { }
+    ~JSGlobalObjectScriptDebugServer() final { }
 
     JSC::JSGlobalObject& globalObject() const { return m_globalObject; }
 
     static RunLoopMode runLoopMode();
 
 private:
-    void attachDebugger() override;
-    void detachDebugger(bool isBeingDestroyed) override;
+    void attachDebugger() final;
+    void detachDebugger(bool isBeingDestroyed) final;
 
-    void didPause(JSC::JSGlobalObject*) override { }
-    void didContinue(JSC::JSGlobalObject*) override { }
-    void runEventLoopWhilePaused() override;
-    bool isContentScript(JSC::JSGlobalObject*) const override { return false; }
+    void didPause(JSC::JSGlobalObject*) final { }
+    void didContinue(JSC::JSGlobalObject*) final { }
+    void runEventLoopWhilePaused() final;
+    bool isContentScript(JSC::JSGlobalObject*) const final { return false; }
 
     // NOTE: Currently all exceptions are reported at the API boundary through reportAPIException.
     // Until a time comes where an exception can be caused outside of the API (e.g. setTimeout
     // or some other async operation in a pure JSContext) we can ignore exceptions reported here.
-    void reportException(JSC::JSGlobalObject*, JSC::Exception*) const override { }
+    void reportException(JSC::JSGlobalObject*, JSC::Exception*) const final { }
 
     JSC::JSGlobalObject& m_globalObject;
 };
index f9795f0..6ad7d50 100644 (file)
@@ -765,7 +765,7 @@ public:
 
     HashSet<JSCell*>& holders() { return m_holders; }
 
-    void analyzeEdge(JSCell* from, JSCell* to, SlotVisitor::RootMarkReason reason) override
+    void analyzeEdge(JSCell* from, JSCell* to, SlotVisitor::RootMarkReason reason) final
     {
         ASSERT(to);
         ASSERT(to->vm().heapProfiler()->activeHeapAnalyzer() == this);
@@ -790,14 +790,14 @@ public:
         else if (!from || reason != SlotVisitor::RootMarkReason::None)
             m_rootsToInclude.add(to);
     }
-    void analyzePropertyNameEdge(JSCell* from, JSCell* to, UniquedStringImpl*) override { analyzeEdge(from, to, SlotVisitor::RootMarkReason::None); }
-    void analyzeVariableNameEdge(JSCell* from, JSCell* to, UniquedStringImpl*) override { analyzeEdge(from, to, SlotVisitor::RootMarkReason::None); }
-    void analyzeIndexEdge(JSCell* from, JSCell* to, uint32_t) override { analyzeEdge(from, to, SlotVisitor::RootMarkReason::None); }
-
-    void analyzeNode(JSCell*) override { }
-    void setOpaqueRootReachabilityReasonForCell(JSCell*, const char*) override { }
-    void setWrappedObjectForCell(JSCell*, void*) override { }
-    void setLabelForCell(JSCell*, const String&) override { }
+    void analyzePropertyNameEdge(JSCell* from, JSCell* to, UniquedStringImpl*) final { analyzeEdge(from, to, SlotVisitor::RootMarkReason::None); }
+    void analyzeVariableNameEdge(JSCell* from, JSCell* to, UniquedStringImpl*) final { analyzeEdge(from, to, SlotVisitor::RootMarkReason::None); }
+    void analyzeIndexEdge(JSCell* from, JSCell* to, uint32_t) final { analyzeEdge(from, to, SlotVisitor::RootMarkReason::None); }
+
+    void analyzeNode(JSCell*) final { }
+    void setOpaqueRootReachabilityReasonForCell(JSCell*, const char*) final { }
+    void setWrappedObjectForCell(JSCell*, void*) final { }
+    void setLabelForCell(JSCell*, const String&) final { }
 
 #ifndef NDEBUG
     void dump(PrintStream& out) const
index a21a589..45adda2 100644 (file)
@@ -47,16 +47,16 @@ class JS_EXPORT_PRIVATE InspectorAgent final : public InspectorAgentBase, public
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorAgent(AgentContext&);
-    ~InspectorAgent() override;
+    ~InspectorAgent() final;
 
     // InspectorAgentBase
-    void didCreateFrontendAndBackend(FrontendRouter*, BackendDispatcher*) override;
-    void willDestroyFrontendAndBackend(DisconnectReason) override;
+    void didCreateFrontendAndBackend(FrontendRouter*, BackendDispatcher*) final;
+    void willDestroyFrontendAndBackend(DisconnectReason) final;
 
     // InspectorBackendDispatcherHandler
-    void enable(ErrorString&) override;
-    void disable(ErrorString&) override;
-    void initialized(ErrorString&) override;
+    void enable(ErrorString&) final;
+    void disable(ErrorString&) final;
+    void initialized(ErrorString&) final;
 
     // CommandLineAPI
     void inspect(RefPtr<Protocol::Runtime::RemoteObject>&& objectToInspect, RefPtr<JSON::Object>&& hints);
index 9791056..7e7cdc9 100644 (file)
@@ -44,20 +44,20 @@ class JS_EXPORT_PRIVATE InspectorScriptProfilerAgent final : public InspectorAge
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorScriptProfilerAgent(AgentContext&);
-    ~InspectorScriptProfilerAgent() override;
+    ~InspectorScriptProfilerAgent() final;
 
     // InspectorAgentBase
-    void didCreateFrontendAndBackend(FrontendRouter*, BackendDispatcher*) override;
-    void willDestroyFrontendAndBackend(DisconnectReason) override;
+    void didCreateFrontendAndBackend(FrontendRouter*, BackendDispatcher*) final;
+    void willDestroyFrontendAndBackend(DisconnectReason) final;
 
     // ScriptProfilerBackendDispatcherHandler
-    void startTracking(ErrorString&, const bool* includeSamples) override;
-    void stopTracking(ErrorString&) override;
+    void startTracking(ErrorString&, const bool* includeSamples) final;
+    void stopTracking(ErrorString&) final;
 
     // JSC::Debugger::ProfilingClient
-    bool isAlreadyProfiling() const override;
-    Seconds willEvaluateScript() override;
-    void didEvaluateScript(Seconds, JSC::ProfilingReason) override;
+    bool isAlreadyProfiling() const final;
+    Seconds willEvaluateScript() final;
+    void didEvaluateScript(Seconds, JSC::ProfilingReason) final;
 
 private:
     void addEvent(Seconds startTime, Seconds endTime, JSC::ProfilingReason);
index 1eb7abb..b929ddf 100644 (file)
@@ -37,20 +37,20 @@ class InspectorTarget;
 
 typedef String ErrorString;
 
-class JS_EXPORT_PRIVATE InspectorTargetAgent : public InspectorAgentBase, public TargetBackendDispatcherHandler {
+class JS_EXPORT_PRIVATE InspectorTargetAgent final : public InspectorAgentBase, public TargetBackendDispatcherHandler {
     WTF_MAKE_NONCOPYABLE(InspectorTargetAgent);
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorTargetAgent(FrontendRouter&, BackendDispatcher&);
-    ~InspectorTargetAgent() override;
+    ~InspectorTargetAgent() final;
 
     // InspectorAgentBase
     void didCreateFrontendAndBackend(FrontendRouter*, BackendDispatcher*) final;
     void willDestroyFrontendAndBackend(DisconnectReason) final;
 
     // TargetBackendDispatcherHandler
-    void setPauseOnStart(ErrorString&, bool pauseOnStart) override;
-    void resume(ErrorString&, const String& targetId) override;
+    void setPauseOnStart(ErrorString&, bool pauseOnStart) final;
+    void resume(ErrorString&, const String& targetId) final;
     void sendMessageToTarget(ErrorString&, const String& targetId, const String& message) final;
 
     // Target lifecycle.
index 4921d33..7d4670d 100644 (file)
@@ -38,10 +38,10 @@ class JSGlobalObjectAuditAgent final : public InspectorAuditAgent {
     WTF_MAKE_FAST_ALLOCATED;
 public:
     JSGlobalObjectAuditAgent(JSAgentContext&);
-    ~JSGlobalObjectAuditAgent() override;
+    ~JSGlobalObjectAuditAgent() final;
 
 private:
-    InjectedScript injectedScriptForEval(ErrorString&, const int* executionContextId) override;
+    InjectedScript injectedScriptForEval(ErrorString&, const int* executionContextId) final;
 
     JSC::JSGlobalObject& m_globalObject;
 };
index d760571..3b88dea 100644 (file)
@@ -36,18 +36,18 @@ class JSGlobalObjectDebuggerAgent final : public InspectorDebuggerAgent {
     WTF_MAKE_FAST_ALLOCATED;
 public:
     JSGlobalObjectDebuggerAgent(JSAgentContext&, InspectorConsoleAgent*);
-    ~JSGlobalObjectDebuggerAgent() override;
+    ~JSGlobalObjectDebuggerAgent() final;
 
     // ScriptDebugListener
-    void breakpointActionLog(JSC::JSGlobalObject*, const String&) override;
+    void breakpointActionLog(JSC::JSGlobalObject*, const String&) final;
 
 private:
-    InjectedScript injectedScriptForEval(ErrorString&, const int* executionContextId) override;
+    InjectedScript injectedScriptForEval(ErrorString&, const int* executionContextId) final;
 
     // NOTE: JavaScript inspector does not yet need to mute a console because no messages
     // are sent to the console outside of the API boundary or console object.
-    void muteConsole() override { }
-    void unmuteConsole() override { }
+    void muteConsole() final { }
+    void unmuteConsole() final { }
 
     InspectorConsoleAgent* m_consoleAgent { nullptr };
 };
index a347de4..6f0ce90 100644 (file)
@@ -39,15 +39,15 @@ class JSGlobalObjectRuntimeAgent final : public InspectorRuntimeAgent {
     WTF_MAKE_FAST_ALLOCATED;
 public:
     JSGlobalObjectRuntimeAgent(JSAgentContext&);
-    ~JSGlobalObjectRuntimeAgent() override;
+    ~JSGlobalObjectRuntimeAgent() final;
 
 private:
-    InjectedScript injectedScriptForEval(ErrorString&, const int* executionContextId) override;
+    InjectedScript injectedScriptForEval(ErrorString&, const int* executionContextId) final;
 
     // NOTE: JavaScript inspector does not yet need to mute a console because no messages
     // are sent to the console outside of the API boundary or console object.
-    void muteConsole() override { }
-    void unmuteConsole() override { }
+    void muteConsole() final { }
+    void unmuteConsole() final { }
 
     std::unique_ptr<RuntimeFrontendDispatcher> m_frontendDispatcher;
     RefPtr<RuntimeBackendDispatcher> m_backendDispatcher;
index 501bfda..a6b18cf 100644 (file)
@@ -51,11 +51,11 @@ public:
         m_alternateDispatcher->setBackendDispatcher(nullptr);
     }
 
-    void didCreateFrontendAndBackend(FrontendRouter*, BackendDispatcher*) override
+    void didCreateFrontendAndBackend(FrontendRouter*, BackendDispatcher*) final
     {
     }
 
-    void willDestroyFrontendAndBackend(DisconnectReason) override
+    void willDestroyFrontendAndBackend(DisconnectReason) final
     {
     }
 
index c85b64a..67337d7 100644 (file)
@@ -54,7 +54,7 @@ public:
 #else
     RemoteConnectionToTarget(RemoteControllableTarget&);
 #endif
-    ~RemoteConnectionToTarget() override;
+    ~RemoteConnectionToTarget() final;
 
     // Main API.
     bool setup(bool isAutomaticInspection = false, bool automaticallyPause = false);
@@ -77,8 +77,8 @@ public:
 #endif
 
     // FrontendChannel overrides.
-    ConnectionType connectionType() const override { return ConnectionType::Remote; }
-    void sendMessageToFrontend(const String&) override;
+    ConnectionType connectionType() const final { return ConnectionType::Remote; }
+    void sendMessageToFrontend(const String&) final;
 
 private:
 #if PLATFORM(COCOA)
index e2562cf..4a610aa 100644 (file)
@@ -207,9 +207,9 @@ private:
     void sendAutomaticInspectionCandidateMessage();
 
 #if PLATFORM(COCOA)
-    void xpcConnectionReceivedMessage(RemoteInspectorXPCConnection*, NSString *messageName, NSDictionary *userInfo) override;
-    void xpcConnectionFailed(RemoteInspectorXPCConnection*) override;
-    void xpcConnectionUnhandledMessage(RemoteInspectorXPCConnection*, xpc_object_t) override;
+    void xpcConnectionReceivedMessage(RemoteInspectorXPCConnection*, NSString *messageName, NSDictionary *userInfo) final;
+    void xpcConnectionFailed(RemoteInspectorXPCConnection*) final;
+    void xpcConnectionUnhandledMessage(RemoteInspectorXPCConnection*, xpc_object_t) final;
 
     void receivedSetupMessage(NSDictionary *userInfo);
     void receivedDataMessage(NSDictionary *userInfo);
@@ -223,8 +223,8 @@ private:
     void receivedAutomationSessionRequestMessage(NSDictionary *userInfo);
 #endif
 #if USE(INSPECTOR_SOCKET_SERVER)
-    HashMap<String, CallHandler>& dispatchMap() override;
-    void didClose(ConnectionID) override;
+    HashMap<String, CallHandler>& dispatchMap() final;
+    void didClose(ConnectionID) final;
 
     void sendWebInspectorEvent(const String&);
 
index 8f8ef05..008c6fd 100644 (file)
@@ -46,8 +46,8 @@ private:
     friend class NeverDestroyed<RemoteInspectorServer>;
     RemoteInspectorServer() { Socket::init(); }
 
-    bool didAccept(ConnectionID acceptedID, ConnectionID listenerID, Socket::Domain) override;
-    void didClose(ConnectionID) override { }
+    bool didAccept(ConnectionID acceptedID, ConnectionID listenerID, Socket::Domain) final;
+    void didClose(ConnectionID) final { }
 
     Optional<ConnectionID> m_server;
 };
index c7b1c87..96b55e4 100755 (executable)
@@ -95,7 +95,7 @@ protected:
     """${classAndExportMacro} ${domainName}BackendDispatcher final : public SupplementalBackendDispatcher {
 public:
     static Ref<${domainName}BackendDispatcher> create(BackendDispatcher&, ${domainName}BackendDispatcherHandler*);
-    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) override;
+    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) final;
 ${commandDeclarations}
 private:
     ${domainName}BackendDispatcher(BackendDispatcher&, ${domainName}BackendDispatcherHandler*);
index 05122c6..ed8cc59 100755 (executable)
@@ -111,5 +111,5 @@ class ObjCBackendDispatcherHeaderGenerator(ObjCGenerator):
             'commandName': command.command_name,
             'parameters': ', '.join(parameters),
         }
-        lines.append('    virtual void %(commandName)s(%(parameters)s) override;' % command_args)
+        lines.append('    void %(commandName)s(%(parameters)s) final;' % command_args)
         return '\n'.join(lines)
index 9b3cee6..c6e68f4 100644 (file)
@@ -153,7 +153,7 @@ protected:
 class NetworkBackendDispatcher final : public SupplementalBackendDispatcher {
 public:
     static Ref<NetworkBackendDispatcher> create(BackendDispatcher&, NetworkBackendDispatcherHandler*);
-    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) override;
+    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) final;
 private:
     void loadResource(long requestId, RefPtr<JSON::Object>&& parameters);
 #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
@@ -589,7 +589,7 @@ class ObjCInspectorNetworkBackendDispatcher final : public AlternateNetworkBacke
     WTF_MAKE_FAST_ALLOCATED;
 public:
     ObjCInspectorNetworkBackendDispatcher(id<TestProtocolNetworkDomainHandler> handler) { m_delegate = handler; }
-    virtual void loadResource(long requestId) override;
+    void loadResource(long requestId) final;
 private:
     RetainPtr<id<TestProtocolNetworkDomainHandler>> m_delegate;
 };
index 485aa61..4313fa9 100644 (file)
@@ -153,7 +153,7 @@ protected:
 class DomainBackendDispatcher final : public SupplementalBackendDispatcher {
 public:
     static Ref<DomainBackendDispatcher> create(BackendDispatcher&, DomainBackendDispatcherHandler*);
-    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) override;
+    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) final;
 private:
     void Command(long requestId, RefPtr<JSON::Object>&& parameters);
 #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
@@ -516,7 +516,7 @@ class ObjCInspectorDomainBackendDispatcher final : public AlternateDomainBackend
     WTF_MAKE_FAST_ALLOCATED;
 public:
     ObjCInspectorDomainBackendDispatcher(id<TestProtocolDomainDomainHandler> handler) { m_delegate = handler; }
-    virtual void Command(long requestId) override;
+    void Command(long requestId) final;
 private:
     RetainPtr<id<TestProtocolDomainDomainHandler>> m_delegate;
 };
index 59b3e3c..fc5c41d 100644 (file)
@@ -179,7 +179,7 @@ protected:
 class DatabaseBackendDispatcher final : public SupplementalBackendDispatcher {
 public:
     static Ref<DatabaseBackendDispatcher> create(BackendDispatcher&, DatabaseBackendDispatcherHandler*);
-    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) override;
+    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) final;
 private:
     void executeSQLSyncOptionalReturnValues(long requestId, RefPtr<JSON::Object>&& parameters);
     void executeSQLAsyncOptionalReturnValues(long requestId, RefPtr<JSON::Object>&& parameters);
@@ -865,10 +865,10 @@ class ObjCInspectorDatabaseBackendDispatcher final : public AlternateDatabaseBac
     WTF_MAKE_FAST_ALLOCATED;
 public:
     ObjCInspectorDatabaseBackendDispatcher(id<TestProtocolDatabaseDomainHandler> handler) { m_delegate = handler; }
-    virtual void executeSQLSyncOptionalReturnValues(long requestId, int in_databaseId, const String& in_query) override;
-    virtual void executeSQLAsyncOptionalReturnValues(long requestId, int in_databaseId, const String& in_query) override;
-    virtual void executeSQLSync(long requestId, int in_databaseId, const String& in_query) override;
-    virtual void executeSQLAsync(long requestId, int in_databaseId, const String& in_query) override;
+    void executeSQLSyncOptionalReturnValues(long requestId, int in_databaseId, const String& in_query) final;
+    void executeSQLAsyncOptionalReturnValues(long requestId, int in_databaseId, const String& in_query) final;
+    void executeSQLSync(long requestId, int in_databaseId, const String& in_query) final;
+    void executeSQLAsync(long requestId, int in_databaseId, const String& in_query) final;
 private:
     RetainPtr<id<TestProtocolDatabaseDomainHandler>> m_delegate;
 };
index 09f5587..85941ed 100644 (file)
@@ -162,7 +162,7 @@ protected:
 class DatabaseBackendDispatcher final : public SupplementalBackendDispatcher {
 public:
     static Ref<DatabaseBackendDispatcher> create(BackendDispatcher&, DatabaseBackendDispatcherHandler*);
-    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) override;
+    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) final;
 private:
     void executeAllOptionalParameters(long requestId, RefPtr<JSON::Object>&& parameters);
     void executeNoOptionalParameters(long requestId, RefPtr<JSON::Object>&& parameters);
@@ -780,8 +780,8 @@ class ObjCInspectorDatabaseBackendDispatcher final : public AlternateDatabaseBac
     WTF_MAKE_FAST_ALLOCATED;
 public:
     ObjCInspectorDatabaseBackendDispatcher(id<TestProtocolDatabaseDomainHandler> handler) { m_delegate = handler; }
-    virtual void executeAllOptionalParameters(long requestId, const JSON::Array* in_columnNames, const String* in_notes, const double* in_timestamp, const JSON::Object* in_values, const JSON::Value* in_payload, const int* in_databaseId, const JSON::Object* in_sqlError, const String* in_screenColor, const JSON::Array* in_alternateColors, const String* in_printColor) override;
-    virtual void executeNoOptionalParameters(long requestId, const JSON::Array& in_columnNames, const String& in_notes, double in_timestamp, const JSON::Object& in_values, JSON::Value in_payload, int in_databaseId, const JSON::Object& in_sqlError, const String& in_screenColor, const JSON::Array& in_alternateColors, const String& in_printColor) override;
+    void executeAllOptionalParameters(long requestId, const JSON::Array* in_columnNames, const String* in_notes, const double* in_timestamp, const JSON::Object* in_values, const JSON::Value* in_payload, const int* in_databaseId, const JSON::Object* in_sqlError, const String* in_screenColor, const JSON::Array* in_alternateColors, const String* in_printColor) final;
+    void executeNoOptionalParameters(long requestId, const JSON::Array& in_columnNames, const String& in_notes, double in_timestamp, const JSON::Object& in_values, JSON::Value in_payload, int in_databaseId, const JSON::Object& in_sqlError, const String& in_screenColor, const JSON::Array& in_alternateColors, const String& in_printColor) final;
 private:
     RetainPtr<id<TestProtocolDatabaseDomainHandler>> m_delegate;
 };
index 3d65b04..f5b5917 100644 (file)
@@ -153,7 +153,7 @@ protected:
 class DomainBackendDispatcher final : public SupplementalBackendDispatcher {
 public:
     static Ref<DomainBackendDispatcher> create(BackendDispatcher&, DomainBackendDispatcherHandler*);
-    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) override;
+    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) final;
 private:
     void Command(long requestId, RefPtr<JSON::Object>&& parameters);
 #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
@@ -516,7 +516,7 @@ class ObjCInspectorDomainBackendDispatcher final : public AlternateDomainBackend
     WTF_MAKE_FAST_ALLOCATED;
 public:
     ObjCInspectorDomainBackendDispatcher(id<TestProtocolDomainDomainHandler> handler) { m_delegate = handler; }
-    virtual void Command(long requestId) override;
+    void Command(long requestId) final;
 private:
     RetainPtr<id<TestProtocolDomainDomainHandler>> m_delegate;
 };
index cc08ae9..d30f24b 100644 (file)
@@ -153,7 +153,7 @@ protected:
 class DomainBackendDispatcher final : public SupplementalBackendDispatcher {
 public:
     static Ref<DomainBackendDispatcher> create(BackendDispatcher&, DomainBackendDispatcherHandler*);
-    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) override;
+    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) final;
 private:
     void Command(long requestId, RefPtr<JSON::Object>&& parameters);
 #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
@@ -516,7 +516,7 @@ class ObjCInspectorDomainBackendDispatcher final : public AlternateDomainBackend
     WTF_MAKE_FAST_ALLOCATED;
 public:
     ObjCInspectorDomainBackendDispatcher(id<TestProtocolDomainDomainHandler> handler) { m_delegate = handler; }
-    virtual void Command(long requestId) override;
+    void Command(long requestId) final;
 private:
     RetainPtr<id<TestProtocolDomainDomainHandler>> m_delegate;
 };
index ae8f093..f8948a2 100644 (file)
@@ -153,7 +153,7 @@ protected:
 class DomainBackendDispatcher final : public SupplementalBackendDispatcher {
 public:
     static Ref<DomainBackendDispatcher> create(BackendDispatcher&, DomainBackendDispatcherHandler*);
-    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) override;
+    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) final;
 private:
     void Command(long requestId, RefPtr<JSON::Object>&& parameters);
 #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
@@ -516,7 +516,7 @@ class ObjCInspectorDomainBackendDispatcher final : public AlternateDomainBackend
     WTF_MAKE_FAST_ALLOCATED;
 public:
     ObjCInspectorDomainBackendDispatcher(id<TestProtocolDomainDomainHandler> handler) { m_delegate = handler; }
-    virtual void Command(long requestId) override;
+    void Command(long requestId) final;
 private:
     RetainPtr<id<TestProtocolDomainDomainHandler>> m_delegate;
 };
index 3b907c7..2c07cb1 100644 (file)
@@ -187,7 +187,7 @@ protected:
 class Network1BackendDispatcher final : public SupplementalBackendDispatcher {
 public:
     static Ref<Network1BackendDispatcher> create(BackendDispatcher&, Network1BackendDispatcherHandler*);
-    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) override;
+    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) final;
 private:
     void loadResource1(long requestId, RefPtr<JSON::Object>&& parameters);
 #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
@@ -204,7 +204,7 @@ private:
 class Network3BackendDispatcher final : public SupplementalBackendDispatcher {
 public:
     static Ref<Network3BackendDispatcher> create(BackendDispatcher&, Network3BackendDispatcherHandler*);
-    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) override;
+    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) final;
 private:
     void loadResource1(long requestId, RefPtr<JSON::Object>&& parameters);
     void loadResource2(long requestId, RefPtr<JSON::Object>&& parameters);
@@ -745,7 +745,7 @@ class ObjCInspectorNetwork1BackendDispatcher final : public AlternateNetwork1Bac
     WTF_MAKE_FAST_ALLOCATED;
 public:
     ObjCInspectorNetwork1BackendDispatcher(id<TestProtocolNetwork1DomainHandler> handler) { m_delegate = handler; }
-    virtual void loadResource1(long requestId) override;
+    void loadResource1(long requestId) final;
 private:
     RetainPtr<id<TestProtocolNetwork1DomainHandler>> m_delegate;
 };
@@ -754,13 +754,13 @@ class ObjCInspectorNetwork3BackendDispatcher final : public AlternateNetwork3Bac
     WTF_MAKE_FAST_ALLOCATED;
 public:
     ObjCInspectorNetwork3BackendDispatcher(id<TestProtocolNetwork3DomainHandler> handler) { m_delegate = handler; }
-    virtual void loadResource1(long requestId) override;
-    virtual void loadResource2(long requestId) override;
-    virtual void loadResource3(long requestId) override;
-    virtual void loadResource4(long requestId) override;
-    virtual void loadResource5(long requestId) override;
-    virtual void loadResource6(long requestId) override;
-    virtual void loadResource7(long requestId) override;
+    void loadResource1(long requestId) final;
+    void loadResource2(long requestId) final;
+    void loadResource3(long requestId) final;
+    void loadResource4(long requestId) final;
+    void loadResource5(long requestId) final;
+    void loadResource6(long requestId) final;
+    void loadResource7(long requestId) final;
 private:
     RetainPtr<id<TestProtocolNetwork3DomainHandler>> m_delegate;
 };
index 59757bb..f06febb 100644 (file)
@@ -170,7 +170,7 @@ protected:
 class CommandDomainBackendDispatcher final : public SupplementalBackendDispatcher {
 public:
     static Ref<CommandDomainBackendDispatcher> create(BackendDispatcher&, CommandDomainBackendDispatcherHandler*);
-    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) override;
+    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) final;
 private:
     void commandWithEnumReturnValue(long requestId, RefPtr<JSON::Object>&& parameters);
 #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
@@ -633,7 +633,7 @@ class ObjCInspectorCommandDomainBackendDispatcher final : public AlternateComman
     WTF_MAKE_FAST_ALLOCATED;
 public:
     ObjCInspectorCommandDomainBackendDispatcher(id<TestProtocolCommandDomainDomainHandler> handler) { m_delegate = handler; }
-    virtual void commandWithEnumReturnValue(long requestId) override;
+    void commandWithEnumReturnValue(long requestId) final;
 private:
     RetainPtr<id<TestProtocolCommandDomainDomainHandler>> m_delegate;
 };
index 3944f48..d89a97f 100644 (file)
@@ -153,7 +153,7 @@ protected:
 class DomainBackendDispatcher final : public SupplementalBackendDispatcher {
 public:
     static Ref<DomainBackendDispatcher> create(BackendDispatcher&, DomainBackendDispatcherHandler*);
-    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) override;
+    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) final;
 private:
     void Command(long requestId, RefPtr<JSON::Object>&& parameters);
 #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
@@ -516,7 +516,7 @@ class ObjCInspectorDomainBackendDispatcher final : public AlternateDomainBackend
     WTF_MAKE_FAST_ALLOCATED;
 public:
     ObjCInspectorDomainBackendDispatcher(id<TestProtocolDomainDomainHandler> handler) { m_delegate = handler; }
-    virtual void Command(long requestId) override;
+    void Command(long requestId) final;
 private:
     RetainPtr<id<TestProtocolDomainDomainHandler>> m_delegate;
 };
index 1bda712..0946b53 100644 (file)
@@ -164,7 +164,7 @@ protected:
 class Network1BackendDispatcher final : public SupplementalBackendDispatcher {
 public:
     static Ref<Network1BackendDispatcher> create(BackendDispatcher&, Network1BackendDispatcherHandler*);
-    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) override;
+    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) final;
 private:
     void loadResource(long requestId, RefPtr<JSON::Object>&& parameters);
 #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
@@ -614,7 +614,7 @@ class ObjCInspectorNetwork1BackendDispatcher final : public AlternateNetwork1Bac
     WTF_MAKE_FAST_ALLOCATED;
 public:
     ObjCInspectorNetwork1BackendDispatcher(id<TestProtocolNetwork1DomainHandler> handler) { m_delegate = handler; }
-    virtual void loadResource(long requestId) override;
+    void loadResource(long requestId) final;
 private:
     RetainPtr<id<TestProtocolNetwork1DomainHandler>> m_delegate;
 };
index 9b3cee6..c6e68f4 100644 (file)
@@ -153,7 +153,7 @@ protected:
 class NetworkBackendDispatcher final : public SupplementalBackendDispatcher {
 public:
     static Ref<NetworkBackendDispatcher> create(BackendDispatcher&, NetworkBackendDispatcherHandler*);
-    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) override;
+    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) final;
 private:
     void loadResource(long requestId, RefPtr<JSON::Object>&& parameters);
 #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
@@ -589,7 +589,7 @@ class ObjCInspectorNetworkBackendDispatcher final : public AlternateNetworkBacke
     WTF_MAKE_FAST_ALLOCATED;
 public:
     ObjCInspectorNetworkBackendDispatcher(id<TestProtocolNetworkDomainHandler> handler) { m_delegate = handler; }
-    virtual void loadResource(long requestId) override;
+    void loadResource(long requestId) final;
 private:
     RetainPtr<id<TestProtocolNetworkDomainHandler>> m_delegate;
 };
index 1980eea..d43e08c 100644 (file)
@@ -95,7 +95,7 @@ private:
     bool m_isFinishedCompiling { false };
 };
 
-class JITWorklist::Thread : public AutomaticThread {
+class JITWorklist::Thread final : public AutomaticThread {
 public:
     Thread(const AbstractLocker& locker, JITWorklist& worklist)
         : AutomaticThread(locker, worklist.m_lock, worklist.m_condition.copyRef())
@@ -104,7 +104,7 @@ public:
         m_worklist.m_numAvailableThreads++;
     }
 
-    const char* name() const override
+    const char* name() const final
     {
 #if OS(LINUX)
         return "JITWorker";
@@ -113,8 +113,8 @@ public:
 #endif
     }
     
-protected:
-    PollResult poll(const AbstractLocker&) override
+private:
+    PollResult poll(const AbstractLocker&) final
     {
         RELEASE_ASSERT(m_worklist.m_numAvailableThreads);
         
@@ -126,7 +126,7 @@ protected:
         return PollResult::Work;
     }
     
-    WorkResult work() override
+    WorkResult work() final
     {
         RELEASE_ASSERT(!m_myPlans.isEmpty());
         
@@ -146,8 +146,7 @@ protected:
         m_worklist.m_numAvailableThreads++;
         return WorkResult::Continue;
     }
-    
-private:
+
     JITWorklist& m_worklist;
     Plans m_myPlans;
 };
index 43d131c..ca4e0e0 100644 (file)
@@ -301,8 +301,8 @@ namespace JSC {
         NullNode(const JSTokenLocation&);
 
     private:
-        bool isNull() const override { return true; }
-        JSValue jsValue(BytecodeGenerator&) const override { return jsNull(); }
+        bool isNull() const final { return true; }
+        JSValue jsValue(BytecodeGenerator&) const final { return jsNull(); }
     };
 
     class BooleanNode final : public ConstantNode {
@@ -311,8 +311,8 @@ namespace JSC {
         bool value() { return m_value; }
 
     private:
-        bool isBoolean() const override { return true; }
-        JSValue jsValue(BytecodeGenerator&) const override { return jsBoolean(m_value); }
+        bool isBoolean() const final { return true; }
+        JSValue jsValue(BytecodeGenerator&) const final { return jsBoolean(m_value); }
 
         bool m_value;
     };
@@ -352,8 +352,8 @@ namespace JSC {
         const Identifier& value() { return m_value; }
 
     private:
-        bool isString() const override { return true; }
-        JSValue jsValue(BytecodeGenerator&) const override;
+        bool isString() const final { return true; }
+        JSValue jsValue(BytecodeGenerator&) const final;
 
         const Identifier& m_value;
     };
@@ -549,7 +549,7 @@ namespace JSC {
         const Identifier* raw() { return m_raw; }
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         const Identifier* m_cooked;
         const Identifier* m_raw;
@@ -577,7 +577,7 @@ namespace JSC {
         TemplateExpressionListNode* templateExpressions() const { return m_templateExpressions; }
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         TemplateStringListNode* m_templateStrings;
         TemplateExpressionListNode* m_templateExpressions;
@@ -590,7 +590,7 @@ namespace JSC {
         TemplateLiteralNode* templateLiteral() const { return m_templateLiteral; }
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_tag;
         TemplateLiteralNode* m_templateLiteral;
@@ -601,7 +601,7 @@ namespace JSC {
         RegExpNode(const JSTokenLocation&, const Identifier& pattern, const Identifier& flags);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         const Identifier& m_pattern;
         const Identifier& m_flags;
@@ -612,7 +612,7 @@ namespace JSC {
         ThisNode(const JSTokenLocation&);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
     };
 
     class SuperNode final : public ExpressionNode {
@@ -620,8 +620,8 @@ namespace JSC {
         SuperNode(const JSTokenLocation&);
 
     private:
-        bool isSuperNode() const override { return true; }
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        bool isSuperNode() const final { return true; }
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
     };
 
     class ImportNode final : public ExpressionNode, public ThrowableExpressionData {
@@ -629,8 +629,8 @@ namespace JSC {
         ImportNode(const JSTokenLocation&, ExpressionNode*);
 
     private:
-        bool isImportNode() const override { return true; }
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        bool isImportNode() const final { return true; }
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_expr;
     };
@@ -649,7 +649,7 @@ namespace JSC {
 
     private:
         bool isNewTarget() const final { return true; }
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
     };
 
     class ImportMetaNode final : public MetaPropertyNode {
@@ -658,7 +658,7 @@ namespace JSC {
 
     private:
         bool isImportMeta() const final { return true; }
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_expr;
     };
@@ -670,11 +670,11 @@ namespace JSC {
         const Identifier& identifier() const { return m_ident; }
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
-        bool isPure(BytecodeGenerator&) const override;
-        bool isLocation() const override { return true; }
-        bool isResolveNode() const override { return true; }
+        bool isPure(BytecodeGenerator&) const final;
+        bool isLocation() const final { return true; }
+        bool isResolveNode() const final { return true; }
 
         const Identifier& m_ident;
         JSTextPosition m_start;
@@ -701,15 +701,15 @@ namespace JSC {
         ArrayNode(const JSTokenLocation&, ElementNode*);
         ArrayNode(const JSTokenLocation&, int elision, ElementNode*);
 
-        bool isArrayLiteral() const override { return true; }
+        bool isArrayLiteral() const final { return true; }
 
         ArgumentListNode* toArgumentList(ParserArena&, int, int) const;
 
         ElementNode* elements() const { return m_element; }
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
-        bool isSimpleArray() const override;
+        bool isSimpleArray() const final;
 
         ElementNode* m_element;
         int m_elision;
@@ -777,7 +777,7 @@ namespace JSC {
         RegisterID* emitBytecode(BytecodeGenerator&, RegisterID*, RegisterID*, Vector<JSTextPosition>*);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator& generator, RegisterID* dst = nullptr) override
+        RegisterID* emitBytecode(BytecodeGenerator& generator, RegisterID* dst = nullptr) final
         {
             return emitBytecode(generator, dst, nullptr, nullptr);
         }
@@ -792,10 +792,10 @@ namespace JSC {
     public:
         ObjectLiteralNode(const JSTokenLocation&);
         ObjectLiteralNode(const JSTokenLocation&, PropertyListNode*);
-        bool isObjectLiteral() const override { return true; }
+        bool isObjectLiteral() const final { return true; }
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         PropertyListNode* m_list;
     };
@@ -810,10 +810,10 @@ namespace JSC {
         bool subscriptHasAssignments() const { return m_subscriptHasAssignments; }
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
-        bool isLocation() const override { return true; }
-        bool isBracketAccessorNode() const override { return true; }
+        bool isLocation() const final { return true; }
+        bool isBracketAccessorNode() const final { return true; }
 
         ExpressionNode* m_base;
         ExpressionNode* m_subscript;
@@ -828,10 +828,10 @@ namespace JSC {
         const Identifier& identifier() const { return m_ident; }
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
-        bool isLocation() const override { return true; }
-        bool isDotAccessorNode() const override { return true; }
+        bool isLocation() const final { return true; }
+        bool isDotAccessorNode() const final { return true; }
 
         ExpressionNode* m_base;
         const Identifier& m_ident;
@@ -844,9 +844,9 @@ namespace JSC {
         ExpressionNode* expression() const { return m_expression; }
         
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
         
-        bool isSpreadExpression() const override { return true; }
+        bool isSpreadExpression() const final { return true; }
         ExpressionNode* m_expression;
     };
     
@@ -857,7 +857,7 @@ namespace JSC {
         ExpressionNode* expression() const { return m_expression; }
         
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
         
         ExpressionNode* m_expression;
     };
@@ -871,7 +871,7 @@ namespace JSC {
         ExpressionNode* m_expr;
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
     };
 
     class ArgumentsNode final : public ParserArenaFreeable {
@@ -888,7 +888,7 @@ namespace JSC {
         NewExprNode(const JSTokenLocation&, ExpressionNode*, ArgumentsNode*);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_expr;
         ArgumentsNode* m_args;
@@ -899,9 +899,9 @@ namespace JSC {
         EvalFunctionCallNode(const JSTokenLocation&, ArgumentsNode*, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
-        bool isFunctionCall() const override { return true; }
+        bool isFunctionCall() const final { return true; }
 
         ArgumentsNode* m_args;
     };
@@ -911,9 +911,9 @@ namespace JSC {
         FunctionCallValueNode(const JSTokenLocation&, ExpressionNode*, ArgumentsNode*, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
-        bool isFunctionCall() const override { return true; }
+        bool isFunctionCall() const final { return true; }
 
         ExpressionNode* m_expr;
         ArgumentsNode* m_args;
@@ -924,9 +924,9 @@ namespace JSC {
         FunctionCallResolveNode(const JSTokenLocation&, const Identifier&, ArgumentsNode*, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
-        bool isFunctionCall() const override { return true; }
+        bool isFunctionCall() const final { return true; }
 
         const Identifier& m_ident;
         ArgumentsNode* m_args;
@@ -937,9 +937,9 @@ namespace JSC {
         FunctionCallBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, bool subscriptHasAssignments, ArgumentsNode*, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
-        bool isFunctionCall() const override { return true; }
+        bool isFunctionCall() const final { return true; }
 
         ExpressionNode* m_base;
         ExpressionNode* m_subscript;
@@ -971,7 +971,7 @@ namespace JSC {
 
         BytecodeIntrinsicNode(Type, const JSTokenLocation&, BytecodeIntrinsicRegistry::Entry, const Identifier&, ArgumentsNode*, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
-        bool isBytecodeIntrinsicNode() const override { return true; }
+        bool isBytecodeIntrinsicNode() const final { return true; }
 
         Type type() const { return m_type; }
         BytecodeIntrinsicRegistry::Entry entry() const { return m_entry; }
@@ -983,9 +983,9 @@ namespace JSC {
 #undef JSC_DECLARE_BYTECODE_INTRINSIC_FUNCTIONS
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
-        bool isFunctionCall() const override { return m_type == Type::Function; }
+        bool isFunctionCall() const final { return m_type == Type::Function; }
 
         BytecodeIntrinsicRegistry::Entry m_entry;
         const Identifier& m_ident;
@@ -998,7 +998,7 @@ namespace JSC {
         CallFunctionCallDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, ArgumentsNode*, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd, size_t distanceToInnermostCallOrApply);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
         size_t m_distanceToInnermostCallOrApply;
     };
     
@@ -1007,7 +1007,7 @@ namespace JSC {
         ApplyFunctionCallDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, ArgumentsNode*, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd, size_t distanceToInnermostCallOrApply);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
         size_t m_distanceToInnermostCallOrApply;
     };
 
@@ -1016,7 +1016,7 @@ namespace JSC {
         DeleteResolveNode(const JSTokenLocation&, const Identifier&, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         bool isDeleteNode() const final { return true; }
 
@@ -1028,7 +1028,7 @@ namespace JSC {
         DeleteBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         bool isDeleteNode() const final { return true; }
 
@@ -1041,7 +1041,7 @@ namespace JSC {
         DeleteDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         bool isDeleteNode() const final { return true; }
 
@@ -1054,7 +1054,7 @@ namespace JSC {
         DeleteValueNode(const JSTokenLocation&, ExpressionNode*);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         bool isDeleteNode() const final { return true; }
 
@@ -1066,7 +1066,7 @@ namespace JSC {
         VoidNode(const JSTokenLocation&, ExpressionNode*);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_expr;
     };
@@ -1078,7 +1078,7 @@ namespace JSC {
         const Identifier& identifier() const { return m_ident; }
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         const Identifier& m_ident;
     };
@@ -1088,7 +1088,7 @@ namespace JSC {
         TypeOfValueNode(const JSTokenLocation&, ExpressionNode*);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_expr;
     };
@@ -1112,10 +1112,10 @@ namespace JSC {
         PostfixNode(const JSTokenLocation&, ExpressionNode*, Operator, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
-        RegisterID* emitResolve(BytecodeGenerator&, RegisterID* = nullptr) override;
-        RegisterID* emitBracket(BytecodeGenerator&, RegisterID* = nullptr) override;
-        RegisterID* emitDot(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
+        RegisterID* emitResolve(BytecodeGenerator&, RegisterID* = nullptr) final;
+        RegisterID* emitBracket(BytecodeGenerator&, RegisterID* = nullptr) final;
+        RegisterID* emitDot(BytecodeGenerator&, RegisterID* = nullptr) final;
     };
 
     class UnaryOpNode : public ExpressionNode {
@@ -1139,9 +1139,9 @@ namespace JSC {
         UnaryPlusNode(const JSTokenLocation&, ExpressionNode*);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
-        ExpressionNode* stripUnaryPlus() override { return expr(); }
+        ExpressionNode* stripUnaryPlus() final { return expr(); }
     };
 
     class NegateNode final : public UnaryOpNode {
@@ -1158,7 +1158,7 @@ namespace JSC {
     public:
         LogicalNotNode(const JSTokenLocation&, ExpressionNode*);
     private:
-        void emitBytecodeInConditionContext(BytecodeGenerator&, Label& trueTarget, Label& falseTarget, FallThroughMode) override;
+        void emitBytecodeInConditionContext(BytecodeGenerator&, Label& trueTarget, Label& falseTarget, FallThroughMode) final;
     };
 
     class BinaryOpNode : public ExpressionNode {
@@ -1217,14 +1217,14 @@ namespace JSC {
     public:
         AddNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
 
-        bool isAdd() const override { return true; }
+        bool isAdd() const final { return true; }
     };
 
     class SubNode final : public BinaryOpNode {
     public:
         SubNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
 
-        bool isSubtract() const override { return true; }
+        bool isSubtract() const final { return true; }
     };
 
     class LeftShiftNode final : public BinaryOpNode {
@@ -1276,7 +1276,7 @@ namespace JSC {
         InstanceOfNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
     };
 
     class InNode final : public ThrowableBinaryOpNode {
@@ -1284,7 +1284,7 @@ namespace JSC {
         InNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
     };
 
     class EqualNode final : public BinaryOpNode {
@@ -1292,7 +1292,7 @@ namespace JSC {
         EqualNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
     };
 
     class NotEqualNode final : public BinaryOpNode {
@@ -1305,7 +1305,7 @@ namespace JSC {
         StrictEqualNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
     };
 
     class NotStrictEqualNode final : public BinaryOpNode {
@@ -1334,8 +1334,8 @@ namespace JSC {
         LogicalOpNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, LogicalOperator);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
-        void emitBytecodeInConditionContext(BytecodeGenerator&, Label& trueTarget, Label& falseTarget, FallThroughMode) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
+        void emitBytecodeInConditionContext(BytecodeGenerator&, Label& trueTarget, Label& falseTarget, FallThroughMode) final;
 
         LogicalOperator m_operator;
         ExpressionNode* m_expr1;
@@ -1376,7 +1376,7 @@ namespace JSC {
         ConditionalNode(const JSTokenLocation&, ExpressionNode* logical, ExpressionNode* expr1, ExpressionNode* expr2);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_logical;
         ExpressionNode* m_expr1;
@@ -1388,7 +1388,7 @@ namespace JSC {
         ReadModifyResolveNode(const JSTokenLocation&, const Identifier&, Operator, ExpressionNode*  right, bool rightHasAssignments, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         const Identifier& m_ident;
         ExpressionNode* m_right;
@@ -1401,7 +1401,7 @@ namespace JSC {
         ShortCircuitReadModifyResolveNode(const JSTokenLocation&, const Identifier&, Operator, ExpressionNode*  right, bool rightHasAssignments, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         const Identifier& m_ident;
         ExpressionNode* m_right;
@@ -1412,11 +1412,11 @@ namespace JSC {
     class AssignResolveNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
         AssignResolveNode(const JSTokenLocation&, const Identifier&, ExpressionNode* right, AssignmentContext);
-        bool isAssignResolveNode() const override { return true; }
+        bool isAssignResolveNode() const final { return true; }
         const Identifier& identifier() const { return m_ident; }
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         const Identifier& m_ident;
         ExpressionNode* m_right;
@@ -1428,7 +1428,7 @@ namespace JSC {
         ReadModifyBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, Operator, ExpressionNode* right, bool subscriptHasAssignments, bool rightHasAssignments, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_base;
         ExpressionNode* m_subscript;
@@ -1443,7 +1443,7 @@ namespace JSC {
         ShortCircuitReadModifyBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, Operator, ExpressionNode* right, bool subscriptHasAssignments, bool rightHasAssignments, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_base;
         ExpressionNode* m_subscript;
@@ -1458,7 +1458,7 @@ namespace JSC {
         AssignBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, ExpressionNode* right, bool subscriptHasAssignments, bool rightHasAssignments, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_base;
         ExpressionNode* m_subscript;
@@ -1472,7 +1472,7 @@ namespace JSC {
         AssignDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, ExpressionNode* right, bool rightHasAssignments, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_base;
         const Identifier& m_ident;
@@ -1485,7 +1485,7 @@ namespace JSC {
         ReadModifyDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, Operator, ExpressionNode* right, bool rightHasAssignments, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_base;
         const Identifier& m_ident;
@@ -1499,7 +1499,7 @@ namespace JSC {
         ShortCircuitReadModifyDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, Operator, ExpressionNode* right, bool rightHasAssignments, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_base;
         const Identifier& m_ident;
@@ -1513,7 +1513,7 @@ namespace JSC {
         AssignErrorNode(const JSTokenLocation&, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
     };
     
     class CommaNode final : public ExpressionNode {
@@ -1524,8 +1524,8 @@ namespace JSC {
         CommaNode* next() { return m_next; }
 
     private:
-        bool isCommaNode() const override { return true; }
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        bool isCommaNode() const final { return true; }
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_expr;
         CommaNode* m_next { nullptr };
@@ -1560,12 +1560,12 @@ namespace JSC {
         StatementNode* lastStatement() const;
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
-        bool hasCompletionValue() const override;
-        bool hasEarlyBreakOrContinue() const override;
+        bool hasCompletionValue() const final;
+        bool hasEarlyBreakOrContinue() const final;
 
-        bool isBlock() const override { return true; }
+        bool isBlock() const final { return true; }
 
         SourceElements* m_statements;
     };
@@ -1575,21 +1575,21 @@ namespace JSC {
         EmptyStatementNode(const JSTokenLocation&);
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
-        bool hasCompletionValue() const override { return false; }
-        bool isEmptyStatement() const override { return true; }
+        bool hasCompletionValue() const final { return false; }
+        bool isEmptyStatement() const final { return true; }
     };
     
     class DebuggerStatementNode final : public StatementNode {
     public:
         DebuggerStatementNode(const JSTokenLocation&);
 
-        bool hasCompletionValue() const override { return false; }
-        bool isDebuggerStatement() const override { return true; }
+        bool hasCompletionValue() const final { return false; }
+        bool isDebuggerStatement() const final { return true; }
         
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
     };
 
     class ExprStatementNode final : public StatementNode {
@@ -1599,9 +1599,9 @@ namespace JSC {
         ExpressionNode* expr() const { return m_expr; }
 
     private:
-        bool isExprStatement() const override { return true; }
+        bool isExprStatement() const final { return true; }
 
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_expr;
     };
@@ -1610,9 +1610,9 @@ namespace JSC {
     public:
         DeclarationStatement(const JSTokenLocation&, ExpressionNode*);
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
-        bool hasCompletionValue() const override { return false; }
+        bool hasCompletionValue() const final { return false; }
 
         ExpressionNode* m_expr;
     };
@@ -1622,7 +1622,7 @@ namespace JSC {
         EmptyVarExpression(const JSTokenLocation&, const Identifier&);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         const Identifier& m_ident;
     };
@@ -1632,7 +1632,7 @@ namespace JSC {
         EmptyLetExpression(const JSTokenLocation&, const Identifier&);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         const Identifier& m_ident;
     };
@@ -1642,7 +1642,7 @@ namespace JSC {
         IfElseNode(const JSTokenLocation&, ExpressionNode* condition, StatementNode* ifBlock, StatementNode* elseBlock);
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
         bool tryFoldBreakAndContinue(BytecodeGenerator&, StatementNode* ifBlock,
             Label*& trueTarget, FallThroughMode&);
 
@@ -1656,7 +1656,7 @@ namespace JSC {
         DoWhileNode(const JSTokenLocation&, StatementNode*, ExpressionNode*);
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         StatementNode* m_statement;
         ExpressionNode* m_expr;
@@ -1667,7 +1667,7 @@ namespace JSC {
         WhileNode(const JSTokenLocation&, ExpressionNode*, StatementNode*);
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_expr;
         StatementNode* m_statement;
@@ -1679,7 +1679,7 @@ namespace JSC {
         ForNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, ExpressionNode* expr3, StatementNode*, VariableEnvironment&);
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_expr1;
         ExpressionNode* m_expr2;
@@ -1712,18 +1712,18 @@ namespace JSC {
         RegisterID* tryGetBoundLocal(BytecodeGenerator&);
         void emitLoopHeader(BytecodeGenerator&, RegisterID* propertyName);
 
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
     };
     
     class ForOfNode final : public EnumerationNode {
         JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(ForOfNode);
     public:
         ForOfNode(bool, const JSTokenLocation&, ExpressionNode*, ExpressionNode*, StatementNode*, VariableEnvironment&);
-        bool isForOfNode() const override { return true; }
+        bool isForOfNode() const final { return true; }
         bool isForAwait() const { return m_isForAwait; }
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         const bool m_isForAwait;
     };
@@ -1734,9 +1734,9 @@ namespace JSC {
         Label* trivialTarget(BytecodeGenerator&);
         
     private:
-        bool hasCompletionValue() const override { return false; }
-        bool isContinue() const override { return true; }
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        bool hasCompletionValue() const final { return false; }
+        bool isContinue() const final { return true; }
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         const Identifier& m_ident;
     };
@@ -1747,9 +1747,9 @@ namespace JSC {
         Label* trivialTarget(BytecodeGenerator&);
         
     private:
-        bool hasCompletionValue() const override { return false; }
-        bool isBreak() const override { return true; }
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        bool hasCompletionValue() const final { return false; }
+        bool isBreak() const final { return true; }
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         const Identifier& m_ident;
     };
@@ -1761,9 +1761,9 @@ namespace JSC {
         ExpressionNode* value() { return m_value; }
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
-        bool isReturnNode() const override { return true; }
+        bool isReturnNode() const final { return true; }
 
         ExpressionNode* m_value;
     };
@@ -1773,7 +1773,7 @@ namespace JSC {
         WithNode(const JSTokenLocation&, ExpressionNode*, StatementNode*, const JSTextPosition& divot, uint32_t expressionLength);
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_expr;
         StatementNode* m_statement;
@@ -1785,11 +1785,11 @@ namespace JSC {
     public:
         LabelNode(const JSTokenLocation&, const Identifier& name, StatementNode*);
 
-        bool isLabel() const override { return true; }
+        bool isLabel() const final { return true; }
 
     private:
-        bool hasCompletionValue() const override { return m_statement->hasCompletionValue(); }
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        bool hasCompletionValue() const final { return m_statement->hasCompletionValue(); }
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         const Identifier& m_name;
         StatementNode* m_statement;
@@ -1800,7 +1800,7 @@ namespace JSC {
         ThrowNode(const JSTokenLocation&, ExpressionNode*);
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_expr;
     };
@@ -1811,7 +1811,7 @@ namespace JSC {
         TryNode(const JSTokenLocation&, StatementNode* tryBlock, DestructuringPatternNode* catchPattern, StatementNode* catchBlock, VariableEnvironment& catchEnvironment, StatementNode* finallyBlock);
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         StatementNode* m_tryBlock;
         DestructuringPatternNode* m_catchPattern;
@@ -1912,7 +1912,7 @@ namespace JSC {
         static constexpr bool scopeIsFunction = false;
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
         unsigned m_startColumn;
         unsigned m_endColumn;
     };
@@ -1927,7 +1927,7 @@ namespace JSC {
         static constexpr bool scopeIsFunction = false;
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         unsigned m_endColumn;
     };
@@ -1947,7 +1947,7 @@ namespace JSC {
         }
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
         unsigned m_startColumn;
         unsigned m_endColumn;
         Ref<ModuleScopeData> m_moduleScopeData;
@@ -2008,8 +2008,8 @@ namespace JSC {
         ModuleNameNode* moduleName() const { return m_moduleName; }
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
-        void analyzeModule(ModuleAnalyzer&) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
+        void analyzeModule(ModuleAnalyzer&) final;
 
         ImportSpecifierListNode* m_specifierList;
         ModuleNameNode* m_moduleName;
@@ -2022,8 +2022,8 @@ namespace JSC {
         ModuleNameNode* moduleName() const { return m_moduleName; }
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
-        void analyzeModule(ModuleAnalyzer&) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
+        void analyzeModule(ModuleAnalyzer&) final;
 
         ModuleNameNode* m_moduleName;
     };
@@ -2036,8 +2036,8 @@ namespace JSC {
         const Identifier& localName() const { return m_localName; }
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
-        void analyzeModule(ModuleAnalyzer&) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
+        void analyzeModule(ModuleAnalyzer&) final;
         StatementNode* m_declaration;
         const Identifier& m_localName;
     };
@@ -2049,8 +2049,8 @@ namespace JSC {
         const StatementNode& declaration() const { return *m_declaration; }
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
-        void analyzeModule(ModuleAnalyzer&) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
+        void analyzeModule(ModuleAnalyzer&) final;
         StatementNode* m_declaration;
     };
 
@@ -2089,8 +2089,8 @@ namespace JSC {
         ModuleNameNode* moduleName() const { return m_moduleName; }
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
-        void analyzeModule(ModuleAnalyzer&) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
+        void analyzeModule(ModuleAnalyzer&) final;
         ExportSpecifierListNode* m_specifierList;
         ModuleNameNode* m_moduleName { nullptr };
     };
@@ -2190,9 +2190,9 @@ namespace JSC {
 
         FunctionParameters* parameters() const { return m_parameters; }
 
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
-        bool isFunctionNode() const override { return true; }
+        bool isFunctionNode() const final { return true; }
 
         void finishParsing(const Identifier&, FunctionMode);
         
@@ -2244,9 +2244,9 @@ namespace JSC {
         ArrowFuncExprNode(const JSTokenLocation&, const Identifier&, FunctionMetadataNode*, const SourceCode&);
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
-        bool isArrowFuncExprNode() const override { return true; }
+        bool isArrowFuncExprNode() const final { return true; }
     };
 
     class MethodDefinitionNode final : public FuncExprNode {
@@ -2254,7 +2254,7 @@ namespace JSC {
         MethodDefinitionNode(const JSTokenLocation&, const Identifier&, FunctionMetadataNode*, const SourceCode&);
         
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
     };
 
     class YieldExprNode final : public ExpressionNode, public ThrowableExpressionData {
@@ -2265,7 +2265,7 @@ namespace JSC {
         bool delegate() const { return m_delegate; }
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_argument;
         bool m_delegate;
@@ -2278,7 +2278,7 @@ namespace JSC {
         ExpressionNode* argument() const { return m_argument; }
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_argument;
     };
@@ -2289,9 +2289,9 @@ namespace JSC {
         DefineFieldNode(const JSTokenLocation&, const Identifier*, ExpressionNode*, Type);
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* destination = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* destination = nullptr) final;
 
-        bool isDefineFieldNode() const override { return true; }
+        bool isDefineFieldNode() const final { return true; }
 
         const Identifier* m_ident;
         ExpressionNode* m_assign;
@@ -2313,9 +2313,9 @@ namespace JSC {
         bool hasInstanceFields() const { return m_classElements ? m_classElements->hasInstanceFields() : false; }
 
     private:
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
-        bool isClassExprNode() const override { return true; }
+        bool isClassExprNode() const final { return true; }
 
         SourceCode m_classSource;
         const Identifier& m_name;
@@ -2363,10 +2363,10 @@ namespace JSC {
             DestructuringPatternNode* pattern;
             ExpressionNode* defaultValue;
         };
-        void collectBoundIdentifiers(Vector<Identifier>&) const override;
-        void bindValue(BytecodeGenerator&, RegisterID*) const override;
-        RegisterID* emitDirectBinding(BytecodeGenerator&, RegisterID* dst, ExpressionNode*) override;
-        void toString(StringBuilder&) const override;
+        void collectBoundIdentifiers(Vector<Identifier>&) const final;
+        void bindValue(BytecodeGenerator&, RegisterID*) const final;
+        RegisterID* emitDirectBinding(BytecodeGenerator&, RegisterID* dst, ExpressionNode*) final;
+        void toString(StringBuilder&) const final;
 
         Vector<Entry> m_targetPatterns;
     };
@@ -2400,9 +2400,9 @@ namespace JSC {
         }
 
     private:
-        void collectBoundIdentifiers(Vector<Identifier>&) const override;
-        void bindValue(BytecodeGenerator&, RegisterID*) const override;
-        void toString(StringBuilder&) const override;
+        void collectBoundIdentifiers(Vector<Identifier>&) const final;
+        void bindValue(BytecodeGenerator&, RegisterID*) const final;
+        void toString(StringBuilder&) const final;
         struct Entry {
             const Identifier& propertyName;
             ExpressionNode* propertyExpression;
@@ -2425,11 +2425,11 @@ namespace JSC {
         const JSTextPosition& divotEnd() const { return m_divotEnd; }
         
     private:
-        void collectBoundIdentifiers(Vector<Identifier>&) const override;
-        void bindValue(BytecodeGenerator&, RegisterID*) const override;
-        void toString(StringBuilder&) const override;
+        void collectBoundIdentifiers(Vector<Identifier>&) const final;
+        void bindValue(BytecodeGenerator&, RegisterID*) const final;
+        void toString(StringBuilder&) const final;
         
-        bool isBindingNode() const override { return true; }
+        bool isBindingNode() const final { return true; }
 
         JSTextPosition m_divotStart;
         JSTextPosition m_divotEnd;
@@ -2441,14 +2441,14 @@ namespace JSC {
     public:
         RestParameterNode(DestructuringPatternNode*, unsigned numParametersToSkip);
 
-        bool isRestParameter() const override { return true; }
+        bool isRestParameter() const final { return true; }
 
         void emit(BytecodeGenerator&);
 
     private:
-        void collectBoundIdentifiers(Vector<Identifier>&) const override;
-        void bindValue(BytecodeGenerator&, RegisterID*) const override;
-        void toString(StringBuilder&) const override;
+        void collectBoundIdentifiers(Vector<Identifier>&) const final;
+        void bindValue(BytecodeGenerator&, RegisterID*) const final;
+        void toString(StringBuilder&) const final;
 
         DestructuringPatternNode* m_pattern;
         unsigned m_numParametersToSkip;
@@ -2463,11 +2463,11 @@ namespace JSC {
         const JSTextPosition& divotEnd() const { return m_divotEnd; }
 
     private:
-        void collectBoundIdentifiers(Vector<Identifier>&) const override;
-        void bindValue(BytecodeGenerator&, RegisterID*) const override;
-        void toString(StringBuilder&) const override;
+        void collectBoundIdentifiers(Vector<Identifier>&) const final;
+        void bindValue(BytecodeGenerator&, RegisterID*) const final;
+        void toString(StringBuilder&) const final;
 
-        bool isAssignmentElementNode() const override { return true; }
+        bool isAssignmentElementNode() const final { return true; }
 
         JSTextPosition m_divotStart;
         JSTextPosition m_divotEnd;
@@ -2480,9 +2480,9 @@ namespace JSC {
         DestructuringPatternNode* bindings() { return m_bindings; }
         
     private:
-        bool isAssignmentLocation() const override { return true; }
-        bool isDestructuringNode() const override { return true; }
-        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        bool isAssignmentLocation() const final { return true; }
+        bool isDestructuringNode() const final { return true; }
+        RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         DestructuringPatternNode* m_bindings;
         ExpressionNode* m_initializer;
@@ -2523,12 +2523,12 @@ namespace JSC {
     public:
         FuncDeclNode(const JSTokenLocation&, const Identifier&, FunctionMetadataNode*, const SourceCode&);
 
-        bool hasCompletionValue() const override { return false; }
-        bool isFuncDeclNode() const override { return true; }
+        bool hasCompletionValue() const final { return false; }
+        bool isFuncDeclNode() const final { return true; }
         FunctionMetadataNode* metadata() { return m_metadata; }
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         FunctionMetadataNode* m_metadata;
     };
@@ -2538,9 +2538,9 @@ namespace JSC {
         ClassDeclNode(const JSTokenLocation&, ExpressionNode* classExpression);
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
-        bool hasCompletionValue() const override { return false; }
+        bool hasCompletionValue() const final { return false; }
 
         ExpressionNode* m_classDeclaration;
     };
@@ -2593,7 +2593,7 @@ namespace JSC {
         SwitchNode(const JSTokenLocation&, ExpressionNode*, CaseBlockNode*, VariableEnvironment&, FunctionStack&&);
 
     private:
-        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) override;
+        void emitBytecode(BytecodeGenerator&, RegisterID* = nullptr) final;
 
         ExpressionNode* m_expr;
         CaseBlockNode* m_block;
index 33e39d1..b62f393 100644 (file)
@@ -131,19 +131,19 @@ class UnlinkedFunctionCodeBlock;
     };
 
 #if ENABLE(WEBASSEMBLY)
-    class WebAssemblySourceProvider : public SourceProvider {
+    class WebAssemblySourceProvider final : public SourceProvider {
     public:
         static Ref<WebAssemblySourceProvider> create(Vector<uint8_t>&& data, const SourceOrigin& sourceOrigin, URL&& url)
         {
             return adoptRef(*new WebAssemblySourceProvider(WTFMove(data), sourceOrigin, WTFMove(url)));
         }
 
-        unsigned hash() const override
+        unsigned hash() const final
         {
             return m_source.impl()->hash();
         }
 
-        StringView source() const override
+        StringView source() const final
         {
             return m_source;
         }
index bd28e71..da06b4b 100644 (file)
 
 namespace JSC {
 
-class DataView : public ArrayBufferView {
-protected:
-    DataView(RefPtr<ArrayBuffer>&&, unsigned byteOffset, unsigned byteLength);
-    
+class DataView final : public ArrayBufferView {
 public:
     JS_EXPORT_PRIVATE static Ref<DataView> create(RefPtr<ArrayBuffer>&&, unsigned byteOffset, unsigned length);
     static Ref<DataView> create(RefPtr<ArrayBuffer>&&);
     
-    TypedArrayType getType() const override
+    TypedArrayType getType() const final
     {
         return TypeDataView;
     }
 
-    JSArrayBufferView* wrap(JSGlobalObject*, JSGlobalObject*) override;
+    JSArrayBufferView* wrap(JSGlobalObject*, JSGlobalObject*) final;
     
     template<typename T>
     T get(unsigned offset, bool littleEndian, bool* status = nullptr)
@@ -84,6 +81,9 @@ public:
         *reinterpret_cast<T*>(static_cast<uint8_t*>(m_baseAddress.get(byteLength())) + offset) =
             flipBytesIfLittleEndian(value, littleEndian);
     }
+
+private:
+    DataView(RefPtr<ArrayBuffer>&&, unsigned byteOffset, unsigned byteLength);
 };
 
 } // namespace JSC
index acf565d..3cf0b48 100644 (file)
@@ -36,7 +36,7 @@ class DoublePredictionFuzzerAgent final : public FuzzerAgent {
 public:
     DoublePredictionFuzzerAgent(VM&);
 
-    SpeculatedType getPrediction(CodeBlock*, const CodeOrigin&, SpeculatedType) override;
+    SpeculatedType getPrediction(CodeBlock*, const CodeOrigin&, SpeculatedType) final;
 };
 
 } // namespace JSC
index 75e0335..649e306 100644 (file)
@@ -38,7 +38,7 @@ public:
     FileBasedFuzzerAgent(VM&);
 
 private:
-    SpeculatedType getPredictionInternal(CodeBlock*, PredictionTarget&, SpeculatedType original) override;
+    SpeculatedType getPredictionInternal(CodeBlock*, PredictionTarget&, SpeculatedType original) final;
 };
 
 } // namespace JSC
index 4f864ed..ccee6aa 100644 (file)
@@ -110,12 +110,12 @@ public:
     RefPtr<GenericTypedArrayView> subarray(int start) const;
     RefPtr<GenericTypedArrayView> subarray(int start, int end) const;
     
-    TypedArrayType getType() const override
+    TypedArrayType getType() const final
     {
         return Adaptor::typeValue;
     }
 
-    JSArrayBufferView* wrap(JSGlobalObject*, JSGlobalObject*) override;
+    JSArrayBufferView* wrap(JSGlobalObject*, JSGlobalObject*) final;
 
 private:
     GenericTypedArrayView(RefPtr<ArrayBuffer>&&, unsigned byteOffset, unsigned length);
index 3a53fcb..f933531 100644 (file)
@@ -55,7 +55,7 @@ public:
     }
 
 private:
-    void run(JSGlobalObject*) override;
+    void run(JSGlobalObject*) final;
 
     Strong<Unknown> m_job;
     Strong<Unknown> m_arguments[maxArguments];
index 79a6b79..7b52074 100644 (file)
@@ -37,7 +37,7 @@ class NarrowingNumberPredictionFuzzerAgent final : public NumberPredictionFuzzer
 public:
     NarrowingNumberPredictionFuzzerAgent(VM&);
 
-    SpeculatedType getPrediction(CodeBlock*, const CodeOrigin&, SpeculatedType) override;
+    SpeculatedType getPrediction(CodeBlock*, const CodeOrigin&, SpeculatedType) final;
 };
 
 } // namespace JSC
index ecc4d06..9fcc9d2 100644 (file)
@@ -42,12 +42,12 @@ public:
     }
 
 private:
-    bool isValid() const override
+    bool isValid() const final
     {
         return m_owner->isLive();
     }
 
-    void handleFire(VM& vm, const FireDetail&) override
+    void handleFire(VM& vm, const FireDetail&) final
     {
         m_watchpointSet.fireAll(vm, StringFireDetail("Object Property is changed."));
     }
index 617028d..a02acd6 100644 (file)
@@ -38,7 +38,7 @@ public:
     PredictionFileCreatingFuzzerAgent(VM&);
 
 private:
-    SpeculatedType getPredictionInternal(CodeBlock*, PredictionTarget&, SpeculatedType original) override;
+    SpeculatedType getPredictionInternal(CodeBlock*, PredictionTarget&, SpeculatedType original) final;
 };
 
 } // namespace JSC
index 6e4f9fa..3a4d0f2 100644 (file)
@@ -38,11 +38,11 @@ class JSPromise;
 class VM;
 class JSCell;
 
-class PromiseTimer : public JSRunLoopTimer {
+class PromiseTimer final : public JSRunLoopTimer {
 public:
     using Base = JSRunLoopTimer;
 
-    void doWork(VM&) override;
+    void doWork(VM&) final;
 
     void addPendingPromise(VM&, JSPromise*, Vector<Strong<JSCell>>&& dependencies);
     JS_EXPORT_PRIVATE bool hasPendingPromise(JSPromise* ticket);
index 6c74ad0..1de7bb7 100644 (file)
@@ -38,7 +38,7 @@ class RandomizingFuzzerAgent final : public FuzzerAgent {
 public:
     RandomizingFuzzerAgent(VM&);
 
-    SpeculatedType getPrediction(CodeBlock*, const CodeOrigin&, SpeculatedType) override;
+    SpeculatedType getPrediction(CodeBlock*, const CodeOrigin&, SpeculatedType) final;
 
 private:
     WeakRandom m_random;
index 7b1263d..82737d8 100644 (file)
@@ -41,7 +41,7 @@ namespace Yarr {
 enum class Flags : uint8_t;
 }
 
-class RegExpCache : private WeakHandleOwner {
+class RegExpCache final : private WeakHandleOwner {
     WTF_MAKE_FAST_ALLOCATED;
 
     friend class RegExp;
@@ -59,12 +59,11 @@ public:
     }
 
 private:
-    
     static constexpr unsigned maxStrongCacheablePatternLength = 256;
 
     static constexpr int maxStrongCacheableEntries = 32;
 
-    void finalize(Handle<Unknown>, void* context) override;
+    void finalize(Handle<Unknown>, void* context) final;
 
     RegExp* ensureEmptyRegExpSlow(VM&);
 
index 09d7525..c62afce 100644 (file)
@@ -53,7 +53,7 @@ static HashSet<Structure*>& liveStructureSet = *(new HashSet<Structure*>);
 #endif
 
 class SingleSlotTransitionWeakOwner final : public WeakHandleOwner {
-    void finalize(Handle<Unknown>, void* context) override
+    void finalize(Handle<Unknown>, void* context) final
     {
         StructureTransitionTable* table = reinterpret_cast<StructureTransitionTable*>(context);
         ASSERT(table->isUsingSingleSlot());
index b5a98db..d8534a0 100644 (file)
@@ -86,8 +86,8 @@ public:
     ObjectToStringAdaptiveInferredPropertyValueWatchpoint(const ObjectPropertyCondition&, StructureRareData*);
 
 private:
-    bool isValid() const override;
-    void handleFire(VM&, const FireDetail&) override;
+    bool isValid() const final;
+    void handleFire(VM&, const FireDetail&) final;
 
     StructureRareData* m_structureRareData;
 };
index d37e8c8..615ec9e 100644 (file)
@@ -240,7 +240,7 @@ public:
         });
     }
 
-    const char* name() const override
+    const char* name() const final
     {
         return "JSC VMTraps Signal Sender Thread";
     }
@@ -248,7 +248,7 @@ public:
     VMTraps& traps() { return m_vm.traps(); }
 
 private:
-    PollResult poll(const AbstractLocker&) override
+    PollResult poll(const AbstractLocker&) final
     {
         if (traps().m_isShuttingDown)
             return PollResult::Stop;
@@ -262,7 +262,7 @@ private:
         return PollResult::Work;
     }
 
-    WorkResult work() override
+    WorkResult work() final
     {
         VM& vm = m_vm;
 
index 759f5ed..f608ef7 100644 (file)
@@ -37,7 +37,7 @@ class WideningNumberPredictionFuzzerAgent final : public NumberPredictionFuzzerA
 public:
     WideningNumberPredictionFuzzerAgent(VM&);
 
-    SpeculatedType getPrediction(CodeBlock*, const CodeOrigin&, SpeculatedType) override;
+    SpeculatedType getPrediction(CodeBlock*, const CodeOrigin&, SpeculatedType) final;
 };
 
 } // namespace JSC
index add9b16..956efdb 100644 (file)
@@ -246,10 +246,10 @@ private:
     WriteBarrier<Root> m_root;
 };
 
-class ElementHandleOwner : public WeakHandleOwner {
+class ElementHandleOwner final : public WeakHandleOwner {
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    bool isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void*, SlotVisitor& visitor, const char** reason) override
+    bool isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void*, SlotVisitor& visitor, const char** reason) final
     {
         DollarVMAssertScope assertScope;
         if (UNLIKELY(reason))
@@ -259,7 +259,7 @@ public:
     }
 };
 
-class Root : public JSDestructibleObject {
+class Root final : public JSDestructibleObject {
 public:
     using Base = JSDestructibleObject;
     template<typename CellType, SubspaceAccess>
@@ -1465,9 +1465,9 @@ public:
         {
         }
 
-        bool didReceiveSectionData(Wasm::Section) override { return true; }
-        bool didReceiveFunctionData(unsigned, const Wasm::FunctionData&) override { return true; }
-        void didFinishParsing() override { }
+        bool didReceiveSectionData(Wasm::Section) final { return true; }
+        bool didReceiveFunctionData(unsigned, const Wasm::FunctionData&) final { return true; }
+        void didFinishParsing() final { }
 
         WasmStreamingParser* m_parser;
     };
@@ -2691,7 +2691,7 @@ public:
     }
 
 private:
-    void sourceParsed(JSGlobalObject*, SourceProvider*, int, const WTF::String&) override
+    void sourceParsed(JSGlobalObject*, SourceProvider*, int, const WTF::String&) final
     {
         DollarVMAssertScope assertScope;
     }
index 294a743..fb4e1e2 100644 (file)
@@ -56,19 +56,19 @@ public:
 
     BBQPlan(Context*, Ref<ModuleInformation>, uint32_t functionIndex, CodeBlock*, CompletionTask&&);
 
-    bool hasWork() const override
+    bool hasWork() const final
     {
         if (m_asyncWork == AsyncWork::Validation)
             return m_state < State::Validated;
         return m_state < State::Compiled;
     }
 
-    void work(CompilationEffort) override;
+    void work(CompilationEffort) final;
 
     using CalleeInitializer = Function<void(uint32_t, RefPtr<EmbedderEntrypointCallee>&&, Ref<BBQCallee>&&)>;
     void initializeCallees(const CalleeInitializer&);
 
-    bool didReceiveFunctionData(unsigned, const FunctionData&) override;
+    bool didReceiveFunctionData(unsigned, const FunctionData&) final;
 
     bool parseAndValidateModule()
     {
@@ -76,9 +76,9 @@ public:
     }
 
 private:
-    bool prepareImpl() override;
-    void compileFunction(uint32_t functionIndex) override;
-    void didCompleteCompilation(const AbstractLocker&) override;
+    bool prepareImpl() final;
+    void compileFunction(uint32_t functionIndex) final;
+    void didCompleteCompilation(const AbstractLocker&) final;
 
     std::unique_ptr<InternalFunction> compileFunction(uint32_t functionIndex, CompilationContext&, Vector<UnlinkedWasmToWasmCall>&, TierUpCount*);
 
index 3a49c5f..ba39e56 100644 (file)
@@ -153,7 +153,7 @@ public:
     }
 
     OMGForOSREntryCallee* osrEntryCallee() { return m_osrEntryCallee.get(); }
-    void setOSREntryCallee(Ref<OMGForOSREntryCallee>&& osrEntryCallee) override
+    void setOSREntryCallee(Ref<OMGForOSREntryCallee>&& osrEntryCallee) final
     {
         m_osrEntryCallee = WTFMove(osrEntryCallee);
     }
@@ -192,9 +192,9 @@ public:
     }
 
     JS_EXPORT_PRIVATE void setEntrypoint(MacroAssemblerCodePtr<WasmEntryPtrTag>);
-    JS_EXPORT_PRIVATE MacroAssemblerCodePtr<WasmEntryPtrTag> entrypoint() const override;
-    JS_EXPORT_PRIVATE RegisterAtOffsetList* calleeSaveRegisters() override;
-    JS_EXPORT_PRIVATE std::tuple<void*, void*> range() const override;
+    JS_EXPORT_PRIVATE MacroAssemblerCodePtr<WasmEntryPtrTag> entrypoint() const final;
+    JS_EXPORT_PRIVATE RegisterAtOffsetList* calleeSaveRegisters() final;
+    JS_EXPORT_PRIVATE std::tuple<void*, void*> range() const final;
 
     JITCallee* replacement() { return m_replacement.get(); }
     void setReplacement(Ref<JITCallee>&& replacement)
@@ -203,7 +203,7 @@ public:
     }
 
     OMGForOSREntryCallee* osrEntryCallee() { return m_osrEntryCallee.get(); }
-    void setOSREntryCallee(Ref<OMGForOSREntryCallee>&& osrEntryCallee) override
+    void setOSREntryCallee(Ref<OMGForOSREntryCallee>&& osrEntryCallee) final
     {
         m_osrEntryCallee = WTFMove(osrEntryCallee);
     }
index 9335b3a..fb8491b 100644 (file)
@@ -66,19 +66,19 @@ public:
         return WTFMove(m_embedderCallees);
     }
 
-    bool hasWork() const override
+    bool hasWork() const final
     {
         return m_state < State::Compiled;
     }
 
-    void work(CompilationEffort) override;
+    void work(CompilationEffort) final;
 
-    bool didReceiveFunctionData(unsigned, const FunctionData&) override;
+    bool didReceiveFunctionData(unsigned, const FunctionData&) final;
 
 private:
-    bool prepareImpl() override;
-    void compileFunction(uint32_t functionIndex) override;
-    void didCompleteCompilation(const AbstractLocker&) override;
+    bool prepareImpl() final;
+    void compileFunction(uint32_t functionIndex) final;
+    void didCompleteCompilation(const AbstractLocker&) final;
 
     Vector<std::unique_ptr<FunctionCodeBlock>> m_wasmInternalFunctions;
     const Ref<LLIntCallee>* m_callees { nullptr };
index 8a5ea55..bb9e487 100644 (file)
@@ -43,9 +43,9 @@ class OMGForOSREntryPlan final : public Plan {
 public:
     using Base = Plan;
 
-    bool hasWork() const override { return !m_completed; }
-    void work(CompilationEffort) override;
-    bool multiThreaded() const override { return false; }
+    bool hasWork() const final { return !m_completed; }
+    void work(CompilationEffort) final;
+    bool multiThreaded() const final { return false; }
 
     // Note: CompletionTask should not hold a reference to the Plan otherwise there will be a reference cycle.
     OMGForOSREntryPlan(Context*, Ref<Module>&&, Ref<Callee>&&, uint32_t functionIndex, uint32_t loopIndex, MemoryMode, CompletionTask&&);
@@ -54,8 +54,8 @@ private:
     // For some reason friendship doesn't extend to parent classes...
     using Base::m_lock;
 
-    bool isComplete() const override { return m_completed; }
-    void complete(const AbstractLocker& locker) override
+    bool isComplete() const final { return m_completed; }
+    void complete(const AbstractLocker& locker) final
     {
         m_completed = true;
         runCompletionTasks(locker);
index cb79b43..77a1d82 100644 (file)
@@ -41,9 +41,9 @@ class OMGPlan final : public Plan {
 public:
     using Base = Plan;
 
-    bool hasWork() const override { return !m_completed; }
-    void work(CompilationEffort) override;
-    bool multiThreaded() const override { return false; }
+    bool hasWork() const final { return !m_completed; }
+    void work(CompilationEffort) final;
+    bool multiThreaded() const final { return false; }
 
     // Note: CompletionTask should not hold a reference to the Plan otherwise there will be a reference cycle.
     OMGPlan(Context*, Ref<Module>&&, uint32_t functionIndex, MemoryMode, CompletionTask&&);
@@ -52,8 +52,8 @@ private:
     // For some reason friendship doesn't extend to parent classes...
     using Base::m_lock;
 
-    bool isComplete() const override { return m_completed; }
-    void complete(const AbstractLocker& locker) override
+    bool isComplete() const final { return m_completed; }
+    void complete(const AbstractLocker& locker) final
     {
         m_completed = true;
         runCompletionTasks(locker);
index d14f787..60af01a 100644 (file)
@@ -65,7 +65,7 @@ public:
     }
 
 private:
-    PollResult poll(const AbstractLocker&) override
+    PollResult poll(const AbstractLocker&) final
     {
         auto& queue = worklist.m_queue;
         synchronize.notifyAll();
@@ -90,7 +90,7 @@ private:
         return PollResult::Wait;
     }
 
-    WorkResult work() override
+    WorkResult work() final
     {
         auto complete = [&] (const AbstractLocker&) {
             // We need to hold the lock to release our plan otherwise the main thread, while canceling plans
@@ -117,12 +117,12 @@ private:
         return complete(holdLock(*worklist.m_lock));
     }
 
-    void threadIsStopping(const AbstractLocker&) override
+    void threadIsStopping(const AbstractLocker&) final
     {
         clearLLIntThreadSpecificCache();
     }
 
-    const char* name() const override
+    const char* name() const final
     {
         return "Wasm Worklist Helper Thread";
     }
index 6eb8a16..64dacf2 100644 (file)
@@ -69,7 +69,7 @@ MatchingContextHolder::~MatchingContextHolder()
 }
 
 template<YarrJITCompileMode compileMode>
-class YarrGenerator : public YarrJITInfo, private MacroAssembler {
+class YarrGenerator final : public YarrJITInfo, private MacroAssembler {
 
 #if CPU(ARM_THUMB2)
     static const RegisterID input = ARMRegisters::r0;
@@ -3982,7 +3982,7 @@ public:
             codeBlock.setFallBackWithFailureReason(*m_failureReason);
     }
 
-    const char* variant() override
+    const char* variant() final
     {
         if (compileMode == MatchOnly) {
             if (m_charSize == Char8)
@@ -3997,17 +3997,17 @@ public:
         return "16-bit regular expression";
     }
 
-    unsigned opCount() override
+    unsigned opCount() final
     {
         return m_ops.size();
     }
 
-    void dumpPatternString(PrintStream& out) override
+    void dumpPatternString(PrintStream& out) final
     {
         m_pattern.dumpPatternString(out, m_patternString);
     }
 
-    int dumpFor(PrintStream& out, unsigned opIndex) override
+    int dumpFor(PrintStream& out, unsigned opIndex) final
     {
         if (opIndex >= opCount())
             return 0;
index 04c8178..f96b444 100644 (file)
@@ -1,3 +1,23 @@
+2020-05-12  Ross Kirsling  <ross.kirsling@sony.com>
+
+        Fix existing usage of final/override/virtual in JSC and WTF
+        https://bugs.webkit.org/show_bug.cgi?id=211772
+
+        Reviewed by Darin Adler.
+
+        * wtf/Assertions.cpp:
+        * wtf/Expected.h:
+        * wtf/FilePrintStream.h:
+        * wtf/JSONValues.h:
+        * wtf/LockedPrintStream.h:
+        * wtf/OSLogPrintStream.h:
+        * wtf/ParallelHelperPool.cpp:
+        * wtf/RunLoop.h:
+        * wtf/SharedTask.h:
+        * wtf/StringPrintStream.h:
+        * wtf/WorkQueue.h:
+        * wtf/WorkerPool.cpp:
+
 2020-05-11  Darin Adler  <darin@apple.com>
 
         Fix problems caught by replacing WTF::Optional with std::optional
index 36c6dc9..0aba856 100644 (file)
@@ -272,10 +272,10 @@ void WTFReportArgumentAssertionFailure(const char* file, int line, const char* f
     printCallSite(file, line, function);
 }
 
-class CrashLogPrintStream : public PrintStream {
+class CrashLogPrintStream final : public PrintStream {
 public:
     WTF_ATTRIBUTE_PRINTF(2, 0)
-    void vprintf(const char* format, va_list argList) override
+    void vprintf(const char* format, va_list argList) final
     {
         vprintf_stderr_common(format, argList);
     }
index cae6811..e54075a 100644 (file)
@@ -213,7 +213,7 @@ template<class E>
 class bad_expected_access : public bad_expected_access<void> {
 public:
     explicit bad_expected_access(E val) : val(val) { }
-    virtual const char* what() const noexcept override { return std::exception::what(); }
+    const char* what() const noexcept override { return std::exception::what(); }
     E& error() & { return val; }
     const E& error() const& { return val; }
     E&& error() && { return std::move(val); }
index 561bcf7..ef5efb1 100644 (file)
@@ -30,7 +30,7 @@
 
 namespace WTF {
 
-class FilePrintStream : public PrintStream {
+class FilePrintStream final : public PrintStream {
 public:
     enum AdoptionMode {
         Adopt,
@@ -38,14 +38,14 @@ public:
     };
     
     FilePrintStream(FILE*, AdoptionMode = Adopt);
-    virtual ~FilePrintStream();
+    WTF_EXPORT_PRIVATE ~FilePrintStream() final;
     
     WTF_EXPORT_PRIVATE static std::unique_ptr<FilePrintStream> open(const char* filename, const char* mode);
     
     FILE* file() { return m_file; }
     
-    void vprintf(const char* format, va_list) override WTF_ATTRIBUTE_PRINTF(2, 0);
-    void flush() override;
+    void vprintf(const char* format, va_list) final WTF_ATTRIBUTE_PRINTF(2, 0);
+    void flush() final;
 
 private:
     FILE* m_file;
index 856889a..ebabc44 100644 (file)
@@ -183,7 +183,7 @@ public:
     size_t memoryCost() const final;
 
 protected:
-    virtual ~ObjectBase();
+    ~ObjectBase() override;
 
     bool asObject(RefPtr<Object>& output) override;
 
@@ -301,7 +301,7 @@ public:
     size_t memoryCost() const final;
 
 protected:
-    virtual ~ArrayBase();
+    ~ArrayBase() override;
 
     bool asArray(RefPtr<Array>&) override;
 
index 6eb90aa..e4fadb8 100644 (file)
@@ -35,16 +35,15 @@ namespace WTF {
 class LockedPrintStream : public PrintStream {
 public:
     LockedPrintStream(std::unique_ptr<PrintStream> target);
-    virtual ~LockedPrintStream();
+    ~LockedPrintStream() final;
     
-    void vprintf(const char* format, va_list) override WTF_ATTRIBUTE_PRINTF(2, 0);
-    void flush() override;
-
-protected:
-    PrintStream& begin() override;
-    void end() override;
+    void vprintf(const char* format, va_list) final WTF_ATTRIBUTE_PRINTF(2, 0);
+    void flush() final;
 
 private:
+    PrintStream& begin() final;
+    void end() final;
+
     // This needs to be a recursive lock because a printInternal or dump method could assert,
     // and that assert might want to log. Better to let it. This needs to be a WordLock so that
     // LockedPrintStream (i.e. cataLog) can be used to debug ParkingLot and Lock.
index c87eef7..59f8114 100644 (file)
@@ -40,11 +40,11 @@ namespace WTF {
 class WTF_EXPORT_PRIVATE OSLogPrintStream final : public PrintStream {
 public:
     OSLogPrintStream(os_log_t, os_log_type_t);
-    virtual ~OSLogPrintStream();
+    ~OSLogPrintStream() final;
     
     static std::unique_ptr<OSLogPrintStream> open(const char* subsystem, const char* category, os_log_type_t = OS_LOG_TYPE_DEFAULT);
     
-    void vprintf(const char* format, va_list) override WTF_ATTRIBUTE_PRINTF(2, 0);
+    void vprintf(const char* format, va_list) final WTF_ATTRIBUTE_PRINTF(2, 0);
 
 private:
     os_log_t m_log;
index 4f9a922..161f25c 100644 (file)
@@ -169,7 +169,7 @@ void ParallelHelperPool::doSomeHelping()
     client->runTask(task);
 }
 
-class ParallelHelperPool::Thread : public AutomaticThread {
+class ParallelHelperPool::Thread final : public AutomaticThread {
 public:
     Thread(const AbstractLocker& locker, ParallelHelperPool& pool)
         : AutomaticThread(locker, pool.m_lock, pool.m_workAvailableCondition.copyRef())
@@ -177,13 +177,13 @@ public:
     {
     }
     
-    const char* name() const override
+    const char* name() const final
     {
         return m_pool.m_threadName.data();
     }
 
-protected:
-    PollResult poll(const AbstractLocker& locker) override
+private:
+    PollResult poll(const AbstractLocker& locker) final
     {
         if (m_pool.m_isDying)
             return PollResult::Stop;
@@ -195,15 +195,14 @@ protected:
         return PollResult::Wait;
     }
     
-    WorkResult work() override
+    WorkResult work() final
     {
         m_client->runTask(m_task);
         m_client = nullptr;
         m_task = nullptr;
         return WorkResult::Continue;
     }
-    
-private:
+
     ParallelHelperPool& m_pool;
     ParallelHelperClient* m_client { nullptr };
     RefPtr<SharedTask<void ()>> m_task;
index ceac2ed..189671b 100644 (file)
@@ -55,7 +55,7 @@ using RunLoopMode = unsigned;
 #define DefaultRunLoopMode 0
 #endif
 
-class RunLoop : public FunctionDispatcher {
+class RunLoop final : public FunctionDispatcher {
     WTF_MAKE_NONCOPYABLE(RunLoop);
 public:
     // Must be called from the main thread (except for the Mac platform, where it
@@ -65,9 +65,9 @@ public:
     WTF_EXPORT_PRIVATE static RunLoop& current();
     WTF_EXPORT_PRIVATE static RunLoop& main();
     WTF_EXPORT_PRIVATE static bool isMain();
-    ~RunLoop();
+    ~RunLoop() final;
 
-    void dispatch(Function<void()>&&) override;
+    WTF_EXPORT_PRIVATE void dispatch(Function<void()>&&) final;
 
     WTF_EXPORT_PRIVATE static void run();
     WTF_EXPORT_PRIVATE void stop();
@@ -177,7 +177,7 @@ public:
     };
 
 #if USE(WINDOWS_EVENT_LOOP)
-    class DispatchTimer : public TimerBase {
+    class DispatchTimer final : public TimerBase {
     public:
         DispatchTimer(RunLoop& runLoop)
             : TimerBase(runLoop)
@@ -189,7 +189,7 @@ public:
             m_function = WTFMove(function);
         }
     private:
-        void fired() override { m_function(); }
+        void fired() final { m_function(); }
 
         Function<void()> m_function;
     };
index 9ffbffe..285ed2d 100644 (file)
@@ -73,7 +73,7 @@ public:
 // you don't want to use this class directly. Use createSharedTask() instead.
 template<typename FunctionType, typename Functor> class SharedTaskFunctor;
 template<typename ResultType, typename... ArgumentTypes, typename Functor>
-class SharedTaskFunctor<ResultType (ArgumentTypes...), Functor> : public SharedTask<ResultType (ArgumentTypes...)> {
+class SharedTaskFunctor<ResultType(ArgumentTypes...), Functor> final : public SharedTask<ResultType(ArgumentTypes...)> {
 public:
     SharedTaskFunctor(const Functor& functor)
         : m_functor(functor)
@@ -86,7 +86,7 @@ public:
     }
 
 private:
-    ResultType run(ArgumentTypes... arguments) override
+    ResultType run(ArgumentTypes... arguments) final
     {
         return m_functor(std::forward<ArgumentTypes>(arguments)...);
     }
index 65ee4d6..3625eab 100644 (file)
 
 namespace WTF {
 
-class StringPrintStream : public PrintStream {
+class StringPrintStream final : public PrintStream {
 public:
     WTF_EXPORT_PRIVATE StringPrintStream();
-    WTF_EXPORT_PRIVATE virtual ~StringPrintStream();
+    WTF_EXPORT_PRIVATE ~StringPrintStream() final;
     
-    WTF_EXPORT_PRIVATE void vprintf(const char* format, va_list) override WTF_ATTRIBUTE_PRINTF(2, 0);
+    WTF_EXPORT_PRIVATE void vprintf(const char* format, va_list) final WTF_ATTRIBUTE_PRINTF(2, 0);
 
     size_t length() const { return m_next; }
     
index 2922fdf..49659db 100644 (file)
@@ -56,9 +56,9 @@ public:
     };
 
     WTF_EXPORT_PRIVATE static Ref<WorkQueue> create(const char* name, Type = Type::Serial, QOS = QOS::Default);
-    virtual ~WorkQueue();
+    ~WorkQueue() final;
 
-    WTF_EXPORT_PRIVATE void dispatch(Function<void()>&&) override;
+    WTF_EXPORT_PRIVATE void dispatch(Function<void()>&&) final;
     WTF_EXPORT_PRIVATE void dispatchAfter(Seconds, Function<void()>&&);
 
     WTF_EXPORT_PRIVATE static void concurrentApply(size_t iterations, WTF::Function<void(size_t index)>&&);
index 857803e..cb6acfd 100644 (file)
@@ -73,7 +73,7 @@ public:
         return m_pool.shouldSleep(locker);
     }
 
-    const char* name() const override
+    const char* name() const final
     {
         return m_pool.name();
     }