diff --git a/dom/animation/KeyframeEffectReadOnly.h b/dom/animation/KeyframeEffectReadOnly.h index 848c569160d8..9591c9ffd570 100644 --- a/dom/animation/KeyframeEffectReadOnly.h +++ b/dom/animation/KeyframeEffectReadOnly.h @@ -48,8 +48,8 @@ class GlobalObject; class OwningElementOrCSSPseudoElement; class UnrestrictedDoubleOrKeyframeAnimationOptions; class UnrestrictedDoubleOrKeyframeEffectOptions; -enum class IterationCompositeOperation : uint32_t; -enum class CompositeOperation : uint32_t; +enum class IterationCompositeOperation : uint8_t; +enum class CompositeOperation : uint8_t; struct AnimationPropertyDetails; } diff --git a/dom/base/nsGlobalWindow.h b/dom/base/nsGlobalWindow.h index 0fcdfcc00054..91a69e04234b 100644 --- a/dom/base/nsGlobalWindow.h +++ b/dom/base/nsGlobalWindow.h @@ -115,7 +115,7 @@ class DocGroup; class External; class Function; class Gamepad; -enum class ImageBitmapFormat : uint32_t; +enum class ImageBitmapFormat : uint8_t; class IdleRequest; class IdleRequestCallback; class Location; diff --git a/dom/base/nsIDocument.h b/dom/base/nsIDocument.h index bac0c00e2c02..36e882f47d20 100644 --- a/dom/base/nsIDocument.h +++ b/dom/base/nsIDocument.h @@ -149,7 +149,7 @@ class MediaQueryList; class GlobalObject; class NodeFilter; class NodeIterator; -enum class OrientationType : uint32_t; +enum class OrientationType : uint8_t; class ProcessingInstruction; class Promise; class StyleSheetList; @@ -3037,9 +3037,10 @@ protected: #ifdef MOZILLA_INTERNAL_API // Our visibility state mozilla::dom::VisibilityState mVisibilityState; - static_assert(sizeof(mozilla::dom::VisibilityState) == sizeof(uint32_t), "Error size of mVisibilityState and mDummy"); + static_assert(sizeof(mozilla::dom::VisibilityState) == sizeof(uint8_t), + "Error size of mVisibilityState and mDummy"); #else - uint32_t mDummy; + uint8_t mDummy; #endif // True if BIDI is enabled. diff --git a/dom/bindings/Codegen.py b/dom/bindings/Codegen.py index af171cad6bb3..4dde9ce0ffef 100644 --- a/dom/bindings/Codegen.py +++ b/dom/bindings/Codegen.py @@ -9625,15 +9625,25 @@ class CGEnum(CGThing): def nEnumStrings(self): return len(self.enum.values()) + 1 + def underlyingType(self): + count = self.nEnumStrings() + if count <= 256: + return "uint8_t" + if count <= 65536: + return "uint16_t" + raise ValueError("Enum " + self.enum.identifier.name + + " has more than 65536 values") + def declare(self): decl = fill( """ - enum class ${name} : uint32_t { + enum class ${name} : ${ty} { $*{enums} EndGuard_ }; """, name=self.enum.identifier.name, + ty=self.underlyingType(), enums=",\n".join(map(getEnumValueName, self.enum.values())) + ",\n") strings = CGNamespace(self.stringsNamespace(), CGGeneric(declare="extern const EnumEntry %s[%d];\n" diff --git a/dom/cache/CacheStorage.h b/dom/cache/CacheStorage.h index 10310f6681ae..eac477524bf7 100644 --- a/dom/cache/CacheStorage.h +++ b/dom/cache/CacheStorage.h @@ -28,7 +28,7 @@ namespace ipc { namespace dom { -enum class CacheStorageNamespace : uint32_t; +enum class CacheStorageNamespace : uint8_t; class Promise; namespace workers { diff --git a/dom/canvas/CanvasPath.h b/dom/canvas/CanvasPath.h index e31b375cc3a1..1e4b6c308df7 100644 --- a/dom/canvas/CanvasPath.h +++ b/dom/canvas/CanvasPath.h @@ -15,7 +15,7 @@ namespace mozilla { namespace dom { -enum class CanvasWindingRule : uint32_t; +enum class CanvasWindingRule : uint8_t; class SVGMatrix; class CanvasPath final : diff --git a/dom/canvas/ImageBitmap.h b/dom/canvas/ImageBitmap.h index 2119c6bda545..d362eb6ff4ca 100644 --- a/dom/canvas/ImageBitmap.h +++ b/dom/canvas/ImageBitmap.h @@ -52,7 +52,7 @@ class File; class HTMLCanvasElement; class HTMLImageElement; class HTMLVideoElement; -enum class ImageBitmapFormat : uint32_t; +enum class ImageBitmapFormat : uint8_t; class ImageData; class ImageUtils; template class MapDataIntoBufferSource; diff --git a/dom/canvas/ImageUtils.h b/dom/canvas/ImageUtils.h index b64c33704ee1..185fe61db82e 100644 --- a/dom/canvas/ImageUtils.h +++ b/dom/canvas/ImageUtils.h @@ -21,7 +21,7 @@ class ErrorResult; namespace dom { struct ChannelPixelLayout; -enum class ImageBitmapFormat : uint32_t; +enum class ImageBitmapFormat : uint8_t; typedef nsTArray ImagePixelLayout; diff --git a/dom/html/nsBrowserElement.h b/dom/html/nsBrowserElement.h index d0e8a77c8a35..dfed45f2be72 100644 --- a/dom/html/nsBrowserElement.h +++ b/dom/html/nsBrowserElement.h @@ -22,8 +22,8 @@ struct BrowserElementDownloadOptions; struct BrowserElementExecuteScriptOptions; class BrowserElementNextPaintEventCallback; class DOMRequest; -enum class BrowserFindCaseSensitivity: uint32_t; -enum class BrowserFindDirection: uint32_t; +enum class BrowserFindCaseSensitivity: uint8_t; +enum class BrowserFindDirection: uint8_t; } // namespace dom class ErrorResult; diff --git a/dom/media/webaudio/AudioContext.h b/dom/media/webaudio/AudioContext.h index be9c59b95ccb..b74ca41e05e2 100644 --- a/dom/media/webaudio/AudioContext.h +++ b/dom/media/webaudio/AudioContext.h @@ -42,7 +42,7 @@ class AudioNodeStream; namespace dom { -enum class AudioContextState : uint32_t; +enum class AudioContextState : uint8_t; class AnalyserNode; class AudioBuffer; class AudioBufferSourceNode; @@ -71,7 +71,7 @@ class WaveShaperNode; class PeriodicWave; struct PeriodicWaveConstraints; class Promise; -enum class OscillatorType : uint32_t; +enum class OscillatorType : uint8_t; // This is addrefed by the OscillatorNodeEngine on the main thread // and then used from the MSG thread. diff --git a/dom/media/webaudio/AudioNodeStream.cpp b/dom/media/webaudio/AudioNodeStream.cpp index 0e5aa3fc73d7..fafcfd2ce7bb 100644 --- a/dom/media/webaudio/AudioNodeStream.cpp +++ b/dom/media/webaudio/AudioNodeStream.cpp @@ -350,11 +350,6 @@ AudioNodeStream::SetChannelMixingParametersImpl(uint32_t aNumberOfChannels, ChannelCountMode aChannelCountMode, ChannelInterpretation aChannelInterpretation) { - // Make sure that we're not clobbering any significant bits by fitting these - // values in 16 bits. - MOZ_ASSERT(int(aChannelCountMode) < INT16_MAX); - MOZ_ASSERT(int(aChannelInterpretation) < INT16_MAX); - mNumberOfInputChannels = aNumberOfChannels; mChannelCountMode = aChannelCountMode; mChannelInterpretation = aChannelInterpretation; diff --git a/dom/workers/WorkerScope.h b/dom/workers/WorkerScope.h index d473f4e27d32..38cf76ad6a06 100644 --- a/dom/workers/WorkerScope.h +++ b/dom/workers/WorkerScope.h @@ -23,7 +23,7 @@ class Console; class Crypto; class Function; class IDBFactory; -enum class ImageBitmapFormat : uint32_t; +enum class ImageBitmapFormat : uint8_t; class Performance; class Promise; class RequestOrUSVString; diff --git a/gfx/vr/gfxVR.h b/gfx/vr/gfxVR.h index 9b81b6bb14bc..558182f446dc 100644 --- a/gfx/vr/gfxVR.h +++ b/gfx/vr/gfxVR.h @@ -21,8 +21,8 @@ namespace layers { class PTextureParent; } namespace dom { -enum class GamepadMappingType : uint32_t; -enum class GamepadHand : uint32_t; +enum class GamepadMappingType : uint8_t; +enum class GamepadHand : uint8_t; struct GamepadPoseState; } namespace gfx { diff --git a/layout/style/nsStyleConsts.h b/layout/style/nsStyleConsts.h index 1835539fd956..4639f4ffe727 100644 --- a/layout/style/nsStyleConsts.h +++ b/layout/style/nsStyleConsts.h @@ -314,8 +314,8 @@ enum class StyleOrient : uint8_t { // See AnimationEffectReadOnly.webidl // and mozilla/dom/AnimationEffectReadOnlyBinding.h namespace dom { -enum class PlaybackDirection : uint32_t; -enum class FillMode : uint32_t; +enum class PlaybackDirection : uint8_t; +enum class FillMode : uint8_t; } // See nsStyleDisplay